每个人可能都知道我的意思,但要澄清控制需要:
- 当用户编辑文本时触发事件。该事件将提供一个 SuggestionList:TStrings,您可以在其中填充匹配/建议。
- 如果 SuggestionList 不为空,则会出现一个下拉菜单。
- 与组合不同,控件不应尝试自动选择/自动完成或以其他方式影响编辑。
那么,是否有一个 Delphi 编辑/组合控件可以像这样工作呢?
Use the 自动完成功能 http://msdn.microsoft.com/en-us/library/bb776292.aspx内置于所有 Windows 编辑控件中。
首先,填写您的TStrings
随心所欲地反对。然后使用GetOleStrings http://docwiki.embarcadero.com/VCL/en/AxCtrls.GetOleStrings创建一个TStringsAdapter http://docwiki.embarcadero.com/VCL/en/AxCtrls.TStringsAdapter来包裹它。 (适配器不主张所有权TStrings
对象,因此您必须确保在适配器仍处于活动状态时不会破坏它。)适配器为您提供了一个IStrings
接口,您需要它,因为自动完成功能需要一个IEnumString http://msdn.microsoft.com/en-us/library/ms687257.aspx提供完成匹配的接口。称呼_NewEnum http://docwiki.embarcadero.com/VCL/en/AxCtrls.TStringsAdapter._NewEnum为了那个原因。
接下来,致电CoCreateInstance http://msdn.microsoft.com/en-us/library/ms686615.aspx创建一个IAutoComplete http://msdn.microsoft.com/en-us/library/bb776292.aspx目的。称其为Init http://msdn.microsoft.com/en-us/library/bb776293.aspx方法将其与编辑控件的窗口句柄关联起来。如果您使用的是组合框,请发送cbem_GetEditControl http://msdn.microsoft.com/en-us/library/bb775772.aspx消息查找底层编辑窗口。
您可以在此时停止,自动完成功能应该会自动运行。如果需要,您可以禁用自动完成,也可以设置任意数量的自动完成选项 http://msdn.microsoft.com/en-us/library/bb762479.aspx.
你说你不想要自动完成,但在操作系统术语中,我认为你真正不想要的叫做自动追加,其中字符串的其余部分会在用户键入时自动输入到编辑框中,但会被选中,以便进一步键入将覆盖它,并且如果所需的值短于其中一个匹配项,则用户需要删除多余的文本。
还有自动建议,它显示建议的下拉列表。
您可以启用其中一个或两个选项。您不需要自己过滤建议列表;自动完成对象过滤IEnumString
单独列出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)