3

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

看着TCustomActionBar.CMSysFontChanged(var Message: TMessage)它来电AdjustSize,那么SetColorMap(nil),那么RecreateControls。在类的设计中似乎没有规定要记住ColorMap我的已发布属性TActionMainMenuBar

有简单的解决方法吗?看来我必须检查很多这种情况?我应该把CM_SYSFONTCHANGED自己挂在后代班级还是当地的中介班级?

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

我的插入类黑客似乎有效,这是修复它的正确方法,有什么方法可以弄清楚该CM_SYSFONTCHANGED消息来自何处或它可能具有的各种子含义的任何权威来源(WPARAM和 LPARAM 始终为零)?

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;
4

0 回答 0