Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Alle Komponenten auf einem Panel bewegen (https://www.delphipraxis.net/168832-alle-komponenten-auf-einem-panel-bewegen.html)

eagle616 13. Jun 2012 11:16

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

Weiß jemand woran das liegen kann? Oder weiß jemand eine bessere Lösung z.B. ohne die Windows Funktionen?

mfg


Patrick

Bummi 13. Jun 2012 11:54

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;

eagle616 13. Jun 2012 12:12

AW: Alle Komponenten auf einem Panel bewegen
 
Ok so funktionierts :) Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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