!<続き> REM ** マウス操作 ** MODULE mouse PUBLIC SUB operation SHARE NUMERIC p,w,s,check,t0,t1 LET p=0.9 ! 長押し時間(p秒以上押し続ける) LET w=0.4 ! Wクリックの間隔(押してからw秒以内に2度目を押す) LET s=0.3 ! ドラッグ無効時間(押してからs秒以内に放すと左クリック扱い) EXTERNAL SUB operation(a,x0,y0,x,y) MOUSE POLL x,y,l,r SELECT CASE check CASE 0 ! 操作開始のチェック LET x0=x LET y0=y IF l=0 AND r=0 THEN ! ボタン解放の確認 LET a=0 ELSEIF a<>0 THEN LET a=-1 ! 前回の操作を無効化 ELSE ! 操作の開始 LET t0=TIME LET check=1 END IF CASE 1 ! ボタンのチェック LET t1=TIME IF l=1 THEN LET a=0.1 ! 左ボタンが押された状態 CALL press(a,x0,y0,x,y) ! 長押しの判定 ELSEIF r=1 THEN LET a=0.2 ! 右ボタンが押された状態 LET check=3 ! CALL complete(a,x0,y0,x,y) ! ボタンを押して右クリック完了 ELSE LET a=0 ! 左ボタンが放された状態 LET check=2 ! CALL complete(a,x0,y0,x,y) ! Wクリックを無効化 END IF CASE 2 ! Wクリックの有無のチェック IF l=1 THEN LET a=0.3 ! 左ボタンが2度押された状態 LET check=3 ! CALL complete(a,x0,y0,x,y) ! ボタンを押してWクリック完了 ELSEIF TIME-t0>w THEN CALL complete(a,x0,y0,x,y) END IF CASE 3 ! ボタン解放のチェック IF l=0 AND r=0 THEN CALL complete(a,x0,y0,x,y) END SELECT END SUB EXTERNAL SUB complete(a,x0,y0,x,y) ! 操作の完了 LET check=0 IF a=0.2 THEN LET a=2 ! 右クリック ELSEIF a=0.3 THEN LET a=3 ! Wクリック ELSEIF t1-t0<=s OR (x=x0 AND y=y0 AND t1-t0<p) THEN LET a=4 ! 左クリック ELSEIF x<>x0 OR y<>y0 THEN LET a=5 ! ドラッグ(移動先は x,y) ELSE LET a=1 ! 長押し(ボタンを放して完了,副プログラムpressを無効にした時) END IF END SUB EXTERNAL SUB press(a,x0,y0,x,y) ! 長押しの判定 IF x=x0 AND y=y0 AND t1-t0>=p THEN LET check=0 ! 操作の完了 LET a=1 ! 長押し(ボタンを押し続けて完了) END IF END SUB END MODULE
|