2
我使用的需求,以合作形式的处理多个WINAPI功能,由于其当VCL风格改变许多调用这些函数形式的手柄被重建停止工作。所以,我需要一种方法来检测在当前VCL风格,以更新这些functions.The问题的呼吁修改(改变)是How detect when a vcl style is changed?
如何检测vcl样式何时更改?
我使用的需求,以合作形式的处理多个WINAPI功能,由于其当VCL风格改变许多调用这些函数形式的手柄被重建停止工作。所以,我需要一种方法来检测在当前VCL风格,以更新这些functions.The问题的呼吁修改(改变)是How detect when a vcl style is changed?
如何检测vcl样式何时更改?
当VCL风格通过TStyleManager.SetStyle
方法发送CM_CUSTOMSTYLECHANGED
消息改变该应用程序的所有形式,那么messgae在形式的WndProc
方法处理,然后被发送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.
表单可能因其他原因而重新创建。对于更安全的方法,您可以重写'CreateWindowHandle'。 –
虽然RRUZ回答了这个问题,但Sertac实际上解决了根本问题。 –