视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Delphi ActiveX控件使用实例
2025-10-03 14:31:08 责编:小OO
文档
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

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控件图

接下来,我们向按钮TButton的OnClick事件中添加如下代码:

procedure TActiveFormX.btn1Click(Sender: TObject);

begin

ShowMessage(edt1.text);

end;

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文件。这里,我们生成的是ActiveFormProj1.ocx。

如果你没有使用如上的Web部署工具查看该Active From的效果,你也可以简单的通过编译项目(Project->Compile *** 或按Ctrl+F9)来创建该OCX文件。如果编译没有发生错误,那么在工程的根目录下你也可以发现该OCX文件(ActiveFormProj1.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控件ActiveFormProj1.ocx,点击”打开”后,Delphi将会自动载入该ActiveX控件。如图6所示的Import ActiveX对话框也进行了相应的改变。

注意

该操作只是向Windows消息系统注册了该ActiveX控件(ActiveFormProj1.ocx),我们还可以通过如下方法向Windows消息系统注册该ActiveX控件:

? 在命令行(MS-DOS)下定位到ActiveFormProj1.ocx文件所在目录,然后使用“Regsvr32 ActiveFormProj1.ocx ”注册该ActiveX控件

? 在Delphi中,打开创建该ActiveX控件的工程(*.dpr)文件,然后选择Run->Register ActiveX Server

注意,以上操作只是向Windows消息系统注册了该ActiveX控件,但是并没有将其添加到Delphi的VCL库中。所以我们还无法在其它程序中对其调用。要想在其它程序中能调用该ActiveX控件,我们还需要进行如下设置和操作。那么,我们的ActiveX控件将会出现在Delphi的组件面板中,这样我们在其它程序中才能像使用其它VCL控件一样使用我们刚才创建的ActiveX控件(Active Form)。

如图6,最上面显示了载入的ActiveX控件的名称、版本号和源文件路径。

? Class names: 表示该ActiveX控件在Windows消息系统中的注册名称,默认为载入的Active Form的类名称,你可以根据需要进行更改。

? Palette page: 表示将该ActiveX控件加载到Delphi组件面板中的哪个面板,默认为ActiveX面板。我们这里加载到默认面板Standard面板中。

? Unit dir name: 表示将该ActiveX控件加载到哪个目录中,默认为".\\Borland\\Delphi7\\Imports\\最好放在Delphi的Search Path中,否则在使用中可能会发生无法找到文件错误。

? Search path: 表示Delphi的查找目录。如果上述的"Unit dir name:"指定了其它的目录,在这里,我们也应该添加相应的目录。

图7 控件添加位置选择对话框

以上设置完成以后,我们点击"Install"按钮将该ActiveX控件添加到Delphi的VCL库。

点击"Install"按钮后,会弹出如图7所示的Install对话框,让我们选择将该ActiveX控件添加到哪个包中。如图7,默认的选择是注册到已有包(Into existing package)“\\borland\\delphi7\\Lib\\dclusr.dpk”中,我们也可以点击"Browse..."按钮选择其它已存在的包文件(*.dpk),或者切换到"Into new package"面板创建一个新的包文件(*.dpk); 

Descripiton表示对该包文件的说明。

注意

点击"Install"按钮将该ActiveX控件添加到Delphi的VCL库实质是:

首先,将ActiveX控件的3个相关文件“ActiveFormProj1_TLB.dcr”、“ActiveFormProj1_TLB.dcu”、“ActiveFormProj1_TLB.pas”拷贝到Delphi安装目录下的Imports t文件夹(“\\Borland\\Delphi7\\Imports”)中。如果文件已经存在,会给出“文件已存在,是否替换”的提示信息。

其次,将控件信息添加到我们指定的包中,然后重新进行编译,使新加入到ActiveX控件出现在Delphi的组件面板中

这里我们全部使用默认设置,将我们的Active Form控件添加到默认的”\\borland\\delphi7\\Lib\\dclusr.dpk”文件中。设置完成以后,点击"ok"按钮。将会出现如图8所示的Package管理器,同时弹出如下信息对话框:“Package dclusr.bpl will be rebuilt, Continue?”,意思是说dclusr.bpl文件将会重新被编译。如果你在前面指定将我们的Active Form加载到其它包或者自建的新包中,这里也会有相应的提示信息。

图8 Package管理器

点击”OK”按钮后,又会出现如图9所示的提示信息:

图9 Active Form添加成功信息

该信息框的意思是已经成功向Delphi的默认面板dclusr70.bpl文件中注册了新的控件ActiveFormProj1_TLB.TActiveFormX。同时,在Delphi的Standard面板中,我们会发现新增了一个为ActiveFormX的组件。如果没有出现,你可以点击如果8所示的Package管理器左上角的Compile按钮重新编译一次以后应该将可以看到了。

自此,我们成功将我们先前创建的Active Form控件添加到了Delphi的组件面板中,下面,我们就可以在其它应用程序中对其进行调用了。

3.3.2.3 调用Active Form 控件

在上面的操作中,我们已经成功的将我们之前创建的Active Form控件添加到了Delphi的组件面板中,以后

我们就可以像使用其它的VCL控件一样使用我们添加的Active Form控件。

在Delphi中,点击File->New->Application创建一个新的应用程序,然后在其默认创建的Form窗口中添加我们刚添加的Active Form控件,效果如图10所示。

图10 Active Form控件调用效果图下载本文

显示全文
专题