数値を入力させる場合、Graffitiよりもテンキーなどにより、 タップだけで入力できるようにした方が使いやすくなります。
テンキーを実現するためには、0〜9までのボタンとBackspaceボタンを用意し、
ボタンが押下された場合に、そのボタンに対応したキーイベントを
送信するようにします。
直接フィールドに数字を追加していく方法もありますが、
キーイベントに変換する方が処理が簡単になりますし、
入力制限などの処理をまとめられるメリットがあります。
サンプル画面
ヘッダファイル
#define MainForm 1000 #define NumField 1001 #define Tenkey_0 1100 #define Tenkey_1 1101 #define Tenkey_2 1102 #define Tenkey_3 1103 #define Tenkey_4 1104 #define Tenkey_5 1105 #define Tenkey_6 1106 #define Tenkey_7 1107 #define Tenkey_8 1108 #define Tenkey_9 1109 #define Tenkey_BS 1110 |
リソースファイル
FORM ID MainForm AT (0 0 160 160) NOFRAME BEGIN TITLE "10Key" FIELD ID NumField AT (48 40 63 AUTO) FONT 0 RIGHTALIGN UNDERLINED MAXCHARS 10 NUMERIC BUTTON "0" ID Tenkey_0 AT (72 103 AUTO AUTO) FONT 0 BUTTON "1" ID Tenkey_1 AT (52 88 AUTO AUTO) FONT 0 BUTTON "2" ID Tenkey_2 AT (72 88 AUTO AUTO) FONT 0 BUTTON "3" ID Tenkey_3 AT (92 88 AUTO AUTO) FONT 0 BUTTON "4" ID Tenkey_4 AT (52 73 AUTO AUTO) FONT 0 BUTTON "5" ID Tenkey_5 AT (72 73 AUTO AUTO) FONT 0 BUTTON "6" ID Tenkey_6 AT (92 73 AUTO AUTO) FONT 0 BUTTON "7" ID Tenkey_7 AT (52 58 AUTO AUTO) FONT 0 BUTTON "8" ID Tenkey_8 AT (72 58 AUTO AUTO) FONT 0 BUTTON "9" ID Tenkey_9 AT (92 58 AUTO AUTO) FONT 0 BUTTON "<" ID Tenkey_BS AT (92 103 AUTO AUTO) FONT 0 END |
イベントハンドラー
Boolean MainFormHandleEvent( EventPtr pEvent) /* I:イベント */ { Boolean handled = false; FormPtr pForm; switch (pEvent->eType) { case frmOpenEvent: /* フォームオープンイベント */ pForm = FrmGetActiveForm(); FrmDrawForm(pForm); FrmSetFocus(pForm, FrmGetObjectIndex(pForm, NumField)); handled = true; break; case ctlSelectEvent: /* コントロール選択イベント */ switch(pEvent->data.ctlSelect.controlID) { case Tenkey_0: case Tenkey_1: case Tenkey_2: case Tenkey_3: case Tenkey_4: case Tenkey_5: case Tenkey_6: case Tenkey_7: case Tenkey_8: case Tenkey_9: /* テンキー入力をキーに変換 */ EvtEnqueueKey(chrDigitZero + (pEvent->data.ctlSelect.controlID - Tenkey_0), 0, 0); handled = true; break; case Tenkey_BS: /* Backspaceボタン */ EvtEnqueueKey(backspaceChr, 0, 0); handled = true; break; } break; } return handled; } |
EvtEnqueueKey関数は、第一引数のキー(WChar)をキーキューに入れます。
第二、第三引数は、使用しないので0を渡します。
'04/11/21 新規作成
Copyright (c) 2004 kasa0 All rights reserved.