Converti meu sistema para Harbour 3.2 e notei que ao passar o código de barras vem faltando um número.
Exemplo:
codigo: 7896185310576
sai apenas: 796185310576 comeu o 8 segundo caracter
Não é problema do leitor, pois testei vários para ter certeza que se tratava do código. O problema é que o Harbour não esta tratando o Keyboard como o Clipper tratava e mesmo substituindo por HB_KeyPut() não consigo obter o resultado correto.
Postei meu código de testes, já que no sistema é muito grande, isolei para ter certeza que não era nada vinculado ao código do sistema.
#include "inkey.ch"
set scor off
set talk off
set typeahead to 4000
priv ar1:={{"campo","@!","campo"}}
dbcreate("cliente.dbf",{{"CAMPO","C",60,0}})
cls
c_p=space(20)
use cliente
dbedit(00,00,22,79,"","minhafuncao")
//BRW_ARQ(00,00,22,79,ar1)
close all
return
function minhafuncao
parameters modo, campo
if (LastKey() >= 48 .AND. LastKey() <= 57)
//--USO EM HARBOUR 3.2 descomente a linha abaixo
// ja usei HB_KeyPut( CHR( lastkey() )) e nao deu certo, o que mais
// se aproxima é esta função, porem nao da certo tambem.
// exemplo: 7896185310576
// sai apenas 796185310576 o primeiro caracter nunca vem junto
//SETLASTKEY( CHR(LastKey()) )
*HB_KeyPut( CHR(LastKey()) )
//--USO EM CLIPPER 5.2 descomente a linha abaixo
// Funciona perfeitamente, ja no harbour 3.2 nao, exemplo: 7896185310576
// sai apenas 7185310576 come o 896
*KEYBOARD CHR(lastkey() )
@24,00 say "Codigo:"
setcursor(3)
@24,10 get c_p //pict"99999999999999"
read
setcursor(0)
return 1
elseif Lastkey()=27
return 0
else
inkey(0.1)
return 1
endif
Se compilar no Clipper funciona corretamente. Já procurei no fórum e seguindo dicas, usei a função SetLastKey(), porem também não deu certo.
Será que é bug do HARBOUR?
Acho que em TBrowse deva até conseguir, porém esta rotina envolve praticamente 50% do sistema, se tiver que alterá-la vai ser duro, por isso procuro alguma solução já aproveitando o código existente.
Até+