Aber der Grund für meine Konstruktion mit der Unterprozedur war ja der, dass ich bei dieser Implementation innerhalb von FindeDateiRM
auf Strukturen der Klassenmethode zugreifen will, die nicht global erreichbar sind.
Von dieser Forderung wirst du dich verabschieden müssen. Es gibt keinen praktikablen Weg, wie du über ein Callback an eine lokale Variable einer Methode kommen kannst.
Was aber geht wäre sowas:
Delphi-Quellcode:
type
TBldListeWrapper = class
private
FBldListe: TBldListe;
public
constructor Create(ABldListe: TBldListe);
procedure FindeDateiRM(const BasisVerz:string;const Data:TWin32FindDataW;var Abbrechen:Boolean);
end;
constructor TBldListeQrapper.Create(ABldListe: TBldListe);
begin
inherited Create;
FBldListe := ABldListe;
end;
procedure TBldListeWrapper.FindeDateiRM(const BasisVerz:string;const Data:TWin32FindDataW;var Abbrechen:Boolean);
var Bld:TBld;
begin
Bld := TBld.Create;
Bld.Name := string(Data.cFileName);
FBldliste.add(Bld);
end;
procedure TForm1.ErstelleListe;
var Bldliste:TBldliste;
begin
procedure Intialisiere;
begin
Bldliste := TBldliste.Create(True);
end;
procedure ListeDateienAuf;
var
wrapper: TBldListeWrapper;
begin
wrapper := TBldListeWrapper.Create(BldListe);
try
FindeDateien(VerzListe[i],'*',False,wrapper.FindeDateiRM,Abbrechen);
finally
wrapper.Free;
end;
end;
end;
Oder man erweitert
TBldListe
:
Delphi-Quellcode:
type
TExtendedBldListe = class(TBldListe);
public
procedure FindeDateiRM(const BasisVerz:string;const Data:TWin32FindDataW;var Abbrechen:Boolean);
end;
procedure TExtendedBldListe.FindeDateiRM(const BasisVerz:string;const Data:TWin32FindDataW;var Abbrechen:Boolean);
var Bld:TBld;
begin
Bld := TBld.Create;
Bld.Name := string(Data.cFileName);
add(Bld);
end;
procedure TForm1.ErstelleListe;
var Bldliste:TExtendedBldliste;
begin
procedure Intialisiere;
begin
Bldliste := TExtendedBldliste.Create(True);
end;
procedure ListeDateienAuf;
begin
FindeDateien(VerzListe[i],'*',False,BldListe.FindeDateiRM,Abbrechen);
end;
end;