ChatGPT hatte den Vorschlag. Wenn ich RemoveObject und AddObject weglasse (siehe Code unten) ist die Ausgabe auch falsch.
Delphi-Quellcode:
procedure TmDROMainForm.UpdateLayout(aPortrait:Boolean);
var Panels: TArray<TPanel>;
ScreenService: IFMXScreenService;
begin
Panels := [pnlAxis21, pnlAxis2, pnlAxis11, pnlAxis1, pnlAxis01, pnlAxis0]; // umgekehrte Reihenfolge für InsertObject(0,...)
try
pnlClient.BeginUpdate;
{ for var P in Panels do
if P.Parent = pnlClient then
pnlClient.RemoveObject(P); }
pnlAxis01.height:=50;
pnlAxis11.height:=50;
pnlAxis21.height:=50;
If aPortrait then
begin
// Portrait
pnlAxis01.Visible :=true;
pnlAxis11.Visible :=true;
pnlAxis21.Visible :=true;
mAxisItem[0].W.Parent:= pnlAxis01;
mAxisItem[0].Divider.Parent:= pnlAxis01;
mAxisItem[0].Buzzer.Parent:= pnlAxis01;
mAxisItem[1].W.Parent:= pnlAxis11;
mAxisItem[1].Divider.Parent:= pnlAxis11;
mAxisItem[1].Buzzer.Parent:= pnlAxis11;
mAxisItem[2].W.Parent:= pnlAxis21;
mAxisItem[2].Divider.Parent:= pnlAxis21;
mAxisItem[2].Buzzer.Parent:= pnlAxis21;
end
else
begin
// Landscape
pnlAxis01.Visible :=false;
pnlAxis11.Visible :=false;
pnlAxis21.Visible :=false;
mAxisItem[0].W.Parent:= pnlAxis0;
mAxisItem[0].Divider.Parent:= pnlAxis0;
mAxisItem[0].Buzzer.Parent:= pnlAxis0;
mAxisItem[1].W.Parent:= pnlAxis1;
mAxisItem[1].Divider.Parent:= pnlAxis1;
mAxisItem[1].Buzzer.Parent:= pnlAxis1;
mAxisItem[2].W.Parent:= pnlAxis2;
mAxisItem[2].Divider.Parent:= pnlAxis2;
mAxisItem[2].Buzzer.Parent:= pnlAxis2;
end;
// Sichtbare Panels in richtiger Reihenfolge wieder einfügen
If aPortrait then
begin
pnlAxis21.Align := TAlignLayout.Top;
pnlAxis2.Align := TAlignLayout.Top;
pnlAxis11.Align := TAlignLayout.Top;
pnlAxis1.Align := TAlignLayout.Top;
pnlAxis01.Align := TAlignLayout.Top;
pnlAxis0.Align := TAlignLayout.Top;
{ pnlClient.AddObject(pnlAxis21);
pnlClient.AddObject(pnlAxis2);
pnlClient.AddObject(pnlAxis11);
pnlClient.AddObject(pnlAxis1);
pnlClient.AddObject(pnlAxis01);
pnlClient.AddObject(pnlAxis0); }
end
else
begin
pnlAxis2.Align := TAlignLayout.Top;
pnlAxis1.Align := TAlignLayout.Top;
pnlAxis0.Align := TAlignLayout.Top;
pnlAxis21.Align := TAlignLayout.Top;
pnlAxis11.Align := TAlignLayout.Top;
pnlAxis01.Align := TAlignLayout.Top;
{ pnlClient.AddObject(pnlAxis2);
pnlClient.AddObject(pnlAxis1);
pnlClient.AddObject(pnlAxis0);
pnlClient.AddObject(pnlAxis21);
pnlClient.AddObject(pnlAxis11);
pnlClient.AddObject(pnlAxis01); }
end;
// for var P in Panels do
// P.Align := TAlignLayout.Top;
// Sichtbare Panels in richtiger Reihenfolge (von unten nach oben) wieder einfügen
// for var I := High(Panels) downto 0 do
// if Panels[I].Visible then
// pnlClient.AddObject(Panels[I]);
// ShowMessage(TPanel(p).name)
finally
pnlClient.EndUpdate;
end;