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

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


  マウスの操作5種類をまとめました 荒田浩二 2008/03/20 11:49:53 
  !<続き> 荒田浩二 2008/03/20 11:51:29 
   └!マウスのイベント・ドリブンによる処理※左... 山中和義 2008/03/22 10:48:03 
Re: !<続き>  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/22 10:48:03
!マウスのイベント・ドリブンによる処理 ※左ボタンのみ

!イベント・ハンドラ ※手短に処理すること

SUB mouseDown(x,y) !ボタンが押された
LET c=2
PRINT "left down"
END SUB
SUB mouseUp(x,y) !ボタンが離された
LET c=1
PRINT "left up"
END SUB
SUB mouseClick(x,y) !クリック
LET sc=0.1
PRINT "left click"
END SUB
SUB mouseDblClick(x,y) !ダブルクリック
LET sc=0.05
PRINT "left double click"
END SUB
SUB mouseDrag(x,y) !ドラグ(押したまま移動)
LET c=4
END SUB
SUB mouseMove(x,y) !移動
SET DRAW mode hidden !描画開始
CLEAR
SET AREA COLOR c
DRAW disk WITH SCALE(sc)*SHIFT(x,y) !図形を表示する
SET DRAW mode explicit !描画終了
END SUB



!main

LET c=1 !色
LET sc=0.05 !大きさ


!イベント・ループ

LET mevt=0 !マウスの状態
DO
mouse poll x,y,left,right !マウスの状態を得る

IF left=1 THEN !左ボタンが押下されたら
SELECT CASE mevt !状態遷移
CASE 0
LET x0=x !位置を記録する
LET y0=y
LET t0=TIME !時刻を記録する

LET mevt=1
CALL mouseDown(x,y)
CASE 1 !押下中
IF x0<>x OR y0<>y THEN !移動すれば
LET mevt=2
PRINT "left drag start" !debug
END IF
CASE 2 !ドラグ中
CALL mouseDrag(x,y)
CASE ELSE
END SELECT

ELSE !離されたら
IF mevt>0 THEN !以前が押下中なら
IF mevt=1 THEN !クリック系
IF TIME-t9<0.3 THEN !ダブルクリックなら ※0.3は調整要
CALL mouseDblClick(x,y)
LET t9=t0
ELSE
LET t9=TIME
IF t9-t0<0.3 THEN CALL mouseClick(x,y) !クリックなら ※0.3は調整要
END IF
ELSE
PRINT "left drag end" !debug
END IF

LET mevt=0
CALL mouseUp(x,y)
END IF

END IF

CALL mouseMove(x,y) !移動なら ※常時


LOOP


END
    └ダブルクリックの判別が悩むところです。 荒田浩二 2008/03/25 18:33:39 

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