HTML Helpを呼び出すには

解決


Taku  2002-05-24 19:09:57  No: 919

Delphi6を使用しています
Application.HelpCommandのように
簡単にTHML Helpにアクセスする関数は無いのでしょうか
今は、ShellExecuteで開いていますが、トピック等が扱えないので、、、
よろしくお願いします。


たかみちえ  URL  2002-05-24 22:46:33  No: 920

…ん…?

  あ、えーっと、ふたつの方法があります。
ひとつは、hh.exeにコマンドラインを送る方法
  これはShellExecuteしか使うことのできないようなスクリプト言語でも、
簡単に使うことができます。

  方法は、目的のヘルプのページのURLを、hh.exeにコマンドラインとして送る
URLの書式は、
mk:@MSITStore:ファイルパス::/目的のページまでの内部URL  になってます。
ヘルプないでプロパティで確認しておいたほうがいいでしょうね。

  もうひとつはHTMLHelp.ocxを使う方法、こっちはAPIが呼び出せることが条件です。
HTMLHelpというAPIを使うと、すきなページをよびだすことができます。
そのページにIDをふっておけば。

  VB用APIビューアーとかにはない(ひょっとしたら定義pasファイルもないかも)です。
BCCの添付ヘッダファイルになんとか見つけましたけど…。

http://www.geocities.co.jp/HeartLand-Oak/8031/
ここにある"ヘルプましん"というソフトのHTMLヘルプに、
わりとくわしい説明がのってます。

  ああー、やっぱり気になるっ!
どこかで見ませんでした?ここで会う可能性もある人なんですけど…。
人違いだったらごめんなさい。


Taku  2002-05-24 23:26:24  No: 921

たかみちえ  さん
レス有難うございます
はじめまして、人違いでした。

DelphiからはHTMLHelpというAPIは呼び出せないようですし
"ヘルプましん"のHTMLヘルプを見ましたが、よく分かりませんでした
具体的な、HTMLHelpAPIの呼び出し方法を、お願い出来ませんか?


Taku  2002-05-25 01:49:07  No: 922

以下を参考にして、できました!
有難うございました。
function CallHtmlHelp(hwndCaller : HWND; pszFile: PChar; uCommand : Integer;dwData : DWORD) : HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA';


たかみちえ  URL  2002-05-25 02:07:48  No: 923

そうですか人違いですか^^;

  えと、Delphiから直接呼び出せない…というのは、
Delphiが、宣言用pasファイルを作っていないからです。
そういうAPI関数は、自分で書いて宣言する必要があるとのことです。
そのことについて、ここに書いてありました。
http://www.ab.wakwak.com/~greenspace/dev-api/

  これはVBの宣言です。uCommandに、下の数字を入れると、そのように行動してくれるとか。(ごめんなさい、hhctrl.ocxでした^^;)
Private Declare Function HTMLHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" (ByVal hwndCaller As Long, ByVal pszFile As String, Optional ByVal uCommand As HtmlHelpCommandContents, Optional ByVal dwData As Long = 0) As Long

Private Enum HtmlHelpCommandContents
    HH_DISPLAY_TOC = &H1 '目次表示
    HH_DISPLAY_INDEX = &H2 'キーワード表示
    HH_DISPLAY_SEARCH = &H3 '検索
    HH_HELP_CONTEXT = &HF 'dwDataに従う
    HH_CLOSE_ALL = &H12 'ソフトと同時行動
End Enum
これをDelphiの宣言に訳すと…。
  function HTMLHelp(hwndCaller : HWND; pszFile : PChar;uCommand  : Integer, dwData : Integer): Integer; stdcall; external 'hhctrl.ocx' name 'HTMLHelpA';
  たぶんこうなります。(他のAPI呼び出しのまね)
定数はいつもと同じようにconstで宣言してください。
(もどりちはBooleanかもしれません^^;VBとはBooleanの仕様が違うので)
hwndCaller…呼び出しもとハンドル
pszFile…ファイル名
uCommand…コマンド(定数)
dwData…開くページのID。上がHH_HELP_CONTEXTでない場合無視

  まちがってたら、上にURLを書いたページを参考にするか、
Delphiフォルダ以下、Source\Rtl\Win\ に、API呼び出しようのファイルがいっぱいあるので、
参考にしてください。
はじめてなので^^;

  こうやって使います、VBではもどりちをもらう必要のない関数の場合、
()をはずしてもいいことになっています、それ以外はDelphiと変わりません。
■HTMLHelp hWnd, App.HelpFile, HH_DISPLAY_TOC
たぶんDelphiだとこうかな。
HTMLHelp(Handle,Application.HelpFile, HH_DISPLAY_TOC);
もどりちは手に入れたところでどうしようもない(失敗したか成功したかだったはず)ので、無視してかまわないとおもいます。

  ただ、指定したページは、HTMLヘルプ作成時に、マップファイルでIDを指定しておかないといけません。
ShellExecute で、hh.exe にコマンドを送ると、確実は確実です。
ファイル名を覚えておかないといけないからめんどくさいものはめんどくさいですけど、
それはID指定だって同じ^^;
よそにメソッドを作っておくと、楽ですね。


たかみちえ  URL  2002-05-25 02:08:35  No: 924

長々と書いてるうちに解決しちゃいましたね^^;


Taku  2002-05-25 17:57:29  No: 925

たかみちえ  さん
お世話をお掛けしました

ところで、HTMLHelpはWin98のころからあったと思うのですが
なぜDelphiのVCLで対応していないのでしょうか?
今でもWinHelpの方が主流なのですか
皆さんは、どちらを使っているのか気になる所です。


たかみちえ  URL  2002-05-25 21:22:53  No: 926

そうですねぇ、わたしはHTMLヘルプを使ってます。ヘルプましんの作者さんは、
Delphiのヘルプは文字列検索しにくいのでHTMLヘルプの方がいいといっていました。
  でも、HTMLヘルプは起動が遅いので、ある程度大きなソフトはHTMLヘルプの方がいいにせよ、簡単なソフトはWinHelpのほうがよさそうですね。
rtfヘルプの方がお手軽でしょうし。

  そういえば余談ですけど、当然ながらこれ、クロスプラットフォームのアプリケーションには使えませんね。
  ということで、Delphian Worldに、ただのHTMLでキーワード検索などをできるようにするコンポーネントが公開されていました。

  わたしは使う機会はないと思っていますけど、
タブブラウザをいつも起動させているような人にとっては、
HTMLHelpより軽く、ブラウザ付属の便利機能なども全部使えるしで、
こっちのほうが役に立つかもしれませんね。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加