AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Hilfeersuchen - schnelle Anzeige Textdatei in TListBox
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

Ein Thema von CaseyRyback · begonnen am 31. Mai 2021 · letzter Beitrag vom 18. Jun 2021
Antwort Antwort
Seite 2 von 3     12 3      
CaseyRyback

Registriert seit: 5. Mär 2014
6 Beiträge
 
#11

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 1. Jun 2021, 10:14
Hallo und danke an alle,
ich werde die verschiedenen Sachen testen und schauen, ob das für unsere Anwendung geht.
Gruß
C.R.
  Mit Zitat antworten Zitat
CaseyRyback

Registriert seit: 5. Mär 2014
6 Beiträge
 
#12

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 1. Jun 2021, 12:00
danke an alle, ich teste das und melde mich wieder...
Gruß
C.R.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 1. Jun 2021, 12:11
Statt VirtualStringtree würde auch ein einfaches TListView gehen.
Mit den Einstellungen
Delphi-Quellcode:
    DoubleBuffered = True
    OwnerData = True
    ReadOnly = True
    RowSelect = True
    ViewStyle = vsReport
    OnData = lv1Data
und
Delphi-Quellcode:
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;
geht es sehr schnell, da die Daten nicht in das Listview geladen werden müssen.
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;
Bernd
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
721 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 7. Jun 2021, 21:41
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 hier.
Michael Gasser

Geändert von Michael II ( 8. Jun 2021 um 10:06 Uhr)
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 8. Jun 2021, 06:35
In Delphi gibt es seit der letzten Version die TControlList, eine sehr schnelle und einfach zu verwendende Listenkomponente.

Vielleicht die mal ansehen.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
CaseyRyback

Registriert seit: 5. Mär 2014
6 Beiträge
 
#16

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 15. Jun 2021, 10:08
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
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
118 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 16. Jun 2021, 09:42
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:
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.
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.

Gruß LP
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
721 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 16. Jun 2021, 14:52
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
Michael Gasser

Geändert von Michael II (17. Jun 2021 um 06:36 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.825 Beiträge
 
Delphi 12 Athens
 
#19

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 16. Jun 2021, 22:17
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.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
721 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

  Alt 18. Jun 2021, 12:52
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.

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.)
Michael Gasser

Geändert von Michael II (18. Jun 2021 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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