![]() |
Konstantenausdruck erwartet in Funktionsdekleration
Hallo!
Ich verwende bei mir im Programm die Funktion 'FindAllFiles'. Nun habe ich diese etwas abgeändert, weil ich bei verschiedenen Sachen verschiedene Memos brauche. Dazu habe ich die Dekleration folgendermaßen geändert:
Delphi-Quellcode:
Fehlermeldung:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True; const MemoName: TMemo = Hauptform.Memo_Monitorfiles);
(...) Zitat:
|
Re: Konstantenausdruck erwartet in Funktionsdekleration
so what?
|
Re: Konstantenausdruck erwartet in Funktionsdekleration
Bin ich konfusiert. :P
|
Re: Konstantenausdruck erwartet in Funktionsdekleration
MemoName weist du eine Variable zu, die akzeptiert aber nur Konstanten.
|
Re: Konstantenausdruck erwartet in Funktionsdekleration
als Standardwerte kannst du nur Konstanten verwenden. Du verwendest aber eine Variable (Instanz einer Klasse). Das geht nicht weil zum Zeitpunkt des compilierens die Werte schon benötigt werden und zu diesem Zeitpunkt ist deine Instanz ja noch nicht erzeugt weil noch nix ausgeführt wird.
@tomsel: Was willst du uns damit sagen? :gruebel: |
Re: Konstantenausdruck erwartet in Funktionsdekleration
Hallo,
const MemoName: TMemo = Hauptform.Memo_Monitorfiles 1. Der Compiler ermittelt zur Compile-Zeit den Namen. Das kann er aber bei dir nicht, weil eine Variable / property ist. 2. MemoName -> TMemo ? Wieso ist ein Memo-Name ein TMemo ? Kurz: So wie du das hier machen willst, geht es nicht. Heiko |
Re: Konstantenausdruck erwartet in Funktionsdekleration
OK, hab das Ganze jetzt als String deklariert und funktioniert auch soweit.
Nun wollte ich das jeweilige Memo über FindComponent suchen lassen, allerdings kennt Delphi FindComponent nun nicht. :/
Delphi-Quellcode:
TMemo(FindComponent(MemoName)).Lines.Add(RootFolder + SR.Name);
Zitat:
|
Re: Konstantenausdruck erwartet in Funktionsdekleration
Zitat:
Du hast damit aus einer universell verwendbaren Procedure eine speziell angepasste Procedure gemacht, die aber keinerlei Vorteile hat. Es ist doch kein Problem, die Procedure so aufzurufen:
Delphi-Quellcode:
Und wenn dir das zu viel Schreibarbeit ist, dann gibt es immer noch die Möglichkeit die orginale Prozedure
// mir feht jetzt die Deklaration der Orginal-Funktion und kann deshalb nur raten,
// dass noch ein Argument vom Typ TStrings da sein muss FindAllFiles('C:\', '*.*', True, Memo_Monitorfiles.Lines); über eine eigene Procedure zu schleusen:
Delphi-Quellcode:
Merke: universelle einsetzbare Funktionen (z.B. aus Code-Library) nicht verändern, sondern höchstens ein Hülle drum bauen.
procedure THauptform.FindAllFiles2(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
begin // einfache Weiterleitung FindAllFiles(RootFolder, Mask, Recurse, Memo_Monitorfiles.Lines); end; |
Re: Konstantenausdruck erwartet in Funktionsdekleration
Ne, leider nicht.
Hier mal die Funktion:
Delphi-Quellcode:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin // Implementation bis einschließlich Delphi 4 if RootFolder = '' then Exit; if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; // Implementation ab Delphi 5 RootFolder := IncludeTrailingPathDelimiter(RootFolder); // * * * * * // nur bis einschließlich Delphi 4 benötigt if Mask = '' then Mask := '*.*'; // * * * * * 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(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 // folgende Zeile schreibt den vollständigen Namen in eine Memo Feld des // Formulars Form1 Hauptform.Memo_Monitorfiles.Lines.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; |
Re: Konstantenausdruck erwartet in Funktionsdekleration
Zitat:
Hier die Korrekturen:
Delphi-Quellcode:
Mit dem TStrings-Objekt als zusätzlicher Parameter kannst du die Dateien in jedem Memo, Listbox oder Combobox laden:
procedure FindAllFiles(RootFolder: string; list:TStrings; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin list.Clear; // Ergebnisliste löschen .... 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 // folgende Zeile schreibt den vollständigen Namen in ein TStrings-Objekt list.Add(RootFolder + SR.Name); end; ....
Delphi-Quellcode:
FindAllFiles('D:\Test', Memo2.lines);
// oder so FindAllFiles('D:\delphi', ComboboxPascal.Items, '*.pas'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 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-2025 by Thomas Breitkreuz