![]() |
Konstantenobjekt kann nicht als VarParameter übergeben werde
Hallo DP'ler :hi:
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:
Beim FindAllFiles sagt mir der Compiler aber:
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; Konstantenobjekt kann nicht als Var-Parameter übergeben werden Wie kann ich das Problem lösen? Und wieso ist Ordner eine Konstante? |
Re: Konstantenobjekt kann nicht als VarParameter übergeben w
Das Problem liegt bei der Stringliste - du kannst Eigenschaften (hier Items) nicht als var-Parameter übergeben, da sie ja möglicherweise über einen Getter gelesen werden und Funktionsergebnisse nicht geändert werden können.
Du brauchst aber auch gar keinen var-Parameter, da TStrings eine Klasse ist und Klassen immer per Referenz übergeben werden. Du kannst also ohne Probleme aus dem var ein const machen. |
Re: Konstantenobjekt kann nicht als VarParameter übergeben w
Moin Zusammen,
dazu noch eine kleine Anmerkung: Das nicht als const-Parameter zu übergeben halte ich für sträflichen Leichtsinn, denn man will ja, i.d.R., mit der übergebenen Instanz etwas machen, und nicht den Zugriff auf diese zerstören, was bei einem var-Parameter leicht passieren kann (zumindest wird man nicht gewarnt, wenn man es tut) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz