Хендлер делается несложно, создаешь его и вешаешь свой обработчик сообщений
type
TMyForm = class(TForm)
private
{$IFDEF MSWINDOWS}
// Сохраненный обработчик сообщений окна
FPrevWndProc: TFNWndProc;
// Установленный обработчик сообщений окна
FWndProc: Pointer;
// Обработчик сообщений окна
procedure FormWndProc(var AMsg: Winapi.Messages.TMessage);
{$ENDIF}
protected
{$IFDEF MSWINDOWS}
procedure CreateHandle; override;
{$ENDIF}
end;
{$IFDEF MSWINDOWS}
procedure TMyForm.FormWndProc(var AMsg: Winapi.Messages.TMessage);
begin
case AMsg.Msg of
WM_SETTINGCHANGE:
begin
// смотрим наличие ImmersiveColorSet в сообщении и включаем нужную тему из нужного StyleBook на форме
end;
end;
AMsg.Result := CallWindowProc(FPrevWndProc, FormToHWND(Self), AMsg.Msg, AMsg.WParam, AMsg.LParam);
end;
procedure TMyForm.CreateHandle;
begin
inherited;
var LHandle: HWND := FormToHWND(Self);
FPrevWndProc := TFNWndProc(GetWindowLong(LHandle, GWL_WNDPROC));
FWndProc := MakeObjectInstance(FormWndProc);
SetWindowLong(LHandle, GWL_WNDPROC, NativeInt(FWndProc));
end;
{$ENDIF}