Einzelnen Beitrag anzeigen

HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
972 Beiträge
 
Delphi 6 Professional
 
#4

AW: RawInput und Koordinaten: wie?

  Alt 5. Nov 2020, 08:28
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.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat