動作するためにフォームのハンドルを必要とするいくつかのWinAPi関数を使用します。これにより、vclスタイルが変更されるとフォームのハンドルが再作成され、これらの関数への呼び出しの多くが動作を停止します。したがって、これらの関数の呼び出しを更新するために、現在のvclスタイルが変更(変更)されたことを検出する方法が必要です。質問はHow detect when a vcl style is changed?
1 に答える
            13        
        
		
TStyleManager.SetStyleメソッドを介してvclスタイルが変更されるCM_CUSTOMSTYLECHANGEDと、アプリケーションのすべてのフォームにメッセージが送信され、  そのメッセージが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.
于 2012-04-29T20:57:10.667   に答える