Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zwei Komponenten auf einmal verschieben (zur Laufzeit) (https://www.delphipraxis.net/41146-zwei-komponenten-auf-einmal-verschieben-zur-laufzeit.html)

davar 26. Feb 2005 20:01


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:
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;
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.

Hat jemand eine Ahnung, wie ich das hinbekommen könnte?

MfG

davar

toms 26. Feb 2005 20:04

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;

davar 26. Feb 2005 23:15

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
Geändert hat sich nichts. Verhält sich genauso wie beim Label.

ReDoX 26. Feb 2005 23:53

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
HI,

Das dürfte genau das machen was du suchst

Delphi-Quellcode:
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;
Mfg ReDoX

davar 27. Feb 2005 09:46

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
da muss man natürlich erst einmal darauf kommen :-)

genau so läuft, es danke!

davar 27. Feb 2005 15:17

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

ReDoX 27. Feb 2005 15:38

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
Hi,
versuche es mal so

Delphi-Quellcode:
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;
Mfg ReDoX

davar 27. Feb 2005 20:05

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

sniper_w 27. Feb 2005 20:37

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
:?:
Delphi-Quellcode:
if (Assigned(Label1) and (Assigned(Edit1)) )then
begin
Label1.Left := Edit1.Left;
Label1.Top := Edit1.Top - Label1.Height;
end;
Nicht getestet.

davar 27. Feb 2005 21:10

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)
 
Zitat:

Zitat von sniper_w
:?:
Delphi-Quellcode:
if (Assigned(Label1) and (Assigned(Edit1)) )then
begin
Label1.Left := Edit1.Left;
Label1.Top := Edit1.Top - Label1.Height;
end;
Nicht getestet.


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 18:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz