聚焦时显示的 TComboBox TextHint

TComboBox TextHint to Display While Focused

EM_SETCUEBANNER 设置 TEdit 控件显示的文本提示或提示以提示用户输入信息,但是如何设置 [=12= 的文本提示] 控制并改变它的行为,以便它只在用户开始输入时消失?这是我用来在 TEdit 控件上实现 EM_SETCUEBANNER 的代码:

SendMessage(TEdit.Handle, EM_SETCUEBANNER, wParam, Integer(PWideChar(HintText)));

我需要如何更改上述代码才能使用 TComboBox 控件实现所需的输出?

有一个等价的 CB_SETCUEBANNER 消息。

Sets the cue banner text that is displayed for the edit control of a combo box.

SendMessage(TComboBox.Handle, CB_SETCUEBANNER, 0, LPARAM(PWideChar(HintText)));

话虽如此,TEdit 已发布 TextHint property that internally uses EM_SETCUEBANNER, and TComboBox has a published TextHint 属性,内部在 XP 上使用 EM_SETCUEBANNER,在 Vista+ 上使用 CB_SETCUEBANNER

我不确定 TEdit.TextHint 是什么时候添加的,但是 TComboBox.TextHint 是在 Delphi 2009 年添加的:

Delphi 2009 - TextHint in TComboBox


Update:注意CB_SETCUEBANNERwParam值必须为0,因此不支持制作banner文字的功能当空 ComboBox 具有焦点时保持可见。如果你需要它,你将必须获得 ComboBox 编辑字段的 HWND(参见 GetComboBoxInfo() and CB_GETCOMBOBOXINFO),然后直接发送它 EM_SETCUEBANNER(这就是 TextHint 属性在 XP 上执行),因此您可以将其 wParam 参数设置为 TRUE。

uses
  ..., Winapi.CommCtrl;

var
  info: TComboBoxInfo;
begin
  info.cbSize := sizeof(info);

  GetComboBoxInfo(TComboBox.Handle, info);
  // or: SendMessage(TComboBox.Handle, CB_GETCOMBOBOXINFO, 0, LPARAM(@info)));

  SendMessage(info.hwndItem, EM_SETCUEBANNER, TRUE, LPARAM(PWideChar(HintText)));
end;