Dropbox

E61 キーボードの謎

NOKIA E61のキーボードをMIDPのプログラムから見た時の話です。

TextBox等の部品を使うとOSがキーボードの面倒を見てくれるので何も悩むことはありません。ゲームなどのプログラムでは、キーボードを押した時、あるいは放した時に発生するイベントで得られるキーコードを見て動作を決定します。KKJConvでは漢字変換時の操作性を考えるとOSの部品は使えずキーコードを見ながら自分で画面を描画するという方法を取ることにしました。

そこで最初にKKeyCodeCheckerというプログラムを作成し、キーコードを調査しました。いくつかキーを押してみて、愕然とするとともに、なるほどと思いました。「a」を押すと「a」のアスキーコードが返ってくるのに「b」を押すと「8」のアスキーコードが返ってくるのでした。7月2日の記事に写真を載せているので見ていただくと分かるのですが「b」のキーはキーボードの中央近くにあって「8」と共用になっているのです。つまり、電話のテンキーに相当する部分は、そのままテンキーのように振舞うデザインになっています。言い換えると電話のテンキー部分の両端にフルキーボードの残りの部分を取り付けたかのような構造になっているのです。

これは、考えてみると良く出来た構造です。今までの10キーを対象に作られたMIDPのプログラムは、そのまま動かすことが出来るからです。KanjiHelper等の10キーで日本語入力するMIDPプログラムが動作可能なのも、このためです。逆にKKJConvのようにフルキーボードとして使うためには、この部分のキーコードを自分で読み替える必要があります。

もうひとつ面白いのはシフトを押したままフルキーボードを押すと、それなりにキーコードが変化しすることです(そのくせシフトキー自体もキーコードを持っています)。シフト+「a」は「A」に相当するアスキーコードが返ります。またシフト+「1」だと「!」になります、これは英語キーボードに準じているように見えます。これも読み替えによって「!」だったら「R」と読み替えは可能です。Peek_DogさんやmaitomoさんがKKJConvのレポートで指摘されていることを直すには、この読み替えを行えば良いわけです。
ところが、ひとつ困ったことがあります。それは「8」のキーです。シフト+「8」では「*」に相当するアスキーコードが返ります。何故これが困ったことかというと「*」は別に存在するのです(電話だから当然です)。つまりシフトを押したままの状態でキーを押していくと「*」が2つの別のキーで返ってしまいます。つまり、その2つのキーがMIDPから見分けが付かないのです。

シフトを押したままの操作はKKJConvでは禁じてとするしかないみたいです。積極的に禁止するか、変な記号が入るけどサポート外ですとするか、、、悩ましい。

Trackback

16 comments untill now

Add your comment now