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;

8 komentarzy

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ć:

  • jeśli ktoś przesuwa po formie Image myszką to nie poda mu położenia w formie (podaje wtedy polożenie od krawędzi Image czyli stale to samo), a znajomosc polozenia obrazka na formie bywa przydatna - wyjsciem jest do polozenia względem ekranu dodac polozenie górnego lewego naroznika okna formy:

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;