Jupp, WM_STYLECHANGED gehört zu SetWindowLong für GWL_STYLE und GWL_EXSTYLE.
Was im Windows den Delphi-
Styles ähnlich kommt, sind die Themes, also eher WM_THEMECHANGED, aber da
VCL-Style eher was Eigenes ist, hilft es diesbezüglich nicht.
Diesbezüglich schaue man in die
Winapi.UxTheme rein.
VCL-Style siehe
Vcl.Themes und
Vcl.Styles
dort mal nach Register und Notification umschauen (z.B. TStyleEngineNotification) und die "message" an Methoden dort,
oder eben da reinsehen, wo man den Style umschaltet, denn wenn/falls da was gemacht wird, dann findet man es da
Delphi-Quellcode:
procedure TStyleManager.SetStyle(Style: TCustomStyleServices);
...
begin
...
for I := 0 to Screen.FormCount - 1 do
if Screen.Forms[I].HandleAllocated then
if IsWindowVisible(Screen.Forms[I].Handle) then
PostMessage(Screen.Forms[I].Handle, CM_CUSTOMSTYLECHANGED, 0, 0)
else
SendMessage(Screen.Forms[I].Handle, CM_CUSTOMSTYLECHANGED, 0, 0);
Und natürlich kannst du auch die WndProc deiner Komponente und der Form überschreiben und schauen, welche Messages beim Ändern des Styles dort ankommen.
TApplicationEvents.OnMessage liefert nur PostMessage und PostThreadMessage. SendMessage wird direkt verarbeitet und nicht rausgegeben. (bissl blöd, denn siehe den Code da oben
)
Dafür muß man die gewünschte Klasse hooken (z.B. indem man sich in WndProc reinhängt), oder einen globalen MessageHook registrieren.