Du meinst während Runtime ?
Das mache ich eher selten.
Normalerweise geht es mit "Nacheinander Align = MostTop und wieder Align = Top" ganz gut.
Oder mit Bottom/Top, ich baue da immer eine kleine Entkopplung ein damit es sich ordentlich aufbaut, so in der Art:
Delphi-Quellcode:
procedure MyForm:ReOrder;
begin
Button1.Align := Bottom;
Button1.Visible := False;
Button2.Align := Bottom;
Button2.Visible := False;
Button3.Align := Bottom;
Button3.Visible := False;
TThread.ForceQueue(
nil,
procedure
begin
Button1.Visible := True;
Button1.Align := Top;
Button2.Visible := True;
Button2.Align := Top;
Button3.Visible := True;
Button3.Align := Top;
end );
end;
Es gäbe aber auch andere Möglichkeiten, z.B. die Buttons in einzelne TLayouts mit AlignLayout := Top; zu werfen, welche dann die Reihenfolge beibehalten.
Dann könnten die Buttons Visible := True/False geschaltet werden und gleichzeitig die Layouts.Height := 0 oder 80;
Bin momentan nicht ganz sicher ob Layout1.Height := 0.0; geht, oder ob es := 1; sein sollte, ich meine aber auch mit 0 sollte es gehen.