1

ShortInteger を渡して dwData パラメータの Word としてキャストすることで、CHM ファイルを開くことができます。IE

Unit Help;   //this is where the Id's are set with their description
 Interface
 Const

Address_File = 35;  //delphi identifies Address_File as a shortint
etc..


電話で ID を渡す

GetHelp(Address_File); //call get help pass my ID to open to the Address_File topic


GetHelp プロシージャ

procedure GetHelp(HelpID : Word);
begin
  Application.HelpFile := ProgramPath + 'help.chm';
  HtmlHelpW(0, PWideChar(Application.HelpFile),HH_HELP_CONTEXT , HelpID);
end;


HtmlHelpW 関数

function HtmlHelpW(hwndCaller : HWND; pszFile: PWideChar; uCommand : Integer;
         dwData : DWORD) : HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpW';

さまざまな ShortIntegers を渡すと、さまざまなセクションでヘルプ ファイルを初期化できます。ただし、値がどのようにマッピングされているかわかりません。chm ファイルには、マップできるようにしたいセクションがいくつかありますが、それらに関連付けられている短い整数またはコンテキスト ID がプログラムに文書化されていないか、マップされていません。

4

3 に答える 3

6

Free Pascal には、エイリアス (コンテキスト) データの回復を試みるコマンドを含む chmls.exe ユーティリティが付属しています。

chmls, a CHM utility. (c) 2010 Free Pascal core.

Usage: chmls [switches] [command] [command specific parameters]

Switches :
 -h, --help     : this screen
 -p, --no-page  : do not page list output
 -n,--name-only : only show "name" column in list output

Where command is one of the following or if omitted, equal to LIST.
 list       <filename> [section number]
            Shows contents of the archive's directory
 extract    <chm filename> <filename to extract> [saveasname]
            Extracts file "filename to get" from archive "filename",
            and, if specified, saves it to [saveasname]
 extractall <chm filename> [directory]
            Extracts all files from archive "filename" to directory
            "directory"
 unblockchm <filespec1> [filespec2] ..
            Mass unblocks (XPsp2+) the relevant CHMs. Multiple files
            and wildcards allowed
 extractalias <chmfilename> [basefilename] [symbolprefix]
            Extracts context info from file "chmfilename"
            to a "basefilename".h and "basefilename".ali,
            using symbols "symbolprefix"contextnr
 extracttoc <chmfilename> [filename]
            Extracts the toc (mainly to check binary TOC)
 extractindex <chmfilename> [filename]
            Extracts the index (mainly to check binary index)

少なくとも、どのページが ID を使用してエクスポートされるかを知ることができ、URL 名から何らかの情報が得られる可能性があるため、これが出発点になる可能性があります。

util は最近のリリース (必ず 2.6.0 を入手してください) にあり、Free Pascal ソースでも利用できます。これは、比較的簡単な作業で Delphi に変換できるはずです。

基本的に、chmls ツールはさまざまなテスト コードベースから作成されました。テストプログラムは、さまざまな CHM セクションの内容を逆コンパイルして出力し、FPC の一部でもあるヘルプファイル コンパイラ chmcmd を作成する際に使用されました。

于 2012-11-08T18:49:01.403 に答える
2

Delphi では、ヘルプ ファイルを呼び出すのはかなり簡単です。どの VCL フォーム アプリケーションでもHelpContext、ほぼすべてのコントロールのプロパティを、ヘルプ ファイルの特定のトピックに対応する一意のコンテキスト ID に設定できます。ヘルプ ファイルはこれらのマッピングを使用してコンパイルされましたが、逆コンパイルすると、これらのマッピングはなくなります。これらの ID を知るには、元のヘルプ ファイル プロジェクトにアクセスできる必要があります。

  1. HelpContextヘルプ ファイル内の対応するコンテキスト ID に対するコントロールのセット
  2. IDを使用するためHelpTypeのコントロールのセットhtContextHelpContext
  3. Application.HelpFileCHMファイルの適切な場所に割り当てます
  4. アプリケーションの任意の場所を押すF1と、コントロールまたはその親コン​​トロールのヘルプ コンテキスト ID に基づいてヘルプ ファイルが開きます。

元のプロジェクトがなく、それを再作成したくない場合は、ヘルプ ファイルのコンテキスト ID を繰り返し処理するという長い作業が必要になります。ヘルプ ファイルのサイズに応じて、0 から 1,000 または 50,000 の範囲で呼び出してみてください。

HelpConstants.pas私が実装するプラクティスは、共通のアプリケーション ベース全体で共有される、指定されたユニット内の一連の定数です。各定数名は、それが表すトピックを一意かつ簡潔に説明しています。アプリケーションの起動時に、これらのコンテキスト ID を対応するコントロール (通常はフォーム) に動的に割り当て、VCL が残りを処理します。

于 2012-11-08T03:01:55.063 に答える