HSP3 プログラミングの基礎U | |
(2) 配置オブジェクト
[OK]ボタンやチェックを入れるチェックボックスのような部品を「配置オブジェクト」という。
HSPでは、次の配置オブジェクトが用意されている。ここでは、その使い方について学習する。
オブジェクト名 命令 機能 ボタン button クリックすると指定ラベルのプログラムを実行する。 入力ボックス input 1行分の数値や文字列を入力する。 メッセージボックス mesbox 複数行の文字列を入力する。 チェックボックス chkbox チェックマークのON/OFFを入力する。 コンボボックス combox 複数要素から選択したデータを入力する。 リストボックス listbox 複数要素から選択したデータを入力する。
◎ ボタン (button)
"文字列"がボタンに表示される。クリックすると *ラベル名にジャンプ(goto)する。
button "文字列", *ラベル名
大きさを設定しなければ、64×24ドットで表示される。座標(X, Y)をカレントポジションに設定する。
pos 座標X, 座標Y この命令以降の配置オブジェクトのサイズを設定する。
objsize 幅, 高さ
[CLICK]ボタンを配置し、クリックすると「クリック」と表示する。
button "CLICK", *clk ;[CLICK]ボタン
mes "配置オブジェクト"
stop
*clk
mes "クリック"
stop
[CLICK]ボタンが表示され、次の行に「配置オブジェクト」と表示される。[CLICK]ボタンをクリックするたびに「クリック」と表示される。
stop命令はプログラムを中断するだけで、ウィンドウを表示したまま待っている状態である。したがって、[CLICK]ボタンをクリックするとラベル*clkに移動してプログラム実行を再開する。
ちなみに、stop命令の代わりにend命令を使うとウィンドウも閉じられてプログラムが完全に終了する。
[END]ボタンを追加し、クリックするとプログラムが終了する。
button "CLICK", *clk
button "END", *owari ;[END]ボタン
mes "配置オブジェクト"
stop
*clk
mes "クリック"
stop
*owari
end
[CLICK]ボタンをクリックするたびに「クリック」と表示される。[END]ボタンをクリックするとプログラムが終了する。
左図のように、部品は上下に並んでいく。
ボタンの位置を変更する。座標(200, 100)からに配置する。
pos 200, 100 ;カレントポジション(座標)設定
button "CLICK", *clk
button "END", *owari
mes "配置オブジェクト"
stop
*clk
mes "クリック"
stop
次図のように表示される。(赤色以外)
pos命令はカレントポジションを指定した座標に設定する命令である。
カレントポジションとはカーソル(表示されないが)のようなもので、メッセージの表示やグラフィックス、配置オブジェクトなどが処理される座標である。
ボタンの大きさを変更する。縦横50ドットの正方形にする。
pos 200, 100
objsize 50,50 ;配置オブジェクトのサイズ設定
button "CLICK", *clk
mes "配置オブジェクト"
stop
*clk
mes "クリック"
stop
次図のように表示される。(赤色以外)
objsize命令は配置オブジェクトのサイズを設定する命令である。
再度、サイズを変更するか、画面をクリアするまでobjsizeで設定したサイズが維持されるのでこのような結果になる。
ボタンを横に並べて配置する。
x = ginfo_cx ;カレントポジションX取得 y = ginfo_cy ;カレントポジションY取得 button "CLICK", *clk pos x + 64, y ;カレントポジション設定 button "END", *owari mes "配置オブジェクト" stop *clk mes "クリック" stop *owari end
次図のように表示される。
ginfo_cxとginfo_cyはシステム変数でカレントポジションを格納している。
ボタンの標準サイズは64×24ドットなので、4行目で64を加算した座標にカレントポジションを設定している。objsize命令でサイズを設定したときは、その値を加算する。
◎ 入力ボックス (input)
入力されたデータは、変数に格納される。
input 変数, Xサイズ, Yサイズ, 入力最大文字数
Xサイズ、Yサイズは入力ボックスの大きさ(ドット)である。objsize命令ではサイズ設定できない。
大きさを設定しなければ、64×24ドットで表示される。オブジェクトIDで指定したオブジェクトの内容をデータに変更する。
objprm オブジェクトID, データ
入力ボックスを100×24のサイズで配置する。
input idata, 100, 24 ;入力ボックス
button "OK", *ok
stop
*ok
mes "入力されているデータ= " + idata
stop
最初、入力ボックスには 0 が入っている。そのまま[OK]ボタンをクリックすると「入力されているデータ= 0」と表示される。
次に、入力ボックスに 12345 と入力してから[OK]ボタンをクリックすると「入力されているデータ= 12345」と表示される。
さらに、入力ボックスに abcd と入力してから[OK]ボタンをクリックすると「入力されているデータ= 0」と表示される。
変数idataは整数型として初期化されるので、0 が入力ボックスに入った形で表示される。この入力ボックスに文字列abcdを入力すると変数idataに整数として格納しようとするので
0 となってしまう。
文字列を入力する入力ボックスを用意するには、変数を文字列型にしておく必要がある。具体的には、「idata = ""」のように0文字の文字列を格納する。
文字列を入力できる入力ボックスを配置する。
idata = "" ;変数idataを文字列型にする。
input idata, 100, 24
button "OK", *ok
stop
*ok
mes "入力されているデータ= " + idata
stop
最初、入力ボックスには何も入っていない。そのまま[OK]ボタンをクリックすると「入力されているデータ=」と表示される。
次に、入力ボックスに abcde と入力してから[OK]ボタンをクリックすると「入力されているデータ= abcde」と表示される。
さらに、入力ボックスに 12345 と入力してから[OK]ボタンをクリックすると「入力されているデータ= 12345」と表示される。この12345は「一万二千三百四十五」という整数値ではなく、単に「12345」の5文字の文字列である。
入力ボックスを2つ、ボタンを1つ配置して、ボタンをクリックすると、1つ目の入力ボックスの値の2倍を2つ目の入力ボックスに表示する。
input idata, 100, 24 ;1つ目の入力ボックス オブジェクトID=0 input ans, 100, 24 ;2つ目の入力ボックス オブジェクトID=1 button "2倍", *add ;1つ目のボタン オブジェクトID=2 stop *add xx = idata * 2 objprm 1, xx ;オブジェクトID=1の内容を変数xxに変更する。 stop
配置オブジェクトには、配置した順番で 0 から順にオブジェクトIDに割り当てられる。
objprm命令は指定したオブジェクトIDの内容を変更する命令である。
◎ メッセージボックス (mesbox)
入力されたデータは、変数に格納される。
mesbox 変数, Xサイズ, Yサイズ, スタイル, 入力最大文字数
Xサイズ、Yサイズは入力ボックスの大きさ(ドット)である。objsize命令ではサイズ設定できない。
大きさを設定しなければ、64×24ドットで表示される。
スタイルには、0, 1, 4, 5のいずれかを指定する。省略時は1となる。
0 スクロール可能なエディットボックス(書き換え不可)にする。 1 スクロール可能なエディットボックス(書き換え可能)にする。 4 横スクロールバー付きエディットボックス(書き換え不可)にする。 5 横スクロールバー付きエディットボックス(書き換え可能)にする。
メッセージボックスを配置する。
text = ""
mesbox text, 320, 240 ;メッセージボックス
button "OK", *ok
stop
*ok
mes text
stop
1行目で変数textを文字列型にしている。この1行目を削除するとメッセージボックスの配置命令(2行目)でエラーになる。
ただし、入力できる最大文字数は60文字程度である。
変数を文字列型にするsdim命令がある。これを使って次のように最大入力文字数を設定することができる。
1行目 text = "" → sdim text, 100
mesbox命令で入力最大文字数を設定する方法もある。
2行目 mesbox text, 320, 240,, 0
メッセージボックスに入力したデータを消去するボタン[CLEAR]と終了するボタン[END]を追加する。
sdim text, 1000
mesbox text, 320, 240
x = ginfo_cx ;カレントポジション
y = ginfo_cy
button "OK", *ok
x = x + 64
pos x, y
button "CLEAR", *clear
x = x + 64
pos x, y
button "END", *owari
stop
*ok
mes text
stop
*clear
objprm 0, ""
stop
*owari
end
objprm命令は指定したオブジェクトIDの内容を変更する命令である。
メッセージボックスのオブジェクトIDは0で、文字数0の文字列("")に内容を変更して、入力データの消去をしている。
2006, © Hiroshi Masuda |