Er kunnen zich gevallen voordoen waarin u niet het exacte klasse-type van een formulierobject weet. Mogelijk hebt u alleen de tekenreeksvariabele met de naam van de klasse van het formulier, zoals 'TMyForm'.
Merk op dat de Application.CreateForm () procedure een variabele van het type TFormClass verwacht voor zijn eerste parameter. Als u een variabele van het type TFormClass (van een tekenreeks) kunt opgeven, kunt u een formulier maken op basis van de naam.
De FindClass () Delphi-functie lokaliseert een klasse type uit een string. De zoekopdracht doorloopt alle geregistreerde klassen. Om een klas te registreren, een procedure REGISTERCLASS () kan worden uitgegeven. Wanneer de FindClass-functie een TPersistentClass-waarde retourneert, deze naar TFormClass casten, wordt een nieuw TForm-object gemaakt.
procedure TMainForm.FormCreate (Sender: TObject);
beginnen REGISTERCLASS (TFirstForm); REGISTERCLASS (TSecondForm); REGISTERCLASS (TThirdForm);
einde;
Registreer de klassen in het OnCreate-evenement van MainForm:
procedure TMainForm.CreateFormButtonClick (Sender: TObject);
var s: string;
beginnen s: = ListBox1.Items [ListBox1.ItemIndex]; CreateFormFromName (s);
einde;
Nadat op de knop is geklikt, zoekt u de typenaam van het geselecteerde formulier en roept u een aangepaste procedure CreateFormFromName aan:
procedure CreateFormFromName (
const Formulier naam : draad);
var fc: TFormClass; f: TForm;
beginnen fc: = TFormClass (FindClass (FormName)); f: = fc.Create (Toepassing); f.Show;
einde; (* CreateFormFromName *)
Als het eerste item in de keuzelijst is geselecteerd, bevat de variabele 's' de tekenreekswaarde 'TFirstForm'. De CreateFormFromName maakt een exemplaar van het TFirstForm-formulier.