Pergunta

Caixa de entrada:

answer:=Inputbox('a','b','c');

Funciona bem, mas estou procurando uma caixa de senha mascarada, como uma senha, onde você só vê pequenas estrelas em vez dos caracteres digitados.

Foi útil?

Solução

Você pode enviar uma mensagem do Windows para o controle de edição criado por InputBox, isso sinalizará o controle de edição para entrada de senha. Código abaixo tirado de http://www.swissdelphicenter.ch/en/showcode.php?id=1208:

const
   InputBoxMessage = WM_USER + 200;

type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
   private
     procedure InputBoxSetPasswordChar(var Msg: TMessage); message InputBoxMessage;
   public
   end;

var
   Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
var
   hInputForm, hEdit, hButton: HWND;
begin
   hInputForm := Screen.Forms[0].Handle;
   if (hInputForm <> 0) then
   begin
     hEdit := FindWindowEx(hInputForm, 0, 'TEdit', nil);
     {
       // Change button text:
       hButton := FindWindowEx(hInputForm, 0, 'TButton', nil);
       SendMessage(hButton, WM_SETTEXT, 0, Integer(PChar('Cancel')));
     }
     SendMessage(hEdit, EM_SETPASSWORDCHAR, Ord('*'), 0);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   InputString: string;
begin
   PostMessage(Handle, InputBoxMessage, 0, 0);
   InputString := InputBox('Input Box', 'Please Enter a Password', '');
end;

Outras dicas

Em XE2, InputBox() e InputQuery() foram atualizados para apoiar nativamente o mascarar o TEdit A entrada, embora esse recurso ainda não tenha sido documentado. Se o primeiro personagem do APrompt O parâmetro está definido como qualquer valor #32 então o TEdit.PasswordChar será definido como *, por exemplo:

answer := InputBox('a', #31'b', 'c');

O InputBox chama a função de entrada em diálogos, que cria o formulário dinamicamente. Você sempre pode fazer uma cópia desta função e alterar a propriedade Passwordchar do TEDIT.

Eu não acho que Delphi inclua uma coisa dessas. Talvez você possa encontrar um em http://www.torry.net/ ou em outros lugares da rede. Caso contrário, apenas escreva um você mesmo - não deve ser tão difícil. :-) Você pode até olhar para o código-fonte se tiver uma versão Delphi "grande o suficiente".

Uli.

Você pode usar o InputQuery em vez do InputBox. Quando o verdadeiro argumento for definido, o campo de senha será mascarado.

InputQuery('Authenticate', 'Password:',TRUE, value);     

Algum recurso aqui; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top