【问题标题】:Calling MeasureItem procedure (TMenuItem, Delphi)调用 MeasureItem 过程 (TMenuItem, Delphi)
【发布时间】: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?系统肯定可以计算出菜单所需的大小吗?

标签: delphi menuitem


【解决方案1】:

“没有足够的实际参数”意味着你没有提供它期望的所有参数。该方法需要四个参数。第一个应该是对正在测量的菜单项的引用,第二个应该是一个画布,其中包含将用于绘制菜单的属性,如果菜单真的被绘制,其余参数应该是变量,将接收请求的菜单项大小。

这就是如何调用该方法。您是否应该调用该方法完全是另一回事。如果需要,我邀请您发布有关该主题的另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多