第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「4.ボタンを使う その1」
|
|
6−4 ボタンを使う その1
さて、ペンを使った画面タップの次は、ボタンによるイベントですね。 で、実は、これは、既に、NS Basicについての第6回で紹介してありますので、内容的には重複してしまいます。 ただ、Ver.1.09から、メニューボタンの「06」が「17」に変更となりましたし、初心者向けの講座ですから、ここで改めて説明します。 Palmデバイスのボタンには、本体にくっついている「ハードキー」と、Graffitiエリアに印刷されている「ソフトキー」の2種類がありますが、NS Basic上ではどちらも1種類のイベントとして認識します。ここでは、それらを総称して「ボタン類」と言う事にします。 さて、チェックの方法は、タップイベントと同じように、GetEventType()を使い、それが「NsbKeyorButton」であれば、ボタン類が押されたことになります。
If GetEventType()=NsbKeyorButton Then
(処理)
End if
そして、どのボタンが押されたのか、という状態を返すのが「GetKey()」関数です。GetKey()関数は、最後に押されたボタン類の文字もしくは文字コードを返し、Graffitiエリアなどに文字を入力した場合その文字を、ボタン類を押した時はそのボタンのコードを返します。 例えば、
Dim strX as String
If GetEventType()=NsbKeyorButton Then
strX=GetKey()
(処理)
End if
のようにキーを取得します。さて、文字を返す場合、文字変数を用意してそこに代入すれば良いのですが、ボタンの場合は「これ」という文字がありませんので、コードを取得しなければいけませんね。 なので、数値変数を用意して、次のようにします。
Dim intX as Integer
If GetEventType()=NsbKeyorButton Then
intX=Asc(GetKey())
(処理)
End if
Asc(X)は、文字Xの文字コードを返す関数で、これを使えば文字コードおよびボタンコードを取得することができます。ボタン類の文字コードは次のようになっています。 ![]() 上段の数字が文字のコード、下段のカッコ内の数字は16進数表記です。 ところで、機種によっては、この図とはGraffitiエリアの印刷が違っていますね。 例えば、PalmOSの日本語版が載っているデバイスでは「変換」「確定」といった漢字変換の機能が印刷されているはずです。 しかし、NS Basicでは、基本的に「変換」「確定」といったキーを区別することができません。残念ながら。 さて、16進数という言葉をひっぱり出してきましたので、ここで、ちょっと説明しておきます。 通常、数は0〜9の10種類の記号を使って数えますね。これが、10進数です。0,1,2,3,・・・,8,9と10種類の記号を使って順に数え、記号を使い切ってしまったら、桁を上げて、10,11,12,・・・と続けます。 一方、16進数は、比較的多くコンピュータで使われる数で、先ほどの定義でいけば、16種類の記号を使う数の数え方です。 0,1,2,3,・・・,8,9,A,B,C,D,E,F,10,11,12,・・・と言うように、A〜Fの6つの記号を追加して16種類の記号としています。
これらは、コンピュータ的に便利な数字なのですが、通常の生活では使うことはないでしょう。そもその、いくつなのか感覚的に分かりませんし、そのようなものが混在していたら「10」と書かれていた場合に、何進数か分からないので困ってしまいます。 そこで、16進数の場合、通常「&H10」もしくは「10H」というように「&H」もしくは「H」を付けて表現します。 NS Basic上でも16進数を取り扱うことができ、&Hを付けて表現しますが、ここで詳しく説明したのは訳があります。 16進数といっても、単純に数の数え方なので、10Hとあったら、10進数で16のことだなぁ、とか、12は16進数で0CHだなぁ、となり、これらは基本的に数値であるはずなのですが、 NS Basic上では多少動作が異なります。 NS Basicの正規ハンドブックのサンプルでは、
Dim theKey as String
If GetEventType()=NsbKeyorButton Then
theKey = GetKey()
If theKey=&H5 Then
・・・(以下略)
というように、文字変数theKey と 数値であるはずの &H5と比較されています。実は、NS Basicでは、数値の先頭に&Hをつけた16進数を「文字」として取り扱う、という特殊な仕様になっているようです。 単純な例ですが、
If 5=&H5 Then
は条件として成立するように見えますが、数値と文字を比較しているよ!とエラー警告が出ます。ちょっと、おかしな話ですね。&H5は、10進数で「5」を表す数字であるのに、「文字」として認識しています。 しかし、このNS Basicの特殊な仕様のおかげで、GetKey()による文字取得が楽にできます。 例えば、
Dim strX as String
If GetEventType()=NsbKeyorButton Then
strX=GetKey()
Select Case strKey
Case &H1
(処理)
Case &H2
(処理)
Case "A"
(処理)
Case "B"
(処理)
End Select
End if
というような、一見間違いのようなコードが通りますので、プログラム的にとてもスッキリします。ここは、ちょっと特殊ですが、NS Basicで&Hがついた数値は「文字」であると覚えておきましょう。 |
|||||
第6回 Palmに動作を伝えよう 〜 イベントのお話 〜「4.ボタンを使う その1」
|