Страница 1 из 1

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

Добавлено: 04 окт 2010, 17:43
u-a-ulia
Доброго дня!

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

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

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

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

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

Спасибо!)

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

Добавлено: 07 окт 2010, 10:15
WinMain
Я не помню точно, имеется ли в библиотеке VCL такое понятие, как Runtime class, который позволяет создавать экземпляр объекта по имени класса. В библиотеке MFC на Visual С++ это используется как раз для таких целей.
А функция CreateWindow тебе здесь не поможет.

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

Добавлено: 07 окт 2010, 17:34
u-a-ulia
Спасибо за ответ!
Частично помогла функция CreateForm :) она как раз по id класса создаёт, но конструктор этого класса должен принимать на вход, увы, только TObject *Sender.

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

Добавлено: 07 окт 2010, 20:33
Decoder
Тогда придётся самостоятельно реализовать так называемую "фабрику классов" (Class Factory). Или поискать в сети готовую реализацию для классов VCL.