使用VCL样式形成背景颜色?

时间:2013-10-28 10:24:26

标签: delphi delphi-xe2 vcl-styles

我正在尝试使用VCL样式。这可能是一个愚蠢的问题,但是在使用样式时是否可以使用不同背景的表单?似乎表单背景(客户区)在VCL样式设计器中指定,它覆盖了表单的Color属性。

如何获得不同背景颜色的表单?例如,我希望我的模态对话框具有与主窗体不同的背景颜色。

1 个答案:

答案 0 :(得分:6)

是的,有可能: 如果您使用的是Delphi XE3,XE4,XE5: 您只需要从表单的seClient属性中删除StyleElements

 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