Einzelnen Beitrag anzeigen

st2000

Registriert seit: 23. Apr 2003
Ort: Hamburg
52 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: 'TMyForm' nach TMyForm casten ? ("lebendig" we

  Alt 30. Sep 2003, 18:53
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
Stefan
Keine Softwarepatente ! Die Polen = wahre Freiheitskämpfer !!! Gerade noch rechtzeitig Mitglied geworden, um die Notbremse zu ziehen. Year !!!
  Mit Zitat antworten Zitat