Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизПерехват кликов мыши.... Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.027 c