Mausposition Systemweit abfragen
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Mausposition Systemweit abfragen
Hallo,
Ich möchte eine Form (ist ein extra Programm) an der Position des Mauszeigers starten. Mouse.GetMouseX; bzw. mit Y oder auch GetCursorPos gibt nur die Position relativ zur Form aus, das bringt mir natürlich nichts :/
System: Windows XP Professional SP3
Vielen Dank für eine Antwort im Vorraus.
Mit freundlichen Grüßen
compmgmt
Ich möchte eine Form (ist ein extra Programm) an der Position des Mauszeigers starten. Mouse.GetMouseX; bzw. mit Y oder auch GetCursorPos gibt nur die Position relativ zur Form aus, das bringt mir natürlich nichts :/
System: Windows XP Professional SP3
Vielen Dank für eine Antwort im Vorraus.
Mit freundlichen Grüßen
compmgmt
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Mausposition Systemweit abfragen
Code: Alles auswählen
procedure TForm1.FormShow(Sender: TObject);
var P:TPoint;
begin
P:=ClientToScreen(Mouse.CursorPos);
Left:= P.X;
Top:= P.Y;
end;
Das lese ich immer öfter.
Re: Mausposition Systemweit abfragen
Wo hast du das denn her?compmgmt hat geschrieben:Mouse.GetMouseX; bzw. mit Y oder auch GetCursorPos gibt nur die Position relativ zur Form aus
Mach dir ein neues Projekt, setze ein Label und einen Timer drauf, gib dem Timer ein kurzes Interval von etwa 10 ms und weise ihm folgenden OnTimer-Eventhandler zu:
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := Format('x = %d, y = %d', [Mouse.CursorPos.X, Mouse.CursorPos.Y]);
end;
Unabhängig davon kann man control-relative Punkt-Koordinaten in bildschirm-relative Koordinaten umwandeln mit ClientToScreen(P:TPoint) (bzw. umgekehrt mit ScreenToClient(P:TPoint)).
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Mausposition Systemweit abfragen
"Voraus" ist richtig, das war ein Tippfehler ^^theo hat geschrieben:Seit wann schreibt man eigentlich "im Voraus" mit zwei "r"?
Das lese ich immer öfter.
Aber trotzdem funktioniert das nur halb...
Kurze Zusatzinfo: Ich habe eine DLL die ein Forumlar aufruft.
Wenn ich in der Unit des Formulars beim Event "OnShow" oder bei einem Button "OnClick" diesen Befehl aufrufe, kommt eine Fehlermeldung "access-violation". Natürlich rufe ich die DLL über ein anderes Programm dynamisch auf, dadurch kann ich das ganze nicht debuggen :/
Hier der Code. Ich musste "CursurPos" austauschen, da dies anscheinend nicht mehr existiert

Code: Alles auswählen
procedure TWnd_A.Button1Click(Sender: TObject);
var
P: TPoint;
begin
P := ClientToScreen(Point(Mouse.GetMouseX, Mouse.GetMouseY));
Wnd_A.Left:= P.X;
Wnd_a.Top:= P.Y;
end;
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Mausposition Systemweit abfragen
Mouse.CursorPos.X Gibt es nicht. P.S.: Ich hab Lazarus 1.4.0wp_xyz hat geschrieben:Wo hast du das denn her?compmgmt hat geschrieben:Mouse.GetMouseX; bzw. mit Y oder auch GetCursorPos gibt nur die Position relativ zur Form aus
Mach dir ein neues Projekt, setze ein Label und einen Timer drauf, gib dem Timer ein kurzes Interval von etwa 10 ms und weise ihm folgenden OnTimer-Eventhandler zu:
Bewege die Maus in die linke obere Bildschirmecke - was zeigt das Label an?Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := Format('x = %d, y = %d', [Mouse.CursorPos.X, Mouse.CursorPos.Y]); end;
Unabhängig davon kann man control-relative Punkt-Koordinaten in bildschirm-relative Koordinaten umwandeln mit ClientToScreen(P:TPoint) (bzw. umgekehrt mit ScreenToClient(P:TPoint)).
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Mausposition Systemweit abfragen
Bei mir geht es, habe Lazarus 1.6 .Mouse.CursorPos.X Gibt es nicht. P.S.: Ich hab Lazarus 1.4.0
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Mausposition Systemweit abfragen
Jo, kann gut sein, dass es daran liegt. Aber ich habe das ganze jetzt anders gelöst, da ich es sogar besser ist, wenn ich die Form nicht an der Mauszeigerposition anzeige. Sieht besser aus. Trotzdem danke für eure HilfeMathias hat geschrieben:Bei mir geht es, habe Lazarus 1.6 .Mouse.CursorPos.X Gibt es nicht. P.S.: Ich hab Lazarus 1.4.0

Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);