Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStrings (ListBox.Items) ohne ".add" ? (https://www.delphipraxis.net/202701-tstrings-listbox-items-ohne-add.html)

MicMic 28. Nov 2019 21:14

Delphi-Version: 10.2 Tokyo

TStrings (ListBox.Items) ohne ".add" ?
 
Hallo,
kann man eigentlich auch die Anzahl der ListBox-Items direkt angeben?
"ListBox.Count:=10" geht natürlich nicht. Zur Zeit nutze ich in einer For-Schleife "ListBox.Items.Add(""); Der Inhalt wird anders befüllt und dachte mir, wenn ich "...items.add" mir sparen kann, dass es evtl. ein wenig schneller wird.

Gruß Mic

DieDolly 28. Nov 2019 21:22

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Du kannst BeginUpdate vor und EndUpdate nach der Schleife nutzen. Das sollte das alles etwas beschleunigen wenn das dein Problem ist.

Michael II 28. Nov 2019 21:27

AW: TStrings (ListBox.Items) ohne ".add" ?
 
listbox1.Items.Count

hoika 28. Nov 2019 21:30

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Hallo,
Zitat:

kann man eigentlich auch die Anzahl der ListBox-Items direkt angeben?
nein

Zitat:

Der Inhalt wird anders befüllt
hm, warum füllst Du die ListBox nicht sofort mit den anders befüllten Werten,
anstatt erst mal leere Strings einzutragen?

MicMic 28. Nov 2019 21:40

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Danke für die Info. Begin/Endupdate habe ich schon.
Habe eben kurz was gefunden. In meiner For-Schleife habe ich mal mit eine String-Variabel rumprobiert. Also ct := ct + ', '; und außerhalb der Schleife mit "items.commatext := ct" die Anzahl gesetzt. Aber das ist auch nicht schneller, als wie gehabt "items.add('')" in der Schleife zu nutzen.
Zitat:

hm, warum füllst Du die ListBox nicht sofort mit den anders befüllten Werten,
anstatt erst mal leere Strings einzutragen?
Die Werte bestehen nicht nur aus einen Text. Auch sieht meine ListBox ganz anders aus. Trotzdem brauche ich "items.add" damit DrawItem richtig funktioniert für meine Sache. Dachte nur, ich kann mir das "add" sparen und die Anzahl direkt setzen. Scheint aber wohl nicht zu gehen.

hoika 28. Nov 2019 21:44

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Hallo,
gehen tut das schon

https://docs.microsoft.com/en-us/win...ls/lb-setcount

Aber es bringt Dich hier nicht weiter, wegen der dort genannten Einschränkungen.

DieDolly 28. Nov 2019 21:49

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Zitat:

Habe eben kurz was gefunden. In meiner For-Schleife habe ich mal mit eine String-Variabel rumprobiert. Also ct := ct + ', '; und außerhalb der Schleife mit "items.commatext := ct" die Anzahl gesetzt. Aber das ist auch nicht schneller, als wie gehabt "items.add('')" in der Schleife zu nutzen.
Kannst du hier einen Beispielcode posten mit der Schleife und allem?

MicMic 28. Nov 2019 21:55

AW: TStrings (ListBox.Items) ohne ".add" ?
 
@hoika, danke für die Info. Gleich gelesen... nur 32767 Items. Zu wenig :)

@DieDolly
Nix besonderes...
Code:
Items.BeginUpdate;
For I := 0 To Length(D1)+Length(D2)-1 Do
Begin
 // hier zwischen drin hab ich noch anderes Zeug. Datenverarbeitung. Hat aber nix mit der ListBox direkt zu tun.
 Items.Add('');
End;
Items.EndUpdate;

MicMic 28. Nov 2019 22:06

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Was zum Beispiel auch Zeit kostet, ist die Listbox zu leeren. Also mit Clear.
Muss man zwar nicht immer machen aber manchmal halt schon.

Aber trotzdem mal Danke an alle. Das mit ".add" ist auch nicht so schlimm. Dachte nur, evtl. spare ich eine Sekunde, wenn ich hunderttausende Einträge irgendwie direkt setzen kann, als es mit ".add" zu machen.

Gute Nachtruhe und schöne Source-Code Träume :)

DieDolly 28. Nov 2019 22:12

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Zitat:

Dachte nur, evtl. spare ich eine Sekunde, wenn ich hunderttausende Einträge irgendwie direkt setzen kann,
Denk mal über VirtualStringTree (RootNodeCount, kein AddChild!) nach, wo du die Items selber auch zeichnest. Dürfte noch immer schneller sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.
Seite 1 von 4  1 23     Letzte »    

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