Jak odczytać pozycję myszy
MikiKam
Mouse.CursorPos.X;
Mouse.CursorPos.Y;
Wyżej wymienione zmienne przechowują bieżącą pozycję myszy na ekranie a aby odczytać pozycję myszki na formie przechodzimy do zakładki Events naszej formy, otwieramy onMouseMove
i tam mamy dwie zmienne X i Y.
Przykład zastosowania zmiennych:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Caption := 'X: 'inttostr(Mouse.CursorPos.X)+' Y: '+inttostr(Mouse.CursorPos.Y);
//W belce tytułowej ukazuje nam się pozycja myszy na ekranie
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Caption := 'X: 'inttostr(X)+' Y: '+inttostr(Y);
//W belce tytułowej ukazuje nam się pozycja myszy na formie
end;
nota bene jeśli rysuje się po formie trzeba wszystko powtarzac w OnPaint (patrz. Object Inspector) przy zaslanianiu okna czy minimalizowaniu (bo ŚCIERA rysunek) - co czasami prowadzi do niepokonywalnych trudności - procedura FormPaint jest popieprz...
a rysowane po Imageu nie ściera przy minimalizacji czy zaslanianiu i to jest wielki plus - nigdy nie rysujcie po formie !
pardon, nie:
Label1.Caption := 'X = ' + IntToStr(R.Left+P.X) + ' Y = ' + IntToStr(R.Top+P.Y);
tylko:
Label1.Caption := 'X = ' + IntToStr(P.X-R.Left) + ' Y = ' + IntToStr(P.Y-R.Top);
dodam jeszcze ze w Object inspector zarowno w Events dla Form1 jak i Image1 trzeba uzupełnić pola OnMouse... analogicznymi nazwami procedur
Przydatny kod ale warto go uzupełnić:
var
p : tpoint;
FoundWindow : THandle;
R : TRect;
begin
FoundWindow := FindWindow(nil, 'Form1');
GetWindowRect(FoundWindow, R);
GetCursorPos(P);
Label1.Caption := 'X = ' + IntToStr(R.Left+P.X) + ' Y = ' + IntToStr(R.Top+P.Y);
end;
oczywiscie najpierw trzeba na forme przeniesc komponent Label z karty Standard, tam gdzie 'Form1' nazwa okna, ten kod dodałem na początku procedury OnMouseMove
Brakuje + w tej linijce ; )
Form1.Caption := 'X: '+inttostr(X)+' Y: '+inttostr(Y);
No w ortografii to ja nie jestem najlepszy :P
Jest coś takiego jak ortografia...
Oprócz tego luz :P
Edit: poprawiłem
Można też tak:
procedure TForm1.Timer1Timer(Sender: TObject);
var
P: TPoint;
begin
GetCursorPos(P);
Label1.Caption := 'X = ' + IntToStr(P.X) + ' Y = ' + IntToStr(P.Y);
end;