第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「5.ボタンを使う その2」
|
|
6−5 ボタンを使う その2
さてさて、難しい話が終ったところで、実際にサンプルを作ってみましょう。 こんな●をボタン類を使って動かすものです。 ![]() ●の画像は、全体が20x20ピクセルで、上下左右に1ピクセルずつ余白のある画像を用意します。この方法は、モノを移動させるときに便利でしたね。 さて、まずは●の座標を入れる変数を用意します。 これは、プログラム中で共通ですので、Global変数として定義しますが、ま、これはお馴染みですね。 あと、初期値を入れておきましょう。
[Startup]
Global X as Integer
Global Y as Integer
X=70
Y=70
FormのAfterの部分に、ボールを表示するルーチンを入れておきましょう。
[After]
DrawBitmap 1005,X,Y
次に、イベントを処理します。ボタン類の上下左右はそれぞれ、&HB,&HC,&H2,&H3ですので、次のようで良いでしょう。
[events]
Dim strX as string
If GetEventType()=NsbKeyorButton Then
strX=GetKey()
Select Case strX
Case &HB
Y=Y-1
If Y<0 Then
Y=0
End If
Case &HC
Y=Y+1
If Y>140 Then
Y=140
End If
Case &H2
X=X-1
If X<0 Then
X=0
End If
Case &H3
X=X+1
If X>140 Then
X=140
End If
End Select
Redraw
End If
再描画には、Redrawコマンドを使って、意図的にAfterイベントが発生するようにしました。これを実行すると、どうなるでしょうか? 上下には移動するけれど、左右に移動しようとすると、ボタンに割り当てられたアプリが起動してしまいますね。 ![]() 基本的にPalmデバイスは、ハードキーを押すと、登録されているアプリがサクッと起動するのが「売り」ですが、こう言う場合は困ってしまいます。 NS Basicで作ったアプリの中でもこれは同じで、ハードキーを押すと、OSレベルのイベントが発生し、割り当てたれたアプリが起動します。 そこで、SetEventHandledコマンドを使用してOSレベルのイベントを無視させるなければなりません。 ただし、OSレベルのイベントには、ハードキーによる登録アプリの起動だけでなく、電源のオン・オフ、「ホーム」のソフトキー、また、オートパワーオフやHotSyncボタンも含まれますので、SetEventHandledコマンドの使い方を誤ると、リセットしなければならないアプリになってしまいます。十分注意しましょう。 さて、今回のサンプルでは、左右のハードキーの処理を無効にしたいので、
Case &H2
SetEventHandled
X=X-1
If X<0 Then
X=0
End If
Case &H3
SetEventHandled
X=X+1
If X>140 Then
X=140
End If
とすれば良いでしょう。これで、上下左右に●が動き、また、その他のキーは有効になるはずです。 また、もし、特殊なアプリを使っていて、上下キーを押してもアプリが起動する場合は、そこの対策もしておく必要があります。 一方、ハードボタンを全部使いたいような場合、いちいちSetEventHandledを入れておくのも無駄な気がします。 そう言う場合はプログラムを強制的に終了させる「Stop」コマンドを使います。 通常、プログラムを終わらせるのはソフトキーの「ホーム」をタップして、ランチャ画面に戻りますね。したがって、
If theKey=&h11 Then
Stop
End if
とすれば、イベントルーチン全体にSetEventHandledが有効になっていても、プログラムを終了させることができます。ちなみに「ホーム」の文字コードは、NS Basicのバージョン、1.09以前は「&H6」だったのですが、それ以降は「&H11」になっています。 もし、古いランタイムを使っていそうな場合は、両対応にしておくと良いですね。 |
第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「5.ボタンを使う その2」
|