Página 1 de 1

Problemas com KEYBOARD para ler código de barras

Enviado: 05 Dez 2007 10:33
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,

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

Enviado: 28 Fev 2009 20:20
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

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

Enviado: 02 Mar 2009 09:19
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

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

Enviado: 02 Mar 2009 12:31
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

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

Enviado: 02 Mar 2009 14:17
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.

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

Enviado: 02 Mar 2009 16:18
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

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

Enviado: 02 Mar 2009 19:22
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.

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

Enviado: 03 Mar 2009 10:16
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.

Problemas com KEYBOARD para ler código de barras

Enviado: 18 Mar 2015 18:56
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.