Delphi-PRAXiS

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 Panels (alTop) nach oben/unten verschieben (https://www.delphipraxis.net/59313-panels-altop-nach-oben-unten-verschieben.html)

torud 20. Dez 2005 15:33


Panels (alTop) nach oben/unten verschieben
 
Hallo Wissende


Also nehmen wir an es sind 4 oder mehr Panels, die alle alTop ausgerichtet sind. Wie kann ich es nun realisieren, dass ich den 2. Panel per Drag & Drop an die 3. Stelle bekomme? Mit folgendem SourceCode kann ich die Panels nur von ganz oben nach ganz unten und umgekejrt ziehen, aber ich kann nicht ein panel zwischen 2 andere Panel ziehen. Wahrscheinlich, weil da FormDragOver nicht zum Einsatz kommt. Wie kann ich das aber realisieren, ohne mich auf eine bestimmte Anzahl von Panels begrenzen zu müssen, also dynamisch?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel1EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then { Nur ziehen, wenn linke Maustaste gedrückt ist }
    with Sender as TPanel do { Sender als TFileListBox behandeln }
sou        BeginDrag(False); { Wenn ja, dann ziehen }
end;

procedure TForm1.Panel1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if Target <> nil then
  begin
    (sender as TPanel).Top:=y;
    (sender as TPanel).Left:=x;
    (sender as TPanel).Update;
  end;
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TPanel then
    Accept := True
  else
    Accept := False;
end;

end.


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