如何调整Delphi标准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
相关产品推荐
相关产品推荐

