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