如何在Delphi XE中使用A-links和A-keywords与CHM帮助文件?

3
"A"在A-links和A-keywords中代表"关联"。这是因为A-link关键字实际上并不是关键字,它们更像链接或跳转目标(在H&M中称为锚点)。与索引关键字不同,用户永远看不到它们。它们被称为“关联”,因为它们不是绝对的目标。
如何在Delphi XE中通过A关键字调用CHM帮助?

HtmlHelpViewer 单元似乎支持 A 链接,但我不知道如何使用它,也不知道 A 链接到底是什么。这是 Delphi 中我从未掌握的领域之一。 - David Heffernan
2个回答

1

在helpintfs中我没有看到任何支持它的内容。

我曾经尝试过使用D2006/FPC,并将结果提交给了FPC:

您需要从中获取“htmlhelp”单元

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/winunits-base/src/htmlhelp.pp?view=co

在该文件中进行一些ansi->unicode的转换(例如将所有pchar更改为pansichar,将ptr(u)int替换为native(u)int等)

该文件具有一个常量HH_ALINK_LOOKUP,据我所知,可以用于查找alinks和关键字。

这可以传递给htmlhelp函数。下面的代码来自Free Pascal,并使用ansistrings,但在Delphi中可能类似工作。

{$apptype console}
Uses HTMLHelp;

var
   keyword      : ansistring;
   HelpfileName : AnsiString;
   htmltopic    : AnsiString;
   res          : Integer;
   ah           : PHH_AKLINK ;

Begin
  Helpfilename:='rtl.chm';
  keyword:='Sysutils' ;

  New(ah);
  fillchar(ah^,sizeof(ah^),#0);
  ah.cbstruct:=sizeof(tagHH_AKLINK);
  ah.fReserved   := FALSE ;
  ah.pszKeywords :=pansichar(keyword);
  ah.pszUrl      := NIL ;
  ah.pszMsgText  :='Text succes' ;
  ah.pszMsgTitle :='Text fail';
  ah.pszWindow   := NIL ;
  ah.fIndexOnFail:= false;


  Res:=HtmlHelpA(0,pansichar(helpfilename) ,HH_DISPLAY_INDEX,PTRUINT(PAnsiChar(Keyword)));

  // keyword search seems to have same effect.
  Res:=HtmlHelpA(0,pansichar(helpfilename) ,HH_ALINK_LOOKUP,PTRUINT(AH));
  writeln(ah.pszkeywords);
  writeln(ah.pszurl);
  writeln(ah.pszmsgtext);
  writeln(ah.pszmsgtitle);
  writeln(ah.pszwindow);
  writeln(res);

 readln;
end.

1

Windows API函数HTMLHelp直接在Windows单元中提供。您需要使用HH_ALINK_LOOKUP命令。

如果您正在使用HelpInfts的帮助系统,则HtmlHelpViewer单元包含THtmlHelpViewer,其中包含用于处理ALinks的各种方法 - 特别是LookupALink。不幸的是,似乎没有这种类型的文档,因此您将不得不自己深入源代码(它非常简单,所以您不应该遇到太多麻烦)。


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