Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prozedur in einer Prozedur (https://www.delphipraxis.net/189871-prozedur-einer-prozedur.html)

Freyr77 2. Aug 2016 10:05

Delphi-Version: 10 Seattle

Prozedur in einer Prozedur
 
ich steh' gerade mal wieder auf dem Schlauch.

Es geht um das erste Code-Beispiel in diesem Link:

https://www.delphi-treff.de/tipps-tr...ateien-suchen/

Hier sind zwei Prozeduren "verkapselt". Irgendwie schluckt das mein Delphi nicht so, es erkennt die Parameter von "GetFilesInDirectory" nicht.

Luckie 2. Aug 2016 10:07

AW: Prozedur in einer Prozedur
 
Genaue Fehlermeldung?

DeddyH 2. Aug 2016 10:08

AW: Prozedur in einer Prozedur
 
Die Forensoftware hat wohl die "<" und ">" verschluckt, so wird es auch nicht funktionieren. Ersetz mal die beiden Zeilen
Zitat:

Delphi-Quellcode:
until FindNext(SR) 0;

durch
Delphi-Quellcode:
until FindNext(SR) <> 0;
Geht es dann?

Neutral General 2. Aug 2016 10:10

AW: Prozedur in einer Prozedur
 
Was sagt dein Delphi denn?
Der Quelltext von der Seite lässt sich so nicht kompilieren. Da fehlen z.T. Operatoren die noch ergänzt werden müssen.
Danach läuft es bei mir (Delphi 7)

Freyr77 2. Aug 2016 10:10

AW: Prozedur in einer Prozedur
 
Zitat:

Zitat von Luckie (Beitrag 1343961)
Genaue Fehlermeldung?

Aussehen tut es bei mir so (beide Prozeduren natürlich oben deklariert).

Delphi-Quellcode:
procedure TVersionNumberViewer.GetFilesInDirectory(Directory: string; const Mask: string;List: TStrings;WithSubDirs, ClearList: Boolean);
procedure TVersionNumberViewer.ScanDir(const Directory: string);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory + SR.Name)
    until FindNext(SR) = 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name = '.') and (SR.Name = '..') then
          ScanDir(Directory + SR.Name + '');
      until FindNext(SR) = 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
     List.Clear;
   if Directory = '' then Exit;
    if Directory[Length(Directory)] = '' then
      Directory := Directory + '';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Fehlermeldungen gibt es bei der zweiten Prozedur folgende:

';' erwartet, aber '.' gefunden
'=' erwartet, aber ')' gefunden

Außerdem erkennt er die Parameter der ersten Prozedur im Code nicht.

Er erkennt "List", "Mask" und "WithSubDirs" nicht.

Freyr77 2. Aug 2016 10:11

AW: Prozedur in einer Prozedur
 
Zitat:

Zitat von Neutral General (Beitrag 1343963)
Was sagt dein Delphi denn?
Der Quelltext von der Seite lässt sich so nicht kompilieren. Da fehlen z.T. Operatoren die noch ergänzt werden müssen.
Danach läuft es bei mir (Delphi 7)

Die Fehlermeldungen wegen der Operatoren hatte ich bereits berücksichtigt.:?

Neutral General 2. Aug 2016 10:12

AW: Prozedur in einer Prozedur
 
In der inneren Prozedur muss der Klassenname aus dem Namen:
Delphi-Quellcode:
procedure TVersionNumberViewer.GetFilesInDirectory(Directory: string; const Mask: string;List: TStrings;WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: string);

...

Freyr77 2. Aug 2016 10:13

AW: Prozedur in einer Prozedur
 
Zitat:

Zitat von Neutral General (Beitrag 1343966)
In die innere Prozedur gehört der Klassenname nicht:

Delphi-Quellcode:
procedure TVersionNumberViewer.GetFilesInDirectory(Directory: string; const Mask: string;List: TStrings;WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: string);

...

Dann bekomme ich die Fehlermeldung "Ungenügende Forward-oder External-Deklaration". Oder muss ich die zweite Prozedur gar nicht deklarieren?

Neutral General 2. Aug 2016 10:14

AW: Prozedur in einer Prozedur
 
Argh..... der komplette Code:
Delphi-Quellcode:
procedure TVersionNumberViewer.GetFilesInDirectory(Directory: string; const Mask: string;List: TStrings;WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory: string);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory + SR.Name)
    until FindNext(SR) = 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name = '.') and (SR.Name = '..') then
          ScanDir(Directory + SR.Name + '');
      until FindNext(SR) = 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
     List.Clear;
   if Directory = '' then Exit;
    if Directory[Length(Directory)] = '' then
      Directory := Directory + '';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;

Freyr77 2. Aug 2016 10:15

AW: Prozedur in einer Prozedur
 
Vielen Dank! Das war mal wieder einfacher als gedacht, sorry :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Seite 1 von 2  1 2      

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