Problema c/ código de barras
Tenho um maskedit que eu quero usar para ler um código de barras, qdo o leitor acaba de ler o código ele da um enter automaticamente.
Coloquei no evento OnKeyPress do maskedit, o seguinte código:
if (key=#13) then
begin
//aqui se for apertado enter ele procura o produto no banco
end;
o problema é o seguinte:
quando leio o código do produto em vez de ele aparecer rapidamente, ele vai aparecendo número a número bem devagar, normalmente o código tem 13 dígitos, eu acho que é porque o maskedit fica checando cada número que entra para ver se é o enter que foi pressionado.
Fiz o teste em outro maskedit que não tem nada no evento onkeypress e ele lê normal.
Se alguem puder me dar uma dica, de como tratar esse evento,
Eu agradeço.
Obrigado
Coloquei no evento OnKeyPress do maskedit, o seguinte código:
if (key=#13) then
begin
//aqui se for apertado enter ele procura o produto no banco
end;
o problema é o seguinte:
quando leio o código do produto em vez de ele aparecer rapidamente, ele vai aparecendo número a número bem devagar, normalmente o código tem 13 dígitos, eu acho que é porque o maskedit fica checando cada número que entra para ver se é o enter que foi pressionado.
Fiz o teste em outro maskedit que não tem nada no evento onkeypress e ele lê normal.
Se alguem puder me dar uma dica, de como tratar esse evento,
Eu agradeço.
Obrigado
Gameiro
Curtidas 0
Respostas
Koplin
26/10/2004
Cheque seu código, ou ponha-o completo aqui. Aparentemente vc está fazendo algo fora do bloco begin/end. Veja se nao tem um end fora do lugar. Lembre-se que qualquer porção de código no evento onkeypress será ativado senão estiver dentro do bloco. Verifique se este componente não tem outra codificação em outro evento que possa estar conflitando.
GOSTEI 0
Gameiro
26/10/2004
AI VAI O CÓDIGO, DEPOIS QUE ELE PREENCHE DEVAGAR NÚMERO A NÚMERO ELE FAZ O QUE DEVERIA FAZER QUE É ENCONTRAR O PRODUTO OU NÃO
procedure Tfrm_vendas01.MaskEdit2KeyPress(Sender: TObject; var Key: Char); begin if (key=#13) then begin //query localizando o produto datamodule1.SQLDataSet1.Close; datamodule1.SQLDataSet1.CommandText:=´select * from PRODUTOS where cod_barras=:cd_barras´; datamodule1.SQLDataSet1.ParamByName(´cd_barras´).AsString:=maskedit2.Text; datamodule1.SQLDataSet1.Open; if datamodule1.SQLDataSet1.Eof then begin showmessage(´Codigo do Produto Invalido-Favor Corrigir´); maskedit2.SetFocus; end else begin if quant_item=0 then begin quant_item:=1; end; //move o nome do produto para exibicao ao usuario //quant_item:=1; edit1.Text:=datamodule1.SQLDataSet1.fieldbyname(´descricao´).asstring; maskedit3.Text:=´1´; maskedit3.Refresh; maskedit3.SetFocus; end; end; end;
GOSTEI 0
Gandalf.nho
26/10/2004
Sugestão, use o evento OnExit para validar os dados, daí vai mais rápido porque só valida uma vez os dados.
GOSTEI 0
Dopi
26/10/2004
Acredito que a lentidao possa ser causada pela Velocidade de envio dos dados do Leitor para o Buffer do Teclado....
Experimente ler o Cod.Barras no Bloco de Notas.... se a lentidao tb existir, entao o problema é no leitor....
Usando o manual do leitor dá pra vc aumentar essa velocidade... Mas se vc aumentar muito, alguns micros podem ´comer´ alguns caracteres...
Experimente ler o Cod.Barras no Bloco de Notas.... se a lentidao tb existir, entao o problema é no leitor....
Usando o manual do leitor dá pra vc aumentar essa velocidade... Mas se vc aumentar muito, alguns micros podem ´comer´ alguns caracteres...
GOSTEI 0
Gameiro
26/10/2004
Usei o leitor no mesmo programa em um edit que não tem nada no onkeypress e ele le numa velocidade normal.
Também coloquei o mesmo código acima no onexit e ele faz a mesma,coisa.
Se alguem tiver mais alguma sugestão agradeço.
Obrigado a todos por responderem.
Também coloquei o mesmo código acima no onexit e ele faz a mesma,coisa.
Se alguem tiver mais alguma sugestão agradeço.
Obrigado a todos por responderem.
GOSTEI 0
Pro-luck
26/10/2004
Deixe o seu código no evento OnExit, mas retire desse código a condição do Enter. Deixe lá apenas a consulta.
Pelo que entendi vc está impondo duas situações para o maskedit, uma ao sair (que é um evento) e o pressionar da tecla Enter (que é outro evento) tudo para um mesmo elemento.
Experimente, ser der certo mande um e-mail avisando-me.
Pelo que entendi vc está impondo duas situações para o maskedit, uma ao sair (que é um evento) e o pressionar da tecla Enter (que é outro evento) tudo para um mesmo elemento.
Experimente, ser der certo mande um e-mail avisando-me.
GOSTEI 0