用于密码输入的Delphi InputBox?

时间:2009-02-26 16:32:46

标签: delphi mask textinput inputbox

的InputBox:

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

效果很好,但我正在寻找一个蒙面的,就像一个密码盒,你只看到小星星而不是打字的角色。

5 个答案:

答案 0 :(得分:33)

在XE2中,InputBox()InputQuery()已更新为本机支持屏蔽TEdit输入,但该功能尚未记录。如果APrompt参数的第一个字符设置为任何值< #32然后TEdit.PasswordChar将设置为*,例如:

answer := InputBox('a', #31'b', 'c');

答案 1 :(得分:26)

您可以将Windows消息发送到InputBox创建的编辑控件,该控件将标记密码输入的编辑控件。以下代码取自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;

答案 2 :(得分:9)

InputBox调用Dialogs中的InputQuery函数,该函数动态创建表单。您可以随时复制此函数并更改TEdit的PasswordChar属性。

答案 3 :(得分:3)

我认为德尔福不包含开箱即用的东西。也许你可以在http://www.torry.net/或网上的其他地方找到一个。否则只需自己写一个 - 不应该那么难。 :-)如果你有一个“足够大”的Delphi版本,你甚至可以查看源代码。

乌利。

答案 4 :(得分:0)

您可以使用InputQuery代替InputBox。设置为TRUE时,密码字段将被屏蔽。

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

这里有些资源; http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html