![]() |
Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Hallo ihr da draussen, die an diesem Samstagabend auch nix besseres zu tun haben als in der Stube zu hocken und sich mit Delphi rumzuquälen :-)
Mein Problem heute: ich möchte ein Edit-Feld zur Laufzeit auf dem Formular verschieben können. Das habe ich nach folgendem Prinzip gelöst (der Code ist nicht von mir, habe ihn von einer Delphi-Website :-)):
Delphi-Quellcode:
Mit diesem Code (etwas geändert, so dass ich damit ein Edit-Feld bewege und nicht Image1), klappt es ganz gut. Das Problem ist jedoch, dass an das Edit-Feld auch ein Label "angekoppelt" werden soll, so dass es sich gemeinsam bewegt.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const sc_dragmove = $f012; begin ReleaseCapture; TWinControl(Image1).perform(wm_syscommand,sc_dragmove, 0); end; Hat jemand eine Ahnung, wie ich das hinbekommen könnte? MfG davar |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Nimm anstelle eines Labels ein TStaticText und mach's so:
(ungetestet)
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const sc_dragmove = $f012; begin ReleaseCapture; TWinControl(Image1).perform(wm_syscommand,sc_dragmove, 0); TWinControl(StaticText1).perform(wm_syscommand,sc_dragmove, 0); end; |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Geändert hat sich nichts. Verhält sich genauso wie beim Label.
|
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
HI,
Das dürfte genau das machen was du suchst
Delphi-Quellcode:
Mfg ReDoX
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const sc_dragmove = $f012; begin ReleaseCapture; TWinControl(Edit1).perform(wm_syscommand,sc_dragmove, 0); end; procedure TForm1.FormPaint(Sender: TObject); begin Label1.Left := Edit1.Left; Label1.Top := Edit1.Top - Label1.Height; end; |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
da muss man natürlich erst einmal darauf kommen :-)
genau so läuft, es danke! |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Nun kommt jedoch der zweite Schritt, bei dem es wiederum nicht geht..
Das Problem ist nämlich, dass die beiden Komponenten Edit und Label erst zur Laufzeit erstellt werden. Und so kommt eine Fehlermeldung, weil die Komponenten noch gar nicht existieren.. Gibt es einen Befehl, mit dem man abfragen kann, ob eine Komponente existiert? mfg davar |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Hi,
versuche es mal so
Delphi-Quellcode:
Mfg ReDoX
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const sc_dragmove = $f012; ReleaseCapture; TWinControl(FindComponent ('NameDesButtons') as TButton).perform(wm_syscommand,sc_dragmove, 0); end; |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Hi Redox,
bei dem Edit-Feld (das, was auf Mausklick bewegt wird) gibt es keine Probleme. Das Problem macht das Label, das mit dem Edit gemeinsam bewegt werden soll. FormPaint wird ja schon aufgerufen, bevor die Komponenten erstellt werden. mfg davar |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
:?:
Delphi-Quellcode:
Nicht getestet.
if (Assigned(Label1) and (Assigned(Edit1)) )then
begin Label1.Left := Edit1.Left; Label1.Top := Edit1.Top - Label1.Height; end; |
Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Zitat:
Falls ich dir irgendwann begegnen sollte, lad ich dich zum Essen ein ;-) Vielen Dank, so gehts tatsächlich.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz