TEditのPasswordCharに「*(アスタリスク)」を指定すると「●(黒丸)」で表示されてしまう

解決


もじゃもじゃ  2011-02-17 01:27:32  No: 40029

お世話になります。
Windows7、Delphi2010

おそらくVista、7固有の問題だと思いますが、タイトルの通りです。
(exeをXP上で実行した所「*」表示になったので)

既存システムから画面の移植を行っているのですが、
そのシステムでは設計画面上でこそ「●」になっていますが
実行時は「*」になっているのです。
私のプロジェクト上に持ってくると、設計時も実行時も「●」になってしまいます。

元システムの余計な部分を全てそぎ落とし見比べてみましたが
設定箇所が見つかりませんでした。
よろしくお願い致します。


au  2011-02-17 06:13:07  No: 40030

MSDNによるとCommon Controlのバージョン6以降のEditコントロールのパスワード文字のデフォルト値が●に変更になっててDelphiの方でもテーマが有効でPasswordCharが*の時は、コントロールのデフォルトに合わせる様になってるのが問題みたいですね。

Formの宣言の上に下記を追加したら良いかと

TEdit = class(StdCtrls.TEdit)
  procedure CreateWnd; override;
end;

procedure TEdit.CreateWnd;
begin
  inherited;
  if PasswordChar <> #0 then
    SendMessage(Handle, EM_SETPASSWORDCHAR, Ord(PasswordChar), 0);
end;


もじゃもじゃ  2011-02-17 19:11:47  No: 40031

auさん
一発でバッチリできました。ありがとうございます。

ただ元システムの方では、全てのソースの記述を削りましたが、
教えて頂いた様な処理は行っていませんでした。
(その状態でも*表示)

元システム実行時、StyleプロパティがcsDropDownListのコンボボックスが
角ばった表示になるというのもあり、
クラシックスタイル?的な設定をしているのではと睨んでいるのですが見つかりません。
(設計画面ではコンボボックスは丸みをおびたやつ、パスワードは●です)

後学のために引き続きお願い致します。


au  2011-02-17 21:17:14  No: 40032

元システムはDelphiのバージョンが違ったりするんでしょうか?
「プロジェクトオプション」-「アプリケーション」のランタイムテーマを有効にするのチェックが影響してるのかもしれません。


もじゃもじゃ  2011-02-17 22:23:43  No: 40033

両方ともDelphi2010です。

元システムは ランタイムテーマ無効
(アイコンとランタイムテーマの変更自体、グレーになってて出来ない…何故じゃ…)
私のプロジェクトは ランタイムテーマ有効 でした。

無効にしたところpaswordcharもコンボボックスのオシャレ表示も解消されました。
ありがとうございました。


もじゃもじゃ  2011-02-22 01:11:20  No: 40034

> (アイコンとランタイムテーマの変更自体、グレーになってて出来ない…何故じゃ…)

この問題ですが、下記で解決しました。
http://hiderin.air-nifty.com/delphi/2007/09/index.html#entry-20862237

別ディレクトリにある、共通のリソースファイルを読み込んでいました。
アイコンの指定もどこでやってるのかわからなかったのですが
リソースに含まれてたようです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加