Delphi InputBox para introducir la contraseña?
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.
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