Ir para conteúdo
  • Cadastre-se

dev botao

Destravar Teclado E Mouse Em "raise"


Mozart
  • Este tópico foi criado há 3508 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia, estou homologando um sistema utilizando ACBrECF e um componente de terceiros para TEF (EasyTEF). Ambos trabalham em conjunto, e até agora estão se dando bem.

Durante a homologação, encontraram apenas um bug, que é: Durante os testes, o homologador pede para que a ECF seja desligada durante a finalização da impressão do Vinculado. Ao desligar a ECF, uma mensagem é exibida (Impressora %s não está respondendo) no meu caso é uma Daruma FS700 D-Printer

Porém, quando essa mensagem é exibida, o teclado e mouse permacem bloqueados, pois minha verificação de falha de comunicação com a ECF é "morta" por um raise que o componente executa. Quando o componente executa o raise, não consigo fazer mais verifiações. Realizei um teste, comentando as linhas que são executadas para mostrar essa mensagem e deu certo, consegui tratar o erro passando para minha aplicação e desbloqueando o teclado e mouse.

Procurei aqui no forúm, mas não encontrei nada. Peço desculpas se já existe e torno a perguntar. 

Os homologadores deram 2 alternativas para tratar essa mensagem: ou tira a mensagem que não é obrigatória já que após clicar em "Ok" nessa mensagem, a próxima é exibida (impressora não responde, tentar novamente "sim ou não"?) ou destravar o teclado e mouse para que o operador posso clicar em "OK" nessa mensagem.

 

Preciso da ajuda de vocês. Se alguém já se deparou com algo assim, por favor, ajude-me.

 

A mensagem é exibida por esse código:

 

     if not Tratado then
        raise;
 
Em vário trechos do código, ela é executada (leitura x, redução z, abrecupom, etc)
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Poderia enviar o log do ACBrECF para vermos quando é levantada a exceção?

 

Provavelmente você não está setando algum evento, veja a variavel "tratado" no trecho de codigo, ela é utilizada por muito eventos para dizer que você mesmo tratou, se true o componente não levanta a exceção.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Na verdade ele cai nesse teste da procedure "LeResposta"

 

  if (pos('ACBrErro:',fpRespostaComando) = 1)  then
  begin
     fpRespostaComando := copy( fpRespostaComando, 11, Length( fpRespostaComando ) );
     raise EACBrECFTimeOut.create( Format(ACBrStr(cACBrECFSemRespostaException), [ModeloStr]) ) ;
  end ;
 
O que acontece é que ao exibir a mensagem cACBrECFSemRespostaException ele não destrava o teclado e mouse, obrigando o usuário a precionar CTRL + Alt + Del
 
Fiz um ajuste para poder terminar minha homologação.
Inclui antes do raise um BlockInput(False, True) 
Não sei se foi/é a melhor maneira de tratar, mas como precisava finalizar minha homologação, tive que fazer isso.
 
O método que utilizo para travar o teclado e mouse, não é do ACBrECF, utilizo a função da user32.dll para isso.
 
O código ficou assim depois da minha alteração
 
  if (pos('ACBrErro:',fpRespostaComando) = 1)  then
  begin
     fpRespostaComando := copy( fpRespostaComando, 11, Length( fpRespostaComando ) );
     // Iago Mozart 07/10/2014 12h30min
 BlockInput(False, True);
     raise EACBrECFTimeOut.create( Format(ACBrStr(cACBrECFSemRespostaException), [ModeloStr]) ) ;
  end ;
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3508 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.