Ich habe gerade beim Lesen der (XE3-)FireMonkey-Quelltexte einen neuen Geniestreich der Entwickler entdeckt:
Delphi-Quellcode:
unit FMX.
Platform.Win;
function WndProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
stdcall;
[...]
begin
[...]
WM_LBUTTONUP:
begin
[...]
GetCursorPos(P);
ScreenToClient(Wnd, P);
LForm.MouseUp(TMouseButton.mbLeft, KeysToShiftState(wParam), P.X, P.Y);
end;
end;
[...]
end;
Da ist doch tatsächlich jemand auf die Idee gekommen, die Koordinaten aller (!!!) Mausereignisse per
GetCursorPos()
zur ermitteln, statt aus
lParam auszulesen. Im Klartext bedeutet das, daß nicht die
tatsächlichen Koordinaten - zum Beispiel bei einem Klick - geliefert werden, sondern die, die bei der
Auswertung der Nachricht aktuell sind. Das hat zur Folge, daß bei schnellen Bewegungen oder Verzögerungen auf Grund eines stark beanspruchten Hauptthreads reale und per Ereignishandler gelieferte Werte meilenweit auseinanderliegen können.
Genial!