我假设这是一个我必须在 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;