第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「2.画面をタップ その1」
|
|
6−2 画面をタップ その1
押したり回したり、様々なイベントがある中で、それらをまとめてみると次の4つのイベントに分類できます。
このチェックを、NS Basicでは「GetEventType()」という関数を使います。 GetEventType()の戻り値は次の通りです
プログラム中では次のように使います。
If GetEventType()=NsbPenDown Then
(処理)
End if
複数のイベントをチェックする場合は、Select Caseの方が良い場合もありますが、その辺りは、状況に合わせて選択してください。ただ、戻り値が長い横文字だなぁ、と思うかもしれませんね。これらは「nsb」で始まる値は「組み込み定数」と呼ばれ、実際は数値が入っています。 例えば、NsbPenDownは 1、NsbJogDialは 4といった具合で、先ほどの例では、
If GetEventType()=1 Then
としても同じ結果になります。したがって、これはどちらでも良いのですが、本稿では、組み込み定数の方を使うことにします。では、まず、ペン関係のイベントです。 ペン関連の「押された」「離れた」というイベントに対して、プログラム中からそのイベントが発生した「座標」を得ることができます。 グラフィック関連のところでも出てきましたが、画面の座標は左上が(0,0)で右下が(159,159)でしたね。 ペンのイベントでは、画面を押した、もしくは離れた時の座標を得ることができ、これには「GetPen」コマンドを使います。 GetPenの書式は、
GenPen PenX,PenY,PenStatus
PenX:ペンのX座標
PenY:ペンのY座標
PenStatus:ペンの状態、NsbPenDown、NsbPenUpの何れかを指定します。
例えば、ペンがタップされた時の座標を得る場合は、
Dim X as Integer
Dim Y aa Integer
If GetEventType()=NsbPenDown Then
GetPen X,Y,NsbPenDown
End If
というようにすれば、タップした時の座標が変数X,Yに入ります。簡単なサンプルを作ってみましょう。タップした座標に画像を表示するだけのサンプルです。
Dim X as Integer
Dim Y as Integer
If GetEventType()=NsbPenDown Then
GetPen X,Y,NsbPenDown
DrawBitmap 1005,X,Y
End If
とすれば、ペンをタップした位置に画像(1005)を表示することができます。また、例えば、Global変数と組み合わせれば
[Startup]
Global X1 as Integer
Global Y1 as Integer
[events]
Dim X2 as Integer
Dim Y2 as Integer
If GetEventType()=nsbPenDown Then
GetPen X1,Y1,nsbPenDown
End If
If GetEventType()=nsbPenUp Then
GetPen X2,Y2,nsbPenUp
DrawLine X1,Y1,X2,Y2
End If
とすれば、画面にペンがついた位置から、離した位置まで直線を引きます。
グラフィックツールのようにペンを移動させている軌跡とは無関係に直線を引きますので、お絵描きにはつかえそうにはありませんが、連続的な線を引くには、次のようにすれば引けないことはありません。
[Startup]
Global X1 as Integer
Global Y1 as Integer
[events]
Dim X2 as Integer
Dim Y2 as Integer
If GetEventType()=nsbPenDown Then
X2=X1
Y2=Y1
GetPen X1,Y1,nsbPenDown
DrawLine x1,y1,x2,y2
End If
このように、ペン関連のイベントが発生した場合、ペンが画面に触れたか離れたか、をチェックすることができ、また、その発生した位置を取得できますので、これは直感的に理解しやすいイベントですね。実際は、画面のタップにペンではなく指を使う場合もありますが、タップしたものが「ペン」か「指」かをチェックする関数はありませんのであしからず。 |
|||||||||
第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「2.画面をタップ その1」
|