【发布时间】:2009-10-20 14:14:27
【问题描述】:
很简单的一个,但我找不到答案。
我正在 Delphi 5 Enterprise 中构建一个应用程序,并希望我的应用程序在密码字段中使用新的粗体黑点而不是星号。
我该怎么做?
【问题讨论】:
很简单的一个,但我找不到答案。
我正在 Delphi 5 Enterprise 中构建一个应用程序,并希望我的应用程序在密码字段中使用新的粗体黑点而不是星号。
我该怎么做?
【问题讨论】:
见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;
}
【讨论】:
cp.Style 设置为0x0020。它正在设置cp.Style = cp.Style | 0x0020,其中| 是按位or。
感谢上述所有尝试以及所有贡献,但我必须将所有相关部分结合在一起才能获得完整的解决方案。
感谢 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,它有效;斑点比比皆是!
所以,总结一下:
如果您还没有 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 属性。完成!
【讨论】:
我确定它使用标准 UI 字体。 CharMap 代码为 U+25CF
我不知道这是否可行,但你也许可以复制它。
●
【讨论】:
直到 Delphi 2007,使用 "*" 作为密码字符将显示为 "*"。从 Delphi 2009 开始,这个shows properly。
【讨论】:
根据KB 956609,点字符是Unicode 0x25cf。它与特定字体无关,但链接页面特别提到 IE 使用 Tahoma 字体。
【讨论】:
密码字段中的粗黑点是 Unicode 字符 U+25CF(“BLACK CIRCLE”)。最常见的字体都有这个字符。
【讨论】: