技術情報

アプリケーション開発ガイド | バーコード、または、キーによりデータを入力する

機能

バーコード、または、キーにより、データを入力します。
キーが押された場合は、[ENT]キーによってデータが確定されるまで、キーのみを受け付けます。
[C]キーでキー入力データを消去、[BS]キーで、1文字消去します。

サンプル

    const K.ENTER   = chr$(&h0d)
    const K.CLEAR   = chr$(&h18)
    const K.BS      = chr$(&h08)
    const BarDev    = 1          'バーコードデバイス番号
    const InpMax    = 13         '入力データ最大桁数

 
'+---------------------------------------------------------------------------+
'|                                                                           |
'|  【関数名】  inpbarkey$(f.no%, bar$, max%, esc$)                          |
'|  【機能】    バーコード読み取りとキー入力の両方を受け入れる               |
'|              [in]  デバイス番号      f.no%                                |
'|                    バーコードタイプ  bar$                                 |
'|                    最大桁数          max%                                 |
'|                    エスケープ文字列  esc$                                 |
'|              [out] 読み込んだバーコード                                   |
'|                     または入力した文字列またはエスケープ文字              |
'|                                                                           |
'|  【処理内容】                                                             |
'|    ・バーコードまたはキー入力を待ち、その入力値を戻り値とします。         |
'|    ・キーが押された場合、エスケープ文字なら、その文字を戻り値とします。   |
'|      それ以外の文字の場合、ENTが押されるまで、最大桁数の範囲で入力を      |
'|      受け付けます。                                                       |
'|    ・BSキーで、1文字消去、Cキーで入力を消去します。                       |
'|                                                                           |
'+---------------------------------------------------------------------------+
    function inpbarkey$(f.no%, bar$, max%, esc$)[InpMax]
        private barlen%
        private .rt$[InpMax]
        private .kb$

 
        while 1
            open "BAR:B" as #f.no% code bar$
            wait 0,&h03         'バーコード読み取り完了かキーが押されるまで待つ
            barlen% = loc(#f.no%)
            if (barlen% > 0) then
                .rt$ = input$(barlen%, #f.no%)
                print .rt$;
                inpbarkey$ = .rt$
                close #f.no%
                exit function
            else
                close #f.no%        'キーが押されたらキー入力のみ受け付ける
                .rt$ = ""
                .kb$ = inkey$
                while .kb$<>""
                    if instr(esc$, .kb$) then       'esc$の中のキー?
                        inpbarkey$ = .kb$           'ならばその文字を持って帰る
                        exit function
                    endif
                    select .kb$
                    case K.ENTER
                        inpbarkey$ = .rt$
                        beep                        '入力完了ブザー
                        exit function
                    case K.BS           'BSキー
                        if len(.rt$) then
                            print chr$(8);          '1文字消去
                            .rt$ = left$(.rt$, len(.rt$)-1)
                        endif
                    case K.CLEAR        'クリアキー
                        while len(.rt$)             '全入力文字消去
                            print chr$(8);
                            .rt$ = left$(.rt$, len(.rt$)-1)
                        wend
                    case else
                       if len(.rt$)
                            print .kb$;             'エコーバック
                            beep 1,1,1,1
                            .rt$ = .rt$ + .kb$
                        else
                            beep 1,1,1,0            '文字数オーバーエラー
                        endif
                    end select
                    if .rt$="" then     '入力文字列が空なら初期状態に戻る
                        .kb$ = ""
                    else
                        .kb$ = input$(1)            '次のキー入力
                    endif
                wend
            endif
        wend
    end function

 
'===============================================================================
'   Main
'===============================================================================
    private tmp$[InpMax]

 
    key 30,"m"                                  '[M1]キー定義
    while 1
        print ">";
        tmp$ = inpbarkey$(BarDev,"A:A",InpMax,"m")    'エスケープキー [M1]
        if tmp$ <> "m" then
            print "[";tmp$;"]"
        endif
    wend

お問合せ

QBdirect