Dica: Máscara de Password no InputBox

26/03/2019

67

Lá nas primeiras versões do Delphi havia um truque que permitia de forma simples colocar máscara de password no InputBox, bastando antes do parâmetro de texto colocar um * (asterisco).

InputBox(const ACaption, APrompt, ADefault: string): string;

//ou seja

inputBox('Password','*Digite sua Senha','');


Porém, com o tempo esse truque ficou esquecido e para piorar, o Delphi internamente verificava o caractere "*" comparando com o valor na tabela ASCII, o que ficou desfuncional já que o Delphi, desde a versão 2009 é Unicode.

Assim, verificando o código fonte das bibliotecas do Delphi, é possível encontrar o código que se encontra lá:

  function GetPasswordChar(const ACaption: string): Char;
  begin
    if (Length(ACaption) > 1) and (ACaption[1] < #32) then
      Result := '*'
    else
      Result := #0;
  end;


sendo que o parânetro ACaption, na verdade ser refere ao texto da janela e não ao título, ou seja, refere-se ao parâmetro APrompt.


Para resolver este problema basta adicionar um caracter especial antes do texto e a máscara será * automáticamente:

inputBox('Password',#31+'Digite sua Senha','');
Hélio Devmedia

Hélio Devmedia

Responder

Posts

26/03/2019

Gladstone Matos

puxa testei no Delphi 7 de todas as formas mas nao consegui resultado... q pena rsrs; Obrigadissimo pela dica Helio!!
Responder

14/05/2022

Kauan Oliveira

Lá nas primeiras versões do Delphi havia um truque que permitia de forma simples colocar máscara de password no InputBox, bastando antes do parâmetro de texto colocar um * (asterisco).

InputBox(const ACaption, APrompt, ADefault: string): string;

//ou seja

inputBox('Password','*Digite sua Senha','');


Porém, com o tempo esse truque ficou esquecido e para piorar, o Delphi internamente verificava o caractere "*" comparando com o valor na tabela ASCII, o que ficou desfuncional já que o Delphi, desde a versão 2009 é Unicode.

Assim, verificando o código fonte das bibliotecas do Delphi, é possível encontrar o código que se encontra lá:

  function GetPasswordChar(const ACaption: string): Char;
  begin
    if (Length(ACaption) > 1) and (ACaption[1] < #32) then
      Result := '*'
    else
      Result := #0;
  end;


sendo que o parânetro ACaption, na verdade ser refere ao texto da janela e não ao título, ou seja, refere-se ao parâmetro APrompt.


Para resolver este problema basta adicionar um caracter especial antes do texto e a máscara será * automáticamente:

inputBox('Password',#31+'Digite sua Senha','');


Utilizo duas versões do Delphi. Na versão 10.3.3 essa opção funcionou perfeitamente, porém na versão 2010 não deu muito certo. O campo de texto não fica com a máscara e na linha " 'Digite sua Senha' ", durante a chamada do input box, acaba saindo "igite sua Senha".

Já viu algum caso antes
Responder

14/05/2022

Emerson Nascimento

talvez tenha a ver com o caractere escolhido.
precisa ser um caractere cujo código ASCII seja menor que 32.

tente com 9 (Tab)
texto := InputBox('Senha necessária', #9'Digite a senha:', '');


Responder

16/05/2022

Kauan Oliveira

Então, tentei aqui e ele literalmente deu um tab na linha kkk vou testar com as outras opções!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar