Dobrý den,
omlouvám se, ale nemohu nikde najít řešení mého problému. Mohl byste mi s tím někdo poradit?
Chtěla bych, aby můj program uměl zaznamenat pozici kurzoru po stisknutí levého tlačítka myši. Pokud je kurzor uvnitř formuláře, funguje vše v pohodě a aktuální pozice se vypíše do labelu.
Jakmile vyjedu mimo formulář, program sice vypisuje aktuální pozici (používám timer), ale když kliknu, nic se neděje, zaktivuje se okno, na které jsem klikla, ale pozice se nevypíše.
Zkusila jsem zachytávat pomocí klávesy "s" a to funguje. Chtěla bych, aby to ale fungovalo na kliknutí myši.
Našla jsem i nějakou funkci hook (wh_mouse_ll), ale nepodařilo se mi to rozchodit, nevím, kam to mám zapsat.
Jsem spíše programátor nadšenec, takže mi asi chybí základní znalosti.
Předem moc děkuju za každou radu a přikládám svůj kód, kdybyste ho chtěli vidět:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label17: TLabel;
Edit1: TEdit;
procedure Label6Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
point: tpoint;
pt: tpoint;
savepoint: tpoint;
relative: boolean;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
getcursorpos(point);
label4.caption := inttoStr(point.x + 1);
label5.caption := inttostr(point.y + 1);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
function GetCharFromVirtualKey(Key: Word): string;
var
keyboardState: TKeyboardState;
asciiResult: Integer;
begin
GetKeyboardState(keyboardState) ;
SetLength(Result, 2) ;
asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
case asciiResult of
0: Result := '';
1: SetLength(Result, 1) ;
2:;
else
Result := '';
end;
end;
begin
if GetCharFromVirtualKey(Key) = 's' then
begin
savepoint := point;
label9.caption := inttoStr(savepoint.x);
label10.caption := inttostr(savepoint.y);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
relative := true;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
SetWindowPos(Form1.Handle,
HWND_TOPMOST,
0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
end;
procedure TForm1.Label6Click(Sender: TObject);
begin
// posouvání kurzoru se zpožděním, nefunguje, doladit
getcursorpos(point);
label9.caption := inttoStr(point.x + 21);
label10.caption := inttostr(point.y + 21);
setcursorpos(point.x+21,point.Y+21);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
sleep(500);
label9.caption := inttoStr(point.x + 41);
label10.caption := inttostr(point.y + 41);
setcursorpos(point.x+41,point.Y+41);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
sleep(500);
end;
end.