Delphi VCL 强制菜单重绘

Posted

技术标签:

【中文标题】Delphi VCL 强制菜单重绘【英文标题】:Delphi VCL force menu repaint 【发布时间】:2021-07-29 16:49:45 【问题描述】:

我正在设置主菜单字体(通过 Screen.MenuFont)以匹配程序中其他地方使用的字体的名称/大小。但是主菜单不会随着表单的其余部分刷新——我必须将鼠标移到每个菜单项上才能让它以新字体重新绘制项目。如何强制主菜单在更改时重新绘制?

【问题讨论】:

【参考方案1】:

这真的很简单:

只需调用DrawMenuBar 函数并将句柄传递给包含菜单的表单:

procedure TForm1.FormClick(Sender: TObject);
begin
  Screen.MenuFont.Name := 'Arial Black';
  DrawMenuBar(Handle);
end;

【讨论】:

也许您可以将呼叫转移到 DrawMenuBarprocedure CMSysFontChanged(var Message: TMessage); message CM_SYSFONTCHANGED;TForm1 太棒了!谢谢!彼得的 msg 方法确实有效。

以上是关于Delphi VCL 强制菜单重绘的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 强制子视图重绘

如何强制 jQuery UI 对话框再次重绘或触发某些东西来强制调整大小

强制 QItemDelegate 重绘

从 PaintCode 强制自定义 NSView 重绘

如何强制刷新/重绘 JScrollPane?

如何在 NSScrollView 中强制重绘内容