Delphi深度探索之自动完成外壳扩展计算机二级考试

文章作者 100test 发表时间 2009:05:22 12:00:26
来源 100Test.Com百考试题网


  大家一定都非常熟悉IE浏览器的地址输入编辑框,它提供了自动完成的功能。自动完成(Auto Complete)功能简化了编辑框的输入功能,它可以根据已经输入的部分字符串进行预测和匹配。演示了自动完成可以依据输入的 “pro”,给出Pascal的保留字中与其相匹配的字符串列表\"procedure\"、\"program\"、\"property\"。
  在利用自动完成功能前,必须要知道自动完成并不是任意版本的Windows都支持,自动完成功能实际上是由Internet Explorer 4.0引入并必须有4.71版及以上的Shell32.dll的支持。很多早期的系统,包括很多安装了IE 4的系统并不支持这项特性,所以使用自动完成功能时必须确保要安装的系统支持这项功能,如果不支持就需要安装IE和集成外壳。
  自动完成功能是通过一组COM接口来实现的。这些接口使我们可以连接自动完成到编辑框,添加编辑框可以枚举的字符串列表并配置其显示属性。
  1. 自动完成的用途
  使用自动完成功能可以增强程序的易用性,它可以节省用户反复输入一些常用字符串的时间,并减少输入错误。它还可以用于部分字符匹配的查找系统,可以用它 实现对数据库内容的快速查找。另外,它还支持向浏览器历史、最近运行程序和外壳目录输入等功能中添加自定义的完成列表。
  2. 配置自动完成
  需要知道的是在Delphi里并没有提供自动完成功能相关COM接口的pascal声明单元。由于一般这类接口在微软都是以C语言的头文件形式提供接 口,Delphi不可能及时提供最新的相应的Pascal包装单元。所以为了使用这项功能,本文中额外提供了一个shlintf单元翻译了相应的头文件的 声明。下表总结了Shlintf的内容:
  COM对象接 口
  CLSID_AutoCompleteIAutoComplete
  CLSID_ACLHistoryIAutoComplete2
  CLSID_ACListISFIACList
  CLSID_ACLMRUIACList2
  CLSID_ACLMultiICurrentWorkingDirectory
  IObjMgr
  自动完成功能最基本的一个接口就是IAutoComplete接口,它的声明如下:
  type
  IAutoComplete = interface(IUnknown)
  [SID_IAutoComplete]
  function Init(hwndEdit: HWND. punkACL: IUnknown. pwszRegKeyPath: PWideChar.
  pwszQuickComplete: PWideChar): HResult. stdcall.
  function Enable(fEnable: Boolean): HResult. stdcall.
  end.
  IautoComplete接口有两个方法:Init和Enable。
  Init方法用来把IAutoComple接口以及自动完成列表同编辑框相连接。参数pwszRegKeyPath和 pwszQuickComplete使得IAutoComplete接口可以按预定义的格式扩展部分输入的字符串,快捷键为CTRL ENTER。比如设 定pwszQuickComplete为”http://www.%s.cn/”后,当用户输入\"csai\" 到编辑框,并按下快捷键CTRL ENTER,编辑框中的文本就会更新为http://www.csai.cn/。
  Enable方法是根据fEnable标识来切换自动完成功能的开关状态的。缺省时是激活的。
  显示了IAutoComplete接口是如何自动完成字符串的,当用户在编辑框中输入字符时,一种可能是最能匹配已经输入字符串的候选字符会被反白显示。
  回过头再来看看Init方法的punkACL参数,它是一个必须的参数而且必须指向一个提供字符串的接口。注意不是我们熟悉的Delphi中提供的 TStrings对象,而是一个IEnumString字符串接口。IEnumString接口负责生成一个用于自动完成的候选字符串列表。除了 IEnumString接口外,punkACL参数还可以是IACList和IACList2等其他接口。
  IACList接口简单地说就是可以对候选字符串分类来改善自动完成的效率,本文中将不加介绍。
  要注意的是Microsoft并没有停止对自动完成功能的改进,在Internet Explorer 5.0中,Microsoft 还提供了IAutoComplete2接口。IAutoComplete2接口进行了进一步的扩展,它使得我们可以设定一系列的选项来设定自动完成的可视 化表达以及操作。下面是 IAutoComplete2接口的声明:
  type
  IAutoComplete2 = interface(IAutoComplete)
  [SID_IAutoComplete2]
  function SetOptions(dwFlag: DWORD): HResult. stdcall.
  function GetOptions(out dwFlag: DWORD):HResult. stdcall.
  end.

相关文章


计算机二级DELPHI设置DBGridEh自动排序方法计算机二级考试
计算机二级DELPHI采用日志方式调试程序计算机二级考试
计算机二级取得Delphi修改文件的时间代码计算机二级考试
Delphi深度探索之自动完成外壳扩展计算机二级考试
在Delphi调用WMI读取USB设备的PID和VID计算机二级考试
计算机二级delphi检测计算机是否连网计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛