Я использую несколько функций WinAPi, которым нужна Handle формы для работы, из-за которой дескриптор формы воссоздается при изменении стилей vcl, многие из вызовов этих функций перестают работать. Так что я нужен способ, чтобы определить, когда текущий стиль VCL изменен (изменен), чтобы обновить вызовы этого functions.The вопрос How detect when a vcl style is changed?
Как определить, когда изменяется стиль vcl?
2
A
ответ
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.
Форма может быть воссоздана по другим причинам. Для более надежного подхода вы можете переопределить 'CreateWindowHandle'. –
Пока РРУЗ ответил на вопрос, Сертак фактически решил основную проблему. –