如何检测vcl样式何时更改?

时间:2012-04-29 20:51:02

标签: delphi delphi-xe2 vcl-styles

我使用了几个需要表单句柄才能工作的WinAPi函数,因为当更改vcl样式时,会重新创建表单的句柄,许多对这些函数的调用都会停止工作。所以我需要一种方法来检测当前vcl样式何时被修改(更改)以更新对这些函数的调用。问题是How detect when a vcl style is changed?

1 个答案:

答案 0 :(得分:10)

当通过TStyleManager.SetStyle方法更改vcl样式时,会向应用程序的所有表单发送CM_CUSTOMSTYLECHANGED消息,然后在表单的WndProc方法中处理该messgae然后发送CM_STYLECHANGED消息以通知vcl样式已更改,因此您可以侦听CM_STYLECHANGED消息以检测vcl样式何时更改。

试试这个示例代码。

type
  TForm17 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure CMStyleChanged(var Message: TMessage); message CM_STYLECHANGED;
  public
    { Public declarations }
  end;

var
  Form17: TForm17;

implementation

uses
 Vcl.Themes;

{$R *.dfm}

procedure TForm17.Button1Click(Sender: TObject);
begin
   TStyleManager.SetStyle('Carbon');
end;

procedure TForm17.CMStyleChanged(var Message: TMessage);
begin
  ShowMessage('The vcl style has changed');
end;

end.