Pregunta

Inputbox:

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

funciona bien, pero yo estoy buscando un enmascarado, como un cuadro de contraseña, donde sólo se ven pequeñas estrellas en lugar de los caracteres escritos.

¿Fue útil?

Solución

Puede enviar un mensaje de Windows para el control de edición creado por InputBox, esa bandera voluntad el control de edición para introducir la contraseña. Código de abajo tomada 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;

Otros consejos

En XE2, InputBox() y InputQuery() fueron actualizadas para soportar de forma nativa enmascarar la entrada TEdit, aunque esta característica no se ha documentado aún. Si el primer carácter del parámetro APrompt se establece en cualquier valor <#32 entonces el TEdit.PasswordChar se establecerá en *, por ejemplo:

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

InputBox llama a la función InputQuery en un diálogo, lo que crea la forma dinámica. Siempre se puede hacer una copia de esta función y cambiar la propiedad PasswordChar del TEdit.

No creo que Delphi incluye una cosa tan fuera de la caja. Tal vez se puede encontrar uno en http://www.torry.net/ o en la red en otro lugar. De lo contrario sólo escribir uno mismo - no debería ser tan difícil. :-) Usted puede incluso mirar el código fuente si tiene una versión "suficientemente grande" Delphi.

Uli.

Se puede utilizar en lugar de InputQuery InputBox. Cuando se establece el argumento TRUE, será enmascarado campo de contraseña.

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

Algunos de los recursos aquí; http://lazarus-ccr.sourceforge.net/docs/lcl/ diálogos / inputquery.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top