![]() |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Hallo und danke an alle,
ich werde die verschiedenen Sachen testen und schauen, ob das für unsere Anwendung geht. Gruß C.R. |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
danke an alle, ich teste das und melde mich wieder...
Gruß C.R. |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Statt VirtualStringtree würde auch ein einfaches TListView gehen.
Mit den Einstellungen
Delphi-Quellcode:
und
DoubleBuffered = True
OwnerData = True ReadOnly = True RowSelect = True ViewStyle = vsReport OnData = lv1Data
Delphi-Quellcode:
geht es sehr schnell, da die Daten nicht in das Listview geladen werden müssen.
procedure TForm1.lv1Data(Sender: TObject; Item: TListItem);
begin if Assigned(Item) then begin Item.Caption := Succ(Item.Index).ToString; Item.SubItems.Add(FLines[Item.Index]); end; end; FLines muss eine TStringList sein, die per LoadFromFile die Daten enthält. Das Beispiel verwendet zwei Spalten, Zeilennummer und Text. Es geht auch mit einer.
Delphi-Quellcode:
procedure TForm1.lv1Data(Sender: TObject; Item: TListItem);
begin if Assigned(Item) then Item.Caption := FLines[Item.Index]; end; |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Uwe Raabe hat vor langer Zeit eine kurze Geschichte zum ultraschnellen Befüllen von ListBoxen geschrieben. Ist in Delphi geschrieben, hilft aber doch sicher auch bei C++? Uwe Raabe verpackt 250'000 Einträge in 20 Millisekunden. Die ganze Story findest du
![]() |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
In Delphi gibt es seit der letzten Version die TControlList, eine sehr schnelle und einfach zu verwendende Listenkomponente.
Vielleicht die mal ansehen. |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Danke für alle Hilfen, der Tipp mit der Virtuellen StringList klappt gut und wir haben das eingebaut.
Vielen Dank dafür.... Gruß vom Bodensee |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Ich habe mir mal das von Michael II genannte Beispiel von Uwe Raabe heruntergeladen und ausprobiert. Seltsamerweise lassen sich mit dem Rollbalken nicht alle 250000 Einträge anzeigen. Beim Erreichen von 65535 fängt die Anzeige wieder bei 1 an, und wenn ich dann den Rollbalken 'loslasse', springt er wieder zurück auf Anfang, bzw. die Position der letzten Anzeige (1..65535)
Wenn ich die Einträge mit den Scrolltasten Up, Down, und 'Bild auf' und 'Bild ab' durchgehe, werden alle 250000 angezeigt.
Delphi-Quellcode:
Ich habe keine Eigenschaft von TListbox gefunden, mit der sich dieses Vehalten beeinflussen läßt. Es würde mich doch mal interessieren, woran das liegen könnte.
unit Unit474;
interface uses System.SysUtils, System.Classes, Vcl.Forms, Vcl.StdCtrls, Vcl.Controls; type TForm474 = class(TForm) Button1: TButton; ListBox1: TListBox; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ListBox1Data(Control: TWinControl; Index: Integer; var Data: string); function ListBox1DataFind(Control: TWinControl; FindString: string): Integer; private FListBox1Items: TStringList; public destructor Destroy; override; end; var Form474: TForm474; implementation uses System.Diagnostics; {$R *.dfm} destructor TForm474.Destroy; begin FListBox1Items.Free; inherited Destroy; end; procedure TForm474.FormCreate(Sender: TObject); begin FListBox1Items := TStringList.Create; end; procedure TForm474.Button1Click(Sender: TObject); var I: Integer; sw: TStopWatch; begin sw := TStopwatch.StartNew; FListBox1Items.Clear; for I := 1 to 250000 do FListBox1Items.Add(I.ToString); ListBox1.Style := lbVirtual; ListBox1.Count := FListBox1Items.Count; Label1.Caption := sw.ElapsedMilliseconds.ToString; end; procedure TForm474.ListBox1Data(Control: TWinControl; Index: Integer; var Data: string); begin Data := FListBox1Items[Index]; end; function TForm474.ListBox1DataFind(Control: TWinControl; FindString: string): Integer; begin Result := FListBox1Items.IndexOf(FindString); end; end. Gruß LP |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Hallo Maekkelrajter
das ist mindestens in 10.4.2 (ich glaub schon viel länger) generell ein "Problem"* bei Listboxen mit vielen Einträgen (und hängt nicht mit dem Lösungsansatz von Uwe Raabe zusammen). [* in "", weil man wohl eher selten derart viele Elemente in eine Listbox quetscht. Problem, weil: Wenn's angeboten wird sollte es funktionieren.] Der Scrollbalken verhält sich nicht wie erwartet; springt nach dem nach unten Scrollen weit nach oben; dadurch wird dann auch nicht der Teil der Liste angezeigt, den man eigentlich hätte sehen wollen. (Mit Delphi 10.4.2, VCL Win32 und Win64 unter Microsoft Windows [Version 10.0.19043.1055] und auch mit älteren 10.0.19043 getestet.) Gruss Michael |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Gibt's dazu schon einen QP Eintrag?
Falls nicht, kann jemand einen erstellen? Ist halt auch die Frage woher der Scrollbar kommt. Wenn direkt aus Win32, dann könnte der Bug auch dort sein. |
AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Zitat:
Nicht QP..., eher im Feedback Hub von microsoft als Feature Request für Windows 12 posten. Die MAXWORD Grenze beim Scrollen via Rollbalken ist eine Schranke von Windows; es läuft genau gleich "komisch", wenn C++ von m$ verwendet wird. (ListBox1.TopIndex := 70000 hingegen funktioniert problemlos.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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