Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Перехват кликов мыши....   Найти похожие ветки 

 
Lefan ©   (2004-01-24 08:29) [0]

Приветсвую всех!

Люди помогите, хочу написать программулину, элементарную...  :)

имеется формачка, на ней Label, хочется зделать так:
происходитк клик мыши, а у мня в лейбл на форме пишутся координвты, где был клик...
Если на своей форме, то проблем нет, а хочется получать координаты не только от своего приложения, но и от других...

Сделал так:

  bRet := GetMessage(lpmsg; 0; WM_LBUTTONUP, WM_LBUTTONUP);
  while(bRet != 0) do
  begin
     GetCursorPos(pt);
     lblCoord.Caption := "Координаты: x = " + intToStr(pt.x)
+ ", y = " + intToStr(pt.y);
     bRet := GetMessage(lpmsg; 0; WM_LBUTTONUP, WM_LBUTTONUP);
  end;


Но куда положить это, чтоб перехват был глобальный, незнаю...  :(

Заранее благодарен.
С уважением Алексей.


 
Reals ©   (2004-01-24 09:26) [1]

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

var
 HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var msg: PEVENTMSG;
begin
 if Code >= 0 then begin
   result := 0;
   msg := Pointer(LParam);

   with Form1 do
     case msg.message of
       WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);
       WM_LBUTTONDOWN: CheckBox1.Checked := true;
       WM_LBUTTONUP: CheckBox1.Checked := false;
       WM_RBUTTONDOWN: CheckBox2.Checked := true;
       WM_RBUTTONUP: CheckBox2.Checked := false;
       WM_KEYUP: CheckBox3.Checked := false;
       WM_KEYDOWN: CheckBox3.Checked := true;
     end;

   // Ctrl+Shift+X
   if (GetAsyncKeyState(VK_CONTROL) <> 0) and
      (GetAsyncKeyState(VK_SHIFT) <> 0) and
      (GetAsyncKeyState(88) <> 0) then Form1.Close; // Закрытие программы

 end else
   result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

 Form1.FormStyle := fsStayOnTop;
 CheckBox1.Enabled := false;
 CheckBox1.Caption := "left button";
 CheckBox2.Enabled := false;
 CheckBox2.Caption := "right button";
 CheckBox3.Enabled := false;
 CheckBox3.Caption := "keyboard";
 HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

 if HookHandle <> 0 then
   UnhookWindowsHookEx(HookHandle);

end;


P.S. Для работы примера, на форму нужно положить 3 (три) чекбокса.


 
Lefan ©   (2004-01-24 09:52) [2]

благодарствую...  :)))



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
7-1074459243
Thor
2004-01-18 23:54
2004.04.04
переделка схемы для порта.


3-1078822586
SergeyV
2004-03-09 11:56
2004.04.04
Почему ADO переспрашивает пароль ?


1-1079624140
Yuri Btr
2004-03-18 18:35
2004.04.04
Один экземпляр объекта в двух TList


1-1079540651
Buffoon
2004-03-17 19:24
2004.04.04
Конвертирование


3-1078270762
tchn1
2004-03-03 02:39
2004.04.04
одновременная вставка новых записей в две таблицы