1

Delphi XE2 で HTML ヘルプ ファイル (.chm) のサポートを追加するにはどうすればよいですか? HelpContextヘルプ ページを検索するには、すべてのコントロールのプロパティでA リンク (A キーワード) を使用する必要があります。Delphi XE2 では、ユニットごとに HTML ヘルプ ファイルをネイティブでサポートしていますHTMLHelpViewer。しかし、それをどのように使用するのですか?

4

3 に答える 3

2

F1コンテキストへのジャンプは難しくありません。

Edit1 を選択し、 を押しF1ます。ヘルプが開き、Overview.htm が表示されます。

ここに画像の説明を入力

前提条件。

ここに画像の説明を入力

Edit1 ヘルプ設定:

ここに画像の説明を入力

sample.chm ソース設定。

sample.ali

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

サンプル.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.

すぐに使用できる sample.chm とソースのダウンロードは次のとおりです。

.htm ファイルだけでなく、アンカーに直接ジャンプする簡単な方法があります。

sample.ali を変更する

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

Overview.htmでジャンプしたい場所にアンカーを挿入します。

[...]
<A NAME="UsingtheMenus" </A>
<P><STRONG>Using the Menus and Toolbars</STRONG>
<P>The menus and toolbars provide a complete set of tools 
[...]

F1で、overview.htm の目的のポイントに直接ジャンプできるようになりました。

ここに画像の説明を入力

于 2013-03-29T14:04:59.643 に答える
1

Aリンクを使用するには、次のことを行う必要があると思います。

  1. Application.OnHelp以下の説明に従ってハンドラーを割り当てます。
  2. Application.HelpFileプログラムの起動時に割り当てます。
  3. Application.HelpKeywordAリンクを使用してヘルプシステムを呼び出す場合は、を呼び出します。
  4. 状況依存のキー押下HelpKeywordに応答するGUIコントロールのプロパティを設定します。F1

ハンドラーは次のOnHelpようになります。

function TMainForm.ApplicationHelp(Command: Word; 
  Data: THelpEventData; var CallHelp: Boolean): Boolean;
var
  Link: THH_AKLink;
  ALink: string;
begin
  CallHelp := False;
  Result := True;
  //argh, WinHelp commands
  case Command of
  HELP_COMMAND:
    begin
      ZeroMemory(@Link, SizeOf(Link));
      Link.cbStruct := SizeOf(Link);
      ALink := PChar(Data); // we are going to re-purpose the keyword as an A-link
      Link.pszKeywords := PChar(AnsiString(ALink)); // seems we have to pass a PAnsiChar ..
      Link.fIndexOnFail := True;
      HtmlHelp(GetDesktopWindow, Application.HelpFile, HH_ALINK_LOOKUP, 
        DWORD_PTR(@Link));
    end;
  end;
end;

ユニットには、同じことを行うという名前のHtmlHelpViewerメソッドが含まれLookupALinkています。しかし、どうやって彼らを呼ぶことができるのかわかりません。

上記のアプローチは、キーワードをAリンクとして解釈するため、少しハッキーです。状況依存のヘルプが必要な場合、他に何ができるかわかりません。

于 2013-03-07T17:02:00.410 に答える
0

Xe2 ビューアーがどのように機能するかはわかりませんが (私は 2007 年です)、Microsoft HTML ヘルプ API の Eric Granges ポートを使用しているだけです。

関数を使用して Alink を呼び出すことができます

ChmShowTopic(const filename,atopic:string):HWND;

于 2013-03-08T10:54:54.063 に答える