2012-04-29 28 views
2

我使用的需求,以合作形式的處理多個WINAPI功能,由於其當VCL風格改變許多調用這些函數形式的手柄被重建停止工作。所以,我需要一種方法來檢測在當前VCL風格,以更新這些functions.The問題的呼籲修改(改變)是How detect when a vcl style is changed?如何檢測vcl樣式何時更改?

+3

表單可能因其他原因而重新創建。對於更安全的方法,您可以重寫'CreateWindowHandle'。 –

+1

雖然RRUZ回答了這個問題,但Sertac實際上解決了根本問題。 –

回答

8

當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.