数字入力用のテンキーを作る
Top > Tips > Button

数値を入力させる場合、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 新規作成