4

很简单的一个,但我找不到答案。

我正在 Delphi 5 Enterprise 中构建一个应用程序,并希望我的应用程序在密码字段中使用新的粗体黑点而不是星号。

我怎样才能做到这一点?

4

6 回答 6

10

请参阅PasswordBox:输入密码的更好方法

根据视觉风格显示黑点非常简单!

    private const int ES_PASSWORD = 0x0020;
    ...

    protected override CreateParams CreateParams
    {
        CreateParams cp = base.CreateParams;
        ...

        cp.Style |= ES_PASSWORD;
        ...

        return cp;
    }
于 2009-10-20T14:18:38.610 回答
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,它有效;斑点比比皆是!

所以,总结一下:

  1. 如果您还没有 ES_PASSWORD 常量,请定义它。

    const
      ES_PASSWORD = 32;
    
  2. 创建一个 TEdit 子类并覆盖CreateParams以在窗口样式中包含 ES_PASSWORD。

    procedure TPasswordEdit.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style := Params.Style or ES_PASSWORD;
    end;
    
  3. 为您的程序启用主题。

并且不要设置PasswordChar 属性。完毕!

于 2009-10-20T14:50:59.450 回答
3

我确定它使用标准的 UI 字体。CharMap 代码为 U+25CF

我不知道这是否可行,但你也许可以复制它。

●</p>

于 2009-10-20T14:16:48.053 回答
2

根据KB 956609,点字符是 Unicode 0x25cf。它与特定字体无关,但链接页面特别提到 IE 使用 Tahoma 字体。

于 2009-10-20T14:17:52.747 回答
2

直到 Delphi 2007,使用"*"密码字符将显示为"*". 从 Delphi 2009 开始,这显示正确

于 2009-10-20T14:32:30.267 回答
1

密码字段中的粗黑点是 Unicode 字符 U+25CF(“BLACK CIRCLE”)。最常见的字体都有这个字符。

于 2009-10-20T14:20:26.610 回答