Skapa ett Delphi-formulär från en sträng

Det kan förekomma fall när du inte vet den exakta klasstypen för ett formulärobjekt. Du kanske bara har strängvariabeln som bär namnet på formens klass, till exempel "TMyForm".

Observera att proceduren Application.CreateForm () förväntar sig en variabel av typen TFormClass för sin första parameter. Om du kan tillhandahålla en variabel TFormClass-typ (från en sträng) kommer du att kunna skapa ett formulär från dess namn.

De FindClass () Delphi-funktionen lokaliserar en klasstyp från en sträng. Sökningen går igenom alla registrerade klasser. För att registrera en klass, en procedur Registerclass () kan utfärdas. När FindClass-funktionen returnerar ett TPersistentClass-värde, kastar du det till TFormClass och ett nytt TForm-objekt skapas.

Provövning

  1. Skapa ett nytt Delphi-projekt och namnge huvudformen: MainForm (TMainForm).
  2. Lägg till tre nya formulär i projektet, namnge dem:
  3. FirstForm (TFirstForm)
  4. SecondForm (TSecondForm)
  5. ThirdForm (TThirdForm)
  6. Ta bort de tre nya formulärerna från listan "Skapa formulär automatiskt" i dialogrutan Projektalternativ.
  7. Släpp en ListBox på MainForm och lägg till tre strängar: 'TFirstForm', 'TSecondForm' och 'TThirdForm'. 
procedur TMainForm.FormCreate (avsändare: TObject);
Börja
Registerclass (TFirstForm); Registerclass (TSecondForm); Registerclass (TThirdForm);
slutet
;

Registrera klasserna i MainForms OnCreate-evenemang:

procedur TMainForm.CreateFormButtonClick (avsändare: TObject);
var
s: sträng;
Börja
s: = ListBox1.Items [ListBox1.ItemIndex]; CreateFormFromName (s);
slutet
;

När du har klickat på knappen hittar du det valda formulärets typnamn och ringer en anpassad CreateFormFromName-procedur:

procedur CreateFormFromName (
const Formnamn: sträng);
var
fc: TFormClass; f: TForm;
Börja
fc: = TFormClass (FindClass (FormName)); f: = fc.Create (applikation); f.Show;
slutet
; (* CreateFormFromName *)

Om det första objektet är markerat i listrutan kommer variabeln "s" att innehålla strängvärdet "TFirstForm". CreateFormFromName skapar en instans av TFirstForm-formuläret.