HSP3命令入門講座 <button命令>

Last Update : 2006/12/xx

button命令 (ボタン) の基礎

HSPのボタンオブジェクト (クラシックスタイル) ボタンオブジェクトの設置を行う命令です。命令名の由来は、そのまま「button」(ボタン)から。

 マウスでボタンを押して離すと、指定した「ラベル」(*〜)へジャンプして、処理が移る機能を持ってます。ボタンにフォーカスがある場合は「スペースキー」でもボタンを押すことが可能です。

 ラベルとして利用できる文字列は、「*(アスタリスク)の後に続く59文字(半角)以下」という制限があるので注意してください。一応、全角の日本語も使用できますが。存在しないラベル名を指定した場合はエラー(内部エラー番号19)になります。ちなみに、HSP2では「*」を付けないラベル指定も非公式で可能でしたが、HSP3ではエラー扱いになります。

 button "文字列", *ラベル名

 button命令を呼び出した直後のシステム変数statにはオブジェクトIDが返ります。また、同様にラベルジャンプ先でも押したボタンのオブジェクトIDが返ります。オブジェクトIDはオブジェクトを設置する順に0から割り振られる数値です。

 ボタンオブジェクトを削除するにはclrobj命令、ボタンにフォーカスを移すにはobjsel命令を利用します。ボタンを押せないように無効化するには、objgray命令(obj.asモジュール)やHSP 3.2以降で標準のobjenable命令があります。

↑TOP↑

サンプルソース (ボタンオブジェクトの設置)

 簡単にサンプルソースです。ボタンを押すとジャンプ先のダイアログ(dialog命令)が表示されます。

 ボタンオブジェクトの表示位置を指定するにはpos命令を、表示サイズを指定するにはobjsize命令を利用します。ジャンプ先ではstop命令を用意するのを忘れないようにしましょう。忘れるとラベルを素通りしてダイアログが連発表示されてしまいます。

//	ボタンの設置

;	表示位置
	pos 100, 100

;	表示サイズ (指定がない場合の大きさは64x24)
	objsize 100, 40

;	設置
	button "押して!", *jump_a
	mes "オブジェクトID "+stat

	button "Push!", *jump_b
	mes "オブジェクトID "+stat

	button "押す!", *jump_c
	mes "オブジェクトID "+stat

	stop

*jump_a
	dialog "押したーヨ。", , "オブジェクトID : "+stat
	stop

*jump_b
	dialog "ぷっしゅ!", , "オブジェクトID : "+stat
	stop

*jump_c
	dialog "押しましたね!", , "オブジェクトID : "+stat
	stop

 ラベルジャンプ先を1つにまとめることもできます。(ボタンがたくさんあると混乱する恐れもあるので注意!)

//	ボタンのジャンプ先をひとつにまとめる

	button "押して!", *jump
	mes "オブジェクトID "+stat

	button "Push!", *jump
	mes "オブジェクトID "+stat

	button "押す!", *jump
	mes "オブジェクトID "+stat

	stop

*jump
	dialog "押した", , "オブジェクトID : "+stat

↑TOP↑

サンプルソース (ボタン上の文字列変更)

 すでに設置されているボタンオブジェクト上の表示文字列をスクリプト上で後から変更するには、オブジェクトの様々な制御を行うobjprm命令を利用します。

 ちなみに、ボタン上に表示される文字列の表示フォントを指定するには、font命令objmode命令(モード2)を利用します。

//	フォント指定と文字列変更

;	フォントの適用
	objmode 2
	font "MS UI Gothic", 25, 1

	objsize 100, 50
	button "ポチッ!", *jump1

;	デフォルトのフォントに戻す場合
	objmode 1

	button "0", *jump2

	stop

*jump1
;	第2パラメータに変更後の文字列を指定
	objprm 0, "へんこー"

	stop

*jump2
;	カウントアップ
	value++
	objprm 1, value

	stop

↑TOP↑

サブルーチンジャンプ処理 gosub (HSP3)

 HSP3(HSP 3.x)からボタンオブジェクトにサブルーチンジャンプ機能が加わりました。「button」という命令文字の直後に「gosub」か「goto」という文字を付けるもので、「goto」は今まで通り普通のジャンプ処理です(省略可)。

 サブルーチンジャンプ機能の説明する前に、まずは従来のジャンプ処理。下のサンプルスクリプトでは、どんどん+1した数値をタイトルバーに表示する処理になってます。ここでもしボタンを押したら、ループ中(repeat〜loop)から抜け出して、「*reset」ラベルに飛び、当然ながらそこで処理がストップ(stop)します。

;	<普通のジャンプ処理>

	button "リセット", *reset

;	ループさせて数値をアップ
	repeat
		wait 10

		count++
		title ""+count
	loop

*reset
;	数値をリセット
	count = 0

	stop

 もし、数値の上昇を継続させたい場合、repeat命令の直前に別のラベルを用意しておき、そこへgoto命令で飛ばすというのが1つの方法になるかと思います。

;	<普通のジャンプ処理+goto命令でループへ戻す>

	button "リセット", *reset

;	戻り用のラベル
*modoru

;	ループさせて数値をアップ
	repeat
		wait 10

		count++
		title ""+count
	loop

*reset
;	数値をリセット
	count = 0

	goto *modoru

 今度はこの部分をサブルーチンジャンプ処理で行ってみましょう。これにより、もしボタンを押すと、ループ中から抜け出し、「*reset」ラベルの処理を経由して、再びループ内へ戻ってきます。

 button gosub "文字列", *ラベル名

;	<サブルーチンジャンプ処理>

	button gosub "リセット", *reset

;	ボタンを押しても、最終的にはここのループに戻ってきます
	repeat
		wait 10

		count++
		title ""+count
	loop

*reset
;	数値をリセット
	count = 0

;	gosub命令の組み合わせで必ずリターンさせます
	return

↑TOP↑

☆ 発展的なHSPサンプルスクリプト

ボタンがへこんだままの状態になるHSP標準命令には存在しない「トグルボタン」 (chkbox命令とWin32 API関数で実現) ボタンオブジェクトに関連したHSP3(HSP 3.x)向けの発展的なサンプルソースコード、モジュールを公開しています。sendmsg命令、oncmd命令、Windows API関数を利用して、HSPの基本命令では実現できない発展的な処理を実現してみます。

 たとえば、ボタン上に表示される文字列の表示位置の変更、文字列の複数行(改行)表示、標準命令には用意されてない「ラジオボタン」、「トグルボタン」、「フラットボタン」の設置、など。

 → HSP3オブジェクトの全般的な情報
 → sendmsg命令のコード (ボタン・チェックボックス)
 → ボタン関連の発展的なサンプルソース

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.