Hallo
DP'ler
Ich nutze diesen Code um beim Drag&Drop die Dateien in eine Listbox zu übernehmen. Das Ganze will ich auch mit einem ordnermachen, d.h. der ordner wird gescannt und die Dateien so:llen eingefügt werden.
Delphi-Quellcode:
procedure FindAllFiles(var FileList: tstrings;RootFolder: string; Mask: string =
BassDllPlayerFileFilter; Recurse: Boolean = True);
var
SR: TSearchRec;
begin
RootFolder := IncludeTrailingPathDelimiter(RootFolder);
if Recurse then
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory = faDirectory then
// --> ein Verzeichnis wurde gefunden
// der Verzeichnisname steht in SR.Name
// der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
// RootFolder + SR.Name
if (SR.Name <> '.') and (SR.Name <> '..') then
FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory <> faDirectory then
begin
// --> eine Datei wurde gefunden
// der Dateiname steht in SR.Name
// der vollständige Dateiname (inkl. Pfadangabe) ist
// RootFolder + SR.Name
FileList.Add(RootFolder + SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
procedure TfrmMain.WMDROPFILES(var Msg: TMessage);
var
i, Counts, Size: Integer;
PCharFileName: Pchar;
Ordner: string;
begin
inherited;
...
If FileGetAttr(String(PCharFileName)) = faDirectory then
begin
Ordner := String(PcharFileName);
FindAllFiles(frmMain.lsbPlaylist.Items,Ordner,BassDllPlayerFileFilter,TRUE);
end
else lsbPlaylist.Items.Add(String(PCharFileName));
StrDispose(PCharFileName);
end;
...
end;
Beim FindAllFiles sagt mir der Compiler aber:
Konstantenobjekt kann nicht als Var-Parameter übergeben werden
Wie kann ich das Problem lösen? Und wieso ist Ordner eine Konstante?