Показать сообщение отдельно
  #24  
Старый 28.08.2013, 12:34
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Кидаешь на форму TImage с картинкой типа "мишень" - кому что нравится, далее используем DragAndDrop, в свойствах DragMode ставишь dmAutomatic, и в событии EndDrag пишешь код:

Код:
var
  Hwnd_window:THandle; //хендл окна
  HwndRect:Trect;  //rect окна
  screen_dc:hdc; //контекст окна
  bmp:tbitmap;   //картинка куда все рисуем
  m_Canvas:TCanvas; // канва окна
...

implementation

...

procedure TForm1.Image1EndDrag(Sender, Target: TObject; X, Y: Integer);
var 
  hWnd: THandle;
begin
  hWnd := WindowFromPoint(Point(x,y)); //получаем идентификатор окна
  Hwnd_window:=hWnd; //делаем его глобальным - в принципе лишняя строчка
  GetWindowRect(hwnd,HwndRect); // получаем границы окна
  screen_dc:=GetDC(Hwnd_window); // получаем графический контекст
  M_Canvas:=TCanvas.Create; //создаём канву
  M_Canvas.Handle:=screen_DC; // получаем канву
end;

Нашли и хендл и канву.
Если надо получить изображение то по функции/таймеру делаем

Код:
bmp:=TBitmap.Create; //создаём картинку
bmp.Width := HwndRect.right; //задаём размеры
Bmp.Height := HwndRect.Bottom; 
//создание картинки и задание размеров делается в FormCreate

Bmp.Canvas.Copyrect(Rect(0,0, Bmp.Width,Bmp.Height),
m_Canvas, Rect(0,0,HwndRect.Rigth-HwndRect.left, HwndRect.bottom-HwndRect.top)); //копируем изображение из окна

далее если надо тыкнуть мышкой в окно
Код:
procedure TForm1.clik(xm,ym:integer);
var
Lparams: Lparam;
begin
LPARAMs:=makelparam(xm,ym);
postmessage(Hwnd_window,WM_LBUTTONDOWN,MK_LBUTTON,LPARAMs); //нажимаем кнопку
sleep(10);
postmessage(Hwnd_window,WM_LBUTTONUP,0,LPARAMs); //отпускаем кнопку
end;

В принципе должны быть и сообщения для перемещения курсора. Типа WM_MOUSEMOVE.
Дальше с bmp работаешь как хочешь - ищешь пиксели или анализируешь, но помним, что если нашёл координаты нужного пикселя, то его координаты будут относительно bmp(окна) а не начала экрана. т.е
0 в bmp - это HwndRect.left/top на экране.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием