当前位置:  开发笔记 > 编程语言 > 正文

用于密码输入的Delphi InputBox?

如何解决《用于密码输入的DelphiInputBox?》经验,为你挑选了3个好方法。

输入框:

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

工作得很好,但我正在寻找一个蒙面的,就像一个密码盒,你只看到小星星而不是键入的字符.



1> Remy Lebeau..:

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

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


他们遇到了扩展`InputQuery()`(其中`InputBox()`内部使用)的问题,其中包括用于多提示的新参数和一个`OnCloseQuery`回调,但是他们无法创建用于指定的新参数密码屏蔽?多提示支持每个提示屏蔽,但它们可以使该界面更直观.它们应该使用包含字符串/掩码对的记录数组,而不是使用具有特殊引导字符的字符串数组.这甚至可以允许添加未来的字段以更好地控制`TEdit`控件.但不,不.
现在这很直观!

2> overslacked..:

您可以将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;



3> Bruce McGee..:

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有