Einzelnen Beitrag anzeigen

Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
68 Beiträge
 
Delphi 2005 Personal
 
#9

AW: falsche Anordnung von TPanels

  Alt 3. Jun 2025, 10:06
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;
Gerhard

Geändert von Geri ( 3. Jun 2025 um 10:09 Uhr)
  Mit Zitat antworten Zitat