新しく発言する  EXIT  インデックスへ

マウスの操作5種類をまとめました


  マウスの操作5種類をまとめました 荒田浩二 2008/03/20 11:49:53 
  !<続き> 荒田浩二 2008/03/20 11:51:29 
Re: マウスの操作5種類をまとめました  返事を書く  ノートメニュー
荒田浩二 <knrztrhoel> 2008/03/20 11:51:29
!<続き>
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

   └!マウスのイベント・ドリブンによる処理※左... 山中和義 2008/03/22 10:48:03 
    └ダブルクリックの判別が悩むところです。 荒田浩二 2008/03/25 18:33:39 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。