この章まで「待機状態から何らかの処理を実行する」イベント処理は、 ループで変数の状態を監視させて変化があった時に処理させるか、 button命令により配置したボタンを押下した時のいずれかでのみ実行させることができました。 この他に「●●された(またはされようとしている)」状態を「開始キー」として設定しておき、 感知すれば自動的に指定したラベルへジャンプさせることが可能です。 まずは、マウスクリックされた時に何らかの処理を起こしたい場合の命令から説明します。 stick命令の紹介で、クリックをイベントとして押された回数を取得するサンプルを載せましたが、 あくまでクリック値が変数に値がセットされ、押されたかをループで常時監視しているだけの話。 今回は、他のどんな処理をやってる最中(ただしウェイト等の待機状態であることが条件)でも、 監視せずとも押されたら、ソレをイベントとして特定のラベル位置に強制移動させるというものです。
| onclick goto/gosub ラベル | |||
| goto/gosub | ジャンプの方法。ジャンプ後にreturnで戻るか戻らないかの設定。 | ||
| ラベル | ジャンプ先のラベル(アスタリスクから書くこと!)。 | ||
1 2 3 4 5 6 7 |
btn = "左", "右", "中" onclick gosub *click stop *click mes btn(iparam / 3) + "ボタンが押されました" return |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
btn = "左", "右", "Shift", "Ctrl", "中"
onclick gosub *click
stop
*click
msg = ""
chk = 1
foreach btn
if wparam & chk : msg += strf("[%s]", btn.cnt)
chk <<= 1
loop
mes msg + "ボタンが押されています"
return
|
1 2 3 4 5 6 7 |
onclick gosub *click
stop
*click
mes strf("lparamの座標(%d, %d)", lparam & 0xFFFF, lparam >> 16)
mes strf("システム変数(%d, %d)", mousex, mousey)
return
|
1 2 3 4 5 6 7 8 9 10 11 12 |
onclick gosub *click button gosub "監視切替", *change stop *click mes "現在監視中!" return *change onclick chk chk = 1 - chk return |
| onkey goto/gosub ラベル | |||
| goto/gosub | ジャンプの方法。ジャンプ後にreturnで戻るか戻らないかの設定。 | ||
| ラベル | ジャンプ先のラベル(アスタリスクから書くこと!)。 | ||
1 2 3 4 5 6 7 8 |
onkey gosub *pushkey mes "制御キー無視、押し続け無効" stop *pushkey if (lparam >> 30 & 1) ! 0 : return // 「if lparam >> 30」と同じ if iparam : mes strf("%c", iparam) return |
| onexit goto/gosub ラベル | |||
| goto/gosub | ジャンプの方法。ジャンプ後にreturnで戻るか戻らないかの設定。 | ||
| ラベル | ジャンプ先のラベル(アスタリスクから書くこと!)。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
onexit gosub *exit notesel s mesbox s, ginfo_winx, ginfo_winy stop *exit if s ! "" { dialog "終了前に保存しますか?", 2 if stat = 6 { dialog "", 17 if stat : notesave refstr } } end // なければ終了できなくなるので必ず入れること! |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
onexit gosub *exit repeat 3, 1 screen cnt, 300, 200 title "ID:" + cnt loop stop *exit if wparam { gsel wparam, -1 gsel 0, 1 mes "ID" + wparam + "を閉じました" return } end |
| onerror goto/gosub ラベル | |||
| goto/gosub | ジャンプの方法。ジャンプ後にreturnで戻るか戻らないかの設定。 | ||
| ラベル | ジャンプ先のラベル(アスタリスクから書くこと!)。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
onerror *error mes 1 / 0 stop *error sdim msg, 128 if wparam = 1 : msg = "予期しない自体が発生したようです" if wparam = 2 : msg = "スクリプトに書いた文法が間違っているようです" if wparam = 3 : msg = "指定すべきパラメータに問題があるようです" if wparam = 4 : msg = "不正な計算式を処理しようとしたようです" if wparam = 5 : msg = "省略できないパラメータを省略したようです" if wparam = 6 : msg = "指定すべきパラメータの型がおかしいようです" if wparam = 7 : msg = "指定した配列要素番号は用意されてないようです" if wparam = 8 : msg = "指定したラベルが無効なようです" if wparam = 9 : msg = "多重にネストしすぎているようです" if wparam = 10 : msg = "リターンすべき箇所が見つからないようです" if wparam = 11 : msg = "ループのはじめが見つからないようです" if wparam = 12 : msg = "指定したファイルは無効なようです" if wparam = 13 : msg = "指定した画像ファイルは無効なようです" if wparam = 14 : msg = "外部のファイル呼び出しに失敗したようです" if wparam = 15 : msg = "カッコの数が合ってないようです" if wparam = 16 : msg = "指定できるパラメータ数よりも多く指定しているようです" if wparam = 17 : msg = "文字列の許容量を超えたようです" if wparam = 18 : msg = "代入しようとしているものは変数じゃないようです" if wparam = 19 : msg = "0除算しようとしているようです" if wparam = 20 : msg = "指定位置の文字列情報は参照できないようです" if wparam = 21 : msg = "現在は非サポートな機能を使用しようとしているようです" if wparam = 22 : msg = "計算式にカッコを使いすぎているようです" if wparam = 23 : msg = "パラメータに変数以外を指定しているようです" if wparam = 24 : msg = "整数を指定すべき箇所に実数または文字列が指定されたようです" if wparam = 25 : msg = "配列変数の要素指定方法が間違っているようです" if wparam = 26 : msg = "メモリ確保に失敗したようです" if wparam = 27 : msg = "変数の型初期化に失敗しているようです" if wparam = 28 : msg = "関数の指定パラメータが間違っているようです" if wparam = 29 : msg = "スタックが破壊されてしまったようです" if wparam = 30 : msg = "パラメータに相応しくない名称が指定されたようです" if wparam = 31 : msg = "配列変数に複数の型を混在させようとしたようです" if wparam = 32 : msg = "関数のパラメータ書式が間違っているようです" if wparam = 33 : msg = "配置オブジェクトが多すぎるようです" if wparam = 34 : msg = "指定したものは配列変数・関数ではないようです" if wparam = 35 : msg = "モジュールのパラメータが指定されてないようです" if wparam = 36 : msg = "モジュールの初期化に失敗したようです" if wparam = 37 : msg = "変数の型変換に失敗したようです" if wparam = 38 : msg = "指定したDLL呼び出しに失敗したようです" if wparam = 39 : msg = "指定したCOMオブジェクトは呼び出せないようです" if wparam = 40 : msg = "リターンの戻り値を設定してないようです" if wparam = 41 : msg = "指定した関数はHSP2まで命令だったもののようです" if msg = "" : msg = "未知のエラー形式のようです?" dialog msg, 1, "発生行位置:" + lparam end |
| oncmd goto/gosub ラベル, メッセージ | |||
| goto/gosub | ジャンプの方法。ジャンプ後にreturnで戻るか戻らないかの設定。 | ||
| ラベル | ジャンプ先のラベル(アスタリスクから書くこと!)。 | ||
| メッセージ | 捕捉するウィンドウメッセージコード | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
btn = "左", "右", "中" code = 0x01, 0x02, 0x10 // MK_LBUTTON, MK_RBUTTON, MK_MBUTTON oncmd gosub *exit, 0x0010 // WM_CLOSE oncmd gosub *push, 0x0100 // WM_KEYDOWN oncmd gosub *click, 0x0201 // WM_LBUTTONDOWN oncmd gosub *click, 0x0204 // WM_RBUTTONDOWN oncmd gosub *click, 0x0207 // WM_MBUTTONDOWN stop *click foreach btn if wparam & code.cnt : mes btn.cnt + "ボタンが押されました" loop return *push mes "コード「" + wparam + "」のキーが押されました" return *exit dialog "終了しますか?", 2 if stat = 7 : return 1 end |