§3 電卓の制作 VB6 | |
(5) キーボードでデータ入力 |
ウィンドウ上に配置されたボタン(キー)をマウスでクリックして、データ入力や演算を行うのと同じように、キーボードからデータや演算キーを入力できるようにすると便利である。
キーを押したかどうかは、各オブジェクトのKeyPress、KeyUp、KeyDownのイベント(プロシージャ)で処理できる。
ウィンドウ(フォーム)上には、ボタンやテキストのオブジェクトが配置されている。フォーカスのあるオブジェクトのキーイベントしか発生しないので、すべてのオブジェクト(txtDisplay,
cmdClear, cmdNum, cmdEnzan)のキーボードイベントに処理を書く必要がある、ように思われる。
フォーム上のオブジェクトのキーボードイベントより、フォームのキーボードイベントを優先することができる。フォーム(Form1)のKeyPreviewプロパティをTrueに設定することで、フォームのキーボードイベントを優先させることができる。
この設定をしておけば、キーボードを押したときの処理は、Form1_KeyPressプロシージャに書いておけばよいことになる。
処理としては、Cを押したときはcmdlearプロシージャを、0〜9または.(小数点)を押したときはcmdNum_Clickプロシージャを、演算キーを押したときはcmdEnzanプロシージャを呼び出す。
・プログラムリスト
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then cmdNum_Click KeyAscii - Asc("0") ElseIf KeyAscii = Asc(".") Then cmdNum_Click 10 ElseIf KeyAscii = Asc("c") Or KeyAscii = Asc("C") Then cmdClear_Click ElseIf KeyAscii = Asc("+") Then cmdEnzan_Click 0 ElseIf KeyAscii = Asc("-") Then cmdEnzan_Click 1 ElseIf KeyAscii = Asc("*") Then cmdEnzan_Click 2 ElseIf KeyAscii = Asc("/") Then cmdEnzan_Click 3 ElseIf KeyAscii = Asc("=") Then cmdEnzan_Click 4 End If End Sub
判定(If)文では、文字コードで比較している。関数Ascは引数の文字を文字コードに変換する関数である。逆に、文字で判定することもできる。文字コードを文字に変換する関数Chrを使って次のように書くこともできる。
If Chr(KeyAscii) >= "0" And hr(KeyAscii) <= "9" Then
クリアキーの判定では、大文字でも小文字でも対応できるようにOrで比較式を連結しているが、小文字を大文字に変換する関数UCaseを使って次のように書くこともできる(大文字を小文字に変換する関数LCaseもある)。
ElseIf UCase(Chr(KeyAscii)) = "C" Then
【課題】 Windows付属の電卓([スタート]→[プログラム]→[アプリケーション]→[電卓])を参考に、平方根や修正用のCEキーや三角関数など、いろいろと考えて拡張してみよう。
さらに、同じようなキーを持つ携帯電話は、少ないキーでも日本語を入力できる。これをシミュレートしてみるのも面白いかも知れない。
(5) キーボードでデータ入力 | |
Copyright © 2001,2002 Hiroshi Masuda |