かなり単純ですが、答えが見つかりません。
Delphi 5 Enterprise でアプリを作成していますが、パスワード フィールドでアスタリスクの代わりに新しい太字の黒いドットをアプリで使用したいと考えています。
これどうやってするの?
See PasswordBox: A Better Way to Enter Passwords:
Getting the black dots to show up based on the visual style was insanely simple!
private const int ES_PASSWORD = 0x0020;
...
protected override CreateParams CreateParams
{
CreateParams cp = base.CreateParams;
...
cp.Style |= ES_PASSWORD;
...
return cp;
}
上記のすべての試みと貢献したすべてのおかげで、全体的な解決策に到達するには、関連するすべての部分を結合する必要がありました.
Delphi でデフォルトで使用される ES_PASSWORD フラグを指摘してくれた Sinan Ünür に感謝しますが、PasswordChar が <> #0 (NUL) の場合のみです。
これは、PasswordChar を何かに設定すると、ES_PASSWORD フラグが設定されてから呼び出されることを意味しますSendMessage(Handle, EM_SETPASSWORDCHAR, Ord(FPasswordChar), 0);
(StidCtrls ソースを教えてくれた Stijn Sanders に感謝します)。
サブクラスを作成して EM_SETPASSWORDCHAR フィールドを送信する行をバイパスしても、星しか表示されません。
私が忘れていたのは、テーマを有効にすることでした (古いバージョンの Delphi では、リソース ファイルをコンパイルする必要があります)。早速ですが、うまくいきます。ブロブがたくさん!
つまり、要約すると:
まだ持っていない場合は、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 です
これでうまくいくかどうかはわかりませんが、これをコピーできるかもしれません。
●</p>
Delphi 2007 まで"*"
は、パスワードに文字を使用すると、"*"
. Delphi 2009 以降、これは正しく表示されます。
KB 956609によると、ドット文字は Unicode 0x25cf です。特定のフォントに関連付けられているわけではありませんが、リンクされたページでは、IE が Tahoma フォントを使用していると具体的に述べています。
The bold black dot in password fields is Unicode character U+25CF ("BLACK CIRCLE"). Most common fonts feature this character.