delphimasktextinputinputbox

Delphi InputBox for password entry?


Inputbox:

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

works good, but I'm looking for a masked one, like a password box where you only see little stars instead of the typed characters.


Solution

  • You can send a Windows message to the edit control created by InputBox, that will flag the edit control for password entry. Code below taken from 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;