2010-04-22 18 views
9

Recientemente adquirí un escáner de código de barras Metrologic (puerto USB), ya que todo el mundo sabe que funciona como un emulador de teclado de fábrica.¿Cómo puedo leer códigos de barras sin que el usuario enfoque primero un cuadro de texto?

¿Cómo configuro el escáner y mi aplicación para que mi aplicación pueda procesar los datos del código de barras directamente? Es decir, no quiero que el usuario se concentre en un "Campo de texto" y luego procese los datos cuando se active el evento KeyPress.

Respuesta

5

Por lo general, los escáneres de códigos de barras se pueden configurar para enviar algunos caracteres antes y después de la cadena. Entonces, si agrega, por ejemplo, "F12" antes de la cadena del código de barras, puede capturar eso y mover el foco al campo derecho.

Consulte el manual del escáner de códigos de barras para saber cómo hacerlo.

+3

Normalmente * desea * tener un campo de texto de todos modos, de modo que los usuarios puedan ingresar manualmente el código de barras si falla el escaneo. Es por eso que creo que esta es la mejor opción. –

+0

Así es como lo hacemos con los lectores de cheques; ya sea que se trate de una cuña de teclado o USB, los configuramos para enviar una secuencia de caracteres de inicio que no se escribe fácilmente en el teclado.Cuando vemos esa secuencia a través del método de selección del formulario, tragamos esas teclas especiales y movemos el foco de entrada al cuadro de edición deseado. Funciona bastante bien – robsoft

1

Conjeturaría la manera más fácil de hacer esto sería para interceptar pulsaciones de teclas en un nivel superior, tales como PreviewKeyDown en WinForms (o utilizar KeyDown en el formulario, establezca KeyPreview a true, y el uso e.SuppressKeyPress para detener la clave bajando a los controles). Hay podría ser una API directa para el dispositivo; puede que no.

0

Puede usar el evento OnShortcut en un formulario para interceptar las pulsaciones del teclado. Compruebe si aparece el prefijo que configuró en el escáner de código de barras, y configúrelo como Manipulado al presionar hasta que obtenga el sufijo del escáner de código de barras. Dentro de su controlador de acceso directo construya la cadena de código de barras

El siguiente código está adaptado de algo que yo uso, pero no está probado en su forma actual.

// 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; 
3

Aunque su código de barras tiene un conector USB. Se puede programar como una cuña de teclado o RS232. Ver esta página http://www.instrumentsandequipmentco.com/support/faq-metrologic.htm Donde dice

P. ¿Cuál es la diferencia entre el teclado USB y USB Point-of-Sale? Cuando el MX009 está configurado para comunicarse como un teclado USB, los datos escaneados aparecerán en la aplicación actual que está activa en su PC. Los datos se ingresan igual que si se presionaron las teclas en el teclado. Cuando el MX009 está configurado para comunicarse como un dispositivo USB de punto de venta, los datos se transmiten al puerto USB como los datos RS232 y el puerto USB debe configurarse como un puerto COM. El MX009 sale de fábrica configurado para el teclado USB o el punto de venta USB.

Cuando su programa acepta RS232 ya no necesita enfoque en un campo de texto.

  1. reprogramar su código de barras como Point-of-Sale (RS232)
  2. Vuelva a programar para enviar un sufijo general - retorno de carro/CR/$ 0D al final del código de barras.

Busque el retorno del carro para saber cuándo el código de barras completo está disponible para su código.

Cuestiones relacionadas