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 Panel Verschiebung mit Eigenschaft Align := alTop (https://www.delphipraxis.net/142476-panel-verschiebung-mit-eigenschaft-align-%3D-altop.html)

Muchacho 28. Okt 2009 21:58


Panel Verschiebung mit Eigenschaft Align := alTop
 
Hallo,

Es liegen auf einem großen Panel 20 andere schmale Panel, alle mit der Eigenschaft Align := alTop

Mit :
Delphi-Quellcode:
procedure TFrmMain.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if Sender is TPanel then
   if ssLeft in Shift then
   begin
     ReleaseCapture;
     (Sender as TPanel).Perform(WM_SYSCOMMAND,$F012,0);
   end;
end;
kann ich diese Panels beliebig verschieben.

Jedoch bei ablegen bleiben Sie ganz einfach an diese Stelle liegen
wo ich meine Maus loslasse, statt sich brav einzuordnen (wg. alTop).

Wie schaffe ich das, dass ich ein Panel bei ablegen nahtlos zwischen zwei anderen Panel einordnet?

Ich habe zuerst gedacht, das wg. Align := alTop wird das ohne weiteres gelingen, - funktioniert aber nicht.

Für jede Hilfe wäre ich dankbar :-D

Gruß

Muchacho

Hawkeye219 28. Okt 2009 22:23

Re: Panel Verschiebung mit Eigenschaft Align := alTop
 
Hallo Muchacho,

du musst nach dem Ablegen des Panels ein erneutes Ausrichten der Controls beim Parent veranlassen:

Delphi-Quellcode:
procedure TFrmMain.PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Panel: TPanel;
begin
if Sender is TPanel then
   if ssLeft in Shift then
   begin
     ReleaseCapture;
     Panel := TPanel(Sender);
     Panel.BringToFront; // zu verschiebendes Panel nach vorne bringen
     Panel.Perform(WM_SYSCOMMAND,$F012,0);
     Panel.Parent.Realign; // Ausrichten der Controls beim Parent erzwingen
   end;
end;
Ich habe noch einen Aufruf der Methode BringToFront eingefügt, damit das bewegte Panel auch während des Verschiebens immer sichtbar ist und nicht hinter anderen Panels verschwindet. Als Auslöser für das Verschieben würde ich - wie im Quelltext angedeutet - eher MouseDown vorsehen, da es wirklich nur beim Drücken einer Maustaste ausgelöst wird.

Gruß Hawkeye

Muchacho 28. Okt 2009 22:39

Re: Panel Verschiebung mit Eigenschaft Align := alTop
 
Wunderbar Hawkeye!!! :-D

Du bist genial !

Gruß

Muchacho


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