Dica: Máscara de Password no InputBox

Delphi

26/03/2019

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

Curtidas 2

Respostas

Gladstone Matos

Gladstone Matos

26/03/2019

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

Kauan Oliveira

26/03/2019

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
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/03/2019

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:', '');


GOSTEI 0
Kauan Oliveira

Kauan Oliveira

26/03/2019

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