【发布时间】:2011-12-07 21:36:58
【问题描述】:
我有这个程序,它是一个 TMenuItem 事件(杂项 - OnMeasureItem)。它工作正常。
MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);
我想在 FormResize 事件中调用它,但我收到“没有足够的实际参数”消息。
你能帮我如何正确调用它吗?
【问题讨论】:
-
您不需要调用它。当菜单需要获取菜单项的大小时,它会自动调用,因为它正在构建以显示。请问您为什么认为需要手动调用它?
-
你不应该调用这个事件。当系统要显示菜单时调用它。在显示菜单之前,系统必须计算出所有菜单项需要多少空间。它通过调用此事件来实现。正如编译器所说,您的错误是因为您没有传递足够的参数。修复它的方法是传递正确的参数。但我确定你根本不想调用它。
-
在 FormResize 事件中我这样做了:如果 Form1.Label55.Font.Color =clNavy 然后 Form1.Width:=1000 else if Form1.Label55.Font.Color =clBlack 然后 Form1.Width:= 700;我希望在更改字体颜色后菜单的宽度也变大。但它是一样的,我不知道如何解决这个问题。
-
菜单不是这样工作的;菜单大小是不可更改的设置。如果您想更改行为,则需要所有者绘制菜单(自己绘制每个项目)。当表单宽度发生变化时,菜单 width 会自动更改 - 我不确定您现在到底要做什么。例如,启动记事本(或写字板,或任何其他具有菜单的 Windows 应用程序),并使窗口变宽或变窄; menu 宽度发生变化,但 item 宽度不变 - 无论表单有多宽,
File菜单的宽度都是相同的。 -
为什么要实施 OnMeasureItem?系统肯定可以计算出菜单所需的大小吗?