使用F1键无法打开帮助文件以更正上下文

时间:2013-02-27 19:22:06

标签: delphi delphi-xe2 helpfile

使用Delphi XE2和Delphi 6

我发现按 F1 将帮助文件打开到帮助上下文时,不会使用 F1 所在的菜单项打开帮助文件到正确的上下文快捷方式,将帮助文件打开到适当的上下文。我还有一个调用菜单项代码的按钮。

我检查确保 F1 ,菜单项和按钮调用完全相同的代码行,它们是:

procedure TForm1.Help1Click(Sender: TObject);
begin
  Application.HelpContext(Self.HelpContext);
end;

Self.HelpContext值会根据用户在表单中的位置而更改,并且我确认执行该行时Self.HelpContext是正确的值,并且通过 F1调用时值相同或菜单项或按钮。

我在Delphi 6中编写的每个早期版本的应用程序中都验证了这个问题。

我必须在这里找到一些简单的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

正在发生的事情是 F1 受到系统的特殊处理。是的,您的菜单项的处理程序具有 F1 的快捷方式。但是在该处理程序触发后,该应用程序收到WM_HELP消息。

WM_HELP消息最初由TCustomForm.WMHelp处理。这将查找与活动控件关联的帮助上下文ID。然后使用该帮助上下文调用Application.HelpContext。并且可能是主动控件的帮助上下文ID与表单的不同。

因此,虽然您的菜单项会在首选主题中打开帮助文件,但后续的WM_HELP会覆盖菜单项。

您希望所有 F1 始终路由到表单的帮助上下文ID。在这种情况下,我的建议如下:

  • 设置表单的HelpContext
  • 删除表单上所有其他控件的所有HelpContext属性。换句话说,将它们还原为默认值0

然后,当处理WM_HELP消息时,它将从活动控件开始,并找到0的帮助上下文。然后它会通过父母上升到非零的形式。

我认为我还会从菜单项/操作中删除 F1 快捷方式。让WM_HELP消息成为调用帮助的机制。