Как создать окно не определённого заранее класса?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
u-a-ulia
Сообщения: 2
Зарегистрирован: 04 окт 2010, 17:36

Доброго дня!

Нахожусь в небольшом тупике. Есть приложение в котором у главного окна (MainForm) в процессе работы создаётся много дочерних форм. Все они разных типов, наследующих от TForm.

По нажатию кнопки все открытые дочерние окна должны быть закрыты
(с этим проблем нет MainForm->MDIChildren->Close())
Но так же нужно создать окна этих же типов заново!

То есть нужно перебирать открытые окна, закрывать каждое и открывать(создавать) такое же (так как необходимо, чтобы отработали заново конструктор и FormCreate())

Возможно ли решить проблему не влезая во все возможные классы дочерних окон и не создавая конструктор копирования?

Приведёт ли к решению CreateWindow? пока что функция возвращает ошибку: незарегистрированное имя класса, которое я беру из MainForm->MDIChildren->ClassName().

Спасибо!)
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Я не помню точно, имеется ли в библиотеке VCL такое понятие, как Runtime class, который позволяет создавать экземпляр объекта по имени класса. В библиотеке MFC на Visual С++ это используется как раз для таких целей.
А функция CreateWindow тебе здесь не поможет.
u-a-ulia
Сообщения: 2
Зарегистрирован: 04 окт 2010, 17:36

Спасибо за ответ!
Частично помогла функция CreateForm :) она как раз по id класса создаёт, но конструктор этого класса должен принимать на вход, увы, только TObject *Sender.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Тогда придётся самостоятельно реализовать так называемую "фабрику классов" (Class Factory). Или поискать в сети готовую реализацию для классов VCL.
Поумнеть несложно, куда труднее от дури избавиться.
Ответить