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