Почему 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;

0 ответов

Другие вопросы по тегам