Delphi InputBox for password entry?

2019-02-12 01:56发布

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.

5条回答
该账号已被封号
2楼-- · 2019-02-12 02:24

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');
查看更多
可以哭但决不认输i
3楼-- · 2019-02-12 02:25

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.

查看更多
祖国的老花朵
4楼-- · 2019-02-12 02:27

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

查看更多
走好不送
5楼-- · 2019-02-12 02:31

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;
查看更多
迷人小祖宗
6楼-- · 2019-02-12 02:44

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.

查看更多
登录 后发表回答