Die Deklaration von
TFindeDateiRM
brauchst du schon um den Parameter zu deklarieren. Allerdings sind hier für die Übergabe keine lokalen Unterroutinen erlaubt, sondern nur globale Prozeduren oder statische Klassenmethoden. Meiner Meinung nach fehlt bei dieser Deklaration noch ein Kontext.
Wenn du die Deklaration von
TFindeDateiRM
nach deinen Bedürfnissen anpassen kannst, dann bietet sich folgende Lösung an:
TFindeDateienRM = procedure(const Verzname:string;const Data:_WIN32_FIND_DATAW;var Abbr:Boolean) of object;
Durch das
of object
wird zu der Methoden-Adresse noch die Objekt-Instanz übergeben (die Prozedurvariable wird dadurch zu einer Methodenvariable). So kannst du unterschiedliche Klassen deklarieren, die auf die jeweiligen Bedürfnisse zugeschnitten sind. Als Parameter für
FindeDateien
wird dann jeweils
MeineInstanz.FindeDateiRM
angegeben.
Delphi-Quellcode:
TEineKlasse = class
public
procedure FindeDateiRM(const Verzname:string;const Data:_WIN32_FIND_DATAW;var Abbr:Boolean);
end;
TAndereKlasse = class
public
procedure FindeDateiRM(const Verzname:string;const Data:_WIN32_FIND_DATAW;var Abbr:Boolean);
end;
...
EineInstanz := TEineKlasse.Create;
try
FindeDateien(VerzListe[i], '*', False, EineInstanz.FindeDateiRM, Abbrechen);
finally
EineInstanz.Free;
end;
...
AndereInstanz := TAndereKlasse.Create;
try
FindeDateien(VerzListe[i], '*', False, AndereInstanz.FindeDateiRM, Abbrechen);
finally
Anderenstanz.Free;
end;
TEineKlasse
und
TAndereKlasse
halten dann die nötigen Strukturen vor (z.B.
BldListe
), mit denen die jeweilige Methode
FindeDateiRM
arbeiten muss.
Sollte die bisherige Deklaration von
TFindeDateiRM
allerdings extern vorgegeben sein, gibt es zwar auch Lösungen, die sind aber alle irgendwie hässlich.