Delphi-PRAXiS

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/)
-   -   ScrollBox und FlowPanel richtig verknüpfen (https://www.delphipraxis.net/205952-scrollbox-und-flowpanel-richtig-verknuepfen.html)

Nico B. 3. Nov 2020 11:58

ScrollBox und FlowPanel richtig verknüpfen
 
Hallo zusammen,

ich möchte ein FlowPanel mit Buttons füllen.
Sobald nicht mehr alle Buttons in das FlowPanel passen, soll das FlowPanel eine vertikale Scrollleiste bekommen.
Am liebsten hätte ich die Scrollleiste immer angezeigt, aber ich will nicht den zweiten Schritt vor dem ersten klären...
Die Größe des FlowPanels soll sich außerdem analog zur Fenstergröße ändern.
Und natürlich sollen dann auch die Buttons im FlowPanels entsprechend neu angeordnet werden.

Irgendwie bekomme ich das aber alles nicht richtig verknüppert.

Ich habe eine ScrollBox auf meine Form gepackt und anschließend ein FlowPanel in die ScrollBox.
In das FlowPanel packe ich zur Laufzeit die Buttons. Das geht soweit.

Die ScrollBox soll sich nun an Größenänderungen der Form anpassen.
Um die ScrollBox sollen 10 Pixel Platz bleiben. Ich habe dementsprechend Left- und Top-Eigenschaften der ScrollBox angepasst.
Die Height- und Width-Eigenschaften der ScrollBox habe ich auf Form.ClientHeight bzw. ClientWidth minus 20 gesetzt.
Außerdem habe ich für die ScrollBox Anchors auf [akLeft,akTop,akRight,akBottom] gesetzt.
Die ScrollBox wächst jetzt mit so wie sie soll.

Was muss ich jetzt machen, damit:
  • das FlowPanel immer genauso breit ist wie die ScrollBox?
  • das FlowPanel immer mindestens so hoch ist wie die ScrollBox?
  • das FlowPanel die Buttons zur Laufzeit bei Größenänderung selbständig neu anordnet?

Ich habe natürlich schon gelesen, gegoogelt, gesucht.
Immer wieder wird geschrieben, ich muss die Align-Eigenschaft des FlowPanel auf alTop stellen.
Autosize und Autowrap sollen auch true sein.
Aber irgendwie klappt es nicht richtig.

Mit Align=alTop Autosize=true und Autowrap true
erhalte ich eine vertikale Scrollleiste. So weit so gut.
Vergrößere ich dann zur Laufzeit mein Fenster zur Seite, rutschen die Buttons aber leider nicht nach.
Obwohl das FlowPanel zur Seite mit wächst.
Vergrößere ich dann zur Laufzeit mein Fenster nach unten, verschwindet die Scrollbar, wenn alle das gesamte FlowPanel und alle Buttons zu sehen sind.
Leider wächst das FlowPanel aber noch nicht mit.
Verkleinere ich dann zur Laufzeit mein Fenster wieder (Höhe), erscheint die Scrollbar wieder.
Der Teil funktioniert also schon mal ganz gut.

stahli 3. Nov 2020 15:53

AW: ScrollBox und FlowPanel richtig verknüpfen
 
Wenn Du mit den zwei Controls nicht ganz zurecht kommst kann das vielleicht eine Alternative sein: https://www.delphipraxis.net/165177-scrollboxflow.html

Uwe Raabe 3. Nov 2020 16:37

AW: ScrollBox und FlowPanel richtig verknüpfen
 
Eventuell bekommst du mehr Feedback, wenn du ein einfaches Beispielprojekt bereitstellst.

Jumpy 3. Nov 2020 16:50

AW: ScrollBox und FlowPanel richtig verknüpfen
 
Ein Fenster hat die Eigenschaft "OnResize" meine ich. Die feuert immer, wenn das Fenster in der Größe verändert wird. In diesem Event kannst du evtl. auch eine Neuberechnung der Positionen vornehmen.

Der schöne Günther 3. Nov 2020 17:27

AW: ScrollBox und FlowPanel richtig verknüpfen
 
Das FlowPanel kommt nicht damit klar wenn es z.B.
Delphi-Quellcode:
Align = alTop
und
Delphi-Quellcode:
AutoSize = True
gleichzeitig hat. Beide bestimmen ja die Größe des Panels und beide kommen sich irgendwie in die Quere.

Des Rätsels Lösung ist im OnResize-Event des FlowPanels das AutoSize einmal abzuschalten, Realign() aufzurufen und es danach wieder einzuschalten:

Delphi-Quellcode:
procedure TForm1.FlowPanel1Resize(Sender: TObject);
begin
   FlowPanel1.AutoSize := False;
   try
      FlowPanel1.Realign();
   finally
      FlowPanel1.AutoSize := True;
   end;
end;
Das sieht dann so aus:
https://imgur.com/a/CxZJCZd

Nico B. 4. Nov 2020 06:46

AW: ScrollBox und FlowPanel richtig verknüpfen
 
Danke an alle für die Unterstützung.

Und vor allem vielen Dank an dich Günther.
Jetzt hast du mir schon wieder mein Problem gelöst! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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