§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 

 

 

inserted by FC2 system