Hallo,
ich bringe durch FindAllFiles gesuchte Dateien in meine ListView.
In FindallFiles adde ich direkt in Stringlisten, damit die Anzeige kontinuierlich File für File kommt.
Für den schnelleren virtual-Mode muss ich jedoch ListView.beginupdate bzw endupdate einfügen, das ist mir innerhalb der Repeatschleife gelungen.
Klappt jetzt wunderbar schnell und kontinuierlich, wenn ich jedoch während des addens mit der Maus über das ListView fahre, hängt das Programm.
Es liegt wohl daran, das ich in der Schleife das ListView daran hindere sich neu zu zeichnen und beim Überfahren mit der Maus muss ein Event kommen, welche wahrscheinlich das ListView neuzeichnen lassen will, nur was genau kann es sein ???
Hier mal der Code:
Delphi-Quellcode:
procedure FindAllFiles(DirList:TStrings; FileList: TStrings; RootFolder: string; Mask: string; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
var Tick : Cardinal;
procedure LFindAllFiles(AParentFolder: String);
var LSearchRec: TSearchRec;
begin
if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
begin
repeat
ListMedia.BeginUpdate;
if GetTickCount <= Tick then
begin
Tick := GetTickCount + 200;
Application.ProcessMessages;
end;
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.Items.AddVirtual(DirLst);
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.Items.AddVirtual(FileLst);
end;
end;
ListMedia.EndUpdate;
until FindNext(LSearchRec) <> 0 ;
FindClose(LSearchRec);
end;
end;
begin
tick:=gettickcount;
Mask := AnsiLowerCase(Mask);
LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;
Gruß bluescreen25