10

私は最近、Metrologicバーコードスキャナー(USBポート)を購入しました。これは、箱から出してすぐにキーボードエミュレーターとして機能することを誰もがすでに知っているからです。

アプリがバーコードデータを直接処理できるように、スキャナーとアプリケーションを構成するにはどうすればよいですか?つまり、ユーザーが「テキストフィールド」に焦点を合わせて、KeyPressイベントが発生したときにデータを処理することを望まないのです。

4

4 に答える 4

7

通常、バーコードスキャナーは、文字列の前後にいくつかの文字を送信するように構成できます。したがって、バーコード文字列の前に「F12」などを追加すると、それをキャプチャして、フォーカスを右のフィールドに移動できます。

その方法については、バーコードスキャナーのマニュアルを確認してください。

于 2010-04-22T06:33:16.657 に答える
3

バーコードにはUSBコネクタが付いていますが。キーボードウェッジまたはRS232としてプログラムできます。このページを参照して くださいhttp://www.instrumentsandequipmentco.com/support/faq-metrologic.htm

Q. USBキーボードとUSBPOSの違いは何ですか? MX009がUSBキーボードとして通信するように設定されている場合、スキャンされたデータは、PCでアクティブになっている現在のアプリケーションに表示されます。キーボードのキーを押したときと同じようにデータが入力されます。MX009がUSBPOSデバイスとして通信するように設定されている場合、データはRS232データのようにUSBポートに送信され、USBポートはCOMポートのように構成する必要があります。MX009は、USBキーボードまたはUSBPOS用に工場出荷時に設定されています。

プログラムがRS232を受け入れると、テキストフィールドにフォーカスする必要がなくなります。

  1. バーコードをPOS(RS232)として再プログラムします
  2. 通常、接尾辞を送信するように再プログラムします-バーコードの最後にキャリッジリターン/ CR /$0D。

コードで完全なバーコードが利用可能になる時期を知るには、キャリッジリターンを探します。

于 2010-04-23T02:18:10.893 に答える
1

これを行う最も簡単な方法は、winformsのPreviewKeyDownなどのより高いレベルでのキー押下をインターセプトすることだと思います(またはKeyDownフォームで使用し、に設定KeyPreviewし、キーがコントロールに下がるのを停止するためにtrue使用します)。デバイスへの直接APIがある可能性e.SuppressKeyPressがあります。ないかもしれません。

于 2010-04-22T06:04:55.663 に答える
0

フォームでOnShortcutイベントを使用して、キーボードの押下をインターセプトできます。バーコードスキャナーで設定したプレフィックスが表示されるかどうかを確認し、バーコードスキャナーのサフィックスが表示されるまでHandledalkeypressesとして設定します。ショートカットハンドラー内でバーコード文字列を作成します

次のコードは、私が自分で使用しているものを基にしていますが、現在の形式ではテストされていません。

    // Variables defined on Form object
GettingBarcode : boolean;
CurrentBarcode : string;
TypedInShiftState: integer; // 16=shift, 17=ctrl, 18=alt

procedure Form1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
  Character:Char;
begin
  Character:=Chr(MapVirtualKey(Msg.CharCode,MAPVK_VK_TO_CHAR));
  if GettingBarcode then
  begin
    // Take care of case 
    if (TypedInShiftState<>16) and CharInSet(Character,['A'..'Z']) then
        Character:=Chr(Ord(Character)+32);
    TypedInShiftState:=0;
    // Tab and Enter programmed as suffix on barcode scanner
    if CharInSet(Character,[#9, #13]) then
    begin
      // Do something with your barcode string
      try
        HandleBarcode(CurrentBarcode);
      finally
        CurrentBarcode:='';
        Handled:=true;
        GettingBarcode:=False;
      end;
    end
    else if CharInSet(Character,[#0..#31]) then
    begin
      TypedInShiftState:=Msg.CharCode;
      Handled:=True;
    end
    else begin
      CurrentBarcode:=CurrentBarcode+Character;
      Handled:=true;
    end;
  end
  else begin
    if Character=#0 then
    begin
      TypedInShiftState:=Msg.CharCode;
    end
    else if (TypedInShiftState=18) and (Character='A') then
    begin
      GettingBarcode:=True;
      CurrentBarcode:='';
      Handled:=true;
    end;
  end;
end;
于 2010-04-22T08:33:54.407 に答える