![]() |
Alle Komponenten auf einem Panel bewegen
Hi,
ich habe ein großes Panel auf dem ich zur Laufzeit kleinere Panels generiere. Jetzt möchte ich, dass man auf das große Panel klicken und dann mit der Maus die kleinen Panels glechzeitig verschieben kann. Mit einem kleinen Panel geht das auch aber wenn mehrere da sind wird nur das erste verschoben. Mein Code sieht in etwa so aus:
Delphi-Quellcode:
Wenn ich für i einen festen Wert einsetzte oder die Schleife downto mache wir auch das entsprechende Panel bewegt aber eben immer nur eins.
procedure TForm1.ParentPanelMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var i : integer; begin if Shift = [ssLeft] then begin ReleaseCapture; for i := 0 To ParentPanel.ControlCount-1 Do begin Sendmessage(TWinControl(ParentPanel.Controls[i]).handle, WM_NCLBUTTONDOWN, 2, 0); end; end; end; Weiß jemand woran das liegen kann? Oder weiß jemand eine bessere Lösung z.B. ohne die Windows Funktionen? mfg Patrick |
AW: Alle Komponenten auf einem Panel bewegen
AFAIK kann nur ein Control "gecaptured" sein
Delphi-Quellcode:
private
{ Private-Deklarationen } FX,FY:Integer; public { Public-Deklarationen } end; var Form5: TForm5; implementation {$R *.dfm} procedure TForm5.Panel2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FX := X; FY := Y; end; procedure TForm5.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i:Integer; p:TPanel; begin if ssLeft in Shift then begin p := TPanel(TPanel(Sender).Parent); for I := 0 to p.controlcount - 1 do begin if p.controls[i] is TPanel then with Tpanel(p.controls[i]) do begin Left := Left + X - FX; Top := Top + Y - FY; end; end; end; end; |
AW: Alle Komponenten auf einem Panel bewegen
Ok so funktionierts :) Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 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