2013-10-28 69 views
0

我正在试验VCL样式。这可能是一个愚蠢的问题,但是在使用风格时可以使用不同背景的表单吗?看起来,表单背景(客户区)是在VCL样式设计器中指定的,它覆盖了表单的Color属性。用VCL样式形成背景颜色?

我怎样才能实现不同背景颜色的形式?例如,我希望我的模式对话框具有与主窗体不同的背景色。

+1

可能重复的[如何颜色与VCL样式启用TComboBox的背景](http://stackoverflow.com/questions/16538890/how-to-color-the-background-ofa-a- tcombobox-with-vcl-styles-enabled) –

+0

另外有用的链接在http://stackoverflow.com/questions/9906312/ –

+0

链接@Arioch'The提供的包含解决方案,你只需要适应一些事情:'' TFromStyleHookExt = class(TFormStyleHook)'改变TWinControlClass(Control)。到TForm(控制)。适配初始化TStyleManager.Engine.RegisterStyleHook(TForm_XY,TFromStyleHookExt);并更改WndProc。 – bummi

回答

6

是的,它是可能的: 如果您正在使用德尔福XE3,XE4,XE5: 你只需要从形式的StyleElements属性中删除seClient

Form3.StyleElements := [seFont, seBorder]; 

如果你是用delphi XE2: 应覆盖TFormStyleHook类,并赶上WM_ERASEBKGND消息,而不处理默认消息返回:

type 
    TFormStyleHookEx = class(TFormStyleHook) 
    procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; 
    end; 
{ TFormStyleHookEx } 

procedure TFormStyleHookEx.WMEraseBkgnd(var Message: TMessage); 
begin 
    Message.Result := 1; 
end; 

initialization 

TStyleEngine.RegisterStyleHook(TForm3, TFormStyleHookEx); 

enter image description here

+1

他在XE2上,StyleElements在这里不知道。 – bummi

+0

@ bummi,对不起..检查新的更新。 –

+0

不错,简洁,但不幸的是,恕我直言,问题仍然是重复的。 – bummi