Создание формы Delphi из строки |
![]() |
![]() |
Статьи |
Есть способ создания экземпляра формы из строки из ее имени. Например, если есть строка 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). ![]() В событии OnCreate MainForm регистрируются классы:
Как только мы щелкаем кнопкой, мы находим имя выбранной формы и вызываем процедуру CreateFormFromName:
Если будет выбран первый пункт из списка, то переменная "s" будет содержать значение "TFirstForm". Событие CreateFormFromName создаст экземпляр формы TFirstForm:
И это все! ![]() |
Комментарии
RSS лента комментариев этой записи