【问题标题】:How do I use 'placeholder text' in a win32 edit control?如何在 win32 编辑控件中使用“占位符文本”?
【发布时间】:2010-11-14 20:53:01
【问题描述】:

查看 Stack Overflow 网站的右上角。搜索框中有一些文字说“搜索”。当您在其中单击时,文本会消失。

我想做与此类似的事情 - 如果 win32 编辑控件为空(即没有文本),我想在其中绘制一些文本,颜色比普通文本更柔和。如果控件有焦点,或者里面有文本,我不想画那个。

有什么方法可以在不将实际文本设置到控件中并更改文本颜色的情况下做到这一点?也许通过拦截控制油漆或其他方式?

谢谢。

【问题讨论】:

    标签: winapi controls edit


    【解决方案1】:

    您不需要自绘,它是原生的,带有用户 api(横幅) 请参阅Winapi grp 获取示例(C 语言)

    【讨论】:

      【解决方案2】:

      感谢这个问题,我将来可以使用它。 FWIW(可能不多),这是 Delphi 中的一个实现:

      procedure TForm1.FormShow(Sender: TObject);
      const
        ECM_FIRST = $1500;
        EM_SETCUEBANNER = ECM_FIRST + 1;
      begin
        SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here'))));
      end;
      

      【讨论】:

      • 请注意,它已作为名为 TextHint 的属性内置在 VCL 中 - 我认为它是在 D2009 中添加的,尽管我现在不完全确定。
      【解决方案3】:

      从 XP 开始就可以了。检查EM_SETCUEBANNER 消息。但是,certain issues 使其无法在 XP 上完全正常工作,因此最好使用 Vista。

      如果您在 Win2k 或更早的版本中需要它,您需要自己做,至少在那些平台上。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

          一种可能性:让它为所有者绘制,如果 .Text 属性为空,则手动在其上绘制文本。

          【讨论】:

            【解决方案6】:

            也许可以,但为什么不根据需要设置默认文本和颜色,并使用“onClick”事件将其清除?

            【讨论】:

            • 因为在有人输入之前,我不想检索文本并获取默认文本。这意味着我必须添加各种检查默认文本等,这会很痛苦。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-10-12
            • 1970-01-01
            • 2016-08-29
            • 2020-02-22
            • 1970-01-01
            • 2011-03-27
            • 2011-12-05
            相关资源
            最近更新 更多