Delphi 帮助文件无法使用F1键打开到正确的上下文
使用Delphi XE2和Delphi 6 我发现,按F1将帮助文件打开到帮助上下文并不能将帮助文件打开到正确的上下文,但使用F1作为快捷方式的菜单项将帮助文件打开到正确的上下文。我还有一个按钮,可以调用菜单项代码 我检查了F1和菜单项以及按钮是否调用了完全相同的代码行,它们是:Delphi 帮助文件无法使用F1键打开到正确的上下文,delphi,delphi-xe2,helpfile,Delphi,Delphi Xe2,Helpfile,使用Delphi XE2和Delphi 6 我发现,按F1将帮助文件打开到帮助上下文并不能将帮助文件打开到正确的上下文,但使用F1作为快捷方式的菜单项将帮助文件打开到正确的上下文。我还有一个按钮,可以调用菜单项代码 我检查了F1和菜单项以及按钮是否调用了完全相同的代码行,它们是: procedure TForm1.Help1Click(Sender: TObject); begin Application.HelpContext(Self.HelpContext); end; Self.H
procedure TForm1.Help1Click(Sender: TObject);
begin
Application.HelpContext(Self.HelpContext);
end;
Self.HelpContext
值根据用户在表单中的位置而改变,我验证了执行该行时Self.HelpContext
是正确的值,并且通过F1或菜单项或按钮调用时是相同的值
我验证了这个问题也存在于我们用Delphi6编写的应用程序的每个以前版本中
一定有一些简单的东西我错过了。有什么想法吗?发生的事情是F1得到了系统的特殊处理。是的,确实会激发具有快捷方式F1的菜单项处理程序。但在该处理程序启动后,应用程序会收到一条WM\u HELP
消息
此WM\u HELP
消息最初由TCustomForm.WMHelp
处理。这将查找与活动控件关联的帮助上下文ID。然后使用该帮助上下文调用Application.HelpContext
。可能活动控件的帮助上下文ID与窗体的帮助上下文ID不同
因此,尽管您的菜单项在首选主题处打开帮助文件,但随后的WM_help
会覆盖该菜单项
您似乎希望所有F1始终路由到表单的帮助上下文ID。在这种情况下,我的建议如下:
- 为表单设置
HelpContext
- 删除窗体上所有其他控件的所有
属性。换句话说,将它们恢复为默认值HelpContext
0
WM_HELP
消息时,它从活动控件开始,并找到0
的帮助上下文。然后它将通过父代上升到非零的形式
我想我也会从菜单项/操作中删除F1快捷方式。并让
WM_HELP
消息作为调用帮助的机制。@Sertac谢谢。我可能会把它转过来,停止处理菜单中的F1/行动。继续使用WM_帮助。@DavidHeffernan-我非常感谢您对本期和上一期帮助文件的帮助。事实证明,带有测试帮助文件的测试应用程序似乎可以正常工作。使用我的giant应用程序和测试帮助文件进行测试也可以!我的巨型应用程序和巨型帮助文件之间似乎有些不愉快。从快捷方式中删除F1似乎没有任何影响。即使它不能解决我的具体问题,我也会接受你的回答,因为你帮了我。好笑。我重现了你描述的行为。