per选项,Delphi将随时提示你应该输入的内容):
Property BRowSelect:WordBool;
|
点击OK后,这个属性的相关信息将自动加入到控件的实现文件、类型库文件和对应的Pascal文件中。因为控件的接口是双向的,所以在Pascal文件里使用了读和写两个方法来实现控件的属性。
Delphi自动在类型库里加入了以下声明:
property BRowSelect: WordBool read Get_BRowSelect write Set_BRowSelect; |
这说明了:对于BRowSelect这个属性,有一个读方法Get_BRowSelect,一个写方法Set_BRowSelect。
Delphi自动在控件的实现文件里加入了对BRowSelect属性的读和写访问方法的声明和实现:
function Get_BRowSelect: WordBool; safecall; procedure Set_BRowSelect(Value: WordBool); safecall;
|
这时候这两个方法的实现体是空的,必须得自己填入具体实现的代码:
function TStringGridX.Get_BRowSelect: WordBool; begin //以下代码由自己根据需要编写 //获得现在是否处于行选中状态 with FDelphiControl do Result:=goRowSelect in Options ; end; procedure TStringGridX.Set_BRowSelect(Value: WordBool); begin //以下代码由自己根据需要编写 //设置行选中状态
with FDelphiControl do begin if Value then Options:=Options+[goRowSelect] else Options:=Options-[goRowSelect]; end; end;
|
这时候,使用类型库编辑器来查看类型库,可以看到新增加的BRowSelect属性。类似的,我们还可以往ActiveX控件里加入更多的属性。
还可以往ActiveX控件加入新的方法、事件,加入的方法与加入属性类似。而且加入以后,Delphi也会自动往相应的文件中加入对应方法和事件的声明和实现,具体的实现体还得自己编写,这里不再多说。
我们可以注意到,Delphi自动生成了把VCL构件包装成ActiveX控件所需的包装代码。我们为ActiveX控件增加新的属性、方法和事件的时候,只需要在接口方法的实现里把ActiveX控件的数据与VCL构件的数据联系起来,或者使用VCL构件的方法来完成ActiveX控件的行为,而基本上不需要关心编写一个ActiveX控件的具体细节,例如COM规约等。
前面提到,还可以为ActiveX控件添加定制的属性页。这里不必专门添加新的属性页,因为大多数支持ActiveX的IDE编程环境已经缺省为每个ActiveX控件提供了一个包含所有属性的属性页了,我们使用这个缺省的属性页即可。
好了,做好了前面这些工作以后,选择Project菜单的Build StringGridXControl1命令即可生成我们所需要的ActiveX控件。在项目的目录下,我们可以找到StringGridXControl1.ocx这个文件,这个就是我们的ActiveX控件啦!把它拷贝到Windows 9x的System目录或者Windows NT/2000的System32目录里面,然后使用命令regsvr32 StringGridXControl1.ocx在系统中注册这个StringGridX控件,就可以在VC编程中使用了。
三、小结
由于有了Delphi对开发ActiveX控件强有力的支持,我们基本不费什么功夫就很快得到了一个新的ActiveX控件。Delphi让使用它来开发ActiveX控件的开发人员把注意力集中到了作为ActiveX控件基础的VCL构件上,而不必过多地关心ActiveX控件的细节,所