Hallo Phoenix,
Vielen Dank für das schnelle Feedback.
Verstehe ich es denn richtig :
Delphi-Quellcode:
Initialization
FormFactory.RegisterForm('Normales Fenster', TForm);
hätte dann die Deklaration
RegisterForm(FormName: String, FormTyp: TForm);
und ich lege in der FormFactory-Klasse dann das besagte Array m_FormArray[] an, welches ich als array m_FormArray[]
of TForm deklariere.
Ist dann zwar auch eine Art Index von MyForm-Typen, die ich aber dann zumindest per Anmeldung bequem eintragen lassen kann.... Klingt gut. Jedenfalls eleganter als ein Endlos-Case.
Ist doch richtig : Wenn ich bei 'Normales Fenster' -> TMyForm4711 mit
result := m_FormArray[m_NameArray.IndexOf('Normales Fenster')].Create(self);
eine Instanz Result -> MyForm4711 erzeuge und diese als TForm an eine die FormFactory aufrufende Procedure übergebe, kann ich doch in der weiteren Verwendung der Instanz mit TMyForm4711 bzw. den darauf zeigenden Pointer stets zurückcasten ?
Also :
TMyForm4711(ErzeugteForm=TForm).MethodeAusTMyForm4711
führt dann eine Methode aus, die es NUR in TMyForm4711 und nicht in TForm gibt ???
Im Grunde würde es dann ja reichen, nur den richtigen Pointer für 'Normales Fenster' zu ermitteln, der seinerzeit beim RegisterForm erstellt wurde, und diesen dann in der die FormFactory aufrufenden Procedure zu benutzen, um erst dort das MyForm4711 zu instanzieren. Dann hätte man ausserhalb der FormFactory beides noch verfügbar : Das Form und den Pointer auf TMyForm4711.
Aber geht das mit dem Casten so ? TMyForm4711 instanzieren -> als TForm übergeben an aufrufende Procedure -> dort mit TMyForm4711(TForm) casten -> alle individuellen Methoden und Attribute der TMyForm4711 - Klasse weiterbenutzen ?
Gruß,
ST2000