![]() |
falsche Anordnung von TPanels
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:
Ich bin ratlos und ChatGPT konnte mir auch nicht weiterhelfen:)
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; LG Geri |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 2)
Hier noch Bilder zur Landscape und der falschen Darstellung in Portrait
|
AW: falsche Anordnung von TPanels
Statt
Delphi-Quellcode:
würd' ich die Panels hier auch entsprechend Deiner Anforderung auflisten.
for var P in Panels do
P.Align := TAlignLayout.Top; In der For-Schleife werden sie (vermutlich) in der Erstellungsreihenfolge abgearbeitet und nicht zwingend in der von Dir gewünschten. Was sagt denn der Debugger zu der Abfolge der Panels in der For-Schleife? |
AW: falsche Anordnung von TPanels
Delphi-Quellcode:
liefert, dass die Elemente richtig eingefügt sind.
for var i := 0 to pnlClient.ChildrenCount - 1 do
Log.d(pnlClient.Children[i].Name); Portrait: pnlAxis0, pnlAxis01, pnlAxis1, pnalAxis11, pnlAxis2,pnlAxis21 Habe nun mal Align nacheinander aufgerufen.
Delphi-Quellcode:
führt zu keiner Verbesserung// 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; 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]); 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; |
AW: falsche Anordnung von TPanels
Versuch mal, in der korrekten Reihenfolge die Alignment auf MostTop zu setzen.
|
AW: falsche Anordnung von TPanels
Folgender Code hat auch zu keiner Verbesserung geführt.
Delphi-Quellcode:
If aPortrait then
begin pnlAxis21.Align := TAlignLayout.MostTop; pnlAxis2.Align := TAlignLayout.MostTop; pnlAxis11.Align := TAlignLayout.MostTop; pnlAxis1.Align := TAlignLayout.MostTop; pnlAxis01.Align := TAlignLayout.MostTop; pnlAxis0.Align := TAlignLayout.MostTop; end; |
AW: falsche Anordnung von TPanels
Noch ein Hinweis. Unter MS-Windows tritt mit dem Code das selbe Problem auf.
und pnlClient.ChildrenCount hat den Wert 5. Ich hätte 6 erwartet
Delphi-Quellcode:
for var i := 0 to pnlClient.ChildrenCount - 1 do
Log.d(pnlClient.Children[i].Name); |
AW: falsche Anordnung von TPanels
Hm, ich habe wohl nicht genau genug hingeschaut.
Hat es einen bestimmten Grund, dass du die Panels aus ihrem Parent entfernst und wieder einfügst? Das könnte nämlich schon das ganze Problem sein. Ich habe so eine Konstruktion noch nirgendwo verwendet, aber ich würde vermuten, dass das entfernen und wieder einfügen alle vorigen Alignment-Änderungen quasi negiert, da die Panels zum Zeitpunkt der Alignment-Änderung kein Parent haben, welches die Anordnung bestimmt, und dadurch beim erneuten Einfügen auf unerwünschte Weise angeordnet werden. |
AW: falsche Anordnung von TPanels
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; |
AW: falsche Anordnung von TPanels
Ein Versuch:
Delphi-Quellcode:
If aPortrait then
begin // Panels in der Reihenfolge von unten nach oben anordnen: pnlAxis21.Align := TAlignLayout.Top; pnlAxis21.Top := 0; pnlAxis2.Align := TAlignLayout.Top; pnlAxis2.Top := 0; pnlAxis11.Align := TAlignLayout.Top; pnlAxis11.Top := 0; pnlAxis1.Align := TAlignLayout.Top; pnlAxis1.Top := 0; pnlAxis01.Align := TAlignLayout.Top; pnlAxis01.Top := 0; pnlAxis0.Align := TAlignLayout.Top; pnlAxis0.Top := 0; end; |
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.
|
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. |
AW: falsche Anordnung von TPanels
Hallöle...8-)
Wie wäre es mit TGridPanel? ![]() :wink: |
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; |
AW: falsche Anordnung von TPanels
Zitat:
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. |
AW: falsche Anordnung von TPanels
Zitat:
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; |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Nur zur Info: Hier auch noch Screenshot der Objektstruktur.
|
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:
![]() |
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. |
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:
|
AW: falsche Anordnung von TPanels
Noch eine Info dazu: Habe in das Beispiel von Uwe noch Cornerbuttons, wie bei mir eingefügt. Das funktioniert auch
Delphi-Quellcode:
procedure TForm1.ShowPanel(APanel: TPanel);
begin APanel.Height := APanel.TagFloat; end; procedure TForm1.SetLandScape(const Value: Boolean); begin if FLandScape <> Value then begin FLandScape := Value; if Value then begin btn1.parent:=panel1; btn2.parent:=panel1; btn3.parent:=panel3; btn4.parent:=panel3; btn5.parent:=panel5; btn6.parent:=panel5; end else begin btn1.parent:=panel2; btn2.parent:=panel2; btn3.parent:=panel4; btn4.parent:=panel4; btn5.parent:=panel6; btn6.parent:=panel6; end; for var pnl in [Panel2, Panel4, Panel6] do begin if Value then HidePanel(pnl) else ShowPanel(pnl); end; end; end; |
AW: falsche Anordnung von TPanels
Also, das Verfahren funktioniert nun zwar prinzipiell, aber dummerweise in deinem konkreten Fall nicht. Dann muss da noch irgendwas anderes die Ursache sein und somit brauchen wird noch ein paar mehr Informationen.
|
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 3)
So, habe nun mal ein Programm mit den selben Panels erstellt.
Anbei das Projekt. Nicht er identische, aber ähnlicher Fehler. Alle Panels pnlAxis01, pnlAxis11 und pnlAxis21, die im Portrai-Modus dargestellt sind, werden am Ende angehängt Vielleicht hat es etwas mit dem Stylebook zu tnun
Delphi-Quellcode:
unit uFirstApp;
interface uses System.Rtti, System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,FMX.Objects, FMX.Controls.Presentation, System.ImageList, FMX.ImgList, FMX.Layouts {$ifdef ANDROID} , Androidapi.JNI.Bluetooth, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.jni.app, Androidapi.JNI.Os, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge, System.IOUtils {$endif} ; type TForm1 = class(TForm) pnlAxis0: TPanel; btnAxisName0: TCornerButton; SB: TStyleBook; btnAxisValue0: TCornerButton; btnAxisUnit0: TCornerButton; btnAxisDiv0: TCornerButton; btnAxisW0: TCornerButton; btnAxisBuzzer0: TCornerButton; ImageList1: TImageList; pnlAxis2: TPanel; btnAxisName2: TCornerButton; btnAxisValue2: TCornerButton; btnAxisUnit2: TCornerButton; btnAxisDiv2: TCornerButton; btnAxisBuzzer2: TCornerButton; pnlAxis1: TPanel; btnAxisName1: TCornerButton; btnAxisValue1: TCornerButton; btnAxisUnit1: TCornerButton; btnAxisDiv1: TCornerButton; btnAxisW1: TCornerButton; btnAxisBuzzer1: TCornerButton; Button1: TButton; btnAxisW2: TCornerButton; pnlAxis21: TPanel; pnlAxis11: TPanel; pnlAxis01: TPanel; procedure Button1Click(Sender: TObject); private FLandScape: Boolean; procedure SetLandScape(const Value: Boolean); { Private declarations } protected procedure ShowPanel(APanel: TPanel); procedure HidePanel(APanel: TPanel); public property LandScape: Boolean read FLandScape write SetLandScape; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin LandScape := not LandScape; end; procedure TForm1.SetLandScape(const Value: Boolean); begin if FLandScape <> Value then begin FLandScape := Value; if FLandscape then begin btnAxisW0.parent:= pnlAxis0; btnAxisDiv0.parent:= pnlAxis0; btnAxisBuzzer0.parent:= pnlAxis0; btnAxisW1.parent:= pnlAxis1; btnAxisDiv1.parent:= pnlAxis1; btnAxisBuzzer1.parent:= pnlAxis1; btnAxisW2.parent:= pnlAxis2; btnAxisDiv2.parent:= pnlAxis2; btnAxisBuzzer2.parent:= pnlAxis2; end else begin btnAxisW0.parent:= pnlAxis01; btnAxisDiv0.parent:= pnlAxis01; btnAxisBuzzer0.parent:= pnlAxis01; btnAxisW1.parent:= pnlAxis11; btnAxisDiv1.parent:= pnlAxis11; btnAxisBuzzer1.parent:= pnlAxis11; btnAxisW2.parent:= pnlAxis21; btnAxisDiv2.parent:= pnlAxis21; btnAxisBuzzer2.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; procedure TForm1.HidePanel(APanel: TPanel); begin APanel.TagFloat := APanel.Height; APanel.Height := 0; end; procedure TForm1.ShowPanel(APanel: TPanel); begin APanel.Height := APanel.TagFloat; end; end. |
AW: falsche Anordnung von TPanels
Ist das Absicht, dass der Anhang in deinem letzten Post exakt meinem Beispiel entspricht? Interessanter wäre ein Beispiel, bei dem es nicht funktioniert.
|
AW: falsche Anordnung von TPanels
Ja, das war Absicht, damit es übersichtlicher wird. Meiner Ansicht stimmt hier die Reihenfolge auch nicht.
Die Anordnung sollte in der Portrait-Ansicht: SOLL: pnlAxis0 pnlAxis01 pnlAxis1 pnlAxis11 pnlAxis2 pnlAxis21 sein. IST: pnlAxis0 pnlAxis1 pnlAxis2 pnlAxis01 pnlAxis11 pnlAxis21 |
AW: falsche Anordnung von TPanels
In dem Code-Beispiel kommen aber gar keine pnlAxis<irgendwas> vor. Der Anhang ist exakt die Zip-Datei, die ich in meinem Anhang schon mitgeschickt hatte.
|
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, hast recht, mein Fehler.
Anbei das Projekt. |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 3)
Wenn ich die Panel in ein TLayout setze, wie in meinem Beispiel, funktioniert es.
|
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, so wie bei dir sollte es aussehen. Bei mir tut es das nicht.
Ich nutze Delphi 12 Community Edition Die Version sollte recht aktuell sein, habe sie letzte Woche installiert. Gibt es evtl. noch globale Einstellungen, die zu dem Verhalten führen könnten? |
AW: falsche Anordnung von TPanels
mit Layout geht es bei mir auch:-D
Ich probiere nun noch das komplexere Programm |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Beim komplexeren Programm funktioniert es noch nicht.
|
AW: falsche Anordnung von TPanels
Die Panels sollten direkt unter dem Layout liegen. Der pnlClient als Zwischenschicht macht es wieder kaputt.
|
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Abend
Anbei das abgespeckte Projekt mit dem Problem. Bin schon sehr gespannt, was es sein wird. @Uwe, Layout-so wie du meinstest hatte auch keine Besserung gebracht. |
AW: falsche Anordnung von TPanels
Nun, die Panel müssen natürlich schon zur Designzeit in der richtigen Reihenfolge angeordnet sein. Zur Laufzeit werden die schmalen Panels ja nur verborgen, die Reihenfolge bleibt aber unverändert.
Die Reihenfolge der Panels muss also im Designer schon so aussehen (sortiert nach Position.Y aufsteigend): pnlAxis0, pnlAxis01, pnlAxis1, pnlAxis11, pnlAxis2, pnlAxis21 |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen
Zitat:
Hoffe, ich übersehe nicht ganz etwas Elementares:shock: |
AW: falsche Anordnung von TPanels
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal meine Änderungen angehängt. So funktioniert es zumindest hier:
![]() Um die schmalen Panels voneinander unterscheiden zu können habe ich bei den Buttons eine unterschiedliche Beschriftung gewählt. |
AW: falsche Anordnung von TPanels
Vielen Dank allen und insbesondere dir Uwe für deine große Mühe!🤗
Nachdem ich den Tab order geändert hatte und die Elemente anschließend entsprechend verschoben habe, funktioniert es nun unter Windows und Android. Es zeigt sich wieder mal, dass es immer wieder die einfachen Dinge und die Grundlagen sind😀 Obwohl mich ChatGPT sonst sehr hilfreich dünkt ist es trotzdem sehr interessant, welche Vorschläge ich zuvor damit bekam. Auf das Naheliegende ist es auch nicht gekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr. |
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