Hallöle...
1. Verabschiede dich von den 2 Instanzen.
2. Die File Liste sollte da liegen wo das Event ausgelöst wird.
Der Frame wird gefragt...der Frame anwortet über ein Event.
3. Das Event gibt nur einer raus. Das andere sind Prozeduren der Datamodule die die Informationen nacheinander bekommen. (Self und DMLSQLiteUnit)
4. Die Units müssen sich nicht alle gleichzeitig kennen. Die Main
Unit sollte die einzige sein die alle kennt. Die
Unit(TPathFinderFrame) gibt nur das Event raus fertsch... Wohin ist dem Frame wurscht. usw... Nimm mal die Units aus der uses implmentation in den interface Teil. Da siehst du die zirkulären Referenzen.
Die Fehler: (keine Garantie für Vollständigkeit)
Delphi-Quellcode:
private{ Private-Deklarationen }
FFileList: TStringlist;
//FPathlist: TStringlist; wird nun im Frame instanziert ... nur eine Instanz!
public{ Public-Deklarationen }
procedure FillPathList(Sender: TObject; const Ordner: String; const Pathlist: TStringList);
// Sender ist nicht nötig aber nicht falsch // besserer Name (Funktion) wegen der Unterscheidung
end;
procedure TDMLSQLite.DataModuleCreate(Sender: TObject);
begin
FFileList := TStringlist.Create;
//FPathlist := TStringlist.Create;
end;
procedure TDMLSQLite.DataModuleDestroy(Sender: TObject);
begin
FFileList.Free;
//FPathlist.Free;
end;
procedure TDMLSQLite.FillPathList(Sender: TObject; const Ordner: String; const Pathlist: TStringList); // Das F kann weg!
begin
// FFileList.AddStrings (FPathlist);
// SQLiteTestMain.LBxPathlist.Items.AddStrings(FPathlist); // wird im Eventhandler erledigt
end;
Delphi-Quellcode:
TPathListEvent = procedure(Sender:TObject; const Ordner: String; const Pathlist: TStringList) of Object; // das F kann weg
...
private // !!!!
FPathlist: TStringlist;
...
public
property PathList : TStringList read FPathlist write FPathlist;
property OnPathListEvent: TPathListEvent read FOnPathListEvent write FOnPathListEvent;
...
constructor TPathFinderFrame.Create(AOwner: TComponent);
...
FPathlist := TStringlist.Create; // unter den anderen gefunden :-)
...
end;
destructor TPathFinderFrame.Destroy;
begin
FPathlist.Free;
end;
Delphi-Quellcode:
private { Private-Deklarationen }
...
procedure DoPathListEvent(Sender: TObject;
const Ordner:
String;
const Pathlist: TStringList);
// der eigentliche Eventhandler
...
end;
...
procedure TSQLiteTestMain.DoPathListEvent(Sender: TObject;
const Ordner:
String;
const Pathlist: TStringList);
begin
Self.EdiFolder.Clear;
Self.EdiFolder.Text := FOrdner;
Self.LBxPathlist.Clear;
...
Self.LBxPathlist.Items.AddStrings(Pathlist);
// das ist die eigene Liste ???
Self.Pathlist.Assign(Pathlist);
// die eigene Liste
DMLSQLite.FillPathList(Self, Ordner, Pathlist);
// Name wegen der Übesicht was wo geändert
end;
...
procedure TSQLiteTestMain.FormCreate(Sender: TObject);
begin
PathFinderFrame1.OnPathListEvent := DoPathListEvent;
// Handler in der eigenen Unit.
end;