Є спосіб створення екземпляра форми з рядка з її імені. Наприклад, якщо є рядок TMyForm. то буде створена нова форма типу TMyForm.
Припустимо, що у Вас є кілька пов'язаних форм у Вашому додатку (як, ймовірно, все роблять). Звичайно, багато хто з цих форм створюються динамічно під час виконання (вилучені зі списку "Автосоздаваемих форм" у вікні властивостей проекту).
Скажімо, у Вас є форма на ім'я MyForm класу TMyForm, яку Ви хочете створити. Щоб створити екземпляр форми MyForm під час виконання, Ви могли б використовувати наступний код (щоб показати її модально і звільняти її, коли вона закривається).
Або Ви могли б зробити додаток власником форми MyForm і описати команду, подібно цієї:
Тепер, що якщо Ви "не знаєте" точно тип класу об'єкта форми? Що, якщо, мало того, строкова змінна має перенос імені класу форми, як TMyForm. Ви не зможете використовувати зразки коду, показаних вище. Application.CreateForm очікує змінну типу TFormClass. а не рядок.
Ви, швидше за все не зможете використовувати TMyForm.Create (.)!
Новий екземпляр форми з рядка
Зверніть увагу, що процедура Application.CreateForm () очікує змінну типу TFormClass своїм першим параметром. Якщо ми зможемо передати типову змінну TFormClass (з рядка), ми зможемо створювати форму по її імені!
Функція FindClass () Delphi отримує тип класу з рядка. У пошуку беруть участь всі зареєстровані класи. Щоб зареєструвати клас, може бути запущена процедура RegisterClass (). Коли функція FindClass повертає значення TPersistentClass. ми передаємо його в TFormClass і новий об'єкт TForm може бути створений!
Створіть новий проект Delphi і назвіть головну форму MainForm (TMainForm). Додайте три нових форми в проект і назвіть їх: FirstForm (TFirstForm). SecondForm (TSecondForm) і ThirdForm (TThirdForm).
Видаліть їх з автосозданних форм у властивостях проекту. Потім помістіть ListBox на MainForm і додайте в нього три рядки (TFistForm, TSecondForm, TThirdForm).
У події OnCreate MainForm реєструються класи:
Як тільки ми клацаємо кнопкою, ми знаходимо ім'я обраної форми і викликаємо процедуру CreateFormFromName:
Якщо буде обраний перший пункт зі списку, то змінна "s" буде містити значення "TFirstForm". Подія CreateFormFromName створить екземпляр форми TFirstForm: