Não há nenhum segredo ou driver específico para realizar a leitura. Basicamente o leitor óptico lê o código de barras, converte para string e retorna para o buffer de entrada do computador. Ou seja, é como se fosse digitar no teclado! Acabou o mistério...
Há várias formas de codificação do código de barras e quem é responsável por essa codificação/decoficação pode ser tanto a leitora quanto a aplicação. Irei considerar em nosso exemplo que o que a leitora lê e irei utilizar não me importando o que seja. Supondo e para fins ilustrativos que nosso código de barras seja essa aí de cima, o valor de entrada seria 3805565154 (frisando novamente, apenas supondo). A leitora irá passar para nossa aplicação a seguinte entrada 3805565154 ENTER. A maioria das leitoras já facilitam sua vida forçando o ENTER ao terminar de ler o conteúdo. Então fica fácil! Vamos por a mão na massa.
Crie uma tela com apenas um TextBox. Criei essa bonitinha aqui:
Com isso, ao digitar qualquer valor no TextBox, irá disparar esse evento. Mas como queremos ler apenas o valor completo, adicionamos uma determinada condição para começar a analisar apenas quando pressionar/entrar o ENTER, logo nosso código ficaria da seguinte forma:
private void txtNumero_KeyDown(object sender, KeyEventArgs e)
{if (e.KeyCode == Keys.Enter)
{
string entrada = txtNumero.Text;
txtNumero.Text = "";
}
}
Ou seja, a cada entrada de caracteres, ativo o evento mas só iniciarei a análise quando a entrada for um ENTER. Ao final, zero o conteúdo do TextBox para que possa dar uma nova entrada. Daí você pode adicionar outras instruções no meio para fazer o que quiser. Eu complementei a aplicação fazendo uma consulta em um banco de dados e analisando se existe ou não um determinado cupom. Vamos aos testes...
A leitora que usei é plugada diretamente na entrada PS/2 do teclado. A depender de sua leitora pode ser na USB, na PS/2 ou utilizar algum adaptador específico. Depois de conectado, inicie sua aplicação. Posicione o leitor sobre o código de barras e pressione o botão para realizar a leitura e voilá... Sua aplicação irá ler a entrada e realizar o processo que desejar.
Minha aplicação leu um cupom cujo número codificado era 1000909. Bem fácil e útil...
Quem quiser saber mais informações como tipos de codificações, como gerar/codificar/decodificar strings para código de barras no Access, acessem esse artigo da MSDN que é bem interessante e explicativo.
17 comentários:
Será necessário instalar alguma dll do leitor de código de barras para que o asp.net identifique o leitor ?
Não é preciso de DLL para a leitura. A maioria dos leitores hoje são conectadas diretamente na porta PS/2 do teclado ou na USB. Então quando há a leitura é como se fosse digitado, ou seja, é como se você estivesse teclado a informação e presisonado ENTER logo em seguida. Mas avalie qual leitora esteja usando pois o comportamento de cada uma pode distinguir a depender do modelo / marca.
Estou com uma pequena dúvida...
Tenho uma aplicação de controle de vendas onde coloquei um leitor ótico para reconheciimento de código do banco, para puxar o produto correspondente.
Porém, quando o leitor ótico lê o produto ele insere seu código + \n\n.Ou seja minha aplicação não consegue deixar fixo o valor lido pelo leito no meu inputText. Estas quebras de linha faz com que a aplicação avance um passo...
Teria como eu deixar com que o leitor não quebrasse estas duas linhas ao ler um código de produto???!!!
Fico no aguardo...
Valeuu,
Abs,
O \n\n inserido pela leitora após a leitura do código corresponde a dois ENTERS caso fosse pelo teclado. Como você quer manter no campo, TextBox, o código sem a quebra você pode usar o seguinte artifício quando estiver lendo: capture o campo, limpe o TextBox, remova o \n\n da string capturada e reinsira apenas a string com o código. Se você estiver usando o código acima ou uma variação dela, veja abaixo como poderia ser:
if (e.KeyCode == Keys.Enter)
{
string entrada = txtNumero.Text.Replace("\n", "");
txtNumero.Text = entrada;
}
Legal. O codigo de barras é do DVD Amigos Por Siempre. Massa
Thiago!Blz?
Otimo seu Post, estou trabalhando com WebForms. Sabe me dizer como fazer esquema KeyDown via webForms?
Obrigadão!Abraço
Você pode adicionar um evento Atributtes para o textbox:
txtEntrada.Atributtes.Add("onkeypress", "javascript:ValidaEntrada()");
Então você cria um JS da seguinte forma:
function ValidaEntrada() {
if (e.KeyCode == 13)
__doPostBack('Process','');
}
Então no Page_Load coloca:
if (Request.Form["__EVENTTARGET"] == "Process")
// Executa o processo
Seria algo do tipo...
Amigo vc teria como me dizer, como fazer pro campo que lê o codigo de barras ir ao banco de dados consultar e retornar o produto? Como em um sistema de mercado. Grato
Basta usar o evento no TextBox conforme o código abaixo:
private void txtNumero_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string entrada = txtNumero.Text;
// Consulta no banco de dados
DataSet ds = RetornaDS("SELECT * FROM Produtos WHERE codigo = " + entrada);
}
}
Isso é apenas uma sugestão do código bastando adequar à sua necessidade.
Vlw cara manja muito vc.. :D
Nossa Show de bola..
ta de parabéns Thiago Marçal!
Muito bons os seus artigos até aqui os melhores que já li e consegui compreender..
Thiago, teria capturar os codigos de barras a partir de uma smart phone ou tablet?
Qual a marca de leitor de codigo de barras USB vc recomenda?
Olá Thiago, o que não está compreensível nesse post, é como o valor escaneado pelo aparelho, passa do buffer para o campo txtNumero.
Ele automaticamente efetua a ação de "colar" o valor escaneado depois do evento disparo pelo ENTER?
Poderia dar mais detalhar por gentileza?
Obrigado.
Marcio,
Quando o aplicativo está em execução, o cursor fica em foco no campo texto. Então qualquer entrada de texto via teclado será efetuada nesse campo. O leitor funciona como um teclado. O modelo que usei lê o conteúdo do código de barras e dá um ENTER no final. Então, se o código for "123", o leitor dará uma entrada "123ENTER". E no campo texto configuro um evento para ler o ENTER e assim pegar o conteúdo para manipulação. Veja se ficou claro e me avise qualquer coisa. Abs
Olá Thiago, tudo bem? Artigo do leitor ficou muito bom! Para gerar um código de barra, em seguida armazenar no banco e imprimir, já deixando disponível para leitor. Seria algo muito complicado? Você pode dá algumas dicas. Obrigado Robson Nascimento
Robson, a princípio sua ideia é bem tranquila! Se precisar de ajuda, me fale.
Postar um comentário