Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Viele Items in eine Listbox adden - simultan zur Berechnung? (https://www.delphipraxis.net/130188-viele-items-eine-listbox-adden-simultan-zur-berechnung.html)

g00gle-gott 4. Mär 2009 21:46


Viele Items in eine Listbox adden - simultan zur Berechnung?
 
Hallo,

ich habe folgendes Problem:
ich habe ein kleines Programm zu "türme von Hanoi" geschrieben und das Ergebnis soll in einer Listbox ausgegeben werden... Das klappt auch wunderbar, nur, dass es bei immer größer werdender Anzahl von Einträgen in die Listbox irgendwann seeeeehhhhr lange dauert, bis die Items in die Listbox übertragen werden. (ich kann anhand einer Progressbar den status der Berechnung sehen und sehe, dass die Berechnung bereits beendet ist, aber das Programm die Items erst nach der Berechnung in die Listbox lädt!) und das wiederum dauert wirklich sehr lange.

ich habe bereits folgendes versucht:

Delphi-Quellcode:
form1.ListBox1.Items.BeginUpdate;
sowie
Delphi-Quellcode:
form1.ListBox1.Items.Endupdate;
was, laut ausgiebiger g00gle suche, den Vorgang schneller machen sollte...

Zitat:

Adding a (larger) group of entries to a ListBox is very slow,
because after every "items.add" call the ListBox is repainted.

There are two ways to overcome this:

use the Windows message WM_SETREDRAW (see Win32.hlp for details).
The VCL provides two methods for this: BeginUpdate and EndUpdate.
(bringt allerdings nicht viel an geschwindigkeit !)

nun wollte ich fragen, ob es andere schnellere Arten gibt, die Items anzuzeigen und am besten diese sogar simultan zur Berechnung zu adden ...

Anmerkung: ich habe das Programm für meinen PDA mit lazarus kompiliert und auf diesem werden die Ergebnisse simultan zur Berechnung geaddet!

könnte es evtl nicht auch in Delphi die Möglichkeit geben, die Listbox so einzustellen, dass die Items simultan geaddet werden??

vielen Dank schomal im Vorraus

MFG Ändy

mkinzler 4. Mär 2009 21:48

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
Du könntest die Einträge zuerst einer Stringliste hinzufügen und diese dann an die Items anfügen

Bernhard Geyer 4. Mär 2009 21:49

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
bei einer Listview könnt man den virtuellen Modus nehmen und nur die Anzahl der Einträge setzen. Bei einer Listbox weiß ich nicht ob sowas geht. Alternative Listbox-Implementieren wie z.B. das ElPack haben damit weniger Probleme da diese nicht den hier vorhandenen Bodleneck der Übertragens ans Win32-Control haben.

g00gle-gott 4. Mär 2009 21:54

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
@mkinzler

ok, und wie würde das dann aussehen? also meine hauptprozedur sieht momentan wie folgt aus:

Delphi-Quellcode:
procedure turm (n : integer; A,B,C : String);
begin
  form1.ListBox1.Items.BeginUpdate;
  if n > 1 then
    begin
      turm (n-1, A, C ,B);
      Form1.Listbox1.items.add(A + ' nach ' + C);
      form1.progressbar1.position:=form1.listbox1.items.count;
      turm (n-1, B , A, C);
    end
      else begin
        Form1.ListBox1.items.add(A + ' nach ' + C);
        form1.progressbar1.position:=form1.listbox1.items.count;
      end;
  form1.ListBox1.Items.endUpdate;
end;
(die Progressbar mal nicht beachten) das is die standardprozedur (rekursiv) um Türme von Hanoi zu lösen...

mfg Ändy

Luckie 4. Mär 2009 22:11

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
Probier die Tipps mal aus: http://www.michael-puff.de/Artikel/LB_INITSTORAGE.shtml

g00gle-gott 5. Mär 2009 18:39

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
naja vielen Dank mal... aber bringt nicht wirklich was...

welche alternativen gitb es denn zu einer Listbox????

ich brauch halt eine Möglichkeit viele ( >1.000.000 ) Lösungsschritte aufzulisten ...

MFG Ändy

mkinzler 5. Mär 2009 18:40

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
Wie gesagt nicht direkt in die Listbox einfügen

g00gle-gott 5. Mär 2009 18:50

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
@ mkinzler

aber wie kann ich das anstellen?

MFG Ändy

mkinzler 5. Mär 2009 18:53

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
Die Einträge einer lokalen Stringliste hinzufügen und diese dann an die ListBox-Eintrage anhängen

g00gle-gott 5. Mär 2009 21:07

Re: Viele Items in eine Listbox adden - simultan zur Berechn
 
hallo,

ok, hab jetzt eine Stringlist erstellt und die Elemente in dieser Gespeichert.

allerdings, wenn ich diese in eine Listbox laden will, dann kommt

Zitat:

[Fehler] Unit1.pas(88): Inkompatible Typen: 'String' und 'TStringList'
wie lautet der korrekte Befehl um die Elemente der Tstringlist als strings in die Listbox zu speichern??

vielen Dank bisher für die Hilfe :thumb:

MFG Ändy


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr.
Seite 1 von 2  1 2      

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