Ich habe es hinbekommen, nur an einem verzweifel ich jetzt.
Während die Daten in DirLst und FileLst übertragen werden, adde ich ebenso virtual.
Nur hier wird ja bei jedem gefundenem Eintrag das ListView aktualisiert, dann ist das virtual wieder hinfällig und es dauert wieder lange, bis der Such und Zeichenvorgang abgeschlossen ist.
Mit BeginUpdate und EndUpdate kann man das Aktualisieren des ListView verhindern, bringt aber natürlich nichts bei meinem Code folgend.
Um einen Mittelweg zwischen dem Speed vom Virtual und der kontinuierlichen Aktualisierung des ListViews zu erhalten, müsste man das BeginUpdate inkl. AddVirtual nur in bestimmten Abständen Aufrufen können, so das erstmal was sichtbares im Listview kommt und dennoch weiter im Hintergrund aktualisiert wird.
Kann hier jemand aushelfen ?
Ausschnitt vom Code:
Delphi-Quellcode:
if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
begin
if LSearchRec.Attr and faDirectory = faDirectory then
begin
if AddFolderNames and
(IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
begin
DirList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
--> ListMedia.BeginUpdate;
--> ListMedia.Items.AddVirtual(DirLst);
--> ListMedia.EndUpdate;
end;
if Recurse then
LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
end
else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
begin
FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
--> ListMedia.BeginUpdate;
--> ListMedia.Items.AddVirtual(FileLst);
--> ListMedia.EndUpdate;
end;
end;
Gruß, bluescreen25