Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Shape soll Maus folgen
Robii - Sa 19.09.09 13:46
Titel: Shape soll Maus folgen
Guten Tag, ich hab folgenden Code geschrieben:
Quelltext
1: 2: 3: 4: 5: 6:
| var a: TPoint; begin a:=Mouse.CursorPos; Shape1.Left := Round(a.x-Shape1.Width/2); Shape1.Top := Round(a.y-Shape1.Height/2); |
Wenn ich jetzt den Timer aktiviere, folgt das Shape zwar der Maus, aber nicht genau unter der Maus, sondern um ein großes Stück nach rechts unten verschoben. Wieso?
Grüße.
Moderiert von
Gausi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 19.09.2009 um 14:28
Gausi - Sa 19.09.09 14:27
Weil CursorPos die globalen Screenkoordinaten der Maus bestimmt, nicht die Koordinaten auf deiner Form/Panel/Sonstwas. Das musst du dann umrechnen lassen:
Delphi-Quelltext
1:
| a := [Control auf dem die Maus ist].ScreenToClient(Mouse.CursorPos); |
ffgorcky - Mo 21.09.09 20:04
Ja, da hat
Gausi recht...
Damit das Shape denn genau unter der Maus laufen würde, müsstest Du Dein Fenster wirklich auf Vollbild (also so, wie wenn man sich Videos auf dem Rechner anguckt) machen.
So müsstest Du das dann immer in etwa so rechnen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var a: TPoint; begin a:=Mouse.CursorPos; Shape1.Left := Round(a.x-Shape1.Width/2)-FormFolgeDerMaus.Left; Shape1.Top := Round(a.y-Shape1.Height/2)-FormFolgeDerMaus.Top; |
Eigentlich müsstest Du dann aber auch noch die Fenstertitel-leistenhöhe abziehen - dann müsste es in etwa hinkommen.
Gausi - Mo 21.09.09 20:20
Und was, wenn das Shape auf einem Panel ist, was nicht bei 0/0 anfängt? ;-)
Für sowas ist die ScreenToClient-Funktion da.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!