VB6
テキストボックスに、
キーボードからの入力は無効とし、
バーコード読取時にのみ入力させたいのですが、
(特に数字)
それを可能にするAPIとかあればご教示ください。
Enabledプロパティを使えば良いような?
ご返答ありがとうございます。
Enabledプロパティをfalseにして入力不可としても
バーコード入力時にtrueにできないですよね?
>バーコード入力時にtrueにできないですよね?
キーボードインターフェースなバーコードスキャナだと
まず無理だと思います。どちらからの入力か識別できませんから><
どうしてもと,いうのならRS232Cインターフェースなスキャナを
使用すれば可能ですね,ただし作りこむのが面倒だと思いますが^^;
その「バーコード入力時」という状態遷移の時に、
EnabledをTrueにするということは出来ないのですか?
(出来ないとすれば、そもそも"何時バーコード入力時"なのか判断できないということで、
問題の土台がアヤフヤになりますね…)
GetKeyboardTypeとかでキーボードの種類とか調べるのってので
うまくできませんかねぇ?
>GetKeyboardTypeとかでキーボードの種類とか調べるのってので
今つながっているキーボードの情報を調べても仕方ないと思います
質問者は現在キーボード入力から流れてきた情報がキーボードからなのか
バーコードスキャナからなのかをリアルタイムに識別したいのだと思います
私もこれができるのならどうやるのか是非知りたいっす><
バーコードスキャナには大抵,入力にヘッダーをつけるとかいう設定が
あるのでそれで識別するか,インターフェースをRS232C等に変更して
識別するかが無難だと思うんですが・・・
よくよく考えるとこれってVBの質問じゃないっすね
バーコードスキャナのメーカに問い合わせるのが一番ですね^^;
テキストボックスのKeyPressイベントに
KeyAscii = 0
ではだめ?
いろいろご意見をいただきありがとうございます。
バーコードリーダは一般的はUSBのリーダで、テキストボックスにフォーカスが当ってる時にバーコードを読み取ると、その値をString型で吐き出すのですが、「バーコード読取時」というイベントは拾えなさそうです。
また、バーコード読取時に吐く文字列はKeyAsciiを拾って吐いてるため、
KeyAscii=0でやるとバーコード読取時でも入力されなくなってしまいます。
そのため、「バーコード読取時のみ入力可」よりは「テキストボックスにフォーカスがある時はキーボードの入力を不可」としたほうが良いのではと思うのですが、諸先輩方はどうお考えでしょうか?
宜しくお願い致します。
バーコードリーダーから投げられるテキストボックスと
表示するテキストボックスを別にして、
バーコードリーダーから投げられるテキストボックスは
非表示にして、表示テキストボックスはバーコードリーダーから
投げられるテキストボックスのChangeイベントでテキストをコピーする。
表示用のテキストボックスは、
KeyPressイベントで KeyAscii = 0とするか
Enable = Flaseとする。
これは、"0で除算しました"さんの言う
典型的な「キーボードインターフェースなバーコードスキャナ」
ですよね。
デバイスを区別する、という意味では、もしかしたらDirectXの
DirectInputが利用できるかもしれません。ただ、利用できる
場合は、そのインターフェースなどを全て自分で行う必要が
あります。
最近のUSB接続タイプのバーコードスキャナは設定で
インターフェースを切り替えられるものも発売されてますね
まずはそれを調べてみてはいかがですか?
アクティブになっているテキストボックスにデーターを
セットする方式なら、非表示は使えませんでした。orz
バーコードリーダーのドライバーがキーボードバッファを
使ってデーターをセットしてるなら、キーボードからの入力と
バーコードリーダーからの入力を判別するのは無理と思われます。
バーコードを読みとった時にKeyPressイベントは
複数回入ってくるのでしょうか?
複数回入ってくるのならイベントに入ってくる間隔で
判断するとか。
でも初めと終わりの判断が難しいかな…。
私は昔PS2接続のバーコードでチャレンジして挫折
しました。(キーボードの間に挟むタイプです)
間隔で取ってみたり色々しましたが、満足な結果が
得られませんでした。
結局キー入力をする場合は、バーコードリーダーから
送信されないキー操作をして(キー2個押しとか)キー
入力モードに切り替えた様な気がします。
>そのため、「バーコード読取時のみ入力可」よりは
>「テキストボックスにフォーカスがある時はキーボ
>ードの入力を不可」としたほうが良いのではと思う
>のですが、諸先輩方はどうお考えでしょうか?
バーコードの場合手入力できる様に作っておかないと、
バーコードが読め無くなったら処理できませんよ?
コンビニなどのレジの例ですと、バーコード読めなかっ
た場合買うのやめてもらうわけには行きませんし。
ま〜そんな用途じゃないと思いますが。
※USB接続の場合でもバーコードを読むと、KeyPress
イベントが発生するんでしょうか・・・。
テキストボックスを2つ用意して重ねる。
上の方を最前面に指定もしくはZOrderで指定(FORMのLOADとかで)
とするとして、バーコードを使うと言うことなら使うためのイベントを発行するようにボタンなりを用意した方がいいと思います。
ボタンが押された時点で背面のテキストボックスにフォーカスさせバーコードを使用。
入ったデータを前面にコピー
キーボードとバーコードのどちらを使っているのかがわからないのであれば明示的にしてやるしか手がないと思いますしその方が楽だと思いますよ。
ボタンの追加ができないのであれば、どっちから入ってきても良いことにして入ってきたデータをその後の処理で判断する位しかないのではないでしょうか?
※背面のテキストボックスにはTABなんかでフォーカスが行かないように指定することを忘れずに
これは、キーボードインターフェイスにこだわりすぎて、
かえって問題を難しくしてしまっているだけのような気がします。
もともとバーコードリーダのキーボードインターフェイスは、
・キーボードで入力できるタイミングであれば特別なプログラミングなしで
入力可能だよ
・その代わりキーボードとの判別や、キーボードに対する処理以外のことは
できないよ
というプログラマにとっての簡便さを提供するために用意されており、
ユーザ側に便利さを提供できるものではありません。
どんあ方法をとるにせよ、TextBoxがActiveでフォーカスが当たっていないと
バーコード入力を受け付けませんし、そのタイミングで本当のキーボードから
入力されれば *絶対に* その入力は受け付けてしまいます。
最近のバーコードリーダはUSBなどの接続形式で、キーボード/RS-232C両方の
インターフェイスを持っているものが多いです。
きちんとした制御をしたいのであれば、普通にRS-232C接続として考えたほうが、
よっぽど簡単だと思います。
バーコードリーダのメーカーからも、大抵RS-232C制御のVBサンプルソースが
提供されているはずですし。
それともひでらんさんのケースのようにPS2接続で、RS-232Cモードにすることの
できない機種だというお話でしょうか。
ツイート | ![]() |