Почему TCustomActionBar (и TActionMainMenuBar) очищают свойство ColorMap каждый раз, когда входит CM_SYSFONTCHANGED?
Я предполагаю, что это ошибка, которую я должен обойти в 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;