我正在为我们的软件设置帮助文件。我为许多特定的表单/框架/控件添加了HelpContext编号,它们都很好用。问题是主窗体根本没有弹出任何帮助。在所有这些情况下,我只使用F1来尝试触发帮助。
我对Delphi或帮助文件一窍不通,但我会发布我所做和我所看到的内容。
编辑:感谢一些帮助,我现在看到问题是由于主窗体是MDI父窗体而导致的。这仍然不能解决问题...对我来说几乎像是一个错误,但我想这可能是有意为之的某种原因。结束编辑
我包含此单元:HtmlHelpViewer 用于查看器。在主窗体创建构造函数中,我已添加了 Application.Helpfile := 'asdf.chm'。对于所有其他表单,我只是添加了上下文号码,并且它立即起作用。我尝试在主窗体上这样做,但什么也没发生。所以我尝试添加一个Application.OnHelp事件,但这不会在主窗体上调用(并且在所有其他可以工作的表单上确实会被调用)。
我能想到的最后一招是深入代码追踪并查看发生了什么。我到达了Vcl.Forms中的TCustomForm.WMHelp作为发生分裂的地方。该函数具有此循环:
我对Delphi或帮助文件一窍不通,但我会发布我所做和我所看到的内容。
编辑:感谢一些帮助,我现在看到问题是由于主窗体是MDI父窗体而导致的。这仍然不能解决问题...对我来说几乎像是一个错误,但我想这可能是有意为之的某种原因。结束编辑
我包含此单元:HtmlHelpViewer 用于查看器。在主窗体创建构造函数中,我已添加了 Application.Helpfile := 'asdf.chm'。对于所有其他表单,我只是添加了上下文号码,并且它立即起作用。我尝试在主窗体上这样做,但什么也没发生。所以我尝试添加一个Application.OnHelp事件,但这不会在主窗体上调用(并且在所有其他可以工作的表单上确实会被调用)。
我能想到的最后一招是深入代码追踪并查看发生了什么。我到达了Vcl.Forms中的TCustomForm.WMHelp作为发生分裂的地方。该函数具有此循环:
if iContextType = HELPINFO_WINDOW then
begin
Control := FindControl(hItemHandle);
while (Control <> nil) and ( not ControlHasHelp(Control)) do
Control := Control.Parent;
if Control = nil then Exit;
GetHelpInfo(Control, HType, ContextID, Keyword);
Pt := Control.ClientToScreen(Point(0, 0));
end
当主表单调用帮助控件时,帮助控件将为零然后退出。其他任何事情都会很好地进行。
显然我不知道这是为什么。答案可能是非常基本的。欢迎任何想法!
nil
是没有帮助显示的原因。问题是为什么会这样。下一步是查看hItemHandle
是什么并尝试识别它。我将使用Spy ++来调试它的这部分。 - David Heffernan