2013-02-27 53 views
2

用Delphi XE2也德尔福6帮助文件打不开,以正确的上下文与F1键

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

我检查,以确保两个F1和菜单项目和按钮调用的代码相同的一行,他们是:

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

Self.HelpContext值改为根据用户所在的表格和我证实,当执行该行时,Self.HelpContext是正确的值,并且在通过F1或菜单项或按钮调用时是相同的值。

我核实这个问题也存在于每一个以前的版本我们的应用程序的Delphi编写的6

必须有简单的东西,我在这里失踪。有任何想法吗?

回答

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消息成为调用帮助的机制。

+0

好抓!一个'WM_HELP'处理程序可能也有帮助.. – 2013-02-27 23:57:10

+0

@Sertac谢谢。我可能会转过身来停止处理菜单中的F1。 /动作。并与WM_HELP一起滚动。 – 2013-02-28 08:02:02

+0

@DavidHeffernan - 我真的很感谢你对这个和最后一个帮助文件的帮助。事实证明,测试帮助文件的测试应用似乎可行。与我的巨型应用程序和测试帮助文件的测试也适用!我的巨型应用程序和巨型帮助文件之间似乎并不开心。从快捷方式中删除F1似乎没有影响。即使它没有解决我的具体问题,我会接受你的答案,因为你帮助。 – 2013-02-28 15:02:30

相关问题