全部左端じゃ味気ないし。
そういえば今まで文字もボタンも左端にしか表示されていませんでしたね。何故でしょう。僕の怠慢ではありません。HSPの仕様というやつです。mes命令は、与えられた文字を表示した後カレントポジションを次の行に移動させます。これが今回のポイントです。
別途指定するパラメータが無い限り、ウインドウに表示されるものは全てカレントポジションに表示されます。カレントポジション、訳すと「現在位置」となりますが、そのまんまです。テキストエディタでいうなら、「キャレット(ほら、あの点滅してるやつ)のある場所」というのが一番近いかな。
文字を表示する位置や、ボタンを置く位置を移動させるには、このカレントポジションを変更してやれば良いのです。それにはpos命令を使います。
pos x, y x: カレントポジション・x位置 y: カレントポジション・y位置
中学校2年生以上であれば、数学で「座標」を習ったはずです。あの座標と大差ありません。簡単に説明するなら、x位置はウインドウの一番左からの距離、y位置はウインドウの一番上(もちろんタイトルバーは除きますよ?)からの距離を、ピクセル単位で指定します。(ちなみに、ウインドウ内での座標をクライアント座標系、ディスプレイ全体の座標をスクリーン座標系と言います。まあ、今の段階ではあまり関係ないので覚えなくても大丈夫です)
mes命令などは、このカレントポジションを左上として表示します。
mes命令やbutton命令などは、実行された後は次の行に移ります。あくまで次の行なので、x位置は変わりません。
文字の位置を変えるだけでも、全部左端に寄っているよりもまだましになります。
では次はちょっとおまけで、簡単なデジタル時計を作ってみましょう。
おまけ:『文字列を中央寄せする』
HTMLみたいに、CSSで簡単に中央寄せ、なんてことは出来ません。文字を中央寄せするには、カレントポジションのx位置を"{(ウインドウのxサイズ(xサイズ=横幅))-(文字列の横幅)}/2"にすることで出来ます。ウインドウの横幅は、ginfo関数で、ginfo(12)として取得するか、システム変数ginfo_winxで参照できます。文字列の横幅は、文字列を表示した後、つまりmes命令の直後にginfo(14)で取得、もしくはシステム変数ginfo_mesxで参照できます。デフォルトのままであれば横幅は1文字当たり全角が16、半角が8ですので、16*文字数(もしくは8*文字数)で計算することも出来ます。もしくは一旦表示させて横幅を取り出してから修正を加えるという方法を使います。ボタンの場合は、デフォルトで横幅は64です。――で、具体的なスクリプトを書くと、(ginfo_winx - mesx)/2となります。ginfo_winxはそのままで構いませんが、mesxには文字列の横幅を入れてください。これをpos命令の第1パラメータに指定すると、文字列を中央寄せ出来ます。縦に中央寄せするときは、ウインドウyサイズがginfo(13)かginfo_winy、文字列縦幅がginfo(15)かginfo_mesyです。文字列縦幅(ボタンも)はデフォルトで24です。
Last Modified: 2008-08-15