Aparentemente, o problema ocorre no meu caso, porque a minha implementação das chamadas ACBR, ficam dentro de uma DLL que é carregada e utilizada pelo sistema... Talvez por ser dentro da DLL tenha alguma limitação na questão do Timer ali que não se destroi... Fiz uma aplicação de teste, com a implementação diretamente em um formulário simples, e não ocorreu o problema.. acho que só consegue simular se for por uma DLL mesmo...
Podem fechar este tópico, eu acabei resolvendo pra mim de outra forma.. mas se quiserem testar, eu joguei abaixo alguns trechos para montagem de um exemplo:
Exemplo:
>>>> Criar uma DLL e exportar o método com uma implementação como esta:
uses
ACBrTEFD,
ACBrTEFDClass,
ACBrTEFDCliSiTef;
private
FACBrTEFD: TACBrTEFD;
FEstadoECF: String;
FACBrTEFD := TACBrTEFD.Create(nil);
FACBrTEFD.TEFCliSiTef.EnderecoIP := 'localhost';
FACBrTEFD.TEFCliSiTef.CodigoLoja := '00000000';
FACBrTEFD.TEFCliSiTef.NumeroTerminal := 'SE000001';
FACBrTEFD.TEFCliSiTef.PortaPinPad := 3;
FACBrTEFD.TEFCliSiTef.NumVias := 2;
FACBrTEFD.SuportaSaque := False;
FACBrTEFD.SuportaDesconto := False;
FACBrTEFD.OnExibeMsg := Sitef_ExibirMensagem;
FACBrTEFD.OnAguardaResp := AguardaResposta;
FACBrTEFD.OnInfoECF := InfoECF;
FACBrTEFD.OnComandaECF := ComandaECF;
FACBrTEFD.OnComandaECFAbreVinculado := ComandaECFAbreVinculado;
FACBrTEFD.OnComandaECFImprimeVia := ComandaECFImprimeVia;
FACBrTEFD.OnBloqueiaMouseTeclado := BloqueiaMouseTeclado;
FACBrTEFD.TEFCliSiTef.OnExibeMenu := Sitef_ExibirMenu;
FACBrTEFD.TEFCliSiTef.OnObtemCampo := Sitef_ObterCampo;
FEstadoECF := 'V';
FACBrTEFD.Inicializar(gpCliSiTef);
FACBrTEFD.DesInicializar(gpCliSiTef);
// Aqui vai ocorrer o problema (aparentemente apenas se isso tudo estiver dentro de uma DLL)
FACBrTEFD.Free;
------------
Métodos para testar assinatura:
procedure Sitef_ExibirMensagem(Operacao: TACBrTEFDOperacaoMensagem; aMensagem: string; var AModalResult: TModalResult);
begin
// teste
end;
procedure Sitef_ExibirMenu(aTitulo: string; aOpcoes: TStringList; var aItemSelecionado: Integer; var aVoltarMenu: Boolean);
begin
// teste
end;
procedure Sitef_ObterCampo(aTitulo: string; aTamanhoMinimo, aTamanhoMaximo, aTipoCampo: Integer; aOperacao: TACBrTEFDCliSiTefOperacaoCampo; var aResposta: AnsiString; var aDigitado, aVoltarMenu: Boolean);
begin
// teste
end;
procedure ComandaECF(Operacao: TACBrTEFDOperacaoECF; Resp: TACBrTEFDResp; var RetornoECF: Integer);
begin
// teste
end;
procedure AguardaResposta(Arquivo: string; SegundosTimeOut: Integer; var Interromper: Boolean);
begin
// teste
end;
procedure ComandaECFAbreVinculado(COO, IndiceECF: string; Valor: Double; var RetornoECF: Integer);
begin
// teste
end;
procedure ComandaECFImprimeVia(TipoRelatorio: TACBrTEFDTipoRelatorio; Via: Integer; ImagemComprovante: TStringList; var RetornoECF: Integer);
begin
// teste
end;
procedure InfoECF(Operacao: TACBrTEFDInfoECF; var RetornoECF: string);
begin
// Simula o tempo de resposta da impressora
Sleep(100);
case Operacao of
ineEstadoECF:
begin
RetornoECF := FEstadoECF;
end;
ineSubTotal:
begin
RetornoECF := '999999';
end;
ineTotalAPagar:
begin
RetornoECF := '0';
end;
end;
end;
procedure BloqueiaMouseTeclado(Bloqueia: Boolean; var Tratado: Boolean);
begin
// teste
end;
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.