输入框:
answer:=Inputbox('a','b','c');
效果很好,但我正在寻找一个蒙面的,比如一个密码框,你只能看到小星星而不是输入的字符。
在 XE2 中,InputBox()
并InputQuery()
已更新为原生支持屏蔽TEdit
输入,尽管该功能尚未记录在案。如果参数的第一个字符APrompt
设置为任何值 <#32
则将TEdit.PasswordChar
设置为*
,例如:
answer := InputBox('a', #31'b', 'c');
您可以向由 创建的编辑控件发送一条 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;
InputBox 调用 Dialogs 中的 InputQuery 函数,动态创建表单。您可以随时复制此函数并更改 TEdit 的 PasswordChar 属性。
我不认为 Delphi 包含开箱即用的东西。也许您可以在http://www.torry.net/或网络的其他地方找到一个。否则自己写一个——应该不会那么难。:-) 如果您有“足够大”的 Delphi 版本,您甚至可以查看源代码。
乌力。
您可以使用 InputQuery 代替 InputBox。当设置 TRUE 参数时,密码字段将被屏蔽。
InputQuery('Authenticate', 'Password:',TRUE, value);
这里有一些资源;http://lazarus-ccr.sourceforge.net/docs/lcl/dialogs/inputquery.html
如果有人仍然需要一个简单的解决方案,这里是:
InputQuery('MyCaption', #0 + 'MyPrompt', Value); // <-- the password char '*' is used
这是因为 InputQuery 函数具有以下嵌套函数:
function GetPasswordChar(const ACaption: string): Char;
begin
if (Length(ACaption) > 1) and (ACaption[1] < #32) then
Result := '*'
else
Result := #0;
end;
每个提示都会调用它:
PasswordChar := GetPasswordChar(APrompts[I]);
因此,如果 APrompts 中的第一个字符 < #32(例如 #0),则 TEdit 的密码字符将是 '*'。
在德尔福 10.4 上测试。我不确定这是什么时候引入的,我从 D6 直接跳到 10.4 并且没有在 D6 上测试过。