2011-11-26 69 views
0

無論將在C++ builder中創建的組件將被分配TComponentName。 例如,當我創建一個表單併爲其分配MyWidget時,它將繼承TForm 的類獲取class TMyWidget : TForm{}表單。使用spy ++類似的檢查器,你可以看到你的應用程序的註冊類名稱。名稱&註冊您的類與所需的名稱而不是前綴T

關於這個問題我的問題如下。

  • 是否有可能,然後如何創建我們的表單,組件 與我們所需的名稱(不包括前綴T)?

我這樣做了,我創建了VCL Forms App並保存了它。然後用我自己想要的類名取代TForm1,比如我的例子WidgetCl0x01在.h,.dfm,__classid()arg中的項目源文件中,但是存在編譯和鏈接問題!

向我展示如何通過改變VCL源代碼來實現這個目標!

回答

1

您可以重寫虛CreateParams()方法來改變分配到被分配給TForm窗口HWND類名稱,如:

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

使用Name屬性Object Inspector中更改類在您的代碼中,TForm類本身的名稱,請勿嘗試通過名稱進行調整。只要知道它總是以T爲前綴,那麼除非您禁用TForm的DFM並手動創建代碼中的所有內容,否則無法避免這種情況,那麼類名稱無關緊要。

+0

我高興地感謝您的幫助!我同意你的看法,只有在這裏重寫作品,這是一個很棒的OOP特性,可以幫助我們提供我們自己的具體實現。 –

+0

其他控件是否使用虛函數CreateParams以相同的方式覆蓋?(例如TButton,...) –

+0

所有'TWinControl'派生類都使用'CreateParams()'方法。總是首先調用基類'CreateParams()'來建立默認值,然後根據需要自定義'TCreateParams'。 –

相關問題