Delphi 为什么每次输入CM_SYSFONTCHANGED时,TCustomActionBar(和TActionMainMenuBar)都会清除ColorMap属性?

Delphi 为什么每次输入CM_SYSFONTCHANGED时,TCustomActionBar(和TActionMainMenuBar)都会清除ColorMap属性?,delphi,delphi-xe4,tactionmanager,Delphi,Delphi Xe4,Tactionmanager,我假设这是我必须在TCustomActionBar中解决的一个bug,它会在每次收到CM_SYSFONTCHANGED消息时忘记自定义颜色映射 查看TCustomActionBar.CMSysFontChanged(var消息:TMessage)它调用AdjustSize,然后SetColorMap(nil),然后重新创建控件。在类的设计中似乎没有规定记住myTActionMainMenuBar中发布的属性ColorMap 有简单的解决方法吗?看来我必须检查很多关于这种情况的信息?我应该将自己挂

我假设这是我必须在TCustomActionBar中解决的一个bug,它会在每次收到CM_SYSFONTCHANGED消息时忘记自定义颜色映射

查看
TCustomActionBar.CMSysFontChanged(var消息:TMessage)
它调用
AdjustSize
,然后
SetColorMap(nil)
,然后
重新创建控件。在类的设计中似乎没有规定记住my
TActionMainMenuBar中发布的属性
ColorMap

有简单的解决方法吗?看来我必须检查很多关于这种情况的信息?我应该将自己挂接到后代类还是本地插入类中

有没有人试过这个,看看它是否以其他方式破坏了
TCustomActionBar
?这个VCL功能是必要的、愚蠢的,还是两者兼而有之

我的插入类hack看起来很有效,这是修复它的正确方法,我有没有办法找出
CM\u SYSFONTCHANGED
消息的来源或它可能具有的各种子含义的任何权威来源(WPARAM和LPARAM始终为零)


如果我没记错的话,我有一些解决方案,但尽管我的答案被接受,我认为解决方案应该在海报的评论和答案中。不确定它是否比你的好,但你可以评估一下。我有点困惑,为什么我甚至看到CM_SYSFONTCHANGED消息被发送到我的表单,而我没有做任何应该导致这种情况发生的事情,例如进入Windows设置和更改系统字体大小或字体外观。到目前为止,我可以确认我上面发布的hack似乎解决了这个问题。
procedure TActionMainMenuBar.CMSysFontChanged2(var Message: TMessage);
begin
  { hacked version of Vcl.ActnMan }
    if not (csLoading in ComponentState) then
  begin
    AdjustSize;
    //SetColorMap(nil);  // don't want this!
    RecreateControls;
  end;
end;