Thema: Delphi Gleiche Variablen-Namen

Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.303 Beiträge
 
Delphi 12 Athens
 
#56

AW: Gleiche Variablen-Namen

  Alt 9. Mai 2017, 18:29
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;

Geändert von haentschman ( 9. Mai 2017 um 18:45 Uhr)
  Mit Zitat antworten Zitat