Назовите и зарегистрируйте свой класс с желаемым именем без префикса T

Любому компоненту, который будет создан в C++ Builder, будет присвоен TComponentName. Например, когда я создаю форму и присваиваю ей MyWidget, тогда класс, который наследует TForm, получает class TMyWidget : TForm{} форма. С инспекторами, похожими на spy++, вы можете видеть зарегистрированные имена классов ваших приложений.

В связи с этим мой вопрос заключается в следующем.

  • Возможно ли это вообще, и как тогда создавать наши формы, компоненты с желаемым именем (исключая префикс T)?

Как я это сделал, я создал приложение VCL Forms и сохранил его. Затем заменил TForm1 своим собственным желаемым именем класса, скажем, в моем случае WidgetCl0x01 в.h,.dfm, исходный файл проекта в __classid() arg, но были проблемы с компиляцией и компоновкой!

Покажите мне, как этого добиться, не просто изменив источник VCL!

1 ответ

Решение

Вы можете переопределить виртуальный CreateParams() метод для изменения имени класса, который назначен HWND что выделено для TForm окно, например:

void __fastcall TMyWidget::CreateParams(TCreateParams &Params)
{
    TForm::CreateParams(Params)
    StrLCopy(Params.WinClassName, _D("WidgetCl0x01"), (sizeof(Params.WinClassName) / sizeof(Char)) - 1);
}

Использовать Name свойство в Инспекторе объектов, чтобы изменить имя класса TForm Класс сам в вашем коде, не пытайтесь изменить его по имени. Просто знайте, что это всегда будет с префиксом Tвы не можете избежать этого, если не отключите TFormЭто DFM и создавать весь его контент вручную в коде, тогда имя класса не будет иметь значения.

Другие вопросы по тегам