Last Update : 2007/08/xx
マウスのボタンのクリック割り込み動作を設定する命令です。ボタンオブジェクトを設置するbutton命令のマウスバージョンといったところでしょうか。wait命令、await命令、stop命令時に割り込み処理が行われます。キーボードの場合はonkey命令が用意されてます。
命令の書式は、マウスのボタンをクリックした時のラベルジャンプ先を指定する形になります。「クリック」を正確に表現すると、ボタンを押して離した瞬間です。
onclick *label
ジャンプしたラベル先では、HSPのシステム変数のiparam、lparam、wparamに以下の数値が返ってきます。
変数 | 説明 | ||||||||||
iparam | 押し下げられているボタン番号が返ってきます。
|
||||||||||
lparam | マウスポインタのクライアント座標位置が返ります。下位ワードにX座標、上位ワードにY座標。内容的には、システム変数のmousex、mouseyと同じ値です。 | ||||||||||
wparam | 押し下げられているボタン番号が返ってきます。以下の数値の組み合わせです。
|
なお、onclick命令の第1パラメータ相当の部分に0を指定することで、割り込み処理を一時的に停止することもできます。逆に1を指定すると再開です。
onclick 0
☆ 関連
HSP3 あれこれ (マウス)
... マウス関連の命令、発展的なサンプルコード。
押しているマウスボタンをチェックするサンプルスクリプト。wparam値をチェックします。数値の組み合わせで返ってくるので、たとえば「3」なら、マウスの左右ボタン同時押しということになるわけです。
onclick *jump stop *jump sdim key if wparam & 4 : key += "Shiftキー + " if wparam & 8 : key += "Ctrlキー + " if wparam & 1 : key += "左クリック " if wparam & 2 : key += "右クリック " if wparam & 16 : key += "中クリック " mes "["+wparam+"] "+key
マウスをクリックした際のポインタ位置座標を取得するサンプルスクリプト。lparam値に返りますが、実際のところHSPのシステム変数のmousexとmouseyを見ればOKなので、あまり利用価値なし。
; 上位ワード/下位ワード切り出しマクロ #define ctype LOWORD(%1) (%1 & $FFFF) #define ctype HIWORD(%1) (%1 >> 16 & $FFFF) onclick *jump stop *jump ; lparamの下位ワードにx座標、上位ワードにy座標 mes ""+LOWORD(lparam)+"x"+HIWORD(lparam)
HSP3では、onclick命令のラベル名指定の前部分に「gosub」を付けることで、サブルーチンジャンプ処理が加わりました。ラベルジャンプ先では、必ず「return」させなければなりません。
なお、onclick命令のラベル名指定の前部分に「goto」を指定した場合は、普通のジャンプ処理です(省略可)。
処理の違いが分かるサンプルコードです。どんどん数値をアップする処理をループ中に行っているので、リセットするためマウスクリックした場合、数値の動きは・・・。
; サブルーチンジャンプ onclick gosub *jump repeat wait 10 title ""+count count++ loop *jump count = 0 ; ⇒ループ中に戻る return
; 通常ジャンプ onclick *jump repeat wait 10 title ""+count count++ loop *jump count = 0 ; ⇒まんまストップ stop