Delphi InputBox for password entry?

后端 未结 5 1422
面向向阳花
面向向阳花 2021-01-04 02:08

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

相关标签:
5条回答
  • 2021-01-04 02:48

    In XE2, InputBox() and InputQuery() were updated to natively support masking the TEdit input, although that feature has not been documented yet. If the first character of the APrompt parameter is set to any value < #32 then the TEdit.PasswordChar will be set to *, eg:

    answer := InputBox('a', #31'b', 'c');
    
    0 讨论(0)
  • 2021-01-04 02:54

    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;
    
    0 讨论(0)
  • 2021-01-04 03:06

    I don't think that Delphi includes such a thing out of the box. Maybe you can find one at http://www.torry.net/ or elsewhere in the net. Otherwise just write one yourself - shouldn't be that hard. :-) You can even look at the source code if you have a "big enough" Delphi version.

    Uli.

    0 讨论(0)
  • 2021-01-04 03:13

    InputBox calls the InputQuery function in Dialogs, which creates the form dynamically. You could always make a copy of this function and change the TEdit's PasswordChar property.

    0 讨论(0)
  • 2021-01-04 03:13

    You can use InputQuery instead of InputBox. When the TRUE argument is set, password field will be masked.

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

    Some resource here; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html

    0 讨论(0)
提交回复
热议问题