Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Auf Methoden einer Form zugreifen die über TFormClass er

  Alt 5. Apr 2005, 08:24
Hallo Sharky,

vielleicht ist meine Ausführung etwas zu knapp gewesen. Die Lösung über RTTI ist fehlerträchtig, weil nicht Typsicher. Die Lösung mit der Vererbungshierarchie zwingt Dich zur Einhaltung einer Linie, die nicht unbedingt gewollt ist, wenn Du über Fabriken Exemplare von Klassen erzeugst, die von einander unabhängig sein können- wie in Deinem Beispiel.
Der Ansatz über Typpürfungen ist deshalb unelegant, weil Du an jeder Stelle an der Du mit unterschiedlichen Klassen arbeitest über jede Klasse prüfen müsstest.

Deshalb mein Vorschlag, Interfaces, hier zB:
Delphi-Quellcode:
type
  IMyInterface = Interface
  ['{70EA899F-F97B-4F8E-9C9E-1C3EF3718EE7}']
    procedure SetLabelText(const AText: string);
  end;
zu verwenden und die Deklaration Deiner Formulare entsprechend zu erweitern
Delphi-Quellcode:
type
  TForm2 = class(TForm, IMyInterface)
  protected
    procedure SetLabelText(const AText: string);
der Code innerhalb des Buttons könnte dann so aussehen:
Delphi-Quellcode:
[..]
  newForm := newFormClass.Create(self);
  try
    //ohne Wissen der konkreten Klasse kann die Methode über
    //das Interface verwendet werden
    if newForm.GetInterface(IMyInterface, myRef) then
      myRef.SetLabelText('AText');

    newForm.ShowModal;
  finally
    FreeAndNil (newForm);
  end;
Vielleicht hilft Dir in diesem Zusammenhang auch das Bei Google suchenfactory pattern oder, zur Vermeidung von Interfaces das Bei Google suchenvisitor pattern der GoF weiter.
gruß, choose
  Mit Zitat antworten Zitat