Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
Delphi XE7 Ultimate
|
AW: ListView im VirtualMode
2. Nov 2017, 10:51
Delphi-Quellcode:
var
Li: TListItem;
p: integer;
Strings: TStringList;
begin
Strings := TStringList.Create;
StringList := TStringList.Create;
Strings.Clear;
Stringlist.Clear ;
Strings.Text := MeinDatenString;
Strings.BeginUpdate;
StringList.BeginUpdate;
TThread.CreateAnonymousThread(procedure () begin
listview1.Items.BeginUpdate;
for i := 0 to Strings.Count -1 do begin
Li := Listview1.FindCaption(0,Split(Strings.Strings[i], '|', 1),False,True,False);
if Li = nil then begin
Li := Listview1.Items.Add;
Li.Caption := Split(Strings.Strings[i], '|', 1);
Li.SubItems.Add(Split(Strings.Strings[i], '|', 2));
Li.SubItems.Add(Split(Strings.Strings[i], '|', 3));
Li.SubItems.Add(Split(Strings.Strings[i], '|', 4));
Li.SubItems.Add(Split(Strings.Strings[i], '|', 5)));
Li.SubItems.Add(Split(Strings.Strings[i], '|', 6));
end else begin
Li.StateIndex := 0;
if Li.SubItems[0] <> Split(Strings.Strings[i], '|', 2) then Li.SubItems[0] := Split(Strings.Strings[i], '|', 2);
if Li.SubItems[2] <> Split(Strings.Strings[i], '|', 4) then Li.SubItems[2] := Split(Strings.Strings[i], '|', 4);
end;
StringList.Add(Li.Caption);
listview1.Items.EndUpdate;
end;
Strings.Free;
for i := Listview1.Items.Count -1 downto 0 do begin
if Listview1.Items[i].StateIndex = 2 then begin
Listview1.Items[i].Delete;
Continue;
end;
p := StringList.IndexOf(Listview1.Items[i].Caption);
if p = -1 then Listview1.Items[i].StateIndex := 2;
end;
StringList.Free;
FirstRun := False;
Strings.EndUpdate;
StringList.EndUpdate;
Listview1.Refresh;
end).Start;
end;
Im Sekunden Takt kommen Daten und die Listview wird aktualisiert.
Doch manchmal kommen 2x Daten an bis sich die Listview aktualisiert.
Pascal
|
|
Zitat
|