楽しいオブジェクト作成(前半)
HSPでは
ボタン(button)
チェックボックス(chkbox)
コンボボックス(combox)
リストボックス(listbox)
インプットボックス(input)
メッセージボックス(mesbox)
ウィンドウに配置するこれらのことをオブジェクトと呼びます。 作成すると自動的に作成した順番に0,1,2…と「オブジェクトID」というものが割り当てられます。 例えば5つ目に作成されたオブジェクトIDは4と言う風に。 オブジェクトは1つのウィンドウで最大でも64個までしか作成できません。 早速ボタンから順に作成法を説明していきます。 ボタンの作成は「button "ボタン上に表示する文字",ラベル名」です。 上記の様に「OK」と表示したければ"OK"とダブルクォートで囲んで指定します。 表示可能文字数は59文字までとなっています。 表示する文字を変数に置き換えることはできません。 位置を変更するのは以前使用したpos命令で変更できます。 パラメータに半角カンマ(コンマ)を挟んでラベル名を指定します。 ラベル名とは、ボタンを押した時にそのラベルにジャンプしろ、ということです。
	button "終了",*exit ; ボタンを押すとラベルexitにジャンプする
	stop

*exit
	end
これで「終了」と書かれたボタンを押すとラベルexitにジャンプしプログラムを終了します。 ここでちょっと不思議に思う方がいるかもしれませんね…。 「stop命令でプログラムが中断しているのに、なぜボタンを押すとプログラムが続行されるのか」と。 これはヘルプのstop命令のところに掛かれていますが、完全な中断ではなく一時中断です。 ラジカセ等の一時停止ボタンの様なものと覚えておいてください。 stop命令が処理されると次の処理の実行待ち状態となるわけですが、 今まででユーザーが起こせる処理といえば、右上にある「×」ボタン押す終了しかありませんでした。 上で書いたボタンオブジェクトを使うことで処理を再開させることが出来ます。 ここでひとつ追加説明を。 実行すればすぐ気づくと思いますが、ボタンサイズは小さくて半角文字で7,8文字でギリギリです。 HTMLのボタンのように標準サイズより大きくなった場合に自動的に大きくなってはくれません。 サイズ以上になると横にはみ出してしまい、何が書いてあるのか判らなくなってしまいます…。 ボタンに限らず、オブジェクトのサイズを変更するには、objsize命令を使用します。 p1にオブジェクトのxサイズ(横幅)、p2にyサイズ(高さ)を指定します。
	objsize 500, 40 ; 500 * 40 のオブジェクトを配置可能にする
	pos 10, 10 : button "このボタンを押すことで終了することができます",*exit
	stop

*exit
	end
次にチェックボックスの説明に入ります。 chkbox命令はクリックしてON,OFFを切り替えられるスイッチ型オブジェクトを配置するものです。 「chkbox "ボックス右横に表示するメッセージ",変数」と書きます。 変数にはチェックボックスの現在の状態が入ります。OFFなら0が,ONなら1が変数に入ります。
	objsize 200, 25
	chkbox "ピーマンが嫌い", a
	chkbox "トマトが嫌い", b
	chkbox "にんじんが嫌い", c
	chkbox "きゅうりが嫌い", d
	chkbox "ナスが嫌い", e
	button "審査", *check
	stop

*check
	f = a + b + c + d + e
	if f >= 3 {
		mes "好き嫌いが多いです"
	} else {
		if f = 0 : mes "野菜好きですね" : else : mes "普通ですかね"
	}
	stop
chkbox命令で作成する前に使用する変数に1を入れておけば初めからチェックの入ったモノにできます。 1を…というか、0以外の数値が入っていればすべてチェックされます。 変数に文字列が入っているとエラーになります。
	objsize 100, 20
	check = 3
	chkbox "チェック", check
	stop
続いてcombox命令です。 見た目はインプットボックスの様な感じで右側に下向き三角ボタンのついているオブジェクトで、 ボタンを押すと項目を選ぶリストが出てくるものです。 書式は「combox 変数,yサイズ(高さ),リスト内容」となっています。 変数には一番上の項目を0番として、何番目を選択したかの番号(INDEX)が入ります。 p2のyサイズとは、コンボボックス自体の高さではなく、ボタンを押して開いた時のリストの高さです。 ココで設定した値が小さく、リストの項目がすべて表示されないような高さに設定した場合、 右側にスクロールバーが付加されます。 逆に大きい値を設定した場合は、リストの最後の項目までのサイズに自動で変更し、 その下に余白が出来ると言うことはありません。 p3にはリストの項目を入れるのですが、文字列で指定してあげます。 例えば「東京」「大阪」「博多」という3項目を設定したい場合は、 "東京\n大阪\n博多"と項目の間に「\n」を挟みます。「\n」については第4章で触れた改行を表す記号です。 このp3には下記のように文字列型変数で指定することも可能です。
	list = "東京\n大阪\n博多"
	combox num,100,list
	stop
初めから項目を選択しておきたい場合はp1に指定する変数にあらかじめ数値を代入しておきます。
	num=1 ; 初めから上から2番目の項目を選択
	combox num,100,"グー\nチョキ\nパー"
	stop
-1を指定した場合は非選択状態になります。
	num = -1 ; どれも選択しない
	list = "月\n火\n水\n木\n金\n土"
	combox num,150, list
	button "項目", *index
	if num = -1 : mes "現在選択項目はありません"
	stop

*index
	mes "現在" + num + "番目が選択されています"
	stop
前半最後のオブジェクト配置命令、listbox命令を解説しましょう。 listbox命令はcombox命令のリスト部分が最初から見えているもので使い方はcombox命令と変わりません。 書式も「listbox 変数,yサイズ(高さ),リスト内容」とステートメント部分が変わっただけです。 ただしp2のyサイズはリストボックス自体の高さとなっており、ここが唯一combox命令と違う点です。
	num = 2
	listbox num, 100, "牛肉\n豚肉\n鶏肉"
	stop
オブジェクトをプログラムで選択するのはobjsel命令で、書式は「objsel オブジェクトID」です。
	repeat 10
		combox com.cnt,100,"ABC\nDEF\nGHI\nJKL"
	loop
	button "objsel",*select
	sel=9 ; ID9が初期選択されている為
	stop

*select
	if sel==9 : sel=0 : else : sel++
	objsel sel
	stop
オブジェクトはボタンにせよ、リストボックスにせよHSP標準のフォントで表示されますが、 もっと変わったフォントで表示したいという場合はobjmode命令を使いましょう。 書式は「objmode モード」となっており、通常はモード0のHSP標準フォントとなっています。 1にするとWindowsで使用しているGUIフォントと呼ばれるフォントに変わります。 2でfont命令で指定したフォントになります(使用時のパソコンにフォントがインストールされている場合)。 パソコンに入っているあらゆるフォントを使用することが出来ますが、 実行ファイルとして他人に配る時に、利用者のパソコンに指定フォントがインストールされてないなら、 HSP標準のフォントで代用されますので、文字を使用して何らかの処理をしたい場合には注意が必要です。 HSP2.6からはobjmodeにパラメータが1つ追加されて TABキーによるフォーカス移動の許可指定ができるようになりました。 詳しくはコチラのページをご覧ください。 4つのオブジェクトを説明しました。残りのオブジェクトは次章で説明します。