[Erledigt] TFlowpanel Scrollbars

Rund um die LCL und andere Komponenten
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Erledigt] TFlowpanel Scrollbars

Beitrag von MacWomble »

eine weitere Frage / Anregung

Im Prinzip ist das TFlowpanel ein geniales Teil. Leider hat es keine Scrollbars. Kann man das irgendwie realisieren?

Wenn man das beiliegende Beispiel kompiliert und die Fenstergröße verändert, sollte recht schnell klar sein warum.
Dateianhänge
Flowtest.zip
(306.28 KiB) 61-mal heruntergeladen
Zuletzt geändert von MacWomble am Di 7. Jun 2016, 10:05, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: TFlowpanel Scrollbars

Beitrag von Michl »

Einfach eine TScrollBox auf das Formular legen und Parent vom TFlowPanel zu ScrollBox1 ändern. Align jeweils auf alClient stellen. So funktioniert das beim mir bei deinem Beispiel (Windows 7).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: TFlowpanel Scrollbars

Beitrag von MacWomble »

Danke funktioniert.

Das hatte ich gestern auch versucht, da bekam ich aber beide Scrollbalken - irgendwas habe ich da wohl falsch gemacht.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TFlowpanel Scrollbars

Beitrag von wp_xyz »

Michl hat geschrieben:Einfach eine TScrollBox auf das Formular legen und Parent vom TFlowPanel zu ScrollBox1 ändern. Align jeweils auf alClient stellen. So funktioniert das beim mir bei deinem Beispiel (Windows 7).

Seltsam. Wenn das FlowPanel client-aligned ist, dann ist es genauso groß wie die Scrollbox. Gerade da sollten keine Scrollbars erscheinen. Ich hatte immer gedacht, die Scrollbox wäre dafür da, Inhalte zu scrollen, die größer sind als die Scrollbox.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: [Erledigt] TFlowpanel Scrollbars

Beitrag von wp_xyz »

Es geht auch ohne Scrollbox: Einfach die Eigenschaft "AutoScroll" des Formulars einschalten.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: [Erledigt] TFlowpanel Scrollbars

Beitrag von MacWomble »

wp_xyz hat geschrieben:Es geht auch ohne Scrollbox: Einfach die Eigenschaft "AutoScroll" des Formulars einschalten.



aber dann meist nur sinnvoll, wenn das Flowpanel die gesamte Form bedeckt
Zuletzt geändert von MacWomble am Di 7. Jun 2016, 12:14, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: [Erledigt] TFlowpanel Scrollbars

Beitrag von Michl »

wp_xyz hat geschrieben:Seltsam. Wenn das FlowPanel client-aligned ist, dann ist es genauso groß wie die Scrollbox. Gerade da sollten keine Scrollbars erscheinen. Ich hatte immer gedacht, die Scrollbox wäre dafür da, Inhalte zu scrollen, die größer sind als die Scrollbox.
Wenn man keine horizontale Scrollbars will (dafür ist wohl dieses TFlowPanel gedacht), muss man der Scrollbox die Breite des FlowPanels mitgeben.

Es kann schon sein, dass alClient Höhe und Breite vorschreiben soll, scheinbar ist dies aber weniger wichtig, als die vom FlowPanel berechnete Höhe. Ob das falsch ist, kann ich nicht sagen (ich habe das FlowPanel noch nie benutzt).

Eine alternative (die wahrscheinlich bessere) Lösung wäre, FlowPanel.Align auf alNone zu stellen, die linke, obere und rechte Anchorseite mit den Seiten der ScrollBox zu verankern und FlowPanel.AutoSize auf True stellen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten