〜 ソフトウェア 〜
HLP形式のヘルプを開く (要USER32.DLL)

HSPで1つのアプリケーションが完成すると、使い方を書いたヘルプ・マニュアルを作ります。
簡単なものではreadme.txtで十分かもしれませんが、
書かなければならないことが多かったり、何らかの装飾を施したい場合は、
テキストだけでは味気なく見難いものとなってしまいかねません。
そこで、従来からあるMicrosoftが開発したリッチテキスト形式のヘルプファイルを使ってみましょう。
尚、拡張子*.hlpとなっているヘルプはWin3.0〜XPまで長い間使用されていましたが、
Vistaからは新フォーマットを促す為、専用ヘルプブラウザであるWinhelpは削除されました。

ヘルプファイルは「exec "ヘルプファイルのパス", 16」でも当然起動できますが、
元になるアプリケーションを閉じてもヘルプファイルは表示されたままだし、
キーワード検索や特定ページの表示、ポップアップ表示等を行うことが出来ません。
API関数WinHelpを使用することで細かい制御をしつつ表示させることができます。
WinHelpは第1引数から「表示元ウィンドウハンドル」「ファイルパス」「動作定数」「パラメータ」
となっており、表示元ウィンドウハンドルは当然、HSPになるのでHSP3ならhwndを、
HSP2ならmref命令で取得できるBMSCR構造体の要素13を渡します。
ファイルパスはヘルプファイルのあるパスを、動作定数・パラメータには以下のような値を指定できます。
定数定数値パラメータ内容
HELP_CONTEXT0x0001コンテキストID特定のトピックを表示
HELP_QUIT0x0002ヘルプを終了
HELP_INDEX
HELP_CONTENTS
0x0003目次を表示
HELP_HELPONHELP0x0004ヘルプの使い方を表示
HELP_CONTEXTPOPUP0x0008コンテキストIDポップアップ表示
HELP_FINDER0x000Bトピックの検索を表示
HELP_KEY0x0101キーワードキーワードに一致するトピックを表示
アプリケーションを終了させる時はHELP_QUITでヘルプも終了させるようにしてください。 下記のサンプルではコチラのサンプルヘルプを使用していますので、 実行させる前にHSPのカレントディレクトリに置いておいてください。

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

winhelp_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 user, "user32.dll"
	ll_getproc WinHelp, "WinHelpA", user

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

#deffunc winhelp_close onexit
	mref bmscr, 67
	prm = bmscr.13, 0, 0x0002, 0
	ll_callfunc prm, 4, WinHelp@
	return
#global

	helpfile = curdir + "\\help1.hlp"
	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
	winhelp_open helpfile, index
	stop

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

winhelp_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 "user32.dll"
#func	global WinHelp "WinHelpA" int, str, int, int

#module
#deffunc winhelp_open str file, int context
	if context {
		WinHelp hwnd, file, 0x0001, context
	} else {
		WinHelp hwnd, file, 0x0003
	}
	return

#deffunc winhelp_close onexit
	WinHelp hwnd, "", 0x0002
	return
#global

	helpfile = dir_cur + "\\help1.hlp"
	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
	winhelp_open helpfile, index
	return