2013-10-02 30 views
1

我希望能夠將某種樣式應用於我正在處理的應用程序中的少數BitBtn。我已將VCL樣式應用於整個應用程序的皮膚。使用VCL樣式時覆寫某些TBitButton的樣式

從我在網上閱讀中理解的,我可以定義我自己的TBitBtn的子類,然後我可以爲給定的類定義一個樣式鉤子。

我曾經與TLabel和TEdit一起工作,但我不太清楚如何管理TButton或TBitBtn。實質上,我想將不同的背景圖像應用於自定義TBitBtn,而不是主題中包含的背景圖像。

+0

你能舉一個你想要的例子嗎?可以使用您已經擁有的用於TEdit的代碼,或者使用一些僞代碼來解釋您想要對TButton執行什麼操作。 – Johan

回答

4

要修改使用VCL的樣式TBitBtn的出現,取決於你的德爾福版本

XE4,XE5

您必須創建從TBitBtnStyleHook類派生的新的風格掛鉤,然後重寫DrawButton方法。檢查這個問題Disabling TButton issue on a VCL styled form在這裏我發佈一個示例代碼來覆蓋TButtonStyleHook.Paint方法來修復一個bug,但是您可以根據自己的需要調整相同的代碼。

XE2,XE3

TBitBtn不會對這些版本的使用風格掛鉤,所以你唯一的選擇是處理CN_DRAWITEM消息爲TBitBtn控件,然後添加自己的代碼來繪製按鈕就像解釋這個答案Delphi XE2 VCL styles, How to disable VCL styles on TBitBtn?

+0

它試過TStyleManager.Engine.RegisterStyleHook(TBitBtn,TButtonStyleHookFix);但它似乎並沒有把我的形象稱爲TBitBtn。 TStyleManager.Engine.RegisterStyleHook(TButton,TButtonStyleHookFix);適用於鈕釦。 TBitBtns是否也使用TButtonStyleHook或其他? – Alexandre

+0

在http://stackoverflow.com/questions/12195687/delphi-xe2-vcl-styles-how-to-disable-vcl-styles-on-tbitbtn你聲稱TBitBtn沒有鉤子 – Alexandre

+0

@Alexandre,對不起但我錯過了你的Delphi版本,在Delphi的最新版本中'TBitBtn'使用了Style Hook(TBitBtnStyleHook),答案更新了。 – RRUZ