操作ウィンドウを増やす
今まで、HSPウィンドウ上にいろいろなモノを表示させてきました。
起動時に自動的に表示されるウィンドウ(以下、メインスクリーン)は、
HSPで生成できるウィンドウの1つです。
このメインスクリーンはHSPの機能により生成されますが、
例えばオプション画面用に別途ウィンドウを使いたいとか、
ステータスの内容をメインの内容と同時に別画面で表示させたいって時は、
ウィンドウを自分で生成しなければなりません。
…自前で用意すると言えども、HSPでウィンドウを生成する命令があるので臆することはありません。
メインスクリーンと同一形式のウィンドウを生成するには、下記の命令を使用します。
| screen ウィンドウID, 横幅, 高さ, モード, X座標, Y座標, 表示横幅, 表示高さ |
| | | |
| ウィンドウID | 何番目のウィンドウを初期化するかを指定。 |
| 横幅 | 画面の使用できる最大横幅。 |
| 高さ | 画面の使用できる最大高さ。 |
| モード | 画面の初期化モード。 |
| X座標 | ディスプレイに表示するウィンドウの基点X座標を指定。 |
| Y座標 | ディスプレイに表示するウィンドウの基点Y座標を指定。 |
| 表示横幅 | ディスプレイに表示する横幅。省略時は横幅パラメータと同等になる。 |
| 表示高さ | ディスプレイに表示する高さ。省略時は高さパラメータと同等になる。 |
ウィンドウID(p1)は、ウィンドウ毎に割り振られた番号を指し、
メインスクリーンが0、その他の新規に生成するウィンドウを1、2、3…と割り振ることができます。
割り振る順番に制限はなく、割り振ることの出来る最大IDもヘルプには記載されていません。
HSP2では生成できるウィンドウIDは0、2〜31の最大で31ウィンドウとされていましたが、
HSP3からはこの制約がなくなりました。ウィンドウID1や32以降を使用しても問題ありません。
どの辺りまでいけるのかをテストしてみたところ、IDが99,999,999までは他のID同様でしたが、
100,000,000を指定するとシステムエラーが発生することを確認しました。
また、面白いことにタスクマネージャで使用メモリを確認していると、
IDの大きさに比例して使用メモリが増えていっているようです。
比例してると言えども、10や20程度ではメモリ使用量の変化はあまり見られませんでしたが、
同一条件で100,000単位ずつ位にIDのみを変化させてみると、顕著に現れます。
ちなみにIDが99,999,999で400MB近くのメモリを消費していたようです…。
以上により、システムエラーの原因は搭載メモリ量により左右される可能性がある為、
環境によって使用可能な最大IDは変わる可能性がありますが、
出来る限り小さい順にIDを割り振ることをお勧めします。
もし既に表示しているウィンドウをscreen命令で最初期化した場合、
表示済みウィンドウの内容を一旦消去して再表示を行います。
横幅と高さパラメータ(p2、p3)は、ウィンドウの大きさです。
ウィンドウサイズを初期化後に変更する命令を後程で紹介しますが、
この横幅と高さで指定したサイズ以下には変更できても、初期化サイズを越える大きさにはできません。
もし、値を省略すると、デフォルトサイズ640×480となります。
モードパラメータ(p4)は、下記の画面モードの中からいずれかを組み合わせます。
| 値 | 効果 |
| 0 | 1677万色が使えるフルカラーモードウィンドウ。 |
| +1 | 1677万色内の256色のみが使用できるパレットモードウィンドウ。 |
| +2 | ディスプレイに表示させないで初期化するウィンドウ。 |
| +4 | サイズ固定(ウィンドウ枠が触れない)ウィンドウ。 |
| +8 | タイトルバーが若干細く、タスクバーに表示されないウィンドウ。 |
| +16 | ウィンドウ枠が通常以上に強調された深い縁のウィンドウ。 |
screen命令モード1の256色のみを使用できるようにするパレットモードウィンドウは、
使用可能色数を減らす代わりに処理速度を向上し、使用メモリ量減らすものですが、
近年ではフルカラー時に最適な処理速度となるように設計されているとどこかで聞いたことがあり、
搭載メモリも一昔前とは比べ物にならないほど増加しつつあります。
その為にこのモードで動作させるメリットが減っているかもしれませんが、
上記に述べたような特徴を持ったモードと覚えておいてください。
ディスプレイに表示されないモードは、以後もウィンドウを表示できないというわけではなく、
一時的に表示をせずに後から表示させる命令を用いて表示させる為にあります。
主に、初期化時の処理途中が見られては困る場合等で使用されます。
サイズ固定モードとは、メインスクリーンと同じウィンドウです。
HSP以外のあらゆるソフトのウィンドウは、ウィンドウ枠をドラック&ドロップ(D&D)することで
ウィンドウサイズを変化させることが出来ます。
ウィンドウID0はサイズ固定のみですが、ID1以降はデフォルトで可変できるウィンドウとなります。
サイズ固定モードを使用することで、プログラムで制御しない限り
サイズを変更できないウィンドウとすることが出来ます。
モード8を指定しなければ、生成したウィンドウ全てがタスクバーに載せられるウィンドウです。
モード8を加えることでオプション画面用等のツールウィンドウとすることができます。
ウィンドウ枠が強調される深い縁を持つウィンドウにする場合は16を加算します。
深い縁となることでどのようなメリットがあるのか…私はそれを知りません。
X及びY座標パラメータは、ウィンドウ基点(左上)がどの位置に来るように初期化するのか指定します。
表示横幅と高さパラメータ(p5、p6)は、実際にディスプレイに表示する大きさを指定します。
省略した場合は、パラメータ2と3の横幅・高さのサイズとなります。
主に、最大化されることを想定する場合、画面サイズはディスプレイサイズに、
実際に表示するウィンドウサイズはそれよりも小さく指定します。
HSP2では、表示サイズ(p7、p8)が表示できる最大サイズ(p2、p3)よりも小さい場合や、
ウィンドウサイズを縮められた場合、自動的にスクロールバーが付加されて、
ウィンドウ内をスクロールさせられるようになっていましたが、
HSP3からはスクロールバーが自動的には付かなくなり、自前で制御させる必要があります。
…このように、初期化パラメータは非常に多いですが、全部を設定する必要はありません。
例えば、位置指定をしなくても、ディスプレイ内には収まる位置となりますから、
厳密にこの位置に表示させたい、というわけではないら指定しなくても良いでしょう。
さらに、実際に表示するウィンドウのサイズと画面のサイズは同じである場合が多いですから、
そのような場合は、画面サイズだけを指定して、実際のウィンドウサイズは省略して問題ないでしょう。
screen命令では、画面のモードをどれにしても基本は変わりませんでした。
基本というのは、ウィンドウにタイトルバーが付いていて、
タイトルバーには最小化・最大化(押せないけど。)・閉じるボタンが付いている。
このような形です。
大抵のソフトはこの形となっていますが、タイトルバーが付いていないウィンドウのソフトがあります。
また、それどころかウィンドウの形状が丸いもの、キャラクタの形となったもの等があります。
これらは、また基本とは異なるウィンドウを使用しているのです。
HSPで利用するには以下の命令を使用します。
| bgscr ウィンドウID, 横幅, 高さ, モード, X座標, Y座標, 表示横幅, 表示高さ |
| | | |
| ウィンドウID | 何番目のウィンドウを初期化するかを指定。 |
| 横幅 | 画面の使用できる最大横幅。 |
| 高さ | 画面の使用できる最大高さ。 |
| モード | 画面の初期化モード。 |
| X座標 | ディスプレイに表示するウィンドウの基点X座標を指定。 |
| Y座標 | ディスプレイに表示するウィンドウの基点Y座標を指定。 |
| 表示横幅 | ディスプレイに表示する横幅。省略時は横幅パラメータと同等になる。 |
| 表示高さ | ディスプレイに表示する高さ。省略時は高さパラメータと同等になる。 |
またまたパラメータが多いですが、良く見るとscreen命令と全く同じ指定の仕方です。
違いは、モード(p4)と、生成されるウィンドウに枠やタイトルバーがないことだけです。
当然、命令の名称も違っているわけですけど、BackGroundSCReenの略でしょうかね…。
全パラメータが同じであり、モードの内訳が若干変更しているだけなので、モードのみ説明します。
その他については、screen命令の説明を参照してください。
画面モードですが指定できるのは以下を組み合わせてください。
| 値 | 効果 |
| 0 | 1677万色が使えるフルカラーモードウィンドウ。 |
| +1 | 1677万色内の256色のみが使用できるパレットモードウィンドウ。 |
| +2 | ディスプレイに表示させないで初期化するウィンドウ。 |
要は、ウィンドウ枠に関することと、タイトルバーに関することが除外されただけです。
あとHSP2から変わったこととして、ID0もbgscr命令で初期化できるようになりました。
移動はおろか、終了も簡単にはできません。
終了の仕方が分からない人に使われるとパニックになってしまう恐れがありますので、
終了の仕方を明記しておくか、終了方法を別途設けてあげましょう。
尚、ウィンドウの形状が四角ではなく、何らかのキャラクタの形の時等に使用するという話を触れましたが、
HSPの標準命令では実現できないものなので入門講座では説明しません。悪しからず。
| buffer ウィンドウID, 横幅, 高さ, モード |
| | | |
| ウィンドウID | 何番目のウィンドウを初期化するかを指定。 |
| 横幅 | 画面の使用できる最大横幅。 |
| 高さ | 画面の使用できる最大高さ。 |
| モード | 画面の初期化モード。 |
またしてもscreen命令と同じ様なパラメータですが、
位置と実際に表示するサイズ指定のパラメータがありません。
これは、ディスプレイに表示するウィンドウではない画面(以下、バッファ)だからなんですね。
screen命令やbgscr命令に非表示で初期化するモードの指定ができますが、
その指定を行った効果と同様のバッファになります。
ウィンドウは初期化後でも、後の章で紹介するウィンドウ表示命令を使用すれば表示可能ですが、
バッファは表示させることができません。
また、HSP3からbgscr命令同様にウィンドウIDをbuffer命令で初期化することが出来ますが、
メインスクリーン1つだけを立ち上げてる状態で、ID0をbuffer命令で再初期化すると
操作できるウィンドウがなくなってしまいます。
内部的に起動させ、処理の終了と共に自動終了するソフトであれば構いませんが、
立ちあげた後にユーザーの操作待ちをするソフトでは使い物になりません。
表示させることのできない画面は一体何の為に役立つのか、
その秘密は後の章で説明致しますが、
ゲーム作りの為にはかなり重要度の高い命令のうちの1つになります。
今は「表示させる必要のないウィンドウを生成する時はbuffer命令を使う」とだけ覚えて置いてください。
設定できる画面モードはbgscr命令より、さらにもう1つ減って0もしくは1のどちらかだけとなります。
| 値 | 効果 |
| 0 | 1677万色が使えるフルカラーモードウィンドウ。 |
| 1 | 1677万色内の256色のみが使用できるパレットモードウィンドウ。 |
HSPで生成できるウィンドウ命令は以上の3点だけです。
残り2つ、生成したウィンドウに施せる処理命令を紹介しておきます。
1つは、タイトルバーに表示するメッセージを変更する命令。
| title 表示テキスト |
| | | |
| 表示テキスト | タイトルバーに表示させるテキスト。 |
title命令を使用しなかった場合、デフォルトで「Hot Soup Processor verX.XX」と表示されます。
今後、作成したソフトを公開する時に、
いかにも「HSPで作成しました」と言わんばかりのタイトルより、ソフトの名称を表示させた方がイイです。
そのような変更したい時に、このtitle命令の出番となります。
最後の命令は、当章で少しだけ予告していたウィンドウサイズの変更が出来る命令です。
| width 表示横幅, 表示高さ, 基点X座標, 基点Y座標 |
| | | |
| 表示横幅 | 変更後のウィンドウ横幅を指定。 |
| 表示高さ | 変更後のウィンドウ高さを指定。 |
| 基点X座標 | 表示X位置を指定した座標となるように変更。 |
| 基点Y座標 | 表示Y位置を指定した座標となるように変更。 |
width命令はウィンドウの表示位置とサイズを変更する命令です。
内容の初期化は行いません。
表示横幅と高さ(p1、p2)がサイズ変更パラメータ、
基点XとY座標(p3、p4)が位置変更パラメータです、そのままですね。
省略されたパラメータは変更前の値を指定したことと同じとみなされます。
尚、screen命令の説明に書いた通り、初期化された画面サイズより大きくはできません(FAQ参照)し、
ある一定サイズ以下にもすることが出来ません(FAQ参照)。
ウィンドウを配置したり、サイズを変更された時に何らかの処理を行いたい場合は、
描画サイズの横幅が格納されるginfo_winx、高さが格納されるginfo_winyマクロを確認するか、
随分と先の話になりますが、サイズ変更通知メッセージを受け取るようにする命令を使います。
尚、余談ですが描画を行うサイズであり、ウィンドウ枠やタイトルバーの高さは含まれていません。
ウィンドウ全体の横幅はginfo_sizex、高さが格納されるginfo_sizeyマクロで取得できます。
同様に、ディスプレイのサイズはginfo_dispx、ginfo_dispyマクロの値を参照してください。
このディスプレイ全体サイズを取得することで、
ディスプレイ全体をウィンドウで覆うフルスクリーンウィンドウを配置することが出来ます。
HSP2ではウィンドウID1をフルスクリーン用ウィンドウに割り当てられていた為に、
使用することが推奨されていませんでした。
HSP3では、このフルスクリーンモードが廃止され、ウィンドウIDの上限もなくなりましたので
自由につけてよいこととなりました。
IDが−1でも作成はできましたが、終了(メモリ解放)時にエラーが発生しました。
また、−2以下もシステムエラーで作成に失敗しますので、実動できるものではありません。