HSP Tips 2

Last Update : 2007/10/xx

HSP (v2.x/v3.x) の全般的なプログラミング情報トピックスいろいろです。

HSP命令のちょっとした小技

[1] ファイルのプロパティ表示

 exec命令のコンテキストメニュー操作名に「properties」を指定すると、ファイルのプロパティダイアログを表示できます。

	exec "ファイル名", 0, "properties"

[2] マウスポインタの非表示

 マウスポインタ(カーソル)を消すには mouse命令で可能です。そして、再表示はパラメータなしのmouse命令になります。あくまでHSPのウィンドウ上でのみ効果があります。

	mouse -1 ; ポインタ消よ!

	wait 200

	mouse ; ポインタ戻れ!

	stop

[3] ウィンドウ表示色

 一般的にウィンドウの表示色は灰色で、その色に「cls 1」を利用しているかもしれません。ところが、チェックボックスなどを置くと、表面色が異なるというのがわかります。

 HSP2の場合、mesbox命令のスタイル2「スクロールなし、スタティックテキスト」モードを利用します。「a = "" : mesbox a,サイズX,サイズY,2」を最初に書いて、その後にオブジェクトを置けば、Windows標準の表示色です。しかし、問題もあって、input命令 や listbox命令 の枠が表示されなくなります。

 HSP3の場合はHSP3 あれこれ (ウィンドウ編)のウィンドウ背景色を参照。

[4] dialog命令の複数ファイル表示

 dialog命令のファイル読み込みダイアログで複数のファイルを表示するには、下のように半角の 「;」(セミコロン) でつなげます。先頭の拡張子には「*.」を付けません。

 dialog "exe;*.as;*.html", 16, "ファイル"

 ちなみに、複数のファイルを選択したり、「ファイルの種類」項目に複数の選択肢を用意するには、標準命令ではいちおう不可能。HSP 2.xの場合、llmod.asモジュールを使用したmultiopen命令が用意されています。

 HSP3の場合は、S Softwareさんの「llmod3」モジュール、さくらさんの「stdlib」モジュール、当ページのちょこっと「拡張したファイルの開く/保存ダイアログ」モジュール あたりを参照。

[5] button命令 のオブジェクトID

 HSPが標準で用意しているオブジェクト(button命令、chkbox命令、input命令、listbox命令、mesbox命令、combox命令)を置いた場合、直後のシステム変数statに「オブジェクトID」(0〜)が返ります(→参照、HSP3 オブジェクト関連発展サンプル)。

 中でもbutton命令は、ジャンプ先でも「オブジェクトID」が返ってきます。これを利用すれば、ジャンプ先を1か所にまとめる、なんてことも可能です。(^-^)b

;	オブジェクトID 0
	button " a ", *jump
	mes stat

;	オブジェクトID 1
	button " b ", *jump
	mes stat

	stop


;	ボタンを押すと
*jump
	if stat = 0 : dialog "a ボタンじゃ!" : stop
	if stat = 1 : dialog "b ボタンじゃ!" : stop

	stop

[6] 大文字から小文字に変換

 標準のgetpath命令は基本的にファイルパスに対する変換処理ですが、単純な英字をすべて小文字に変換することもできます。指定する情報タイプは16です。また、llmod.as モジュールには、charupper命令(大文字変換) と charlower命令(小文字変換) があります。

 HSP3の場合は、HSP 3 あれこれ <文字列編>の「文字列の大文字/小文字変換」やgetpath関数を参照あれー。

[7] exgoto命令

 こんな命令は見たことないような・・・?、という人もいるかと思いますが、マクロ処理用に用意されている標準命令で、普通に利用できます。このexgoto命令は、if命令とgoto命令が合体した感じの命令でしょうか?

[8] 円を描画

 HSP3ではcircle命令という円を描画するための新規命令(塗りつぶしor円枠ライン)が用意されていますが、HSP2の場合は標準命令なし・・・。というわけで、ものすごい次元(?)の低い手法で。(^ー^;

//	円を描画? [HSP2]

	font "", 100
	color $FF
	mes "● ▲"

	stop

[9] 変数のバッファ解放

 sdim命令で大きなバッファを確保して、後にそれを解放したい場合は再度sdim命令を呼びます。

	sdim buf, 1024

;	バッファの解放 (64バイト)
	sdim buf

[10] 空のファイルを作成

 ファイルサイズが0バイトの空ファイルを作成出力します。HSP3では通常のbsave命令でセーブサイズ値を指定しておけばOKです(HSP2では実現不可)。また、note〜命令のメモリノートパッド機能を利用する手法もあります。

//	空のファイルを作成 [HSP3]

	bsave "hoge.txt", buf, 0
//	空のファイルを作成 [HSP2/HSP3]

	notesel buf
	notesave "hogehoge.txt"

↑TOP↑

HSPのちょっとした仕様

[1] コマンドラインパス

 HSPで作成した実行ファイルのアイコンやショートカットファイル上に、ファイルをドラッグ&ドロップすると、HSP 2.x ではシステム変数 cmdline に、HSP 3.0 ではシステム変数 dir_cmdline、または dirinfo関数(取得タイプ4) にファイルパスが返ります。ちなみに、ウィンドウ上へのドラッグ&ドロップの場合は、モジュール 「common/dragdrop.as」、付属サンプル「sample\new\dragdrop.hsp」(HSP 3.2〜では「sample\misc\dragdrop.hsp」)を参照。

 NT系OS(Windows NT/2K/XP/Vista/7)の場合、たとえば 「C:\Program Files\hsp30a\a.txt」 のようにパス内に半角スペースが含まれている場合、パスが「"」(ダブルクォーテーション)でくくられる仕様があり、そのための対処が必要です。

 以下の例は、ドロップされたファイルが1つのみの場合です。パスの1文字目を取り出して、「"」があったならば、getstr命令あたりで前後の「"」を取り除く処理を行ってます。

;	HSP2の場合

	filepath = cmdline

	peek check, filepath
	if check = '"' : getstr filepath, filepath, 1, '"'
;	HSP3の場合
;	(注) エディタの[HSP]メニュー→[HSP拡張マクロを使用する]を要有効。

	filepath = dir_cmdline
;	または、
;	filepath = dirinfo(4)

	if peek(filepath, ) = '"' : getstr filepath, filepath, 1, '"'

[2] 最小化ウィンドウ時の座標位置

 ウィンドウを最小化の状態にして、タスクバー上で右クリックメニューからプログラムの終了を行うと、 「ginfo 2」 の prmx と prmy に、Windows 9x系OS(95/98/ME) は 「3000」 、Windows NT系OS(NT/2K/XP/Vista/7) は 「-32000」 という特殊な数値が代入されます。(HSP3の場合はginfo関数に返る

 次回起動時のためにウィンドウ位置を保存している場合は要注意。仮にこの数値をそのまま利用するとなると、デスクトップの遙か彼方でウィンドウが起動することになり、起動しているのにも関わらずモニター上にウィンドウが無い!、という現象が起こってしまいます。

[3] レジストリからの文字列読み出し

 拡張プラグインhspext.dllで提供されているレジストリ関連命令。getreg命令で文字列を読み出す場合、読み出した文字列を確保するための変数サイズに少なくとも128バイト分用意しておかないと取得できないようです。(OSによる?

#include "hspext.as"

;	HSP3スクリプトエディタの外部ツール
	regkey 0, "Software\\OnionSoftware\\hsed3\\ExtTools", 0

	sdim aa, 128
	getreg aa, "filename1", 1, 128

↑TOP↑

起動時のオブジェクトのちらつき防止

 ボタンや入力ボックスなどのオブジェクトをウィンドウ上にたくさん置くと、実行ファイルを起動する時にこれらのオブジェクトがどんどん配置されていく様子が丸見えになります。また、ウィンドウの表示位置を指定すると、起動直後にウィンドウが指定された位置へ移動していく瞬間の様子が見えてしまいます。

 この時に利用するのが gsel命令。すべてのオブジェクトを配置し終えたスクリプトの区切りにgsel命令でウィンドウを表示します。そして、実行ファイル作成の際に、「起動時にメインウィンドウを非表示にする」オプションを有効にします。

 これにより、ウィンドウが非表示の状態で指定位置に移動しオブジェクトが配置され、この gsel命令 を受けてウィンドウが人間の目に見えるようになるわけです。起動時間もほんの少し短縮される可能性があるので、一石三鳥。(^^)b

 ちなみに、HSP3では、「起動時にメインウィンドウを非表示にする」オプションと gsel命令 の2点だけでは、ちらつきを抑制することはできません(仕様?、バグ?)。screen命令 や bgscr命令 の第4パラメータで 「2 : 非表示のウィンドウを作成する」モード も必要です。

;	<HSP3 - 実行ファイル自動作成 の例>

;	パックオプションで実行ファイル起動時にウィンドウ非表示
#packopt hide 1

;	非表示ウィンドウで作成
	screen 0, , , 2

;	(〜 オブジェクトを置いたり、色々とあれやこれや処理を行う 〜)

;	実際に目に見えるようにウィンドウを表示
	gsel 0, 1

↑TOP↑

<< HSP Tips 1 || HSP Tips 3 >>

Copyright © 2005-2012 . All rights reserved.