AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Komponenten auf einmal verschieben (zur Laufzeit)

Ein Thema von davar · begonnen am 26. Feb 2005 · letzter Beitrag vom 19. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#1

Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 26. Feb 2005, 21:01
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 26. Feb 2005, 21:04
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;
Thomas
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 00:15
Geändert hat sich nichts. Verhält sich genauso wie beim Label.
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#4

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 00:53
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
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 10:46
da muss man natürlich erst einmal darauf kommen

genau so läuft, es danke!
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 16:17
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
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#7

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 16:38
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
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 21:05
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
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 21:37

Delphi-Quellcode:
if (Assigned(Label1) and (Assigned(Edit1)) )then
begin
Label1.Left := Edit1.Left;
Label1.Top := Edit1.Top - Label1.Height;
end;
Nicht getestet.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 27. Feb 2005, 22:10
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
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