Inputbox:Delphi InputBox para ingresar la contraseña?
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.
Inputbox:Delphi InputBox para ingresar la contraseña?
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.
Puede enviar un mensaje de Windows al control de edición creado por InputBox
, que marcará el control de edición para ingresar 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;
No creo que Delphi incluya tal cosa fuera de la caja. Tal vez puedas encontrar uno en http://www.torry.net/ o en otro lugar de la red. De lo contrario, solo escriba uno usted mismo, no debería ser tan difícil. :-) Incluso puede ver el código fuente si tiene una versión Delphi "lo suficientemente grande".
Uli.
InputBox llama a la función InputQuery en Diálogos, que crea la forma de forma dinámica. Siempre puede hacer una copia de esta función y cambiar la propiedad PasswordChar de TEdit.
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');
¡Eso es intuitivo! –
Se tomaron la molestia de expandir 'InputQuery()' (que 'InputBox()' usa internamente) con nuevos parámetros para varias solicitudes y una devolución de llamada 'OnCloseQuery', pero no se les pudo molestar para crear un nuevo parámetro para especificando enmascaramiento de contraseña? Las solicitudes múltiples admiten el enmascaramiento por solicitud, pero podrían haber hecho esa interfaz más intuitiva. En lugar de usar una matriz de cadenas con caracteres principales especiales, deberían haber usado una matriz de registros que contengan pares de cadenas/máscaras. Eso incluso habría permitido agregar campos futuros para un control más preciso sobre los controles 'TEdit'. Pero no. –
Wow! manera elegante de diferir la ejecución :-) –