非常简单,但我找不到答案。
我正在使用Delphi 5 Enterprise构建应用程序,并希望我的应用程序在密码字段中使用新的粗体黑点而不是星号。
我该怎么做?
答案 0 :(得分:10)
请参阅PasswordBox: A Better Way to Enter Passwords:
根据视觉风格显示黑点非常简单!
private const int ES_PASSWORD = 0x0020;
...
protected override CreateParams CreateParams
{
CreateParams cp = base.CreateParams;
...
cp.Style |= ES_PASSWORD;
...
return cp;
}
答案 1 :(得分:7)
感谢上述所有尝试以及所有贡献,但我必须将所有相关部分加入到一起才能找到完整的解决方案。
感谢SinanÜnür指出ES_PASSWORD标志,该标志在Delphi中默认使用,但仅当PasswordChar为<>时才会使用。 #0(NUL)。
这意味着当你将PasswordChar设置为某个东西时,它会设置ES_PASSWORD标志,然后调用SendMessage(Handle, EM_SETPASSWORDCHAR, Ord(FPasswordChar), 0);
(感谢Stijn Sanders将我指向StdCtrls源代码。)
如果我创建一个子类并绕过发送EM_SETPASSWORDCHAR字段的行,我仍然只获得星星。
我忘记做的是启用主题(在我的古代版本的Delphi中需要编译资源文件)。嘿presto,它的工作原理; Blob比比皆是!
所以,总结一下:
如果您还没有ES_PASSWORD常量,请定义它。
const
ES_PASSWORD = 32;
创建一个TEdit子类并覆盖CreateParams
以在窗口样式中包含ES_PASSWORD。
procedure TPasswordEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or ES_PASSWORD;
end;
为您的计划启用主题。
并且不设置PasswordChar属性。完成!
答案 2 :(得分:3)
我确定它使用标准的UI字体。 CharMap代码是U + 25CF
我不知道这是否有效,但你可以复制它。
●
答案 3 :(得分:2)
根据KB 956609,点字符是Unicode 0x25cf。它与特定字体无关,但链接页面明确提到IE使用Tahoma字体。
答案 4 :(得分:2)
直到Delphi 2007,使用"*"
作为密码字符将显示为"*"
。从Delphi 2009开始,这是shows properly。
答案 5 :(得分:1)
密码字段中的粗体黑点是Unicode字符U + 25CF(“BLACK CIRCLE”)。最常见的字体具有此字符。