Problemas com KEYBOARD para ler código de barras

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Reginaldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 71
Registrado em: 14 Jul 2004 08:06
Localização: Lagoa da Prata - MG
Contato:

Problemas com KEYBOARD para ler código de barras

Mensagem por Reginaldo »

Caros colegas,

Depois de "apanhar" bastante, descobri que o KEYBOARD está "atrapalhando" a leitura do código de barras no meu sistema. Tenho um programa que num Dbedit (com Tbrowse, ocorre o mesmo problema), o usuário começa a digitar ou passa o leitor e o sistema faz a busca. Bom, se o usuário digita, blz, mas se passa o leitor alguns dígitos não são lidos, no início, pensei que o problema fosse a montagem da tela, mas não é, pois o problema ocorre, independente da versão do windows.... então notei que se tirar o keyboard, funciona, mas, a função do keyboard é pegar a primeira letra/dígito.... então tá ai o problema...

Fiz um código simples, para exemplificar e mostrar o problema:

Código: Selecionar todos

*---------------*
 FUNCTION MAIN()

 CLEAR
 *
 USE DBF\ESTOQUE
 *
 aCampos :={'CODIGO','PRODUTO'}
 aTitulos:={'C¢digo','Produto'}
 *
 DBEDIT(04,02,20,77,aCampos,'F_CADPR',,aTitulos,'ÄÂÄ')
 *
 USE
 *
 RETURN

*------------------*
 FUNCTION F_CADPR()

 PARAMETERS nModo
 *
 IF nModo=4
    IF LASTKEY()=27
       RETURN(0)
     ELSEIF LASTKEY() >= 32 .AND. LASTKEY() < 127
       KEYBOARD(CHR(LASTKEY()))
       *
       DO WHILE .T.
          cVarProc:=SPACE(36)
          @ 11,22 GET cVarProc PICT '@!' 
          READ
          IF LASTKEY()==27
             EXIT
          ENDIF
          *
          INKEY(0)
          INKEY(0)
          EXIT
       ENDDO
    ENDIF
    RETURN(2)
 ENDIF
 *
 RETURN(1)
Estou compilando com xHarbour 1.0 (xHarbour.org)

Obrigado pela atenção,
Reginaldo J. Silva
Analista de Sistemas
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por fladimir »

Colega como vc resolveu ? pq migrei recentemente e nos clientes q estou migrando aos poucos e acompanhando alguns reclamaram sobre este problema, e são justamente os q utilizam leitor de codigo de barras e analisei o codigo e aparentemente nao encontrei problemas, pq a funcao KEYBOARD tb existe no Clipper em igual sintaxe. Agora pesquisando aki no forum os sintomas q descreveste sao exatamente os mesmos... se digita Funciona e no leitor no inicio as vezes da esse problema. E como nao achei nada no codigo e antes nao tinha esse problema, pensei q poderia ser o leitor do cliente e ele comprou um novo, mas esta acontecendo em mais clientes q utilizam leitores, acho uma estranha coincidencia... acredito q possa ser o mesmo problema...

Fico no aguardo de sugestoes...

Sucesso!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por DLZ »

Ola ...
Não sei se o problema é o mesmo, mas tentem substituir função Keyboard() pela função SetLastkey(). Eu tive um problema no Dbedti, mas não foi com código de barras...
Não custa tentar..
Um abraço
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por alaminojunior »

Também passei pelo mesmo problema: quando o código era "entrado" pelo leitor, sumia o penultimo dígito.
Mas no caso do Reginaldo, tá um pouco diferente. Me pareceu que ele abre o mesmo get, para buscar código ou descrição.

Código: Selecionar todos

     ELSEIF LASTKEY() >= 32 .AND. LASTKEY() < 127
       KEYBOARD(CHR(LASTKEY()))
       *
       DO WHILE .T.
          cVarProc:=SPACE(36)
          @ 11,22 GET cVarProc PICT '@!'
          READ
          IF LASTKEY()==27
             EXIT
          ENDIF
          *
          INKEY(0)
          INKEY(0)
          EXIT
O que no meu caso é diferente. Eu costumo abrir get´s distintos para cada busca, seja ela por código ou por descrição. Eu tenho o trecho de código abaixo, funcionando num tbrowse.

Código: Selecionar todos

case isalpha(Chr(lastkey())) .OR. lastkey() > 47 .AND. lastkey() < 58
       if (lastkey() > 47 .AND. lastkey() < 58)
           OrdSetFocus("indpre01")
           Ord:= 1
        else
           OrdSetFocus("indpre02")
           Ord:= 2
        endif
E no caso do pdv, eu uso dentro de uma malha "do while"

Código: Selecionar todos

case tempo > 47 .AND. tempo < 58
        _get:= space(14)
        keyboard tempo
        @ 02,09 get _get colo "b/w"
        read
        if lastkey() = K_ESC
           @ 02,09 say space(14) colo "w/w"
           loop
        endif
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Endrigo Rodrigues
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 27 Fev 2009 01:30
Localização: Belo Horizonte/MG

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por Endrigo Rodrigues »

Não tem como utilizar um componente de comunicação (MSCOMM ou outro similar) e trabalhar com o evento OnChar do componente e depois enviar um keybd_event().

Dessa forma não importará em qual controle você está, passou o código no leitor, aparece no campo posicionado. Inclusive no Notepad, se estiver aberto e ativo.
Imagem
Endrigo Rodrigues
Fantastsoft Sistemas
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por fladimir »

Obrigado pessoal pela atenção dispensada... num primeiro momento vou substituir apenas o comando pela função q o colega DLZ mencionou e trocar em cliente q usa muito leitor e acompanhar os resultados... e depois eu posto os resultados...

Grato pessoal.... Sucesso a todos!!!!!!!!!


:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por alaminojunior »

Não tem como utilizar um componente de comunicação (MSCOMM ou outro similar) e trabalhar com o evento OnChar do componente e depois enviar um keybd_event().
Me perdoe a minha ignorância, mas ..... não entendí nada.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Problemas com KEYBOARD para ler código de barras

Mensagem por sygecom »

alaminojunior escreveu:
Não tem como utilizar um componente de comunicação (MSCOMM ou outro similar) e trabalhar com o evento OnChar do componente e depois enviar um keybd_event().
Me perdoe a minha ignorância, mas ..... não entendí nada.
Pelo o que eu etendi é que:
MSCOMM é um componente para comunicação com porta serial, algumas leitora de codigo de barra usam porta serial, assim usaria esse componente para se comunicar com a Leitora e depois com keybd_event()(obs:Função da Hwgui) enviaria um sinal para o teclado.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
João Jr.
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 06 Abr 2011 09:38
Localização: Tupã/SP

Problemas com KEYBOARD para ler código de barras

Mensagem por João Jr. »

fladimir escreveu:Obrigado pessoal pela atenção dispensada... num primeiro momento vou substituir apenas o comando pela função q o colega DLZ mencionou e trocar em cliente q usa muito leitor e acompanhar os resultados... e depois eu posto os resultados...

Grato pessoal.... Sucesso a todos!!!!!!!!!


:)Pos
fladimir, estou com o mesmo problema, como conseguiu resolver?

Grato.
Responder