今回はオブジェクトの話です。
オブジェクト…… 一番最初に連想するのは何でしょう? ボタンでしょうか。
いつも通りサンプルから————
// Start of Sample title "Object Army" syscolor 15 : boxf : color // system color で染め上げる sdim buf // バッファ(何かを溜める為の領域) を確保 sdim text // 同じく確保 buf = {" プログラ広場 プログラミング関係のこと いろいろあります 初心者大歓迎 管理人:上大&かーみ LastUpDate: "} text = "InputBox" objsize 200, 50 // オブジェクトの大きさ変更 pos 0, 0 : listbox num, 400, buf +"This is a ListBox" // リストボックス pos 20, 450 : mes "↑ ListBox" pos 220, 20 : combox num, 100, buf +"This is a ComBox" // コンボボックス pos 430, 20 : mes "← ComBox" pos 220, 60 : button "プログラ広場 概要", *Infomation // ボタン pos 430, 70 : mes "← ButtonControl" objsize 250, 25 // スリムにする pos 220, 120 : chkbox "プログラ広場は素晴らしいサイトだ。Yes or Yes ?", num // チェックボックス (ボタン) pos 220, 150 : mes "↑ CheckBox ( ButtonControl )" pos 220, 180 : input text, 300, 25 // インプットボックス (エディットコントロール) pos 220, 210 : mes "↑" pos 240, 220 : mes "EditControl" pos 220, 230 : mes "↓" pos 220, 250 : mesbox buf, 350, 185, 1 // メッセージボックス (エディットコントロール) stop *Infomation dialog buf, 0, "詳細は無し" stop
え〜と。
なぜ、オブジェクトの話をするのに、最初にこの命令なのでしょうか? (聞クナ)
始めに出てきた sdim 命令は、変数を文字列型(str)に初期化する命令です。
変数 = ""
という感じで文字列型にしても良いのですが (そもそも HSP では初期化する必要すらないのですが……)、
この書き方だとたまに嫌らしい問題が起こるので、sdim 命令をあえて使用しています。
文字列型変数 = {" "}
この書式は、変数に複数行の文字列を一発で代入したいときに使えます。
使えるだけで、あんまり使いません……
基本的には、次のように書くようです。もしくは、ファイルから読み込みます (方法は後述)。
sdim buf buf += "一行目\n" // \n は改行の記号 buf += "二行目\n" // \n == \r buf += "三行目\n" buf += "四行目\n"
そもそも、あまり複数行文字列は使わないもので。(僕だけか?)
さて、この行を見てください。
pos 0, 0 : listbox num, 400, buf +"This is a ListBox" // リストボックス
触れるのが遅かったですが、
半角コロン ( : ) を使うと、一つの行に、複数の命令を書くことが出来ます。
このように、複数の命令を一つの行に纏めることを、「マルチステートメント」と言います。
※ステートメント(statement) … "命令" という意味。代入文なども含む。
マルチステートメントは、このサンプルのように見やすくなることがありますが、たいていの場合見にくくなるので、乱用しない方が賢明です。
マルチステートメント、いつかまた使うので、頭の片隅ででも覚えておいてください。(;_;)
おっと! 話が逸れまくってる……。
何の話だっけ?
あ、オブジェクトか。
やっとオブジェクトです!
一番よく使う(?)エディットコントロール(Edit Control)と呼ばれる奴の解説から。
HSP には、Edit Control を配置する命令が2つあります。
input & mesbox
じゃじゃーん(遅い)!
さて、どこが違うのでしょうか?
最初のサンプル(ずいぶん遠い)を実行してみると、これらは画面の右下にありますね。(分かりますか?)
"InputBox" と表示されているのが input 命令で作成されたオブジェクト、
変数 buf の内容が表示されているでかいのが mesbox 製のオブジェクトです。
input は一行限定、
mesbox は複数行であることが分かります。
この2つの命令の違いは行数の違いだけで、内部的には EditControl と呼ばれるコントロール(後述)を使用しています。
ということは……mesbox でテキストエディタが作れるんじゃないか!?
はい、一応作れない事はないです。
ただし、性能がメモ帳レベルという情けないものになりかねないですが。
ちなみに、mesbox 命令は編集不可に出来ます。
input でも一応出来ますが、めんどうです。
// おまけ sdim edit, 65535 mesbox edit, 640, 480, 5, 65535 - 1 // なぜ -1 なのかは後ほど stop [EOF]
うわっ適当!
そのほかのオブジェクトに関しては言うことが特にないので、さらっと説明します。
HSP標準命令のオブジェクトの簡単な解説も終わったところで、オブジェクト関係の必須事項を説明していきましょうか!
さて、このオブジェクト、設置した後にほったらかしてはいけません!
後で弄くろうにも、HSP 側がそれを識別しないといけません。
button "Sample", *info oid_button = stat // オブジェクトID mes oid_button *info stop
これで、変数 oid_button にボタンのID が代入され、それを表示してみました。
※ oid …… object id の略。
ID も取得できたことですし、早速オブジェクトを弄ってみましょう !!
これら7つの命令・関数で、オブジェクトID を使います。(抜けてたら教えて下さい)
HSP3.2 で後半3つが追加され、だいぶ多くなりました。
objprm 命令は、さっきの ID のオブジェクトの内容を変更します。
変更できる内容については、ワンキー・ヘルプを見てください。(手抜き)
objsel 命令は、ID(やっぱり p1) にフォーカスを動かします。
フォーカスというのは、いくつかのオブジェクトの中で、注目されているものです。
つまり、
この画像の、ID 3 にあるような点線を持っているもののことです。
(ID 4 はマウスカーソルが合っているだけ。これを「ホット」という。)
ちなみに、ID の代わりに -1 を指定すると、現在フォーカスを持っているオブジェクトのIDを stat に代入します。
その場合、フォーカスの移動はありません。
clrobj は、その名の通りオブジェクトを削除します。
削除方法がちょっと特殊(?)で、p1 以上 p2 以下の ID のオブジェクトを一気に削除してくれます。
( 実は、オブジェクトIDはオブジェクトの設置順になっています。この命令のせいでしばしば狂いますが )。
引数を省略すると、すべて削除します。
1 だけ壊すときは、p1 と p2 に同じIDを指定します。p2 を忘れると、余計なものまで壊れます。
※この命令、たぶん使いません。
objinfo() 関数は……
今はまだ必要のないものなので、置いておきましょう。
別に覚える必要はありません。いつか、いやでも覚えてしまうほど使いますから……。
さて。
今回の講座で、いろいろ出来るようになりましたね。
例えば、ひたすら chkbox で項目選択、input で記述、mesbox で意見・感想を書けるアンケート・プログラムとか (おもしろくないか)。
ま、適当にいじってみると面白いですよ。
ではまた次回。
さっきの画像の謎も明らかに!(何が謎なのかも明らかに!)
by 上大
テキスト(文章)を編集(エディット)するためのソフト。
一番有名なのは、恐らく MicroSoft社の「メモ帳」(notepad)。Windows 標準装備です。
スクリプトも文章なので、スクリプトエディタも、テキストエディタの一つです。