Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Ereignis- OnMouseMove bei Dynamisch erzeugten Labels
Hoda - Mi 09.10.02 17:18
Titel: Ereignis- OnMouseMove bei Dynamisch erzeugten Labels
Hallo,
da bin ich wieder. :wink:
Erzeugen und ansprechen der Dynamisch erzeugten Labels funktioniert. :D
Leider kann ich nicht die Dynamisch erzeugten Labels per ONMouseMove von A nach B verschieben.
Nur wenn ich nicht auf die Labels direkt klicke, funktioniert die Verschiebung. :shock:
Natürlich ist dies nicht elegant, wenn man überlegt, dass man erst neben dem Objekt klicken muss den man verschieben will!
Mein Frage ist:
Wie kann ich die Dynamisch erzeugten Labels, mit klick auf die selbst, von A nach B verschieben?
Hier der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| var OBName :String;
procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i := 1 to 5 do begin MyLabel := TLabel.Create(self); MYlabel.Parent := self; Mylabel.Name := 'MYLabel' + intToStr(i); Mylabel.Caption := 'Meine Label'; MYLabel.Top := i * 30; MyLabel.OnMouseDown := Form1.OnMouseDown; end; Button1.enabled := False; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i : integer; begin If Sender is Tlabel then OBName := Tlabel(Sender).Name ; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Shift = [ssLeft] then If FindComponent(OBName) is TLabel then with FindComponent(OBName) as TLabel do begin left := x; top := y; end; end; |
Gruß + Danke
HODA
(09.10.02 18:31 Tino) Code-Tags hinzugefügt.
Tino - Mi 09.10.02 18:33
Du musst auch eine Procedure dem OnMouseMove Event zuweisen:
Quelltext
1:
| MyLabel.OnMouseMove := Form1.OnMouseMove; |
Hoda - Mi 09.10.02 19:46
Hi Tino,
ja ich habe dies auch versucht, nur ein Problem ergibt sich.
Beim verschieben des Labels bekomme ich komische Effekte.
Das liegt daran das er die X,Y Werte innerhalb des Labels berücksichtigt.
Beispiel wenn die Mauskoordinaten X=100, Y=30 ist, ist es nach Mausbewegung auf dem Label X=4, Y=8. Obwohl dies nicht der Fall sein sollte.
Gruß
Hoda.
Tino - Do 10.10.02 09:13
Hast Du schon mal versucht ScreenToClient und/oder ClientToScreen zu benutzen?
Gruß
TINO
Hoda - Fr 11.10.02 09:26
Hi Tino,
nein ich habe die beiden Funktionen nicht benutzt, aber das Problem mit "MMouse : TMouse" gelöst. Die Funktion "MMOuse.CursorPos" für die X oder Y Koordinate benutzt.
Danke für deine Hilfe. :)
Gruß
Hoda
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!