!マウスのイベント・ドリブンによる処理 ※左ボタンのみ
!イベント・ハンドラ ※手短に処理すること
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
|