Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#7

AW: dynamisch erzeugte elemente in mehren zeilen

  Alt 3. Aug 2011, 22:50
Zitat:
Leider hat das Flowpanel keine ScrollBar.
Kann ich dem Flowpanel eine Scrollbar zuweisen?
Packe das TFlowPanel einfach in eine TScrollBox, aber nicht mit alClient, sondern alNone! (mit alClient scrollt das Flowpanel nicht!)
Die Höhe des Panels kannst du ja erstmal mit der Scrollbox gleichsetzen (heisst, die Scrollbars sind initial nicht sichtbar).

Wenn du aber dann deine Controls innerhalb des Flow-Panels hinzufügst, erweiterst du einfach nach Bedarf die Höhe des FlowPanels im Code.
Wie das?: Wenn du ein Control innerhalb des FlowPanels erzeugt hast, kannst du nach dem Positionieren über Control.Top die reale, vertikale Position im FlowPanel auslesen, die dadurch entsteht, dass das FlowPanel evtl. automatisch umgebrochen hat, und wenn dann Control.Top + Control.Height die Höhe des Flowpanels überschreitet, einfach die Höhe des FlowPanels um die fehlende Höhe erweitern.
Die Scrollbox fügt dann automatisch eine Scrollbar hinzu, sobald das FlowPanel die Höhe der Scrollbox überschreitet, und, voila, schon scrollt das Ding innerhalb der Scrollbox automatisch.

Oder du setzt von Anfang an eine feste, maximale Höhe des FlowPanels, die wesentlich höher ist als die der Scrollbox und die du mit den Controls nicht überschreiten wirst.
Das ist aber nicht so schön (scrollbarer Leerraum, wenn ungenutzte Höhe) und weniger dynamisch

Das gleiche geht natürlich auch mit der Breite, aber das ist denke ich in deinem Fall nicht Sinn der Sache, denn dann wäre ja das Flowpanel überflüssig

Geändert von blackfin ( 3. Aug 2011 um 23:21 Uhr)
  Mit Zitat antworten Zitat