Einzelnen Beitrag anzeigen

Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
156 Beiträge
 
Delphi 12 Athens
 
#17

AW: Hilfeersuchen - schnelle Anzeige Textdatei in TListBox

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