Назовите и зарегистрируйте свой класс с желаемым именем без префикса 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 и создавать весь его контент вручную в коде, тогда имя класса не будет иметь значения.