Last Update : 2007/07/xx
メッセージボックスオブジェクトの設置です。命令名の由来は、「message box」から。任意の文字列を複数行分表示することができる領域を持ったオブジェクトです。(1行分の文字表示ならば、input命令を使用)
命令の形式は、下のようになっています。オブジェクトの表示位置はpos命令を使い、表示サイズはobjsize命令でも反映できます。メッセージボックスの設置前、第1パラメータの変数にあらかじめ文字列を指定しておくと、実際にそれが反映されたメッセージボックスが表示されます。
mesbox 変数, 横幅サイズ, 高さサイズ, スタイル, 最大文字数
第3パラメータのスタイルは下のような感じです。デフォルトではスタイル1が適用されており、横方向スクロールバーの有無と、編集できるかできないかの設定となります。縦方向スクロールバーは、必ず自動的に付きます。
スタイル2と3は、HSP2とHSP3で挙動が変更されています。
| スタイル | 編集 | |
| 0 | 横スクロールバーのないメッセージボックス (行が収まらない時は右端で折り返し) |
X |
| 1 | O | |
| 2 | <HSP2> 文字列を表示する「スタティックテキスト」オブジェクト | X |
| <HSP3> 横スクロールバーのないメッセージボックス (0と同じ) | X | |
| 3 | <HSP2> 文字列を表示する「スタティックテキスト」オブジェクト | X |
| <HSP3> 横スクロールバーのないメッセージボックス (1と同じ) | O | |
| 4 | 横スクロールバー付きのメッセージボックス | X |
| 5 | O | |
sdim a, 1024 a = "あいうえお\nメッセージボックス\nmesbox命令\n内部的にはエディトコントロール" ; オブジェクトの表示位置 pos 50, 50 ; メッセージボックス設置 mesbox a, 200, 45, 0 mesbox a, 200, 45, 1 stop
★ メッセージボックスの制限
HSPのメッセージボックスはWindowsのエディトコントロール(複数行)という部品が設置されます。このコントロールはWindowsの仕様でエディト内に表示できるサイズに制限があり、デフォルトで32KB(32,766バイト)となってますが、2倍の64KB(65,535バイト)まで拡張できるようになっており、HSPではこの拡張されたサイズが内部で設定されてます。
なお、Windows 9x系OSでは実際には60,000バイトを超えたあたりから挙動がおかしくなり始めます。そして、HSP3スクリプトエディタのように文字列の部分部分の配色を変更することは不可能です。このような制約ないエディトコントロールを利用するしかありません。(→
参照、HSP Tips:エディトコントロール)
メッセージボックスを設置した後に、ボックス内の文字列を変更するには、各種オブジェクトの様々な制御を行うobjprm命令を利用します。オブジェクトIDは、スクリプト上の設置順に0から割り振られるHSP独自の数値です。ちなみに、ボックスの内の表示文字列のフォントを指定するにはobjmode命令(モード2)+font命令を呼びます。
下のサンプルでは、横スクロールバーの有無の違いが分かるよう、スタイル&フォントサイズの違うメッセージボックスを2つ用意し、同じテキスト文章を表示させる形になってます。
a = "あいーん" objmode 2 font "", 10 ; 横スクロールバーなし pos 10, 10 mesbox a, 300, 400, 1 font "", 20 ; 横スクロールバーあり pos 310, 10 mesbox a, 300, 400, 5 ; デフォルトGUIフォントに戻す用 objmode 1 button "ろーど", *load stop *load dialog "txt", 16, "テキスト" if stat = 0 : stop notesel a noteload refstr ; ボックス内の書き換え objprm 0, a objprm 1, a stop
メッセージボックスに表示されている文字列の最後に新規の文字を追加する処理です。mesbox命令の第1パラメータで指定した文字列型変数には現時点で入力されている文字列が代入されてます。これに新規の文字をプラス(+)してから、ボックス内の文字列を変更するobjprm命令で反映させてやればOK。
// [HSP3] mesbox命令 文字の追加 ; 大きめにバッファ確保 (ここでは大したサイズを確保してないけれど) sdim buf, 1024 buf= "HSP講座 mesbox命令\nだよーん" mesbox buf, 400, 200 button "時刻", *add stop *add ; 時刻の文字を追加 buf += "\n"+gettime(4)+"時 "+gettime(5)+"分 // 上はこういう書き方もOK (こっちの方がパフォーマンスよろし) // poke buf, strlen(buf), "\n"+gettime(4)+"時 "+gettime(5)+"分 ; メッセージボックス内に変更反映 objprm 0, buf
HSP2には、mesbox命令の第3パラメータにスタイル2を指定すると、スタティックテキスト(スタティックコントロール)というオブジェクトの設置になります。
このスタティックテキストオブジェクトは、単純に文字列を表示するオブジェクトです。編集は不可能、スクロールバーもありません。文字列の「描画」を行うmes命令と違って、オブジェクト上に表示されているので、元々表示してある文字列を消す必要なく、objprm命令を使って文字列変更ができます。
; [HSP2のみ] スタティックテキスト a = "数値UP" pos 10, 10 mesbox a, 100, 20, 2 objsize 100 button "スタート!", *start stop *start repeat wait 16 ; スタティックテキスト内の書き換え objprm 0, ""+cnt loop
ちなみに、HSP3(HSP 3.x)では、このスタイルは廃止になっています。ただ、代替モジュール common\hsp3util.as が用意されており、winobj命令を利用した設置を行ってます。(→ 参照、HSP3 あれこれ オブジェクト編 3)
メッセージボックスに関連したHSP3(HSP 3.x)向けの発展的なサンプルコードを公開しています。sendmsg命令、Windows API関数などを利用して、基本的な命令では実現できない発展的な処理を実現してみます。(1つの統一された文字色変更、背景色の設定)
→ HSP3オブジェクトの全般的な情報
→ sendmsg命令のコード
(入力ボックス・メッセージボックス)
→ メッセージボックス関連の発展的なサンプルソース