2

マスター chm ファイル ウィンドウで、マージされた chm ファイルのトピックを開きたいと思います。アプリケーション ヘルプのメイン chm ファイルがあります。したがって、このメイン chm ファイルにはサブ chm ファイルが含まれます。そして、htmlhelp関数を呼び出して、メインのchmファイルのウィンドウでサブ(マージされた)chmファイルのトピックを開きたいと思います。

以下は、メインの chm プロジェクトのヘッダー ファイルです。さらに、operation\ACORD_geometry.chm がマージされた chm ファイルです。現在、Adobe robohelp を使用しています。

[ALIAS]
  IDH_operation_geometry=operation\ACORD_geometry.chm:\HID_geometrytab_functions.htm

[MAP]
  #define IDH_operation_geometry    9001

そして、次の方法で htmlhelp 関数を呼び出します。しかし、トピックは開きません。.\help\3DFEMGeo.chm はメインの chm ファイルです。

HtmlHelp(Application.Handle, '.\help\3DFEMGeo.chm', HH_HELP_CONTEXT, 9001);

サブchmでのトピックの開き方を教えてください。

4

1 に答える 1

3

モジュラー ヘルプ システムを作成すると、複数のヘルプ プロジェクトのインデックスと TOC をマージすることでいくつかの利点が得られますが、壁を克服するのが難しい場合もあります。以下の手順の一部は、何年も前に Sean Stagmer によって投稿されました。状況依存のヘルプについては、下部のコンテンツとリンクも参照してください。

http://www.help-info.de/en/Help_Info_HTMLHelp/hh_context-id.htm

簡単に言えば(HTH - ニーズと環境に合わせて試してください):

// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:Master.chm::/SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:Master.chm::/SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET

そして物語の長いバージョン:

RoboHelp などの多くのヘルプ オーサリング ツール (HAT) は、Microsoft HTML ヘルプ コンパイラ (hhw.exe) を利用するための IDE フロント エンドです。RoboHelp の以前のバージョンの設計者は、HTML でコンパイルされたヘルプ ファイルを作成する技術的な側面をうまく分離しましたが、基礎となるツールを直接使用した場合に利用できるいくつかの機能を除外しました。具体的には、モジュラー ヘルプです。このトピックを調査したほとんどの人は、ヘルプ プロジェクト ファイル (.hhp) に次のコードを追加して、モジュラー HTML ヘルプ システムの設計を開始する方法を知ったと思います。

// *** BEGIN CODE SNIPPET
[MERGE FILES]
SubHelpSubject1.chm
SubHelpSubject2.chm
...
// *** END CODE SNIPPET

ここで、状況依存のヘルプとマージされたファイルのテーマにモジュール設計で取り組むことで、新たなひねりが加えられます。トピック ID を適切なマージされた HTML ファイルにマップするにはどうすればよいでしょうか? モジュール化されているため、トピック ID はマスター/ホスト ヘルプ ファイルにはありませんが、代わりに、マージされたサブヘルプ プロジェクトの .chm ファイルを通じて統合されています。これは、マスター/ホスト マスターの TOC ファイルに次のコードを配置することによって実現されます。

// *** BEGIN CODE SNIPPET
...
<LI>
<OBJECT type="text/sitemap">
  <param name="Name" value="SubHelpSubject1">
</OBJECT>
<OBJECT type="text/sitemap">
  <param name="Merge" value="SubHelpSubject1.chm::\SubHelpSubject1.hhc">
</OBJECT>
<LI>
<OBJECT type="text/sitemap">
  <param name="Name" value="SubHelpSubject2">
</OBJECT>
<OBJECT type="text/sitemap">
  <param name="Merge" value="SubHelpSubject2.chm::\SubHelpSubject2.hhc">
</OBJECT>
...
// *** END CODE SNIPPET

これら 2 つの追加 (MERGE FILES ステートメントと TOC ファイルへの追加) により、ヘルプ トピック情報へのトピック ID の正しい解決が完了します。ただし、HTML ヘルプ ウィンドウにはサブヘルプ プロジェクトの目次のみが表示されることに注意してください。にマッピングされました!マスター/ホスト TOC がまったく表示されません。何を与える?

答えは、マスター/ホスト プロジェクトのエイリアス ファイルにあります。優れた HTML ヘルプ コンテンツ開発者であれば、次のような単純なエイリアス構文を変更して、対象のトピック ID を適切なサブヘルプ ファイルにマップすることを知っていました。

// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1=Topic_1.htm
HID_TOPIC_ID2=Topic_2.htm
...
// *** END CODE SNIPPET

...これに:

// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET

この小さな「ms-its:」は、Web ブラウザーに入力する「http:」または「ftp:」のテキストに非常によく似ています。これは、Microsoft の Asynchronous Pluggable Protocol として知られています。'::/' の部分は参照です。C++ 用語での「間接性のレベル」または「参照エイリアス」の一種。したがって、状況依存のヘルプ トピックを正しいヘルプ トピックの HTML テキストにマップし、TOC をマスターと同期させておくという問題を解決するには、以下に示すように、間接的なレベルを追加して機能させる必要があります。

// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:Master.chm::/SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:Master.chm::/SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET

これは、「ヘルプ トピック HID_TOPIC_ID1 情報を表示する場合、Master.chm を開き、SubHelpSubject1.chm の HTML ファイル Topic_1.htm に移動し、ページを下のブックマーク Topic1 に移動する」という意味に解釈できます。

万歳!トピックがポップアップし、マスター/ホスト TOC も表示されます!

C++ の用語で考えると、エイリアス ファイルは、C++ クラスで機能を参照する方法と非常によく似ています。

Result = BaseClass::SubClass1::Subclass2::DoFunctionCall();

ちなみに、この構文は XML に置き換えられています。HTML ヘルプは、XML エントリを含むコレクション ファイル (.col) で指定された「コレクション」を参照します。エイリアス ファイルの Perl に似た鈍い構文よりも、読みやすく従うのがはるかに簡単です。

于 2015-05-25T16:08:28.823 に答える