Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey (https://www.delphipraxis.net/211595-veraendern-durchsetzen-der-reihenfolge-von-kompenten-mit-alignments-firemonkey.html)

AuronTLG 10. Okt 2022 15:12

Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey
 
Moin,

Ich habe in FMX ein Layout, in welchem mehrere Buttons mit Top-Alignment untereinander aufgelistet sind. Unter bestimmten Umständen wird ein Teil der Buttons unsichtbar bzw wieder sichtbar gesetzt.
Nach dem wieder sichtbar setzen stimmt jedoch oft die Reihenfolge nicht mehr, weswegen ich eine Methode zur Durchsetzung der gewünschten Reihenfolge implementieren wollte, was sich aber als deutlich problematischer als gedacht herausgestellt hat.
  • Allesamt auf Align = None und danach einzeln wieder Align = Top setzen führt zu Chaos.
  • Nacheinander Align = MostTop und wieder Align = Top setzen tut überhaupt nichts.
  • Herumspielen mit Position.Y ist problematisch, da dies sowohl Alignment als auch Margins etc übergeht. Käme nur als Notfall-Brute-Force-Lösung in Betracht
  • Listbox o.Ä. missbrauchen wäre aufwendig und unschön

Mir gehen so langsam die Ideen aus, obwohl es doch eigentlich eine simple Lösung dafür geben müsste...
Hat hier vielleicht jemand solche dafür?

Rollo62 10. Okt 2022 15:33

AW: Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey
 
Du meinst während Runtime ?
Das mache ich eher selten.

Normalerweise geht es mit "Nacheinander Align = MostTop und wieder Align = Top" ganz gut.
Oder mit Bottom/Top, ich baue da immer eine kleine Entkopplung ein damit es sich ordentlich aufbaut, so in der Art:
Delphi-Quellcode:
procedure MyForm:ReOrder;
begin
  Button1.Align  := Bottom;
  Button1.Visible := False;
  Button2.Align  := Bottom;
  Button2.Visible := False;
  Button3.Align  := Bottom;
  Button3.Visible := False;

  TThread.ForceQueue(
      nil,
      procedure
      begin
          Button1.Visible := True;
          Button1.Align  := Top;
          Button2.Visible := True;
          Button2.Align  := Top;
          Button3.Visible := True;
          Button3.Align  := Top;
      end );

end;

Es gäbe aber auch andere Möglichkeiten, z.B. die Buttons in einzelne TLayouts mit AlignLayout := Top; zu werfen, welche dann die Reihenfolge beibehalten.
Dann könnten die Buttons Visible := True/False geschaltet werden und gleichzeitig die Layouts.Height := 0 oder 80;
Bin momentan nicht ganz sicher ob Layout1.Height := 0.0; geht, oder ob es := 1; sein sollte, ich meine aber auch mit 0 sollte es gehen.

himitsu 10. Okt 2022 15:36

AW: Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey
 
Enabled=False
und Height=0 oder 1 ähhh 0.0001
so bleibt alles in der Reihenfolge, weil es nie wirklich weg ist.



Align + Top setzen müsste es nicht dennoch gehn?

In der VCL hatte ich es mal so gemacht:
einfach nacheinander, in der gewünschten Reihenfolge Top auf ganz groß (größer als das letzte alTop-Control) setzen
* Top setzt es runter
* und Align zieht es dann jeweils als letztes alTop zurück
* anschließend das kommt ds nächste Control und richtet sich wieder als Letztes ein usw.

oder ja, Alles auf Hide und in der Reihenfolge wieder auf Top=groß und dann Visible, was Visible sein soll

Rollo62 10. Okt 2022 15:42

AW: Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey
 
Zitat:

Zitat von himitsu (Beitrag 1513054)
Enabled=False
und Height=0 oder 1 ähhh 0.0001
so bleibt alles in der Reihenfolge, weil es nie wirklich weg ist.

Genau
Zitat:

Zitat von Rollo62 (Beitrag 1513053)
Es gäbe aber auch andere Möglichkeiten, z.B. die Buttons in einzelne TLayouts mit AlignLayout := Top; zu werfen, welche dann die Reihenfolge beibehalten.

Falls es doch nur um Ausblenden geht.

AuronTLG 10. Okt 2022 16:11

AW: Verändern/Durchsetzen der Reihenfolge von Kompenten mit Alignments in Firemonkey
 
Das Vorgehen mit Bottom -> Top und der Sichtbarkeit funktioniert und ist genau das, was ich gesucht habe.
Super, danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.

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