Delphi XE8:TEdit TextHint在接收焦点时消失
基本上,我希望我的TEDIT的文本提示在输入第一个字符时消失,而不是在它们收到焦点时消失,就像Microsoft页面上的编辑一样:。有人能告诉我如何做到这一点吗Delphi XE8:TEdit TextHint在接收焦点时消失,delphi,focus,delphi-xe8,editcontrol,Delphi,Focus,Delphi Xe8,Editcontrol,基本上,我希望我的TEDIT的文本提示在输入第一个字符时消失,而不是在它们收到焦点时消失,就像Microsoft页面上的编辑一样:。有人能告诉我如何做到这一点吗 提前感谢。内置的TEdit行为不允许这样做,但您可以从TEdit派生一个新控件并覆盖dosetexthint。实现应该类似于内部方法,但为wParam提供值1,而不是0 这是一个使用以下方法的解决方案: 确保将该单元放在Vcl.StdCtrls之后的interface uses子句中。根据Uwe Raabe的回答,以下是一个过程(对于D
提前感谢。内置的
TEdit
行为不允许这样做,但您可以从TEdit
派生一个新控件并覆盖dosetexthint
。实现应该类似于内部方法,但为wParam
提供值1,而不是0
这是一个使用以下方法的解决方案:
确保将该单元放在Vcl.StdCtrls之后的interface uses子句中。根据Uwe Raabe的回答,以下是一个过程(对于Delphi 2007,也适用于较新版本的Delphi): 你这样称呼它:
constructor TForm1.Create(_Owner: TComponent);
begin
inherited;
TEdit_SetCueBanner(ed_HideOnFocus, 'hide on focus', cbhHideOnFocus);
TEdit_SetCueBanner(ed_HideOnText, 'hide on text', cbhHideOnText);
end;
但它不检查Windows版本,您可能需要添加Uwe提供的if语句:
if CheckWin32Version(5, 1) and StyleServices.Enabled and _ed.HandleAllocated then
我刚刚用一个项目测试了它,在这个项目中我禁用了运行时主题:它不起作用。关于您对我的答案的编辑:SendMessage不会编译,因为值是字符串。这就是为什么要使用SendTextMessage(至少在D2009+中是这样)。哦,对不起。我查找了SendTextMessage,除了发送短信外,找不到任何其他内容。SendTextMessage在哪里声明?它是RTL函数还是Windows API?自D2009以来,它在(Winapi.)消息中声明,并包装了难看的转换。当LPRAM必须指向字符串时非常方便。非常感谢@Uwe和dummzeuch提交您的答案!我真的很感激。在对创建组件进行了一些研究之后,我终于能够创建我自己的(对不起,我不知道如何突出显示文本)THintEdit和ThintLabeledIt,它们工作得非常好@我还没有测试过,但可能会。你试过了吗?
constructor TForm1.Create(_Owner: TComponent);
begin
inherited;
TEdit_SetCueBanner(ed_HideOnFocus, 'hide on focus', cbhHideOnFocus);
TEdit_SetCueBanner(ed_HideOnText, 'hide on text', cbhHideOnText);
end;
if CheckWin32Version(5, 1) and StyleServices.Enabled and _ed.HandleAllocated then