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實際上解決了根本問題。 –