How to add support of HTML help files (.chm) on Delphi XE2?

前端 未结 3 359
清歌不尽
清歌不尽 2020-12-10 23:12

How to add support of HTML help files (.chm) on Delphi XE2? We need to use A-links (A-keywords) on HelpContext property of every control to lookup help pages. D

3条回答
  •  借酒劲吻你
    2020-12-11 00:03

    It's not hard with F1 jump to a context.

    Select Edit1 and press F1 . Help opens and Overview.htm is shown.

    enter image description here

    Prerequisite.

    enter image description here

    Edit1 Help settings:

    enter image description here

    sample.chm source settings.

    sample.ali

    IDH_Overview=Overview.htm
    IDH_welcom=FirstTopic.htm
    IDH_UsingtheMenus=Overview.htm
    

    sample.h

    #define IDH_Creating_Projects_and_Topics 1005
    #define IDH_Overview 1003
    #define IDH_UsingtheMenus 1009
    

    Unit1.pas

    unit Unit1;
    
    interface
    
    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, HTMLHelpViewer, Vcl.ExtCtrls;
    
    type
      TForm1 = class(TForm)
        HHALINKLOOKUP: TButton;
        JumpAnchor: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure HHALINKLOOKUPClick(Sender: TObject);
        procedure JumpAnchorClick(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    var
    hpPath : string;
    link : HH_AKLINK;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      hpPath := ExtractFilePath(Application.ExeName) +
        'HelpFile\sample.chm';
      Application.HelpFile := hpPath;
    end;
    
    procedure TForm1.HHALINKLOOKUPClick(Sender: TObject);
    var
    link : HH_AKLINK;
    szUrl,szKey,szMsgText,szMsgTitle,szWindow : AnsiString;
    begin
       szKey      := Edit1.Text; // 'UsingtheMenus';
       szUrl      :='Overview.htm';
       szMsgText  :='Error: Can''t find "'+Edit1.Text+'"!';
       szMsgTitle :='Error: HH_ALINK_LOOKUP';
       szWindow   :='main';
    
       with link do begin
       cbStruct    := sizeof(HH_AKLINK) ;
       fReserved   := False;
       pszKeywords := PChar(szKey);
       pszUrl      := nil;
       pszMsgText  := PChar(szMsgText);
       pszMsgTitle := PChar(szMsgTitle);
       pszWindow   := PChar(szWindow);
       fIndexOnFail:= False;
       end;
       HtmlHelpW(0, hpPath+'>main', HH_DISPLAY_TOPIC, DWORD_PTR(nil));
       HtmlHelpW(0, hpPath, HH_ALINK_LOOKUP, DWORD_PTR(@link));
    end;
    
    procedure TForm1.JumpAnchorClick(Sender: TObject);
    begin
      HtmlHelpW(0, hpPath+'::/Overview.htm#'+Edit1.Text+'>main', HH_DISPLAY_TOPIC, DWORD(nil));
    end;
    end.
    

    Here is a ready to use sample.chm and the source Download

    There is a trick how to easily, to jump, not only to the .htm file but jumps directly to an anchor.

    Change sample.ali

    IDH_Overview=Overview.htm
    IDH_welcom=FirstTopic.htm
    IDH_UsingtheMenus=Overview.htm#UsingtheMenus
    

    Insert an anchor at the place, you want to jump to in Overview.htm

    [...]
    
    

    Using the Menus and Toolbars

    The menus and toolbars provide a complete set of tools [...]

    Now it is possible with F1, jump directly to the desired point in overview.htm.

    enter image description here

提交回复
热议问题