Maak een Delphi-formulier van een string

Maak een Delphi-formulier van een string

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, cast u deze naar TFormClass en wordt een nieuw TForm-object gemaakt.

Voorbeeldoefening

  1. Maak een nieuw Delphi-project en noem de hoofdvorm: MainForm (TMainForm).
  2. Voeg drie nieuwe formulieren toe aan het project, geef ze een naam:
  3. FirstForm (TFirstForm)
  4. SecondForm (TSecondForm)
  5. ThirdForm (TThirdForm)
  6. Verwijder de drie nieuwe formulieren uit de lijst "Formulieren automatisch maken" in het dialoogvenster Project-opties.
  7. Zet een ListBox neer op de MainForm en voeg drie strings toe: 'TFirstForm', 'TSecondForm' en 'TThirdForm'.

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.ItemsListBox1.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.