Página 1 de 1

TEF...

Enviado: 04 Jul 2005 10:43
por Carlos Bernardi Jr
dai pessoal... meu problema refere-se ao travamento do teclado durante a impressao do cupom do tef... ja olhei os posts anteriores e nenhuma das respostas resolveu meu problema... estou utilizando a funcao kbddisable da ca tools para bloquear o teclado... ate ai tudo bem... o problema é q quando o teclado é destravado , todas as teclas armazenadas no buffer sao descarregadas... ja fiz varios testes , inclusive utilizando clear typeahead q foi a resposta para os posts encontrados... mas mesmo assim nao vai... sera q alguem q ja tenha homologado o sistema para o tef poderia me dar uma orientaçao a respeito de como conseguiu isso ? obrigado...

Enviado: 04 Jul 2005 13:20
por evolver
Tentou o seguinte

while nextkey() # 0
inkey()
end

Ou de forma mais compacta (mas acredito que poderia ocasionar um erro de esperar uma tecla mesmo após limpeza do buffer o que não aconteceria no caso acima)

while inkey(0) # 0
end

Acho que seria mais eficiente para limpar o buffer de teclado do que o clear typeahead.

Enviado: 05 Jul 2005 14:07
por jonatam_q
olha a naipe do fonte que eu fiz pra limpar o teclado... junto com tudo o que tu falou
------------------------------------------------------------
Set typeahead to 0
clear typeAhead
__KeyBoard(Replicate(Chr(0),255))
clear typeAhead
__KeyBoard(Replicate(Chr(0),255))
while nextkey() # 0
inkey()
end

If lAtivar
Set typeahead to 0
Else
set typeahead to 16
EndIf
clear typeAhead
__KeyBoard(Replicate(Chr(0),255))
KbdDisable(lAtivar)

Set typeahead to 0
clear typeAhead
__KeyBoard(Replicate(Chr(0),255))
clear typeAhead
__KeyBoard(Replicate(Chr(0),255))
while nextkey() # 0
inkey()
end
---------------------------------------------------------------------
tentei varias variações de tudo isso ...

E NADA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Tah feio fazer funcionar.

Enviado: 05 Jul 2005 17:40
por Carlos Bernardi Jr
consegui resolver o problema da seguinte forma :

kbddisable(.F.)
keyboard "."
do while inkey() # 0
ntempinho:=SECONDS()
DO while .T.
IF (seconds() - ntempinho) > 0.1
exit
endif
ENDDO
ntecla:=inkey()
enddo

isso para limpar as teclas "normais"... alt-tab , e cia ltda a funcao kbddisable nao bloqueia... para conseguir bloquear alt-tab e cia desabilitei no atalho do programa na aba diversos as teclas de atalho do windows... a principio ta funcionando legal...

Enviado: 06 Jul 2005 13:43
por jonatam_q
Chega a ser estranho :D mas é verdade.

*****************************************************
NO CLIPPER NÃO É NECESSARIO DESABILITAR O TECLADO!!!!!!!!
*****************************************************

Cheguei a essa conclusão depois de alguns testes basicos (pelo menos no windows 98). O KbdDisable descarrega as teclas pressionadas depois que o teclado é ativado novamente, isso é fato. Então tirei a função e não a usei mais, como o programa esta no meio de um processamento, não vai estar esperando teclas, então qualquer tecla pressionada não vai interferir no processamento (até as teclas de função F1-F12). O clipper le interpreta e ignora por não estar esperando teclas naquele momento. Sobram as teclas do windows, estas podem ser desabilitdas nas propriedades do promp do MS-DOS (aba misc, grupo teclas de atalho do windows). As teclas estão listadas abaixo:
- Alt+Tab;
- Ctrl+Esc;
- Alt+PrtScr;
- Alt+Espaço;
- Alt+Esc;
- PrtScr;
- Alt+Enter.
Sobra ainda a tecla do windows que não desabilita de forma alguma eo alt+C que é desativado executando SetCancel(.F.).
Assim nunca mais o teclado sera um pesadelo para a homologação de softwares clipper.


- "Ta bom jonatam_q, mas e a função inkey() ? Ela responde ao teclado em qualquer momento."
Implemente uma outra função de aguardo que não espera teclado, como a que eu uso atualmente(Codigo abaixo). Troque o inkey por uma função como essa e fim de problemas.

**************************************************
Procedure Inkey_ecf(nTempo)
Local nSecond:=0
nSecond:=seconds()+If(Valtype(nTempo)=="N",nTempo,0)
While nSecond>Seconds()
end
Return
**************************************************