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

Sal*_*dor 3 delphi delphi-xe2 vcl-styles

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

RRU*_*RUZ 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.
Run Code Online (Sandbox Code Playgroud)