如何在Delphi XE应用程序中使用CHM HTML帮助文件?

5

Delphi - 如何在Delphi XE应用程序中使用CHM HTML帮助文件?

http://edn.embarcadero.com/article/27842这篇文章介绍了如何使用CHM文件。我按照文章中描述的步骤进行了操作。

添加:

const
  HH_DISPLAY_TOPIC        = $0000;
  HH_DISPLAY_TOC          = $0001;
  HH_CLOSE_ALL            = $0012;

function HtmlHelp(hwndCaller: HWND;
  pszFile: PChar; uCommand: UINT;
  dwData: DWORD): HWND; stdcall;
  external 'HHCTRL.OCX' name 'HtmlHelpA';

并且公共函数 HH`

function TForm1.HH(Command: Word; Data: Integer;
  var CallHelp: Boolean): Boolean;
begin
  if (Command = 0) and (Data = 0) then
      HtmlHelp(Application.Handle,
        PChar(Application.HelpFile),
        HH_DISPLAY_TOC, 0);

  CallHelp := False;
end;

在FormCreate事件中

  HelpDir:=ExtractFilePath(Application.EXEName);
  Application.HelpFile:=HelpDir+'Sample.chm';
  Application.OnHelp := HH;

在 button1 的 OnClick 事件中添加以下代码:
HH(0, 0, dummy);

点击button1后,光标会变为沙漏一段时间,这就是全部了。

我做错了什么?

如何从DelphiXE应用程序中使用CHM帮助文件?


1
你只需要将HtmlHelpViewer添加到你的uses子句中,就可以了。 - David Heffernan
HTMLHelpViewer 在我的 uses 子句中,所以它不是原因。 - Avrob
如果你使用它,你就不需要其他任何东西。 - David Heffernan
谢谢。我已经创建了一个帮助测试项目。它在那里可以工作。但是它在我的主项目中无法工作,这是一个 MDI 应用程序。 - Avrob
显然你的项目出了些问题,从这里看不出来是什么。 - David Heffernan
如果您正在使用Unicode(XE已经支持Unicode),请使用HtmlHelpW而不是HtmlHelpA。 - Slappy
1个回答

10

您正在使用的文章早于HTML帮助内置支持。现在,您可以执行以下操作:

  • 至少在一个使用子句中包含HtmlHelpViewer
  • Application.HelpFile设置为您的帮助文件的路径。

就这样。您问题中的代码应该被删除。内置的帮助查看器会处理所有这些细节。


包含HtmlHelpViewer并设置Application.HelpFile,就像奇迹般的一切都自动完成了。OP已经告诉你“HTMLHelpViewer在我的uses子句中,所以不是原因。” 正如你可以清楚地看到他使用了“Application.HelpFile:= HelpDir+'Sample.chm';”,现在呢?你的回答立即获得了2个赞同。但是无法帮助OP。这很遗憾。 - moskito-x
1
@moskito 我不明白你的评论。 - David Heffernan
以防万一,如果有人仍在使用Delphi 5(就像我一样),则应该使用UseHTMLHelp而不是HtmlHelpViewer。 - pyfyc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接