Hmm..
Hier eine kleine Funktion, welche prüft, ob sich der Mauszeiger innerhalb der Form befindet.
Delphi-Quellcode:
function TForm1.CheckInForm(AScreenPoint: TPoint): boolean;
var
tp: TPoint;
begin
tp := self.ScreenToClient(AScreenPoint);
// Umrechnen MousePos zu Pos der Form
Result := PtInRect(self.ClientRect,
tp);
// Prüfen, ob Pos 'im' Formular
// Testweise Position in der Form anzeigen
if Result
then begin
EditClientPos.Text := IntToStr(
tp.X) + '
/ ' + IntToStr(
tp.Y);
end else
EditClientPos.Text := '
';
end;
Ich habe das jedoch nur mit SetWindowsHookEx über mehrere Monitore incl. verschieben der Form getestet..
Delphi-Quellcode:
var
HookHandle: Cardinal;
function LowLevelMouseProc(nCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
var
p : TPoint;
begin
if (nCode >= 0) then begin
p := PMSLLHOOKSTRUCT(lParam)^.POINT;
if Form1.CheckInForm(p) then begin
// Bin auf der Form Form...
end;
end;
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
function InstallMouseHook: Boolean;
begin
Result := False;
if HookHandle = 0 then
begin
HookHandle := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, hInstance, 0);
Result := HookHandle <> 0;
end;
end;
procedure DeleteMouseHook;
begin
if HookHandle <> 0 then
UnhookWindowsHookEx(HookHandle);
end;
Ah..
Die Prüfung liefert auch True zurück, wenn deine Form nicht Aktiv oder gar verdeckt ist. Somit musst Du dass dann noch gegenprüfen.