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/)
-   -   Delphi TScrollbox mit dynamischem Inhalt sorgt für Chaos (https://www.delphipraxis.net/90819-tscrollbox-mit-dynamischem-inhalt-sorgt-fuer-chaos.html)

berens 24. Apr 2007 12:12


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!

EarlyBird 25. Apr 2007 19:09

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

berens 25. Apr 2007 21:59

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!

berens 26. Apr 2007 11:03

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

EarlyBird 26. Apr 2007 13:01

Re: TScrollbox mit dynamischem Inhalt sorgt für Chaos
 
Versuch es mal damit:
Delphi-Quellcode:
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;
Gruß
EarlyBird

berens 26. Apr 2007 13:08

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 19:51 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