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) per Drag and Drop neu anordnen (https://www.delphipraxis.net/50934-panels-altop-per-drag-drop-neu-anordnen.html)

torud 3. Aug 2005 08:43


Panels (alTop) per Drag and Drop neu anordnen
 
Hallo Wissende!

Ich habe mehrere Panels auf einem Panel liegen. Diese Panels werden dynamisch erzeugt. Nehmen wir an, dass auf dem Hauptpanel (pan_main) 3 Panels liegen, die alle mit alTop ausgerichtet sind. Die Panels heissen von mir aus pan_1, pan_2,pan_3.

Ich möchte/muss nun realisieren, das der User z.b. pan_3 von unten nach oben bewegen kann. Das heisst er müsste es höhentechnisch über pan_1 ziehem imd loslassen. Richtig? Und das alles müsste in einer globalen Prozedur stehen, die ich jedem Panel, welches dynamisch erzeugt wird zuweise. Richtig?

Wie kann ich als dieses Drag ´n Drop realisieren?

Sidorion 3. Aug 2005 12:49

Re: Panels (alTop) per Drag and Drop neu anordnen
 
Prinzipiell so:
Delphi-Quellcode:
  TForm1 = class(TForm)
    pan_main: TPanel;
    Pan_1: TPanel;
    Pan_2: TPanel;
    Pan_3: TPanel;
    procedure PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen }
    FY: Integer;
  public
    { Public-Deklarationen }
  end;
Implementation
procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If ssLeft in Shift
  Then Begin
    If Y<>FY
    Then begin
      (Sender As TPanel).Top:=Y;
      pan_main.Refresh;
      FY:=Y;
    End;
  End;
end;
Die Methode PanelMouseMove den drei Panels als OnMouseMove zuweisen.

torud 3. Aug 2005 13:04

Re: Panels (alTop) per Drag and Drop neu anordnen
 
Danke für Deinen Tipp. Ich habe aber festgestellt, dass die Panels während des movens ziemlich stark flackern und flimmern. Ich habe mich noch mal mit Delphi-Hilfe beschäftigt und daraus folgenden eigenen Lösungsvorschlag gebaut:

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;
    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.
Das funktioniert auch einwandfrei, ohne Flicker und Flacker und ich habe dabei auch wieder was gelernt.

torud 5. Aug 2005 16:12

Re: Panels (alTop) per Drag and Drop neu anordnen
 
Also ich muss diesen Thread doch nochmal bedienen, um die Frage vollends beantwortet zu bekommen. Auch wenn ich mir da schon selbst sehr helfen konnte, ist wieder eine Frage zu diesem Thema aufgetaucht.

Also nehmen wir an es sind nun 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? In meinem Beispiel hatte ich nur 3 Panels und diese von oben nach ganz unten bewegt. Hatte ich mal wieder nicht zu ende gedacht, denn die User sollen doch alles machen dürfen.

Nur wie???


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