Methoden / Ergebnisse Mausposition

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
u-boot
Beiträge: 306
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Methoden / Ergebnisse Mausposition

Beitrag von u-boot »

Ich habe festgestellt dass es Mehrere Methoden zur Bestimmung der eigenen Mausposition gibt. Ich musste nun auch feststellen dass diese Methoden unterschiedliche ergebnisse hervorbringen.

Während es bei getcursorpos(P:TPoint) und Mouse.CursorPos.X bzw Mouse.CursorPos.Y als Ursprung die Bildschirmecke dient ist bei Prozeduren die Ecke des Formulars der Ursprung.

Beispielsweise:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Nun wollte ich allerdings ein normales Click-Ereignis nutzen ( nur Sender:Tobject wird übergeben) und trotzdem den Ursprung der Form nutzen und nicht den vom Bildschirm.

Klar kann ich von Formmousemove dauernd x und y bestimmen lassen diese in ne variable schreiben und dann aufrufen wo ich die position benötige. Find ich jedoch etwas hässlich die lösung. Ich denk das geht einfacher und eleganter. Leider weiss ich nur nicht wie.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Methoden / Ergebnisse Mausposition

Beitrag von DiBo33 »

Die Methoden
ScreenToClient und ClientToScreen
sollten hier weiterhelfen.

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Methoden / Ergebnisse Mausposition

Beitrag von hendy »

das problem hab ich auch.
Wie bindet man das Screentoclient usw. ein?
Dankt monta !!

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Methoden / Ergebnisse Mausposition

Beitrag von pluto »

Was Spricht denn gegen die Verwendung von OnMouseDown ?
MFG
Michael Springwald

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Methoden / Ergebnisse Mausposition

Beitrag von DiBo33 »

hendy hat geschrieben:Wie bindet man das Screentoclient usw. ein?


Code: Alles auswählen

procedure TForm1.FormClick(Sender: TObject);
var
  P: TPoint;
begin
  P := ScreenToClient(Mouse.CursorPos);
  ShowMessage(Format('x:%d y:%d', [P.X, p.Y]));
end;

u-boot
Beiträge: 306
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Methoden / Ergebnisse Mausposition

Beitrag von u-boot »

Erst mal Dankeschön für die Antworten.

Was Spricht denn gegen die Verwendung von OnMouseDown ?


OnMouseDown ist zwar ähnlich wie click aber ich glaub es gibt paar (feine) unterschiede wo man anfängt zu drücken und wo man loslässt. Dies aber bitte selber testen.

Mich wundert eher wozu

Code: Alles auswählen

getcursorpos(P)


wenn

Code: Alles auswählen

P:=Mouse.Cursorpos;


das gleiche liefert wobei

Code: Alles auswählen

Screentoclient(getcursorpos(P));


wohl eher nicht funktionieren dürfte.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Methoden / Ergebnisse Mausposition

Beitrag von DiBo33 »

Mouse.CursorPos ist eine Propertie welche GetCursorPos aufruft.
GetCursorPos ist allerdings eine Procedure und verändert den Parameter P, screenToClient verlangt aber ein Parameter des Types TPoint, welches eine Procedure eben nicht liefern kann.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Methoden / Ergebnisse Mausposition

Beitrag von pluto »

OnMouseDown ist zwar ähnlich wie click aber ich glaub es gibt paar (feine) unterschiede wo man anfängt zu drücken und wo man loslässt. Dies aber bitte selber testen.

Ist genau wie OnClick enhält aber als Extra die Maus Position von der Angeklickten Komponente. D.H. wenn du mit der Maus auf ein From Klickst bekommst du die Maus Position, die an der Linken Oberen Ecke im From anfangen geliefert. Dieses Event gibt es bei recht vielen Komponenten. Und wie gesagt: onClick liefert ja nur einen Sender möchtest du aber die Maus Position haben währe onMouseDown eine Möglichkeit
MFG
Michael Springwald

Antworten