You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Delphi标准TMainMenu、TPopupMenu顶层菜单项字体大小

标准VCL菜单(TMainMenu/TPopupMenu)字体大小调整问题

我尝试增大TMainMenu和TPopupMenu的字体大小,希望无需完全自绘菜单项,因此仅绑定了OnMeasureItem事件并修改Screen.MenuFont.Size,但未能实现预期效果。

已执行操作

DFM文件配置:

MainMenu.Ownerdraw = True
<EachMenuItem>.OnMeasureItem = MenuMeasureItem

PAS代码实现:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.MenuFont.Size := 12;
end;

procedure TForm1.MenuMeasureItem(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
var
  mi: TMenuItem;

  function IsTopLevel: Boolean;
  var
    k: Integer;
  begin
    Result := False;
    for k := 0 to MainMenu.Items.Count - 1 do
    begin
      if mi = MainMenu.Items[k] then
      begin
        Result := True;
        break;
      end;
    end;
  end;

begin
  Height := ACanvas.TextHeight('I') + 4;

  mi := (Sender as TMenuItem);
  if IsTopLevel then
    Width := ACanvas.TextWidth(mi.Caption) + 4;
end;

遇到的问题

  • 无论Screen.MenuFont.Size设置为多少,顶层菜单项高度始终偏小。
  • 未使用样式时,MainMenu顶层子项高度正常;使用Carbon等样式时高度异常。
  • 有无样式时弹出菜单项高度均正常,但使用样式时菜单项标题字体仍偏小,无样式时字体随设置比例缩放正常。
  • 未应用样式时,程序启动后出现以下异常:
    • 顶层菜单项以Windows默认小字体绘制,但预留空间已按大字体缩放(对应截图第1部分);
    • 鼠标悬停菜单项时,开始以指定大字体重绘,显示混乱(对应截图第2部分);
    • 鼠标划过所有顶层菜单项后,显示效果接近预期,但菜单栏高度仍异常(对应截图第3部分)。

菜单显示异常截图

提问

能否在不实现OnDrawItem的情况下解决上述1-4中的部分或全部问题?
注:我了解可使用TActionBar或第三方替代方案,但此处仅咨询标准菜单的解决方法。

内容的提问来源于stack exchange,提问作者Petro K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:38:17