Как использовать A-ссылки и A-ключевые слова с файлом справки CHM в Delphi XE? - PullRequest
3 голосов
/ 21 октября 2011

«A» в A-линках и A-ключевых словах означает «ассоциативный». Это потому, что ключевые слова A-link вообще не являются ключевыми словами. Они больше похожи на цели связи или прыжка (известные как якоря в H & M). Они никогда не видны пользователю, как ключевые слова индекса. Они известны как «ассоциативные», потому что они не являются абсолютными целями.

Как вызвать справку CHM по ключевому слову A в Delphi XE?

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Функция Windows API HTMLHelp доступна непосредственно в устройстве Windows. Вам нужна команда HH_ALINK_LOOKUP .

Если вы используете справочную систему из HelpInfts, модуль HtmlHelpViewer содержит THtmlHelpViewer, который содержит различные методы для работы с ALinks, в частности LookupALink. К сожалению, похоже, что документации по этому типу нет, поэтому вам придется детально изучить исходный код (это довольно просто, поэтому у вас не должно быть особых проблем).

1 голос
/ 21 октября 2011

Я не вижу поддержки в helpintfs.

Я попробовал себя один раз с D2006 / FPC и передал результаты в FPC:

Вам понадобится юнит "htmlhelp" из

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

и выполнить некоторый перевод в unicode в этом файле (например, изменить все pchar на pansichar, заменить ptr (u) int на native (u) int и т. Д.)

Этот файл имеет константу HH_ALINK_LOOKUP, которую afaik можно использовать для поиска ссылок и ключевых слов.

Это можно передать в функцию 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.
...