HSP3 プログラミングの基礎U
前へ 目次へ 次へ 

(2) 配置オブジェクト

 [OK]ボタンやチェックを入れるチェックボックスのような部品を「配置オブジェクト」という。
 HSPでは、次の配置オブジェクトが用意されている。ここでは、その使い方について学習する。

オブジェクト名 命令 機能
ボタン button  クリックすると指定ラベルのプログラムを実行する。
入力ボックス input  1行分の数値や文字列を入力する。
メッセージボックス mesbox  複数行の文字列を入力する。
チェックボックス chkbox  チェックマークのON/OFFを入力する。
コンボボックス combox  複数要素から選択したデータを入力する。
リストボックス listbox  複数要素から選択したデータを入力する。

 

ボタン (button)

button "文字列", *ラベル名
 "文字列"がボタンに表示される。クリックすると *ラベル名にジャンプ(goto)する。
 大きさを設定しなければ、64×24ドットで表示される。
pos 座標X, 座標Y
 座標(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ドットで表示される。
objprm オブジェクトID, データ
 オブジェクト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 

 

 

inserted by FC2 system