なんか作って載せます

オブジェクトにはいろいろな種類があるんですねー。

第15回:様々なオブジェクトとテキストエディタ



 ウィンドウ内に配置して使うことのできる部品を、「オブジェクト」と呼びます。

 以下は、HSPが標準で使うことのできるオブジェクト一覧です。

 button … 押しボタン
 input … 入力ボックス
 mesbox … メッセージボックス
 chkbox … チェックボックス
 listbox … リストボックス
 combox … コンボボックス

 これらのオブジェクトを実際に出すサンプルが、付属CD-ROMに入ってました。

 これです。
サンプル1

 1つ1つ理解していこうと思います。


 2〜5行目までが、メッセージボックスを表示する処理ですね。

 3行目の「sdim buf,1024」というのは、文字列型配列変数を作成するものです。
 上の例だと、「変数bufは1024文字分のメモリをあらかじめ確保する」という意味になるそうです。
 余談ですけど、本の後ろの方にコマンド一覧があるので勉強しやすいです。

 4行目に「buf="メッセージボックス"」とあります。
 変数bufに「メッセージボックス」という文字列を代入しています。
 この変数bufが、入力のための変数となります。

 そして5行目に、オブジェクトの1つ「mesbox命令」が出てきます。
 「mesbox buf,640,64,1」とありますが、これは「サイズ(640,64)のスクロール可能なエディットボックス(書き換え可能)に、変数bufの内容を表示する」という処理です。
 一番後ろの数値はメッセージボックスのスタイルを決めるもので、0、1、4、5の4種類あります。


 7〜10行目までが、押しボタンと入力ボックスを表示する処理です。

 7行目の「objsize命令」で、表示するオブジェクトのサイズを決めています。
 objsize命令はこれ以降出てこないので、ここから下の処理で表示されるオブジェクトは、全て(320,24)のサイズになります。

 8行目のbutton命令は、「押しボタン」と書かれたボタンを押すと、ラベルpushに飛ぶようになってます。
 そして、飛んだ先のラベルpushはstop命令しかないので、特に何も起きません。

 9行目で、変数ibufに「入力ボックス」という文字列を代入しています。
 この変数ibufが、入力のための変数となります。

 10行目で、「input命令」が出てきます。
 「input ibuf」とありますが、これは変数ibufの内容を入力ボックス内に表示するという処理です。
 ここでは上のobjsize命令でサイズを決めているため、input命令にはサイズの指定がされていません。
 「input 変数,サイズ(x,y),入力できる最大文字数」という形で指定可能です。


 12〜13行目が、チェックボックスを表示する処理です。

 12行目で、変数chに0を代入しています。

 13行目で、「chkbox命令」が出てきます。
 「チェックボックス」というのが、このチェックボックスの内容表示文字列です。
 その後ろに変数chが指定されていますね。上でch=0としたので、ここでは0が指定されます。
 これは、初期状態でチェックされているかどうかを示しています。0ならチェックはOFF、1ならONです。


 15〜17行目が、リストボックスを表示する処理です。

 15行目で、変数lbに0を代入しています。

 16行目で、変数listに「リスト\nボックス\nです。」という文字列を代入しています。
 「\n」で文字列を3つに区切ってますね。こうすることにより、リストで選択する要素を設定しています。
 つまり、「リスト」「ボックス」「です。」の3つの要素が縦に並んでリストボックス内に表示されるということです。
 ちなみに、それぞれの要素には0から始まるインデックス番号が振られており、「リスト」は0番、「ボックス」は1番、「です。」は2番となります。

 17行目で、「listbox命令」が出てきます。
 変数lbには0が入っていますよね。この数値はインデックス番号を示し、ここでは初期状態でインデックス番号0番の「リスト」が選択されていることを表しています。
 その次の「64」という数値は、リストボックスのYサイズを指定しています。
 その次に変数listで、選択する要素を指定しています。


 19〜21行目が、コンボボックスを表示する処理です。
 コンボボックスというのは、複数の文字列要素の中から1つを選択させることのできる入力オブジェクトです。
 普段はしまわれていて、オブジェクトをクリックすると選択する要素一覧が現れます。

 19行目で、変数cbに0を代入しています。

 20行目で、変数clistに「コンボボックス\nA\nB\nC」という文字列を代入しています。
 \nで要素を区切るやり方は、上のリストボックスと同じです。要素は、「コンボボックス」「A」「B」「C」の4つです。

 21行目で、「combox命令」が出てきます。
 書き方も上のlistbox命令と同じで、コンボボックスを開いた時、初期状態でインデックス番号0番の「コンボボックス」が選択されています。
 「64」はコンボボックスのYサイズ、変数clistで要素の指定をしています。


 ちなみに、上のスクリプトを実行するとこのように表示されます。
サンプル1・実行


 ここまでは、オブジェクトを配置する命令を見てきました。
 ここからは、その配置したオブジェクトを管理するための命令を見ていきます。


 「objsize命令」
 この命令以降に配置されるオブジェクトの横幅、縦幅を指定する命令です。
 例えば「objsize 120,64」と書けば、以降に配置されるオブジェクトは全て横120ドット、縦64ドットの大きさになります。


 「objprm命令」
 すでに配置したオブジェクトの内容を変更するときに使います。

 例えば、
  a=123
  input a
  stop
 と書くと、入力ボックスに初期値として123が表示されます。

 これをキーボードからではなく、スクリプトによって強制的に書き換える時に、objprm命令を使います。

  a=123
  input a ; オブジェクトID0
  objprm 0,100 ; オブジェクトID0の内容を100にする
  stop

 こうすると、入力ボックスに表示される初期値は123から100に変更されます。
 さらに、変数aの内容も100になります。

 objprm命令は、input命令の内容を変更するだけでなく、ほかの種類のオブジェクトの内容も以下のように変更できます。

 ボタンの場合 … ボタン文字列の変更(文字列)
 入力ボックス(数値)の場合 … 入力内容の変更(数値)
 入力ボックス(文字列)の場合 … 入力内容の変更(文字列)
 チェックボックスの場合 … チェックのON/OFF(数値)
 コンボボックスの場合 … コンボボックスの内容変更(文字列)
 リストボックスの場合 … リストボックスの内容変更(文字列)

 上記は、objprm命令で内容を変更できるオブジェクトと、そこで指定するパラメータの内容です。


 「objsel命令」
 objprm命令と同様、オブジェクトIDを指定する命令の1つです。

 この命令は、単に指定したオブジェクトに「入力フォーカス」を合わせます。
 入力フォーカスというのは、入力のためのカーソル(キャレット)が現れて、キーボードからの入力が可能になる状態のことです。


 「clrobj命令」
 指定したオブジェクトを削除するための命令です。

 例えば、

  clrobj 0,2

 と書けば、0〜2までのオブジェクトIDを持つオブジェクトが画面からなくなります。

 多くの場合、cls命令やscreen命令で画面を初期化すれば、全てのオブジェクトがクリアされるので問題ありません。
 clrobj命令は、画面をクリアせず、オブジェクトだけを消したい時に使われる特殊な命令です。

 clrobj命令で削除したオブジェクトIDは、それ以降に新たにオブジェクトを配置した際、そのオブジェクトに対し再利用されます。
 再利用される順番は、常に小さい番号からになるそうです。


 予想以上に情報量が多かったので、テキストエディタについては次回に回します。


 今回はこれで終わり。


2012/05/26/Sat 更新

inserted by FC2 system