![]() |
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:
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. |
AW: ScrollBox und FlowPanel richtig verknüpfen
Wenn Du mit den zwei Controls nicht ganz zurecht kommst kann das vielleicht eine Alternative sein:
![]() |
AW: ScrollBox und FlowPanel richtig verknüpfen
Eventuell bekommst du mehr Feedback, wenn du ein einfaches Beispielprojekt bereitstellst.
|
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.
|
AW: ScrollBox und FlowPanel richtig verknüpfen
Das FlowPanel kommt nicht damit klar wenn es z.B.
Delphi-Quellcode:
und
Align = alTop
Delphi-Quellcode:
gleichzeitig hat. Beide bestimmen ja die Größe des Panels und beide kommen sich irgendwie in die Quere.
AutoSize = True
Des Rätsels Lösung ist im OnResize-Event des FlowPanels das AutoSize einmal abzuschalten, Realign() aufzurufen und es danach wieder einzuschalten:
Delphi-Quellcode:
Das sieht dann so aus:
procedure TForm1.FlowPanel1Resize(Sender: TObject);
begin FlowPanel1.AutoSize := False; try FlowPanel1.Realign(); finally FlowPanel1.AutoSize := True; end; end; ![]() |
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 04:02 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