4

動作するためにフォームのハンドルを必要とするいくつかのWinAPi関数を使用します。これにより、vclスタイルが変更されるとフォームのハンドルが再作成され、これらの関数への呼び出しの多くが動作を停止します。したがって、これらの関数の呼び出しを更新するために、現在のvclスタイルが変更(変更)されたことを検出する方法が必要です。質問はHow detect when a vcl style is changed?

4

1 に答える 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 に答える