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