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/)
-   -   ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes? (https://www.delphipraxis.net/207223-scrollbox-mit-dynamisch-erzeugten-labeln-statt-listview-oder-doch-anderes.html)

DieDolly 4. Mär 2021 19:58

ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Ich habe eine ListView-Komponente mit ungefähr 30 Einträgen in jeweils zwei Spalten.
Es gibt eine Animation die dieses ListView am Rand des Programmfensters ein- und ausblendet.
Aber blöderweise sieht man bei der Animation ein Flackern in der Komponente selber. Die wird dann ständig weiß, obwohl das Programm-Theme ein dunkles ist.
Das Problem lässt sich auch nicht beheben und kommt von der Komponente selber.

Ich habe mir jetzt überlegt, eine ScrollBox stattdessen zu nehmen und die Label die ich brauche dynamisch zu erzeugen aber das dauert relativ lange wie ich finde.
Begin- und EndUpdate hat eine ScrollBox nicht. Gibt es eine bessere Lösung? Die Infos sollen nur in zwei Spalten angezeigt werden. Es muss keine spezielle Komponente sein und auch nicht editierbar.

Mein erster Versuch
Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
var
 i, LastLabelTop: Integer;

 procedure AddItemToScrollBox(const Caption, SubItem: string);
 var
  LabelTitle, LabelSubTitle: TLabel;
 begin
  LabelTitle := TLabel.Create(ScrollBox1);
  LabelTitle.Parent := ScrollBox1;
  LabelTitle.Visible := True;
  LabelTitle.Caption := Caption;
  LabelTitle.Top := LastLabelTop;
  LabelTitle.Left := 5;

  LabelSubTitle := TLabel.Create(ScrollBox1);
  LabelSubTitle.Parent := ScrollBox1;
  LabelSubTitle.Visible := True;
  LabelSubTitle.Caption := SubItem;
  LabelSubTitle.Top := LabelTitle.Top;
  LabelSubTitle.Left := ScrollBox1.Width div 2; // Label 2 wird bei 50% der ScrollBox-Weite gezeichnet

  LastLabelTop := LabelSubTitle.Top + LabelSubTitle.Height + 3;
 end;

begin
 LastLabelTop := 5;

 for i := 0 to 35 do
  AddItemToScrollBox('Test 1111 2222 4444', 'Subtest 1111 2222 4444 5555 6666 7777 8888 9999 0000');
end;

himitsu 4. Mär 2021 20:08

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
DoubleBuffered bei dieser Komponente aktivieren?


TCategoryPanelGroup

TGridPanel
TFlowPanel
TStackPanel
...

DieDolly 4. Mär 2021 20:08

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Es ist alles bei "Standard". Die ListView muss unbedingt weg.

Klaus01 4. Mär 2021 20:16

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
.. dauert bei mir ca. 100ms (80 - 125)

Grüße
Klaus

DieDolly 4. Mär 2021 20:21

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Zitat:

.. dauert bei mir ca. 100ms (80 - 125)
Kann ich nicht nachvollziehen. Mach das mal mit Debugger dann sieht das anders aus.

Zitat:

TCategoryPanelGroup

TGridPanel
TFlowPanel
TStackPanel
Ohne Beispiele kann ich damit leider nix anfangen.

himitsu 4. Mär 2021 20:23

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Zeiten im Debugger sind irrelevant ... für den Kunden / Benutzer des Programms.
Und natürlich ist dort alles "etwas" langsamer. :roll:

Zitat:

Zitat von DieDolly (Beitrag 1484449)
Ohne Beispiele kann ich damit leider nix anfangen.

F1?

Oder siehe eine der Werbungen des Herstellers. https://edn.embarcadero.com/article/33421
Und Google findet sogar Videos und Bildergalerien.

DieDolly 4. Mär 2021 20:25

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Die installiere ich nicht mit. StackPanel sieht vernünftig aus, aber nur eine Spalte und hat keinen Scrollbalken.

Bei mir dauert das mit der ScollBox auch ohne Debugger 600ms.

himitsu 4. Mär 2021 20:37

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Suche einfach im Forum
https://www.delphipraxis.net/dp_reference.php
Dort ist ein Index einer OnlineVersion der Hilfe drin.

Oder direkt beim Hersteller.
http://docwiki.embarcadero.com/RADSt...Hilfe:_DocWiki

Oder ganz einfach Google oder Dergleichen. (notfalls "docwiki" mit die Suchbegriffe, oder "embarcadero" oder "delphi" oder ...)
Und z.B. bei Klassennamen ein Anführungszeichen um den "Begriff" drumrum. (damit die Suche nicht den Begriff zerlegt)

Renate Schaaf 4. Mär 2021 20:51

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Zitat:

Begin- und EndUpdate hat eine ScrollBox nicht.
Versuch mal DisableAlign und EnableAlign, wirkt bei mir Wunder.

DieDolly 4. Mär 2021 22:02

AW: ScrollBox mit dynamisch erzeugten Labeln statt ListView, oder doch was anderes?
 
Ein VirtualTreeView hat das Problem erledigt. Das hat den Vorteil, dass ich eine vorhandene Datenstruktur weiter verwenden kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 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