确定TMenuItem中文本的高度,以决定通过TMenuItem.OnMeasureItem更改菜单项的高度 我使用Borland C++ Builder 2009,当使用大字体时,主菜单和弹出菜单项之间的距离太近,即使在太大的时候,文本也会被剪断。
我知道我可以使用确定TMenuItem中文本的高度,以决定通过TMenuItem.OnMeasureItem更改菜单项的高度 我使用Borland C++ Builder 2009,当使用大字体时,主菜单和弹出菜单项之间的距离太近,即使在太大的时候,文本也会被剪断。,c++,delphi,c++builder,delphi-2009,c++builder-2010,C++,Delphi,C++builder,Delphi 2009,C++builder 2010,我知道我可以使用TMenuItem.OnMeasureItem更改项目的高度,但我应该将其设置为什么高度 计算理想高度的最佳方法是什么?如何获取理想高度的变量(例如文本高度)?OnMeasureItem处理程序建议您在高度变量参数中使用默认值 您可以将该值乘以字体大小100%(96)的当前屏幕PPI和默认PPI的比率,例如Height:=Ceil(Height*screen.PixelsPerInch/96)查看TCanvas.TextHeight()方法。创建一个临时TCanvas,将当前的屏
TMenuItem.OnMeasureItem
更改项目的高度,但我应该将其设置为什么高度
计算理想高度的最佳方法是什么?如何获取理想高度的变量(例如文本高度)?
OnMeasureItem
处理程序建议您在高度
变量参数中使用默认值
您可以将该值乘以字体大小100%(96)的当前屏幕PPI和默认PPI的比率,例如
Height:=Ceil(Height*screen.PixelsPerInch/96)
查看TCanvas.TextHeight()
方法。创建一个临时TCanvas
,将当前的屏幕分配给它,将TMenuItem.Caption
传递给它的TextHeight()
,然后释放它。或者,由于VCL菜单已经在内部处理了WM_MEASUREITEM
,请在VCL源代码中进行调试,找出默认高度太小的原因,然后进行修复。最佳解决方案是更改VCL代码以停止使用所有者绘图菜单。我使用建议的TCanvas.TextHeight()
函数,并在顶部和底部添加一些填充,并在绘图过程中通过TMenuItem.OnMeasureItem
返回该值。工作起来很有魅力。