Creați o formă Delphi dintr-o șir

Pot exista cazuri în care nu cunoașteți tipul de clasă exact al unui obiect formular. Este posibil să aveți doar variabila șir care poartă numele clasei formularului, cum ar fi „TMyForm”.

Rețineți că procedura Application.CreateForm () așteaptă o variabilă de tip TFormClass pentru primul său parametru. Dacă puteți furniza o variabilă de tip TFormClass (dintr-un șir), veți putea crea un formular din numele său.

FindClass () Funcția Delphi localizează un tip de clasă dintr-un șir. Căutarea parcurge toate clasele înregistrate. Pentru a înregistra o clasă, o procedură RegisterClass () poate fi emis. Când funcția FindClass returnează o valoare TPersistentClass, aruncați-o în TFormClass și va fi creat un nou obiect TForm..

Exercițiu de probă

  1. Creați un nou proiect Delphi și denumiți formularul principal: MainForm (TMainForm).
  2. Adăugați trei forme noi la proiect, denumiți-le:
  3. FirstForm (TFirstForm)
  4. SecondForm (TSecondForm)
  5. ThirdForm (TThirdForm)
  6. Ștergeți cele trei forme noi din lista „Formulare de creare automată” din fereastra de dialog Proiect-Opțiuni.
  7. Aruncați un ListBox pe MainForm și adăugați trei șiruri: 'TFirstForm', 'TSecondForm' și 'TThirdForm'. 
procedură TMainForm.FormCreate (Expeditor: TObject);
începe
RegisterClass (TFirstForm); RegisterClass (TSecondForm); RegisterClass (TThirdForm);
Sfârșit
;

În evenimentul OnCreate al MainForm, înregistrați clasele:

procedură TMainForm.CreateFormButtonClick (Expeditor: TObject);
var
s: șir;
începe
s: = ListBox1.Items [ListBox1.ItemIndex]; CreateFormFromName (s);
Sfârșit
;

După ce faceți clic pe buton, găsiți numele tipului de formular selectat și apelați o procedură CreateFormFromName personalizată:

procedură CreateFormFromName (
const FormName: şir);
var
fc: Clasa TFormClass; f: TForm;
începe
fc: = TFormClass (FindClass (FormName)); f: = fc.Create (Cerere); f.Show;
Sfârșit
; (* CreateFormFromName *)

Dacă primul element este selectat în caseta de listă, variabila "s" va păstra valoarea "TFirstForm". CreateFormFromName va crea o instanță a formularului TFirstForm.