1

Тема: C++Builder FMX і універсальна процедура створення фреймів

Добрий день.
На головну форму потрібно в динаміці підгружати декілька фреймів.
Допоможіть доробити/переробити універсальну процедуру.
   

   TFrame *WorkFrame;
    TLayout* FrameLayout;

void TfrmMain::CreateFrame(String FrameName){
if (FrameLayout != NULL) {
    delete FrameLayout;
}

TPersistentClass FrameClass = FindClass(FrameName);
FrameLayout = new TLayout(rootLayout);
FrameLayout->Name = "FrameLayout";
FrameLayout->Parent = rootLayout;
FrameLayout->Align =  TAlignLayout::Client;


WorkFrame = new FrameClass(this); - а ось тут помилка, по аналогії Delphi  FrameClass.Create(Self) не виходить :(
WorkFrame->Parent = FrameLayout;
WorkFrame->Align =  TAlignLayout::Client;

}

2

Re: C++Builder FMX і універсальна процедура створення фреймів

Зробіть фабричний метод.

Форуми ще підказують щось із TConstructor, але це явно використовує щось дуже специфічне для Delphi і надто тхне магією та несумісністю.

Подякували: antarey1

3

Re: C++Builder FMX і універсальна процедура створення фреймів

koala написав:

Зробіть фабричний метод.

.

А можна трохи простішу реалізацію? Я так відразу не усвідомлю такий метод, або якщо це можливо - приклад коду для моєї конкретної проблеми
Дякую

4 Востаннє редагувалося koala (26.01.2022 14:41:18)

Re: C++Builder FMX і універсальна процедура створення фреймів

А куди вже простіше?

 TFrame *FabricMethod(const String& FrameName)
{
  if(FrameName=="Frame1")
    return new Frame1(this);
  if(FrameName=="Frame2")
    return new Frame2(this);
  //і т.д.
}

Рефлексії - то довго, складно і (якщо бібліотека від іншої мови) заплутано.

5

Re: C++Builder FMX і універсальна процедура створення фреймів

І виклик буде

WorkFrame = FabricMethod("Frame1");

Якщо я правильно зрозумів принцип тоді

if(FrameName=="Frame1")
    return new Frame1(this);

Вірно?

6

Re: C++Builder FMX і універсальна процедура створення фреймів

Це я щось між Delphi та C++ завис. Дякую, виправив. Саме так.

7

Re: C++Builder FMX і універсальна процедура створення фреймів

точніше просто

FabricMethod("Frame1");

8

Re: C++Builder FMX і універсальна процедура створення фреймів

Викликаєте, а де вже зберігати - то наступне питання.

Подякували: antarey1

9

Re: C++Builder FMX і універсальна процедура створення фреймів

Дивно, що в плюсах досі немає метакласів. Отут пишуть чим їх можна замінити: https://stackoverflow.com/questions/231 … references

Подякували: leofun011

10

Re: C++Builder FMX і універсальна процедура створення фреймів

Метакласи - це динамічний тип. C++ статично типізований. Є рефлексії, але вони прив'язані до певних бібліотек/середовищ виконання.

11

Re: C++Builder FMX і універсальна процедура створення фреймів

Перепрошую, Delphi ж також статично типізований. Але що має повертати MetaClass.Create()? В Delphi це TObject. А в C++? Там же немає єдиного базового класу.