Guten Morgen
Ich habe eine Delphi-App für Android.
Beim Umschalten von Landscape nach Portrait sollen sechs Elemente vom Typ TPanel anders angeordnet werden.
Sie sollen so aufgebaut werden:
Portrait: pnlAxis0, pnlAxis01, pnlAxis1, pnalAxis11, pnlAxis2,pnlAxis21
Landscape: pnlAxis0, pnlAxis1, pnalAxis2, die anderen drei unsichtbar.
Alle Panels sind Align.Top eingestellt.
Wenn man von Landscape nach Portrait umschaltet, dann stimmt die Reihenfolge nicht mehr.
Dargestellt wird: pnlAxis0, pnlAxis01, pnlAxis1, pnalAxis2, pnlAxis11,pnlAxis21
Habe bereits allerlei probiert.
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
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]);
finally
pnlClient.EndUpdate;
end;
// Layout und Style auffrischen
pnlClient.Repaint;
for var i := 0 to pnlClient.ChildrenCount - 1 do
Log.d(pnlClient.Children[i].Name);
end;
Ich bin ratlos und ChatGPT konnte mir auch nicht weiterhelfen
LG Geri