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