数値を入力させる場合、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.