Einzelnen Beitrag anzeigen

Benutzerbild von Zodi
Zodi

Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
 
Delphi XE7 Ultimate
 
#3

AW: ListView im VirtualMode

  Alt 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
  Mit Zitat antworten Zitat