バーコード、または、キーにより、データを入力します。
キーが押された場合は、[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