man könnte ja och in AddFilesToList die Übergabe des Folder-Parameters ändern
Code:
procedure TForm1.AddFilesToList(Filter, Folder: string; Recurse: Boolean[color=#ff0000];
RelFolder = ''[/color]);
var
sr: TSearchRec;
sDirList: TStringList;
i: Integer;
begin
if FindFirst (Folder + [color=#ff0000]RelFolder +[/color] Filter, faAnyFile, sr) = 0 then
repeat
ListBox1.Items.Add ([color=#ff0000]RelFolder +[/color] sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
if Recurse then
begin
sDirList := TStringList.Create;
try
GetSubDirs (Folder [color=#ff0000]+ RelFolder[/color], sDirList);
for i := 0 to sDirList.Count - 1 do
if (sDirList[i] <> '.') and (sDirList[i] <> '..') then
begin
Update;
ListBox1.Refresh;
AddFilesToList (Filter, [color=#ff0000]Folder[/color], Recurse[color=#ff0000],
IncludeTrailingPathDelimiter (RelFolder + sDirList[i])[/color]);
end;
finally
sDirList.Free;
end;
end;
end;
aufgerufen wird es dann ganz genauso wie die originale Funktion.
RelFolder bleibt also beim Aufruf frei und wird nur intern verwendet.
und in Kurz zusammen mit anderen kleinen Änderungen (siehe Kommentare) dann so:
Delphi-Quellcode:
procedure TForm1.AddFilesToList(const Filter, Folder: String; Recurse: Boolean;
const RelFolder: String = '');
var
sr: TSearchRec;
begin
if FindFirst(Folder + RelFolder + Filter, faAnyFile, sr) = 0 then
repeat
if (sr.Name = '.') or (sr.Name = '..') // du wills doch eh nur Dateinamen (AddFiles?)
or (sr.Attr and faDirectory <> 0) then continue;
ListBox1.Items.Add(RelFolder + sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
if Recurse and FindFirst(Folder + RelFolder + '*.*', faAnyFile, sr) = 0 then
repeat
if (sr.Name = '.') or (sr.Name = '..') // nur Verzeichnisse
or (sr.Attr and faDirectory = 0) then continue;
Update;
ListBox1.Refresh;
AddFilesToList(Filter, Folder, true, RelFolder + sr.Name + '/');
until FindNext(sr) <> 0;
FindClose(sr);
end;