Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定TMenuItem中文本的高度,以决定通过TMenuItem.OnMeasureItem更改菜单项的高度 我使用Borland C++ Builder 2009,当使用大字体时,主菜单和弹出菜单项之间的距离太近,即使在太大的时候,文本也会被剪断。_C++_Delphi_C++builder_Delphi 2009_C++builder 2010 - Fatal编程技术网

确定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
返回该值。工作起来很有魅力。