HTML Helpの作成方法(基本編)
状況依存ヘルプを作成する

「状況依存ヘルプ」(context-sensitive help)とは、ユーザがアプリケーションの実行中に呼び出すヘルプです。

HTML Helpでは、フィールドレベルとウインドウレベルの状況依存ヘルプを設定できます。

フィールドレベル

  • 操作中にウインドウのタイトルバー、またはダイアログの ?マークボタンクリックした後、アプリケーションの項目をクリックした場合などに、対応するヘルプのポップアップを表示します。What's This Help、ポップヒントヘルプなどとも呼ばれます。
  • 状況依存ヘルプ用に、決められたフォーマットのトピックファイル(*.txt)を新たに作成する必要があります。

ウインドウレベル

  • ダイアログの[Help]ボタンをクリックした場合に、対応するヘルプをHTML Helpヘルプウインドウに表示します。

フィールドレベルの状況依存ヘルプ

1.テキストファイル(*.txt)を作成する

フィールドレベルの状況依存ヘルプのトピックは、テキストファイル(*.txt)に記述します。

通常のエディタなどで、次の書式でトピックを記述してください。

.topic トピックID(改行)
トピックの本文

  • 「.topic」と「トピックID」の間は、半角スペースを入れます。
  • トピックIDは各トピックでユニークな任意の文字列(半角英数字)を指定します。WinHelpの場合と同様「IDH_」から始めることが推奨されています。

例)

.topic IDH_CLOSE
このボタンをクリックすると、ファイルを保存します。
.topic IDH_OPEN
このボタンをクリックすると、ファイルを開きます。
.topic IDH_EDIT
このボタンをクリックすると、ファイルを閉じます。

2.ヘッダファイルを作成する

トピックIDとコンテキスト番号の対応を記述したヘッダファイル(拡張子 .hのテキストファイル)を作成します。

テキストエディタなどで、次の書式で記述してください。

#define トピックID コンテキスト番号(改行)

  • 「#define」「トピックID」「コンテキスト番号」の間は、それぞれ半角スペースを入れます。
  • 1行が1トピックになります。
  • コンテキスト番号には、各トピックでユニークな任意の番号(10進数または16進数)を指定します。

例)

#define IDH_CLOSE 20000
#define IDH_OPEN 20010
#define IDH_EDIT 20020

3.[TEXT POPUPS]にテキストファイルとマップファイルを指定する

  1. [Project]タブの アイコン(HTMLHelp API information)をクリックします。
    [HTMLHelp API information]ダイアログが表示されます。
  2. [Text pop-ups]タブの[Text file]ボタンをクリックし、状況依存ヘルプのテキストファイルを指定します。
  3. [Header file]ボタンをクリックし、ヘッダファイルを指定します。
  4. [OK]ボタンをクリックします。
    [Project]タブの[TEXT POPUPS]セクションに設定内容が表示されます。

[TEXT POPUPS]
sample.h
sample.txt

  • VBから上記の方法で、フィールドレベルの状況依存ヘルプを呼び出す場合、以前このページではマップファイルを使わずに直接コンテキスト番号のみを指定するように解説していました。この方法でも動作するのですが、上記の方法でマップファイルを指定しても動作して、こちらの方が推奨されていることが分かりました。
    VBから呼び出す場合は、アプリケーションオブジェクトのHelpFileプロパティに、ポップアップのテキストファイルを必ずインクルードしてください。このあたりの事情については、HTML Help CenterのTips and Tricks(英語)で詳しく解説されています。(2000/3/3追記)

ウインドウレベルの状況依存ヘルプ

1.ALIASを設定する

  1. アイコン(HTMLHelp API information)をクリックします。
    [HTMLHelp API information]ダイアログが表示されます。
  2. [Alias]タブの[Add]ボタンをクリックします。
    [Alias]ダイアログが表示されます。
  3. トピックIDを入力し、コンボボックスから対応させるトピックファイル名を選択して[OK]ボタンをクリックします。
  4. [Alias strings to HTML files]リストに「IDH_CLOSE=topic1.htm」のように、指定したトピックIDとトピックファイル名が表示されます。
  5. 手順2〜4の操作を繰り返し、すべてのトピックファイルに対してトピックIDを指定します。
  6. [OK]ボタンをクリックします。
    [Project]タブの[ALIAS]に設定内容が表示されます。

[ALIAS]
IDH_CUT=cut.htm
IDH_COPY=copy.htm
IDH_PASTE=paste.htm

  • ダイアログで設定せずに、プロジェクトファイルをテキストエディタで直接開いて[ALIAS]セクションを追加することもできます。
  • トピックの指定した位置を表示するには、

    IDH_CUT=cut.htm#sousa1

    のように指定します。上記のように指定してコンパイルすると、HHC3015の警告メッセージが表示されますが、これはメッセージの誤りで、ヘルプは正しくコンパイルされ、指定した位置を表示できます。
  • 複数のヘルプを結合する場合、サブヘルプを状況依存ヘルプにするには、メインヘルプのプロジェクトファイルの[ALIAS]セクションで、サブヘルプのエイリアスも指定する必要があります。以下のようにサブヘルプのchmファイル+「::/」+トピックファイル名を指定してください。

    IDH_TEST1=sub.chm::/test/data.htm

    また、サブヘルプのマップファイル(*.h)も、メインヘルプのプロジェクトファイル中で指定してください。

    なお、Visual C++の場合、上記のように設定しないでも、

    IDH_TEST1=test/data.htm

    で呼び出せるというお便りをいただきました。VC++関連は情報が少ないので、「IDH_TEST1=test/data.htm」が有効かどうか他に試された方がいらっしゃいましたらご連絡ください。(その後、VC++で「IDH_TEST1=test/data.htm」を試しても駄目だったといお便りもいただきました。う〜ん、どちらでしょう。いずれにせよ、駄目な場合は、「IDH_TEST1=sub.chm::/test/data.htm」をお試しください。)

2.MAPを設定する

C++から呼び出す場合
  1. C++の場合は、フィールドレベルの状況依存ヘルプと同様のフォーマットでヘッダファイル(*.h)を作成します。

#define IDH_CUT 1000
#define IDH_COPY 1010
#define IDH_PASTE 1020

  1. アイコン(HTMLHelp API information)をクリックし、[Map]タブの[Header file]ボタンをクリックしてヘッダファイルを指定します。
  2. [OK]ボタンをクリックします。
    [Project]タブの[MAP]セクションに設定内容が表示されます。

[MAP]
#include sample2.h

Visual Basicから呼び出す場合

ヘッダファイルを設定しません。プロジェクトファイルをテキストエディタで開き、次のように直接記述します。

[MAP]
#define IDH_CUT 1000
#define IDH_COPY 1010
#define IDH_PASTE 1020

  • VBの場合も、VC++と同様にヘッダファイルを設定してもトピックを呼び出せたというお便りをいただきました。こちらも、ヘッダファイルを使って駄目かどうか情報をいただければ幸いです。(Microsoftのサポート情報では、VBの場合は上記のようにヘッダファイルを使わずに直接指定する方法で説明しています。)

設定したコンテキスト番号をチェックする

フィールドレベルの状況依存ヘルプのチェック

HTML Help MVPのDavid Liske氏作のHTML Help Popup Testerというフリーウェアでチェックできます。コンテキスト番号を入力すると、対応するポップアップが表示されます。
以下のページからダウンロードできます。

http://www.mvps.org/htmlhelpcenter/hhF1test.htm

ウインドウレベルの状況依存ヘルプのチェック

HTML Help Workshopでコンテキスト番号を入力し、対応するトピックが表示されるかどうかチェックできます。

  • コンテキスト番号はコンパイルしたヘルプ(*.chm)に対して行います。ヘルプをコンパイルしてから以下の操作を行ってください。
  1. [Test]メニューの[HtmlHelp API]を選択します。
    [Test HtmlHelp API]ダイアログボックスが表示されます。
  2. [Browse]ボタンをクリックし、テストするHTML Helpファイル(*.chm)を選択します。
  3. [Command]コンボボックスで[HH_HELP_CONTEXT]を選択します。
  4. [Map number]に、表示するトピックのコンテキスト番号を入力します。
  5. [Test]ボタンをクリックします。
    指定したヘルプのウインドウが開き、 コンテキスト番号に対応するトピックが表示されます。
  6. 他のトピックをテストする場合は、[Map number]を変更した後、[Test]ボタンをクリックしてください。
  7. [Close]ボタンをクリックするとダイアログボックスが閉じ、テストを終了します。

アプリケーション側の設定について

  • HTML HelpのAPIは、WinHelpのAPIと異なります。HTML Help Workshopに、HTML HelpのAPIのライブラリとリファレンスヘルプが付属しています。

  • Visual Studio 6.0、Visual Basic 6.0、Visual C++ 6.0、MSDNライブラリ最新号などに、アプリケーションからのHTML Helpの呼び出しについての日本語のヘルプが入っています。

    MSDN ライブラリの内容は、以下のページにも掲載されています。Visual StudioやOffice 2000 Developer関連のドキュメントの中に、HTML Help関連の情報が入っています。
    http://www.microsoft.com/japan/developer/library/default.asp

  • HTML Help MVPのPaul A. O'Rear氏のセミナーノート (英語)に、Windows HelpとHTML Helpの状況依存ヘルプと両者の違いについてまとめられています。
    http://www.helpfulsolutions.com/ctx_sens.html

C++

  • HTML Help for Visual Studio(シェアウエアのHTML Helpオーサリングツール)に、Visual C++関連の詳細なドキュメントとサンプルコードが付属しています。またVisual C++モードでは、階層表示されたシンボル名を選択するだけで、状況依存ヘルプの設定が可能です。

    HTML Help for Visual Studio New
    開発:田村 峰幸氏 http://www1.odn.ne.jp/tamura/
    ダウンロード:http://www.vector.co.jp/soft/win95/prog/se172297.html

  • 「☆おのぎん's ほ〜むページ☆」に、MFCアプリケーションにHTML Helpを実装する方法が詳しく掲載されています。サンプルプロジェクトもあります。

    ☆おのぎん's ほ〜むページ☆ New
    http://www.aaa-int.or.jp/onogin/program_works/mfc_help/index.html

  • 「猫でもわかるプログラミング」の「Windows SDK編 第3部」に、ヘルプの呼び出し方についての説明があります。また、番外編としてHTML Helpの作成方法も掲載されています。

    猫でもわかるプログラミング
    http://www.kumei.ne.jp/c_lang/

  • 以下のサイトに、C++とVBからのHTML Helpの呼び出しについての各種の資料があります。

    Shadow Mountain Tech(英語)
    http://www.smountain.com/m_ProgrammingHelp.htm

Visual Basic

  • Visual Basic 6の場合は、Help FileプロパティとHelpContextIDプロパティを使用して簡単にヘルプを呼び出すことができますが、Visual Basic 5の場合や複雑な設定が必要な場合はHTML Help APIを使う必要があります。


  • HTML Help for Visual Studioに、Visual Basic関連の詳細なドキュメントとサンプルコードが付属しています。Visual Basicユーザにとっては貴重な日本語資料です。

    HTML Help for Visual Studio
    開発:田村 峰幸氏 http://www1.odn.ne.jp/tamura/
    ダウンロード:http://www.vector.co.jp/soft/win95/prog/se172297.html

  • VB+HTML Help専門のサイトでしたが、最近はC++関連の情報も掲載されています。サンプルも豊富です。

    HTML Help Center(英語)
    http://www.mvps.org/htmlhelpcenter/

VBA

  • MSDN Librayの「Office開発環境」→「Office 2000ドキュメント」→「Microsoft Office 2000/Visual Basic プログラマーズ ガイド」→「第13章 カスタムソリューションにヘルプを追加する」に、Office2000アプリケーションでHTML Helpを呼び出す方法が記載されており、VBAからの呼び出しについても触れられています。
    以下のMSDN Online Librayで見ることができます。
    http://www.microsoft.com/japan/developer/library/default.htm

  • Access 97アプリケーションでHTML Helpを呼び出すには工夫が要ります。HTML Help Centerの以下のページに詳しい説明があります。(英語)
    http://www.mvps.org/htmlhelpcenter/access.htm

Delphi

  • 「Delphiマガジン 第6号」(1999年8月16日発売)の「特集2 HTML Helpの作成とDelphiとの連携」に、HTML Helpの作成方法とDelphiとの連携について記載されています。

    Delphiマガジン
    http://dmj.psnet.ne.jp/
    上記サイトから、記事に関連したサンプルファイル(exe、chm、ソースコード)をダウンロード可能です。状況依存ヘルプに対応するためにHTML Help APIをラッパーしたコンポーネントも収録されおり、これを使うと開発者はHTML Help呼び出しにかかるコーディングすることなく、状況依存ヘルプを表示できます。
  • 以下のサイトにHTML Help Kit for Delphiや、HTML Help&Delphiのバグ情報が掲載されています。

    The Helpware Group (英語)
    http://www.helpware.net/

関連情報

「What's This Helpと状況依存ヘルプについて」