Există o modalitate de a crea o instanță de formă dintr-un șir de nume. De exemplu, dacă există un șir TMyForm. va fi creată o nouă formă de tip TMyForm.
Să presupunem că aveți câteva formulare înrudite în aplicația dvs. (probabil ca oricine o face). Desigur, multe dintre aceste forme sunt create dinamic în timpul rulării (eliminate din lista "Formulare generate automat" în fereastra proprietăților proiectului).
Să presupunem că aveți un formular numit MyForm al clasei TMyForm pe care doriți să o creați. Pentru a crea o instanță a formularului MyForm în timpul executării, ați putea folosi următorul cod (pentru ao arăta modal și eliberați-l când se închide).
Sau puteți face aplicația proprietarul formularului MyForm și descrieți comanda astfel:
Acum, dacă nu "știți" exact tipul clasei de obiecte de tip? Ce se întâmplă dacă, în plus, variabila șir poartă numele clasei de formă, cum ar fi TMyForm. Nu veți putea utiliza mostrele de cod prezentate mai sus. Application.CreateForm se așteaptă la o variabilă de tip TFormClass. nu un șir.
Cel mai probabil nu veți putea folosi TMyForm.Create (.)!
Noul exemplu de formă din șir
Rețineți că procedura Application.CreateForm () se așteaptă la o variabilă de tipul TFormClass cu primul său parametru. Dacă putem transmite o variabilă de tip TFormClass (dintr-un șir), putem crea un formular după numele său!
Funcția FindClass () a Delphi primește tipul de clasă din șir. Toate clasele înregistrate participă la căutare. Pentru a înregistra o clasă, se poate porni procedura RegisterClass (). Când funcția FindClass returnează o valoare a TPersistentClass. Îi dăm lui TFormClass și se poate crea un nou obiect TForm!
Creați un nou proiect Delphi și denumiți principalul formular MainForm (TMainForm). Adăugați trei forme noi la proiect și denumiți-le: FirstForm (TFirstForm). SecondForm (TSecondForm) și ThirdForm (TThirdForm).
Eliminați-le din formularele generate automat în proprietățile proiectului. Apoi puneți ListBox pe MainForm și adăugați trei linii la acesta (TFistForm, TSecondForm, TThirdForm).
În evenimentul OnCreate MainForm sunt înregistrate următoarele clase:
De îndată ce dăm clic pe buton, găsim numele formularului selectat și sunăm CreateFormFromName:
Dacă este selectat primul element din listă, variabila "s" va conține valoarea "TFirstForm". Evenimentul CreateFormFromName va crea o instanță a formularului TFirstForm: