Inputbox:

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

funciona bien, pero estoy buscando una máscara, como una caja de contraseña donde sólo ves a poco las estrellas en lugar de los caracteres escritos.

OriginalEl autor Arthur | 2009-02-26

5 Comentarios

  1. 25

    Puede enviar un mensaje de Windows para el control de edición creada por InputBox, que marcará el control de edición de entrada de contraseña. Código siguiente tomado 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;
    Wow! elegante manera de aplazar la ejecución 🙂

    OriginalEl autor overslacked

  2. 32

    En XE2, InputBox() y InputQuery() se han actualizado para soportar de forma nativa el enmascaramiento de la TEdit de entrada, a pesar de que la función no se ha documentado aún. Si el primer carácter de la APrompt parámetro se establece para cualquier valor de < #32, a continuación, el TEdit.PasswordChar se establece en *, por ejemplo:

    answer := InputBox('a', #31'b', 'c');
    Ahora que es intuitivo!
    Iban a los problemas de la expansión de InputQuery() (que InputBox() utiliza internamente) con nuevos parámetros para la multi-mensajes y un OnCloseQuery de devolución de llamada, pero no podía ser molestado a crear un nuevo parámetro para especificar la contraseña de enmascaramiento? Los múltiples mensajes de apoyo por la pronta enmascaramiento, pero se podría haber hecho que la interfaz más intuitiva. En lugar de utilizar una matriz de cadenas con especial personajes principales, que debería haber utilizado una matriz de cadena que contiene registros/máscara de pares. Que incluso se han permitido el futuro campo para ser añadido para un control más preciso de la TEdit controles. Pero nope.

    OriginalEl autor Remy Lebeau

  3. 9

    InputBox llama a la InputQuery función en los Diálogos, que crea el formulario dinámicamente. Siempre se puede hacer una copia de esta función y cambio de la TEdit la propiedad PasswordChar.

    OriginalEl autor Bruce McGee

  4. 3

    No creo que Delphi incluye una cosa fuera de la caja. Tal vez usted puede encontrar uno en http://www.torry.net/ o en otros lugares en la red. De lo contrario, acaba de escribir uno mismo – no debería ser tan difícil. 🙂 Incluso se puede mirar el código fuente si usted tiene un «lo suficientemente grande» Delphi versión.

    Uli.

    OriginalEl autor Uli Gerhardt

Dejar respuesta

Please enter your comment!
Please enter your name here