назовите и зарегистрируйте свой класс с нужным именем без префикса T - PullRequest
0 голосов
/ 26 ноября 2011

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

Относительно этого мой вопрос следующий.

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

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

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

1 Ответ

1 голос
/ 30 ноября 2011

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

...