Programowanie w języku Delphi » FAQ

Jak odczytać pozycję myszy

  • 2007-04-26 14:08
  • 8 komentarzy
  • 1940 odsłon
  • Oceń ten tekst jako pierwszy
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

InsertFn 2009-10-11 22:49

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 !

InsertFn 2009-02-17 22:23

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);

InsertFn 2009-02-17 04:30

dodam jeszcze ze w Object inspector zarowno w Events dla Form1 jak i Image1 trzeba uzupełnić pola OnMouse... analogicznymi nazwami procedur

InsertFn 2009-02-17 04:03

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

v4nd4l 2007-07-17 18:49

Brakuje + w tej linijce ; )
Form1.Caption := 'X: '+inttostr(X)+' Y: '+inttostr(Y);

MikiKam 2007-04-26 14:08

No w ortografii to ja nie jestem najlepszy :P

Marek_SP 2007-02-28 15:58

Jest coś takiego jak ortografia...

Oprócz tego luz :P

Edit: poprawiłem

Aldonix 2007-02-26 07:09

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;