Ir para conteúdo
  • Cadastre-se

dev botao

ACBRMTer - EchoMode Password


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1993 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde.

Tenho múltiplos microterminais em uso e quero colocar o * para os campos de senha.

Quando passo o EchoMode de password pro Microterminal que está na etapa de senha, isso é refletido em todos os outros microterminais, não importando em que etapa do lançamento eles estão.

Alguém tem alguma sugestão de tratamento pra isso?

Obrigado.

  • Fundadores
Postado

Mude o EchoMode, no variável que é passada por referência no Evento de tratamento de dados recebidos... e não na propriedade Global, que afeta todo o componente ( ACBrMTer1.EchoMode ) ...

procedure TForm1.ACBrMTer1RecebeDados(const IP: AnsiString;
  const Recebido: AnsiString; var EchoMode: TACBrMTerEchoMode);  // <--- Repare na váriável EchoMode aqui...
begin
  if EstaDigitandoSenha then                                                                       
    EchoMode := mdePassword;  // <-- modificando, apenas para os dados recebidos nesse evento

....
end;

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Bom dia.

Eu havia visto essa sugestão em outro post mais antigo e tentei implementar, mas por algum motivo após alterar o EchoMode no evento, quando digito no Microterminal nada é exibido, embora a informação seja passada corretamente. Estou analisando aqui pra ver se encontro o motivo.

Obrigado.

Postado

Analisando aqui percebi que, mesmo alterando o EchoMode do evento, em TACBrMTer.DoRecebeDados na unit ACBrMTer, na parte destacada no comentário (na antepenúltima linha) ele chega com a propriedade PasswordChar como #0, que é o char do mdeNormal. 

procedure TACBrMTer.DoRecebeDados(const aIP: String;
  const DadosRecebidos: AnsiString);
var
  wEchoMode: TACBrMTerEchoMode;
  wConexao: TACBrMTerConexao;
  DadosEcho: String;
begin
  if (Length(DadosRecebidos) < 1) then
    Exit;

  wConexao := fConexoes.Conexao[aIP];
  if not Assigned(wConexao) then
    Exit;

  GravaLog( 'Terminal: ' + aIP + ' - RecebeResposta: ' +IntToStr(Length(DadosRecebidos)) +
              ' bytes -> '+ DadosRecebidos, True);

  wEchoMode := EchoMode;
  if Assigned(fOnRecebeDados) then
  begin
    GravaLog( '  OnRecebeDados');
    OnRecebeDados(aIP, DadosRecebidos, wEchoMode);
    GravaLog( '    EchoMode: '+GetEnumName(TypeInfo(TACBrMTerEchoMode), Integer(wEchoMode)));
  end;

  DadosEcho := fMTer.LimparConteudoParaEnviarEcho(DadosRecebidos);
  case wEchoMode of
    mdeNormal  :
      fMTer.ComandoEco(wConexao.Comandos, DadosEcho);
    mdePassword:
      fMTer.ComandoEco(wConexao.Comandos, StringOfChar(PasswordChar, Length(DadosEcho))); // <----- Aqui
  end;
end;

Acredito que talvez seja necessário chamar o SetEchoMode nesse momento, passando como parâmetro o wEchoMode. O que acha?

Obrigado.

 

Postado

No demo ocorre o mesmo, quando altero a variável EchoMode o que digito não é mostrado no Microterminal

procedure TForm1.ACBrMTer1RecebeDados(const IP, Recebido: String;
  var EchoMode: TACBrMTerEchoMode);
begin
  EchoMode:= mdePassword;
  mOutput.Lines.Add('IP: ' + IP + ' - Recebido: ' + TranslateUnprintable( Recebido ) );

  if (PageControl2.ActivePageIndex = 1) then
    AvaliarRespostaTerminal(IP, Recebido);
end;

 

  • Fundadores
Postado

Não havia notado que mudar o EchoMode, influenciava no PasswordChar... isso não faz sentido, e deve ser algo relacionado a implementação anterior ao refactoring...

Enviei um ajuste para o SVN...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Boa tarde

Baixei e recompilei o pacote, mas continua da mesma forma.

Os procedimentos SetEchoMode e SetPasswordChar (que foram alterados) são chamados apenas na criação. No momento em que a variável é alterada no evento OnRecebeDados, nada é feito pra mudar o PasswordChar, que sempre fica #0.

  • Este tópico foi criado há 1993 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.