AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Konstantenausdruck erwartet in Funktionsdekleration
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantenausdruck erwartet in Funktionsdekleration

Offene Frage von "Darko"
Ein Thema von Darko · begonnen am 21. Mai 2008 · letzter Beitrag vom 21. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Darko

Registriert seit: 12. Mai 2008
39 Beiträge
 
Delphi 7 Enterprise
 
#1

Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:13
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:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True; const MemoName: TMemo = Hauptform.Memo_Monitorfiles);
(...)
Fehlermeldung:
Zitat:
[Fehler] Unit2.pas(906): Konstantenausdruck erwartet
Ralf-Michael
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#2

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:16
so what?
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Darko

Registriert seit: 12. Mai 2008
39 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:17
Bin ich konfusiert.
Ralf-Michael
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:17
MemoName weist du eine Variable zu, die akzeptiert aber nur Konstanten.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:17
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:20
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
Heiko
  Mit Zitat antworten Zitat
Darko

Registriert seit: 12. Mai 2008
39 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:39
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. :/

TMemo(FindComponent(MemoName)).Lines.Add(RootFolder + SR.Name);
Zitat:
[Fehler] Unit2.pas(952): Undefinierter Bezeichner: 'FindComponent'
Ralf-Michael
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:42
Zitat von Darko:
Ich verwende bei mir im Programm die Funktion 'FindAllFiles'. Nun habe ich diese etwas abgeändert, weil ich bei verschiedenen Sachen verschiedene Memos brauche.
Das war keine gute Idee!
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:
// 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);
Und wenn dir das zu viel Schreibarbeit ist, dann gibt es immer noch die Möglichkeit die orginale Prozedure
über eine eigene Procedure zu schleusen:
Delphi-Quellcode:
procedure THauptform.FindAllFiles2(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
begin
  // einfache Weiterleitung
  FindAllFiles(RootFolder, Mask, Recurse, Memo_Monitorfiles.Lines);
end;
Merke: universelle einsetzbare Funktionen (z.B. aus Code-Library) nicht verändern, sondern höchstens ein Hülle drum bauen.
Andreas
  Mit Zitat antworten Zitat
Darko

Registriert seit: 12. Mai 2008
39 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 12:54
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;
Ralf-Michael
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Konstantenausdruck erwartet in Funktionsdekleration

  Alt 21. Mai 2008, 13:05
Zitat von Darko:
Hier mal die Funktion:
Delphi-Quellcode:
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var
  SR: TSearchRec;
begin
....
        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;
....
Aha, ich seh' schon, die Prozedure ist doch nicht so toll universell einsetzbar, wie ich gedacht habe.
Hier die Korrekturen:

Delphi-Quellcode:
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;
....
Mit dem TStrings-Objekt als zusätzlicher Parameter kannst du die Dateien in jedem Memo, Listbox oder Combobox laden:
Delphi-Quellcode:
FindAllFiles('D:\Test', Memo2.lines);
// oder so
FindAllFiles('D:\delphi', ComboboxPascal.Items, '*.pas');
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz