Oprogramowałem więc zdarzenie OnMouseMove formatki - nie działało.
Działa:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
ptMouse: TPoint;
begin
GetCursorPos(ptMouse);
ptMouse := ScreenToClient(ptMouse);
lblPosX.Caption := IntToStr(ptMouse.X);
lblPosY.Caption := IntToStr(ptMouse.Y);
end;
Myślę sobie pewnie muszę dać OnMouseMove na komponencie, ktory lezy na formatce - działa, ale byle jak.w momencie uruchomienia aplikacji, gdy nic się z myszką nie dzieje, komponent wywoluje samoczynnie co kilka milisekund OnMouseMove.
Bzdura - nic takiego się nie dzieje; To by żadnego sensu nie miało, jeśli kilkaset razy na sekundę wysyłane były by zbędne komunikaty;
Jeśli uruchomię aplikację i dokładnie pod kursorem pokaże się formularz, to komunikat o zmianie położenia kursora myszy zostanie wysłany tylko jeden raz; Przykład:
procedure TForm1.lbMousePosMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
ptMouse: TPoint;
begin
GetCursorPos(ptMouse);
ptMouse := ScreenToClient(ptMouse);
lbMousePos.Items.Add(Format('%d, %d', [ptMouse.X, ptMouse.Y]));
end;
Uruchamiałem z pięćdziesiąt razy program w ten sposób i zawsze w kontrolce pojawiał się tylko jeden item (z aktualną pozycją kursora w oknie);
Wniosek: Byle jak napisałeś kod, to byle jak działa; Poza tym nawet nie byłeś łaskaw go przedstawić, więc nic więcej napisać nie mogę; Zdarzenia działają bardzo dobrze, problem leży gdzie indziej (dokładnie pomiędzy monitorem a krzesłem).