Problema c/ código de barras

Delphi

26/10/2004

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


Gameiro

Gameiro

Curtidas 0

Respostas

Koplin

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

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

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

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...


GOSTEI 0
Gameiro

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.


GOSTEI 0
Pro-luck

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.


GOSTEI 0
POSTAR