まず,プレースホルダとはどういうものかを,次のリンクで確認してください.
http://myakura.github.io/n/placeholder.html#intro
以下のコードは,フォームに配置した Edit1 にこのような機能を追加するものです.
これは,以下の記事のコードの一部分の再掲ですが,プレースホルダ(placeholder)という用語として,こちらに書いておきます.
動作確認環境は,Windows 7 U64(SP2) + Delphi XE(UP1) Pro です.
[Delphi2007 と TEdit (ついでに TComboBox)]
http://ht-deko.minim.ne.jp/tech022.html
implementation
uses CommCtrl;
{$R *.dfm}
//============================================================================= // Edit1にプレースホルダを設定 // EM_SETCUEBANNERの使用には,usesにCommCtrlが必要 // SentTextMessageの第3引数を0にすると,TextHintプロパティと同じ動作となる //============================================================================= procedure TForm1.FormShow(Sender: TObject); begin Edit1.Text := ''; SendTextMessage(Edit1.Handle, EM_SETCUEBANNER, 1, '何か入力してね');
Edit2.Text := ''; Edit2.TextHint := 'お名前'; end;
//============================================================================= // マウスダウンでプレースホルダが消えないようにする // 完全にとはいかないようだ //============================================================================= procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Trim(Edit1.Text) = '' then Edit1.Invalidate; end;
//============================================================================= // ついでにマウスアップも // ちょっとチラつくようだ //============================================================================= procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Trim(Edit1.Text) = '' then Edit1.Invalidate; end;
最初の図は,テストに使用したフォームの設計時の画像です.
その下が実行時の画面です.
何かを入力すると,プレースホルダの文字列が消えます.
次の,マイクロソフトの記事に
《You cannot set a cue banner on a multiline edit control or on a rich edit control. 》
とあるので,複数行のテキストコントロールやリッチエディットでは使用できませんね.
[EM_SETCUEBANNER message (Windows)]
http://msdn.microsoft.com/en-us/library/windows/desktop/bb761639%28v=vs.85%29.aspx
[Vcl.StdCtrls.TCustomEdit.TextHint - RAD Studio API Documentation]
http://docwiki.embarcadero.com/Libraries/XE5/ja/Vcl.StdCtrls.TCustomEdit.TextHint
|