Одесса: °С (вода °С)
Киев: 2°С

Тема: Отслеживание изменения цвета фона

Ответить в теме
Показано с 1 по 7 из 7
  1. Вверх #1
    Новичок
    Пол
    Мужской
    Адрес
    127.0.0.1
    Сообщений
    65
    Репутация
    11

    Question Отслеживание изменения цвета фона

    Приветствую.
    Мне необходима помощь в поиске метода отслеживания изменения цвета фона (пикселя) под курсором мышки в определённом месте экрана.
    Т.е. курсор мышки находится в заранее установленной позиции и, если цвет этой позиции меняется, то происходит событие.

    Любая информация по теме будет весьма и весьма полезной

    Платформа: Delphi и только.


  2. Вверх #2
    Не покидает форум Аватар для Fallout
    Пол
    Мужской
    Сообщений
    6,915
    Репутация
    795
    Через промежутки времени достаете тот нужный вам пиксель и сравниваете значение его цвета с предыдущим сохраненным значением. Если они не совпали, значит генерим событие.

    Как достать тот самый пиксель - тут может быть не совсем все одинаково, выхватывать пиксель с какой либо трехмерной игры или видео может оказаться не таким уж простым, как пиксель с простого приложения, да и и еще разные ресурсозатраты будут. Но в новых версиях винды может с этим попроще чем в более старых.

    В общем делайте скриншот экрана или отдельного окна если знаете какого и сравнивате цвет пикселя с тем что сохранили заранее. Как делать эти скриншоты нехитрым способом, легко гуглится.

  3. Вверх #3
    Новичок Аватар для TmpFile()
    Пол
    Женский
    Адрес
    Днепр
    Сообщений
    9
    Репутация
    13
    Цитата Сообщение от igorsolovev Посмотреть сообщение
    Т.е. курсор мышки находится в заранее установленной позиции и, если цвет этой позиции меняется, то происходит событие.
    позиции - формы?

    TCanvas
    property Pixels[X, Y: Integer]: TColor;

    Координаты Pixels от мыши onMouseMove

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    Label2.Caption := 'ClassName = ' + TObject(Sender).ClassName + ' Name = ' + TComponent(Sender).Name + ' x = '+inttostr(x) + ' y = ' + inttostr(y);
    end;
    Последний раз редактировалось TmpFile(); 20.09.2010 в 21:29.
    _Добра без слабости, справедлива без суровости, остроумна без едкости_ (с)

  4. Вверх #4
    Не покидает форум Аватар для Fallout
    Пол
    Мужской
    Сообщений
    6,915
    Репутация
    795
    Цитата Сообщение от TmpFile() Посмотреть сообщение
    позиции - формы?

    TCanvas
    property Pixels[X, Y: Integer]: TColor;

    Координаты Pixels от мыши onMouseMove

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    Label2.Caption := 'ClassName = ' + TObject(Sender).ClassName + ' Name = ' + TComponent(Sender).Name + ' x = '+inttostr(x) + ' y = ' + inttostr(y);
    end;
    Сомневаюсь то он хочет отловить свое окно, но все равно в любом случае гуглится

  5. Вверх #5
    Новичок
    Пол
    Мужской
    Адрес
    127.0.0.1
    Сообщений
    65
    Репутация
    11
    Ребята, мне действительно не нужно отталкиваться от формы - мне нужно каким-то образом отловить цвет того пикселя, на который наведён курсор, при чём, перехват цвета должен происходить не только на каком-то определённом окне, а на всём экране, т.е. куда не наведи курсор - цвет этого пикселя должна перехватывать программа. Мужики, помогите с этим вопросом - сюда с вопросом я пришёл от безвыходности и не от нечего делать. Тема с виду кажется банальной и глупой, но это не так. Спасибо всем, кто помог по доброте душевной

  6. Вверх #6
    Не покидает форум Аватар для Fallout
    Пол
    Мужской
    Сообщений
    6,915
    Репутация
    795
    Цитата Сообщение от igorsolovev Посмотреть сообщение
    Ребята, мне действительно не нужно отталкиваться от формы - мне нужно каким-то образом отловить цвет того пикселя, на который наведён курсор, при чём, перехват цвета должен происходить не только на каком-то определённом окне, а на всём экране, т.е. куда не наведи курсор - цвет этого пикселя должна перехватывать программа. Мужики, помогите с этим вопросом - сюда с вопросом я пришёл от безвыходности и не от нечего делать. Тема с виду кажется банальной и глупой, но это не так. Спасибо всем, кто помог по доброте душевной
    Тебе уже нужен готовый код? так закажи его кому нибудь.
    А если сам пишешь, так уже напиши.

    Гуголь очень быстро наводит на GetCursorPos для определения координат мыши.
    А также на код для создания скриншота подобный этому:

    PHP код:
    procedure ScreenShot(DestBitmap TBitmap) ;
     var
       
    DC HDC;
     
    begin
       DC 
    := GetDC (GetDesktopWindow) ;
       try
        
    DestBitmap.Width := GetDeviceCaps (DCHORZRES) ;
        
    DestBitmap.Height := GetDeviceCaps (DCVERTRES) ;
        
    BitBlt(DestBitmap.Canvas.Handle00DestBitmap.WidthDestBitmap.HeightDC00SRCCOPY) ;
       
    finally
        ReleaseDC 
    (GetDesktopWindowDC) ;
       
    end;
     
    end
    Вот только копировать не весь экран а один пиксель. Может не самое идеальное решение, но вполне может оказаться приемлимым рабочим.

  7. Вверх #7
    Новичок
    Пол
    Мужской
    Адрес
    127.0.0.1
    Сообщений
    65
    Репутация
    11
    Большое спасибо! Я попробую этот вариант.


Ответить в теме

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения