〜 ソフトウェア 〜
CHM形式のヘルプを開く (要HHCTRL.OCX)

HSPで1つのアプリケーションが完成すると、使い方を書いたヘルプ・マニュアルを作ります。
簡単なものではreadme.txtで十分かもしれませんが、
書かなければならないことが多かったり、何らかの装飾を施したい場合は、
テキストだけでは味気なく見難いものとなってしまいかねません。
そこで、コチラで紹介したWinhelpの後継版であるHtmlHelpを使ってみましょう。
拡張子*.chmとなっているHtmlHelpはWin98からVistaや7でもサポートされてますが、
VistaでXMLベースの新たなヘルプ形式(Assistance Markup Language)を採用しだしたようです…。
ただ、最後に書いた最新のヘルプは古いマシンだと見られない(かもしれない)ので、ココでは取り上げません。

ヘルプファイルは「exec "ヘルプファイルのパス", 16」でも当然起動できますが、
元になるアプリケーションを閉じてもヘルプファイルは表示されたままだし、
キーワード検索や特定ページの表示、ポップアップ表示等を行うことが出来ません。
API関数HtmlHelpを使用することで細かい制御をしつつ表示させることができます。
HtmlHelpは第1引数から「表示元ウィンドウハンドル」「ファイルパス」「動作定数」「パラメータ」
となっており、表示元ウィンドウハンドルは当然、HSPになるのでHSP3ならhwndを、
HSP2ならmref命令で取得できるBMSCR構造体の要素13を渡します。
ファイルパスはヘルプファイルのあるパスを、動作定数・パラメータには以下のような値を指定できます。
定数定数値パラメータ内容
HH_DISPLAY_TOPIC0x0000目次を表示
HH_DISPLAY_TOC0x0001目次を表示(ナビゲーションペインも目次を選択)
HH_DISPLAY_INDEX0x0002キーワードキーワード表示
HH_DISPLAY_SEARCH0x0003HH_FTS_QUERY構造体検索表示
HH_HELP_CONTEXT0x000FコンテキストID特定のトピックを表示
HH_CLOSE_ALL0x0012ヘルプを終了
HH_DISPLAY_TOPICHH_DISPLAY_TOCはどちらも目次を表示するものですが、 HH_DISPLAY_TOCは目次を表示して、かつナビゲーションペインも目次を開くもので、 もう一方のHH_DISPLAY_TOPICは必ずしも目次を開くとは限らない…とのことです。 アプリケーションを終了させる時はHH_CLOSE_ALLでヘルプも終了させるようにしてください。 下記のサンプルではコチラのサンプルヘルプを使用していますので、 実行させる前にHSPのカレントディレクトリに置いておいてください。

htmlhelp_open ヘルプファイル, コンテキスト
ヘルプファイル表示するヘルプファイルのパスを指定する。
コンテキストページに関連付けたコンテキスト番号を指定する。省略時は目次が表示される。

htmlhelp_close
[パラメータなし]起動したヘルプを終了するだけの為、パラメータは必要ない。
尚、プログラム終了時に自動的に呼び出される為、明示的に実行する必要はない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	ll_libload hhctrl, "hhctrl.ocx"
	ll_getproc HtmlHelp, "HtmlHelpA", hhctrl

#module
#deffunc htmlhelp_open str, int
	mref file, 32 : mref context, 1
	mref bmscr, 67
	if context {
		prm = bmscr.13, 0, 0x000F, context
	} else {
		prm = bmscr.13, 0, 0x0001, 0
	}
	ll_getptr file : ll_ret prm.1
	ll_callfunc	prm, 4, HtmlHelp@
	return

#deffunc htmlhelp_close onexit
	mref bmscr, 67
	prm = bmscr.13, 0, 0x0012, 0
	ll_callfunc	prm, 4, HtmlHelp@
	return
#global

	helpfile = curdir + "\\help2.chm"
	exist helpfile
	if strsize = -1 {
		dialog "[" + helpfile + "]がありません"
		end
	}
	objsize 100, 25
	pos  10, 10 : combox index, , "目次\nサンプル1\nサンプル2\nサンプル3\nサンプル4\nサンプル5"
	pos 120, 10 : button "ヘルプを表示", *open
	stop

*open
	htmlhelp_open helpfile, index
	stop

htmlhelp_open ヘルプファイル, コンテキスト
ヘルプファイル表示するヘルプファイルのパスを指定する。
コンテキストページに関連付けたコンテキスト番号を指定する。省略時は目次が表示される。

htmlhelp_close
[パラメータなし]起動したヘルプを終了するだけの為、パラメータは必要ない。
尚、プログラム終了時に自動的に呼び出される為、明示的に実行する必要はない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#uselib "hhctrl.ocx"
#func	global HtmlHelp "HtmlHelpA" int, str, int, int

#module
#deffunc htmlhelp_open str file, int context
	if context {
		HtmlHelp hwnd, file, 0x000F, context
	} else {
		HtmlHelp hwnd, file, 0x0001
	}
	return

#deffunc htmlhelp_close onexit
	HtmlHelp hwnd, "", 0x0012
	return
#global

	helpfile = dir_cur + "\\help2.chm"
	exist helpfile
	if strsize = -1 {
		dialog "[" + helpfile + "]がありません"
		end
	}
	objsize 100, 25
	pos  10, 10 : combox index, , "目次\nサンプル1\nサンプル2\nサンプル3\nサンプル4\nサンプル5"
	pos 120, 10 : button gosub "ヘルプを表示", *open
	stop

*open
	htmlhelp_open helpfile, index
	return