Ir para conteúdo
  • Cadastre-se

ACBRMTer - EchoMode Password


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 2563 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á 2563 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...