Hallo, ich habe die Komponente EasyListView im Einsatz, welche im virtual Mode läuft.(ähnlich wie bei normalem ListView)
Mein Problem ist, das ich zum Durchsuchen von Ordnern FindAllFiles nutze, und dadurch nicht direkt
gelistet, sondern erst die Procedure FindAllFiles zum Abschluss kommen muss, denn danach wird erst geaddet.
Application.processMessages habe ich in die Repeat-Schleife eingebaut, somit bleibt mein Programm weiter nutzbar.
Wie kann ich das erreichen, das das Listview von Anfang an listet?
Delphi-Quellcode:
procedure ShowFiles(ShowList: TEasyListView; Rekursive: Boolean; ShowDir: Boolean);
begin
ItemIndex := 0;
if ShowList.Name = 'media' then
begin
if ShowList.Selection.FocusedItem <> nil then Path := ListMedia.Selection.FocusedItem.Captions[1];
if FileExists(Path) then //Ist der Pfad eine Datei ?
begin
Path := GetPreviousDirectory(Path);
Path := GetPreviousDirectory(Path);
end;
if ShowDir then
begin
ShowList.Items.Clear;
FileLst.Clear;
DirLst.Clear;
FindAllFiles(DirLst, FileLst, Path, FileMask, Rekursive, True, True); //Alle Ordner und Dateien in Liste schreiben
form1.AddItems(DirLst.Count + FileLst.count); //Count,dann addVirtual
end
else
begin
ShowList.Items.Clear;
FileLst.Clear;
DirLst.Clear;
FindAllFiles(DirLst, FileLst, Path, FileMask, Rekursive, False, True); //Alle Dateien in Liste schreiben
form1.AddItems(FileLst.count); //Count,dann AddVirtual
end;
end;
end;
Delphi-Quellcode:
procedure TForm1.AddItems(Count: Integer);
var
i: Integer; //Items Virtual geaddet
begin
ListMedia.BeginUpdate;
ListMedia.Items.ReIndexDisable := True;
try
for i := 0 to Count - 1 do
ListMedia.Items.AddVirtual;
finally
ListMedia.Items.ReIndexDisable := False;
ListMedia.EndUpdate;
end;
end;
Gruß, bluescreen25