Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   falsche Anordnung von TPanels (https://www.delphipraxis.net/217272-falsche-anordnung-von-tpanels.html)

Uwe Raabe 3. Jun 2025 10:35

AW: falsche Anordnung von TPanels
 
Du könntest auch die Height der Panels auf 0 setzen und das Visible auf True belassen. Den originalen Wert kannst du dir irgendwo (z.B. TagFloat) merken um später die Height wiederherzustellen. Die Panels behalten dann ihre relative Position bei.

Delphi.Narium 3. Jun 2025 10:44

AW: falsche Anordnung von TPanels
 
Andere Idee:

Bei allen Panels Align auf Bottom setzen, dann sind sie erstmal unten angeordnet.

Dann in der Reihenfolge, in der sie von oben angeordnet werden sollen, Align auf Top setzen.

haentschman 3. Jun 2025 10:45

AW: falsche Anordnung von TPanels
 
Hallöle...8-)

Wie wäre es mit TGridPanel?
https://www.youtube.com/watch?v=w2HI...listerChristie

:wink:

Geri 3. Jun 2025 10:48

AW: falsche Anordnung von TPanels
 
Immer noch selbiges Ergebnis mit

Delphi-Quellcode:
  If aPortrait then
    begin
        pnlAxis21.Align := TAlignLayout.Top;
        pnlAxis21.Position.y := 0;
        pnlAxis2.Align := TAlignLayout.Top;
        pnlAxis2.Position.y := 0;
        pnlAxis11.Align := TAlignLayout.Top;
        pnlAxis11.Position.y := 0;
        pnlAxis1.Align := TAlignLayout.Top;
        pnlAxis1.Position.y := 0;
        pnlAxis01.Align := TAlignLayout.Top;
        pnlAxis01.Position.y := 0;
        pnlAxis0.Align := TAlignLayout.Top;
        pnlAxis0.Position.y := 0;
     end;

Uwe Raabe 3. Jun 2025 11:01

AW: falsche Anordnung von TPanels
 
Zitat:

Zitat von haentschman (Beitrag 1549186)
Wie wäre es mit TGridPanel?

TGridPanel ist ein VCL-Control und das kann kein Android. Unter FMX wäre das eher ein TGridPanelLayout. In beiden Fällen muss man sich dann aber immer noch um das Aus- und Einblenden der Zeilen selbst kümmern.

Deswegen auch mein Ansatz mit dem Height := 0. Damit umgeht man das Umsortieren der Controls auf Basis des Alignments, was unweigerlich beim Visible := False bzw. True erfolgt.

Geri 3. Jun 2025 11:05

AW: falsche Anordnung von TPanels
 
Zitat:

Zitat von uwe raabe (Beitrag 1549184)
du könntest auch die height der panels auf 0 setzen und das visible auf true belassen. Den originalen wert kannst du dir irgendwo (z.b. tagfloat) merken um später die height wiederherzustellen. Die panels behalten dann ihre relative position bei.

Mit folgendem Code ergibt sich auch keine Besserung.

Delphi-Quellcode:
procedure TmDROMainForm.UpdateLayout_VHeight(aPortrait:Boolean);
begin

  try
    pnlClient.BeginUpdate;
    If aPortrait then
     begin
      pnlAxis01.Height:=60;
      pnlAxis11.Height:=60;
      pnlAxis21.Height:=60;
      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.Height:=0;
      pnlAxis11.Height:=0;
      pnlAxis21.Height:=0;

      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;
   finally
     pnlClient.EndUpdate;
  end;
  // Layout und Style auffrischen
  pnlClient.Repaint;
end;

Geri 3. Jun 2025 11:13

AW: falsche Anordnung von TPanels
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nur zur Info: Hier auch noch Screenshot der Objektstruktur.

Uwe Raabe 3. Jun 2025 11:21

AW: falsche Anordnung von TPanels
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kann es leider nicht auf Android probieren, aber unter Windows funktioniert das hier angehängte Beispiel schon: https://app.screencast.com/cYGiQaqPxeV40

AuronTLG 3. Jun 2025 11:23

AW: falsche Anordnung von TPanels
 
Eventuell könnte das BeginUpdate/EndUpdate noch reinpfuschen.
Wenn das ohne immer noch nicht funktioniert, ist dann aber etwas komisch. Ich habe sowas auch schon umsetzen müssen und hatte keine Probleme dabei.

Geri 3. Jun 2025 12:54

AW: falsche Anordnung von TPanels
 
@Uwe

Vielen Dank für dein Beispiel. Dein Beispiel funktioniert.

Habe meinen Code anschließend deinem Beispiel folgendermaßen angepasst. Immer noch das selbe Erbenis.
Delphi-Quellcode:
procedure TmDROMainForm.Button1Click(Sender: TObject);
begin
  // UpdateLayout(true);
  LandScape := not LandScape;
end;

procedure TmDROMainForm.SetLandScape(const Value: Boolean);
begin
  if FLandScape <> Value then
  begin
    FLandScape := Value;
    if FLandscape then
    begin
      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
    else
    begin
      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;

    for var pnl in [pnlAxis01, pnlAxis11, pnlAxis21] do
    begin
      if Value then
        HidePanel(pnl)
      else
      begin
        ShowPanel(pnl);
      end;

    end;
  end

end;

Zitat:

Zitat von AuronTLG (Beitrag 1549192)
Eventuell könnte das BeginUpdate/EndUpdate noch reinpfuschen.
Wenn das ohne immer noch nicht funktioniert, ist dann aber etwas komisch. Ich habe sowas auch schon umsetzen müssen und hatte keine Probleme dabei.

Habe ich mal entfernt. Keine Verbesserung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz