![]() |
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? |
Re: Panels (alTop) per Drag and Drop neu anordnen
Prinzipiell so:
Delphi-Quellcode:
Die Methode PanelMouseMove den drei Panels als OnMouseMove zuweisen.
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; |
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:
Das funktioniert auch einwandfrei, ohne Flicker und Flacker und ich habe dabei auch wieder was gelernt.
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. |
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