![]() |
TScrollbox mit dynamischem Inhalt sorgt für Chaos
Moin!
Ich habe eine TScrollbox. Kann auch eine TLMDScrollbox sein. Diese enthält unbekannt viele TPanel, die unterschiedlich hoch sein können und ihre Höhe auch während der Laufzeit ändern können (Einklappen zwecks Übersichtlichkeit). Alle TPanel haben Align = alTop. Über eine Funktion kann ich ermitteln, wie hoch VertScrollbar.Range sein müsste. Sobald ein Panel zusammen- oder auseinandergeklappt wird löst es meine eigene OnBlaBla Funktion aus, woraufhin das TForm die benötige VertScrollbar.Range neu berechnet diesen Wert auch setzt. Soweit, sogut. Probleme: Die VertScrollbar wird nicht immer angezeigt, obwohl Range immer > Scrollbox.Height. Auch mit Scrollbox.AutoScroll = true/false getestet. Ausserdem werden nach dem zusammenklappen eines Panels die anderen Panele teilweise nicht mehr (richtg) dargestellt, aber ich denke, das ist ein anderes Thema. * Gibt es eine bessere Komponente für dynamische Inhalte? * Was kann das mit der blöden VertScrollbar? Thx für Antworten im Vorraus! |
Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
Hast Du es mal mit einem TFlowPanel versucht?
Das Flopanel in die Scrollbox legen. FlowPanel.Align := altop; FlowPanel.autosize := true; Dann die Panels im Flowpanel erzeugen. Das funktioniert bei mir wunderbar. Gruß EarlyBird |
Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
Also auf den ersten Blick macht das einen super genialen Eindruck und scheint tatsächlich genau das zu machen, was ich verzweifelt suche...
Mal schauen, ob es in meinem "richtigem" Programm dann auch so funzt, wie es soll ;) Super Tip, vielen Dank! |
Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
Hm... Irgendwie klappt das doch nicht so, wie ich mir das vorstelle.
Meine Panels innerhalb von dem FlowPanel haben alle alTop. Abgesehen davon, dass das Flowpanel die Komponenten nicht wirklich mit alTop ausrichten lässt (naja, ist ja ein Teil seiner Funktion), bringt es z.B. Probleme wenn ich 2 Clientpanels habe, beide volle Breite, beide alTop, und jetzt erst AutoSize auf true setzen. Nun hat das komplette Panel die Höhe von nur einem Clientpanel. Beispiel: Client_1 (TPanel) Height = 50, alTop Client_2 (TPanel) Height = 50, alTop FlowPanel Height = 50 <-- falsch, müsste 100 sein |
Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
Versuch es mal damit:
Delphi-Quellcode:
Gruß
procedure TForm2.Button1Click(Sender: TObject);
var panel : TPanel; I : Integer; begin FlowPanel1.AutoWrap := False; FlowPanel1.AutoSize := True; FlowPanel1.Align := alTop; FlowPanel1.FlowStyle := fsTopBottomLeftRight; for I := 0 to 20 do begin panel := TPanel.Create(self); panel.Width := FlowPanel1.Width; panel.Height := 26; panel.Parent := FlowPanel1; panel.Show; panel.Caption := 'No.: ' + IntToStr(I) + ' / height= ' + inttostr(panel.Height); end; FlowPanel1.Controls[1].Height := 50; TPanel(FlowPanel1.Controls[1]).Caption := 'No.: 1 / height= ' + IntToStr(FlowPanel1.Controls[1].Height); FlowPanel1.Controls[2].Height := 5; TPanel(FlowPanel1.Controls[2]).Caption := 'No.: 2 / height= ' + IntToStr(FlowPanel1.Controls[2].Height); FlowPanel1.Controls[3].Height := 100; TPanel(FlowPanel1.Controls[3]).Caption := 'No.: 3 / height= ' + IntToStr(FlowPanel1.Controls[3].Height); Caption := IntToStr(FlowPanel1.Height); end; EarlyBird |
Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
Hm, komisch...
Vielleicht darf ich einfach die Client-Panels nicht mit alTop machen? Deine Demo funzt super, danke :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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 by Thomas Breitkreuz