DelphiActiveX控件使⽤实例
Delphi ActiveX控件使⽤实例
1. ActiveX控件简介
ActiveX控件也就是⼀般所说的OCX控件,它是ActiveX技术的⼀部分。
ActiveX控件可以被集成到很多⽀持ActiveX的应⽤当中去,或者直接⽤来扩展应⽤的功能,这些⽀持ActiveX的应⽤包括C++ Builder、Delphi、Visual dBASE、Visual Basic、Visual C++、Internet Explorer、Netscape Navigator等。
简单的说,ActiveX技术可以使多种编译器中众多的控件得到互⽤,⽐如说:我可以将Delphi 中的控件打包为ActiveX控件后然后加载到Visual C++中进⾏使⽤,这样在VC中也可以使⽤Delphi中的这些控件来实现相应的功能了。
2. ActiveX控件相关知识
在Delphi中,⼀个ActiveX控件由如下⼏个部分组成:VCL(可视化构件库)控件、属性、⽅法、事件,以及⼀个或者多个相关的类型库。
2.1、VCL构件
在Delphi中,⼀个ActiveX控件是由⼀个或者多个VCL构件经过包装以后得到的。所以,要使⽤Delphi来开发ActiveX控件,必须先得开发出或者选择要进⾏包装的VCL构件。也正是由于这个原因,我们可以将Delphi⾥⼤量优秀的VCL构件包装成ActiveX 控件,从⽽可以在别的不能够直接使⽤VCL构件的开发⼯具(如Visual Basic、Visual C++)⾥也能够使⽤到这些控件啦!
但是,在Delphi⾥可以⽤来做ActiveX控件的VCL构件必须是TWinControl的后代。如果想⽤⼀个TGraphiControl的⼦类做ActiveX控件,在⼤多数情况下只需要把它的基类变为TCustomControl即可。有的VCL构件是被注册成⾮ActiveX控件的,例如EditControl,这些控件也不能做ActiveX控件。
2.2、类型库
类型库包含了控件的类型定义信息,提供了⽐接⼝更多的详细信息,是控件向它的宿主程序提供服务信息的⼀种途径。类型库的⽬的是为其他应⽤和编程⼯具提供关于它包含的构件对象的信息。开发ActiveX控件时,Delphi把类型库信息存⼊⼀个.TLB⽂件中及⼀个对应的Pascal⽂件.res(.TLB⽂件的Pascal语⾔版本),编译时类型库将作为资源链⼊DLL或者EXE中。
类型库的元素包括:
(1)类型库信息:包括类型库的总体信息和特征、当前类型库引⽤的其它类型库信息;
(2)构件类:代表整个ActiveX控件,包含了提供给客户应⽤的接⼝;
(3)接⼝属性和⽅法、事件;
(4)枚举类型:⼀种⽤作数据类型的相关常量,可以⽤在类型库的其他地⽅定义属性和⽅法。
图1 类型库编辑器
Delphi提供了⼀个类型库编辑器,⽤于观察或修改类型库,见图1 (在Delphi中选择File->open,然后打开相应的.TLB⽂件,就会⾃动调⽤该类型库编辑器进⾏查看)。可以使⽤它来增加、修改、删除类型库的各种元素。从图1类型库的界⾯上可以看到,左边是⼀个树形结构,各种元素的成员作为⼦节点出现;右边是根据左边所选中的元素类型显⽰不同的页签,可以对该元素的⼀些属性进⾏编辑。
2.3、属性、⽅法和事件
在打包为ActiveX控件后,原有VCL构件的属性、⽅法和事件⾃然就变成为ActiveX 控件的属性、⽅法和事件。控件的属性指颜⾊、标签等;控件的⽅法是请求控件执⾏某些动作;控件的事件则是控件给宿主程序的⼀个通知。
2.4、属性页
ActiveX控件所带的属性页可以让控件的使⽤者查看和修改控件的属性。您可以把⼏个属性捆绑在⼀个属性页上,也可以只为⼀个属性提供⼀个属性页。
2.5、Active Form
在Delphi中,ActiveForm是封装了Delphi Form的⼀种ActiveX控件。ActiveForm其实是⼀种标准的Delphi From(ActiveForm继承⾃TForm)。ActiveForm中可能会包含某些VCL或者ActiveX组件,包括⽤户⾃定义的组件。就像“标准的”Windows应⽤程序⼀样,我们也可
以向ActiveForm中添加代码以及对事件作出应答。唯⼀的区别是,ActiveForm的标题栏(title bar)在运⾏时是不可见的,只是在设计时才可见。
3.Active Form实例
下⾯我们以ActiveForm作为实例来说明Delphi中ActiveX控件的创建和使⽤。
3.1 创建⼀个ActiveX Form
浏览器的activex控件Delphi提供了ActiveForm向导⼯具来增强ActiveForm的创建过程。该向导会创建⼀个ActiveX library项⽬来包含ActiveForm和
⼀个可定制的激活的Form窗⼝。(该窗⼝是ActiveForm类型,⽽⾮TForm类型,虽然ActiveForm继承⾃TForm)
要创建⼀个ActiveX控件(在本例中为ActiveForm控件),我们需要在Delphi中点击File->New,然后选择ActiveX选项卡,接着双击ActiveForm图标即可。对于本例,如图2,点击"OK"接受默认的ActiveForm名称(New ActiveX Name)和执⾏单元名称(Implementation Unit)。这样向导就为我们⾃动创建了⼀个ActiveX Library ⼯程,⼀个类型库,⼀个Form 窗⼝,⼀个执⾏单元以及⼀个包含了所有这些类型库说明信息的单元⽂件(.TLB⽂件)。
图2 Active From创建向导
3.2 添加⼀些简单的控件和代码
⼀旦ActiveForm被创建,我们就可以从组件⾯板中向其内添加各种想要的控件。本例中,为简单起见,我们只添加⼀个⽂本框控件(TEdit:edt1)和⼀个按钮(TButton: btn1) 如图3:
图3 Active Form包含的VCL控件图
3.3 Active Form 的部署和调⽤
接下来,让我们看看我们创建的Active Form的效果,并且在其它应⽤程序中调⽤该Active Form。
3.3.1 通过Web部署(Web Deploy) 预览Active Form的效果
通过Web部署,我们可以通过浏览器快速查看我们创建的ActiveX控件的效果。不过之前我们必须对Web部署的相关属性进⾏相应设置。
3.3.1.1 Web部署
想要在⽹页中使⽤ActiveForm控件,你必须先设置Web部署属性。要部署ActiveForm项⽬,⾸先必须对Web部署属性进⾏适当的设置,然后还要编译项⽬。在Delphi中选择Project->Web Deployment Options,将打开如图4所⽰的Web部署属性对话框。部署⼀个简单的ActiveForm是⾮常简单的,你只需在Project标签页中输⼊相应的数据即可。(为简单起见,本例中其它选项的使⽤默认值)
图4 Web部署属性设置⽰意图
如图4,为简单起见,我们将部署后的HTML(HTML Dir) ⽂件和OCX⽂件(Target Dir)设置为同⼀个⽬录,同时⽬标URL(Target URL )只需简单的输⼊''./''来表⽰使⽤当前⽬录。
接着,选择Project ->Web Deploy对该项⽬进⾏Web部署,那么Delphi就会在上述设置的部署⽬录中⽣成⼀个OCX⽂件和⼀个⽤于测试该ActiveForm的相应的HTML页⾯⽂件。
3.3.1.2 预览效果
现在,我们只需打开上述设置的Web部署⽬录中⽣成的相应的HTML⽂件即可查看该ActiveForm的运⾏效果了。
图5 Active From Web部署效果展⽰图
如图5,更改⽂本框中的内容后点击按钮,就会弹出⼀个包含你刚才在⽂本框中输⼊内容的消息框。
3.3.2 ActiveForm的调⽤
上⾯,我们已经通过Delphi⾃带的Web部署功能快速查看了我们刚创建的Active Form的演⽰效果。现在,我们将在其它项⽬中该ActiveForm控件。
3.3.2.1 编译⽣成OCX⽂件
如果你使⽤了上⾯提到的Web部署⼯具查看了该Active Form的运⾏效果,那么在Web部署的过程中,Delphi已经⾃动对该ActiveForm项⽬进⾏了编译,并且在如图4所⽰指定的Web部署⽬录中⽣成了相应的OCX⽂件。这⾥,我们⽣成的是。
如果你没有使⽤如上的Web部署⼯具查看该Active From的效果,你也可以简单的通过编译项⽬(Project->Compile *** 或按
Ctrl+F9)来创建该OCX⽂件。如果编译没有发⽣错误,那么在⼯程的根⽬录下你也可以发现该OCX⽂件().
3.3.2.2 注册Active Form
要想在其它项⽬中调⽤我们刚创建的Active Form,我们必须先将其注册到Windows消息系统中,然后还要将其添加到Delphi的VCL类库中,这样在其它项⽬中才能到该Active Form 控件并进相应的使⽤。
图6 注册Active Form对话框
点击Component->Import ActiveX Control, 将会打开Import ActiveX 对话框(如图6),点击"Add"后在弹出的⽂件选择对话框中定位并选中我们刚⽣成的Active Form控件,点击”打开”后,Delphi将会⾃动载⼊该ActiveX控件。如图6所⽰的Import ActiveX对话框也进⾏了相应的改变。
注意
如图6,最上⾯显⽰了载⼊的ActiveX控件的名称、版本号和源⽂件路径。
Class names: 表⽰该ActiveX控件在Windows消息系统中的注册名称,默认为载⼊的Active Form的类名称,你可以根据需要

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。