C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача в функцию типа объекта  (Прочитано 1570 раз)
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Передача в функцию типа объекта
« : 18 Июнь 2014, 17:51:38 »

Привет всем. Столкнулся со следующей проблемой. Хочу написать функцию, которая будет отображать на главной форме фреймы. Сами фреймы спроектированы заранее в визуальном режиме. Выделением и освобождением памяти для них должен я заниматься сам. Вопрос такой: каким образом в функции можно узнать из класса какого фрейма создавать объект?
Код
void ShowFrame(TFrame *Frame)
{
Frame = new /* как тут определить класс какого фрейма использовать? */
Frame->Parent = MainForm;
}
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Передача в функцию типа объекта
« Ответ #1 : 18 Июнь 2014, 23:13:14 »

Ну ты же его проектировал "в визуальном режиме" )) Ты и знаешь класс фрейма.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Передача в функцию типа объекта
« Ответ #2 : 19 Июнь 2014, 07:04:19 »

Цитата: POV от 18 Июнь 2014, 23:13:14
Ну ты же его проектировал "в визуальном режиме" )) Ты и знаешь класс фрейма.
Совершенно верно, я знаю имена классов моих фреймов. Но у меня есть функция, которая должна уметь создать и отобразить фрейм зная о фрейме только его имя. Функция должна, при выделении памяти для фрейма, знать на основе какого класса сделан фрейм с таким то именем.
Код
// Фрейм DataFrame создан на основе класса TDataFrame
// Фрейм VideoFrame создан на основе класса TVideoFrame
// Фрейм FindFrame создан на основе класса TFindFrame
// Память для фреймов не выделена
 
// Каким образом здесь функция определит, что надо прибегнуть к использованию
// конструкции вида Frame = new TFindFrame(Application) ?
ShowFrame(FindFrame);
 
// А тут Frame = new TDataFrame(Application)
ShowFrame(DataFrame);
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Передача в функцию типа объекта
« Ответ #3 : 19 Июнь 2014, 09:03:05 »

Дык, тип наверное не передашь.. передавай его название в тестовом к примеру виде и по ветвлениям создавай объект нужного типа. делов-то.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Передача в функцию типа объекта
« Ответ #4 : 19 Июнь 2014, 21:18:46 »

Цитата: POV от 19 Июнь 2014, 09:03:05
Дык, тип наверное не передашь.. передавай его название в тестовом к примеру виде и по ветвлениям создавай объект нужного типа. делов-то.
То есть, примерно так?
Код
void ShowForm(String ClassName)
{
if(ClassName == L"TDataFrame") Frame = new TDataFrame(Application);
if(ClassName == L"TFindFrame") Frame = new TFindFrame(Application);
...
}
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Передача в функцию типа объекта
« Ответ #5 : 20 Июнь 2014, 01:50:20 »

Цитата: d7d1cd от 19 Июнь 2014, 21:18:46
То есть, примерно так?
Можно примерно так:
Код
TComponent *CreateThis(TComponent *Owner, TMetaClass *myClass)
{
   TComponent *Result;
   Application->CreateForm(myClass, &Result);
   Application->RemoveComponent(Result);
   Owner->InsertComponent(Result);
   return Result;
}
 
// создаем любые классы, зарегистрированные через RegisterClass
 
   TButton *btn = dynamic_castTButton*>(CreateThis(this, __classid(TButton)));
   btn->Parent = this;
   TPanel *pnl = dynamic_castTPanel*>(CreateThis(this, __classid(TPanel)));
   pnl->Parent = this;
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.087 секунд. Запросов: 22.