计算机二级Delphi深度探索:自动完成外壳扩展
来源:优易学  2011-6-7 12:52:48   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  IAutoComplete2接口引入了两种新的方法,这两种方法使用同样的标识组合作为参数,下表列出了可用的标识及其意义。
  标 识说 明
  ACO_NONE不使用自动完成
  ACO_AUTOSUGGEST使用下拉列表
  ACO_AUTOAPPEND允许自动附加在init方法中pwszQuickComplete参数所代表的字符串
  ACO_SEARCH在下拉列表最后添加\"查找\"文本
  ACO_FILTERPREFIXES防止自动完成匹配常用前缀比如\"www.\", \"http://\"等
  ACO_USETABTAB键可以用来选择下拉列表项
  ACF_UPDOWNKEYDROPSLIST上下按键可以用来调出下拉列表框
  ACO_RTLREADING按由右到左的顺序读
  显示的IAutoComplete2同IAutoComplete的显示方式有一点不同,就是因为IAutoComplete2支持不同的显示模式,这些模式可以通过SetOptions 方法来设定。
  3. 实现自动完成
  自动完成功能是通过COM对象来实现的,下面代码用As操作符来获得IAutoComplete2接口:
  FAutoComplete :=
  CreateComObject(CLSID_AutoComplete) as IAutoComplete2;
  获得接口后我们就可以实现自动完成功能了,下面代码是一个简单的例子:
  unit Main;
  interface
  uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, ShlIntf, ActiveX,
  ComObj, StdCtrls, StrTools;
  type
  TAutoCompleteForm = class(TForm)
  CompletionEdit: TEdit;
  CompletionLabel: TLabel;
  SourceGroupBox: TGroupBox;
  SourceMemo: TMemo;
  procedure FormCreate(Sender: TObject);
  private
  FAutoComplete: IAutoComplete2;
  FStrings: IUnknown;
  end;
  var
  AutoCompleteForm: TAutoCompleteForm;
  implementation
  {$R *.DFM}
  { TAutoCompleteForm }
  procedure TAutoCompleteForm.FormCreate(Sender: TObject);
  begin
  FAutoComplete := CreateComObject(CLSID_AutoComplete) as IAutoComplete2;
  FStrings := TEnumString.Create(SourceMemo.Lines) as IUnknown;
  OleCheck(FAutoComplete.SetOptions(ACO_AUTOSUGGESTor ACO_UPDOWNKEYDROPSLIST));
  OleCheck(FAutoComplete.Init(CompletionEdit.Handle, FStrings, nil, nil));
  end;
  end.
  上面的例程首先获得IAutoComplete2接口,如果系统不支持IAutoComplete2接口,as操作符将引发 EinvalidCastError异常。接下来的一行代码会创建一个TEnumString类的实例并取得IUnknown接口,这个接口将作为 FAutoComplete的Init方法的punkACL参数,TEnumString类是从TInterfacedObject类继承的,实现在 StrTools单元中,实现它的目的是使TStrings类同IEnumString接口兼容。然后,设定显示选项使自动完成支持下拉列表和自动建议。 最后初始化FAutoComplete并同编辑框相连接,被连接的编辑框就支持自动完成了。

上一页  [1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训