前回は、
でマウスカーソルの座標取得と当たり判定について書きましたが、今回は、マウスクリックのイベントハンドラについて触れておこうかなと。
■ マウスハンドラの種類
マウスでのイベントですが、座標取得の場合、
のように座標取得を行うものをサブルーチンの中に包含して、それを
【 Graphicswindow.MouseMove 】
に変数名を代入して実行する形になります。つまり、マウスの移動に追って発生した座標取得を
■ Graphicswindow.MoseX
■ Graphicswindow.MoseY
で取得してカーソルの座標を得るのがマウスの座標取得の処理になります。これに対し、クリックの判定ですが、
を用います。記述はマウスがのボタンがクリックされた場合だと、
でボタンがクリックされなくなった場合には
のような感じで処理ができますから、挙動がボタンで発生するだけだとそれほど難しい処理ではありません。これを左右のボタンで割り当てて別の操作を入れることも可能です。
■ ソースコード
とりあえず、今回は、
な感じのコードを書いてみたのですが、実行すると、
ウインドウが出て、ウインドウ内にカーソルを入れると
のように座標が表示されます。今回はクリックイベントなのですが、判定エリアがあるのでその範囲とそれ以外の場所が存在します。範囲外でクリックをすると
のようにタイトルバーに範囲外であると表示され、範囲内でクリックをすると
のようにタイトルバーで表示される仕様になっています。
■ 解説
基本的には前回の範囲の判定を変数の変動に使用して、それにクリックイベントを入れただけの状態ですが、今回はボタンが押されていない条件をデフォルトの状態にしておき、押された時のみ変数参照で挙動が変わる作りにしています。
まず、イベントの発生ですが
の三つのイベントを個別に指定しています。
これに
のように範囲指定をした条件でPSという名所の変数を作成し、範囲内だと1で、範囲外だと0を割り当てるようにします。
この処理がサブルーチンのaに該当する処理になります。次に、マウスクリックですが、これはサブルーチンbで、
のような条件判定になります。マウスの座標は常に変わりますし固定されるので、今回のように
【 座標が決定していてボタンの判定を待つ 】
という作りだと座標取得を優先してその判定で変数で判断基準を作成し、それをボタンクリックで処理させることになります。その為、このサブルーチン自体が【 ボタンクリック時の処理 】ですから、処理の差異を条件判定で行うだけでマウスのクリックイベント時の処理を指定できます。
変数cはクリックされていない状態ですから、マウスがそのまま動いている条件ですから、通常時の表示になります。その為、範囲内や範囲外でのクリック時の表示の変更を戻すための指定なので、
のような記述にしています。
とりあえず、バックナンバーですが、
にまとめておきました。
SmallBASICですが、オンラインでも使えるので、
■ SmallBASIC(WEBブラウザ版)
https://smallbasic-publicwebsite.azurewebsites.net/
で試すこともできます。ただし、Fileオブジェクトを用いた場合のように、ストレージ内に読み書きできるテキストファイル存在する事が前提のプログラムだと、ストレージ内にその指定先のテキストファイルが存在しない場合にはエラーが出ます。また、ファイルが存在していても、絶対パスの記述が間違っている場合も、存在しないファイルの予備台になるのでエラーが出ます。そうした点には注意が必要ですが、インストールせずにオンラインでSmallBASICを使用することが可能です。