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
factory pattern oder, zur Vermeidung von Interfaces das
visitor pattern der GoF weiter.