文档库 最新最全的文档下载
当前位置:文档库 › ActiveX技术

ActiveX技术

ActiveX技术
ActiveX技术

一、ActiveX技术

ActiveX技术的出现对于Internet的发展起着十分重要的作用。在网络上,ActiveX部件能够帮助应用程序开发者和Web网页制作者建立动态的网页和站点。使用ActiveX技术建立具有漂亮的交互式界面和强大功能的Internet应用程序已经成为十分容易的事情。实际上,ActiveX技术已成为微软技术发展的重点。

多少年来,人们在软件开发中一直在探索软件重用技术。软件重用可以提高软件开发速度,还可以显著地提高软件质量。早期软件重用的形式有源代码重用、目标代码重用和类库。源代码重用就是将源代码在程序之间复制使用,这是最低级的重用。这种方法有很大的局限性,程序员往往很难读懂别人编写的代码,在重用过程中也容易犯错误。目标代码重用靠函数库来实现。相对于源代码重用,它的优点是程序员不用再研究源代码,而且函数库一般都提供了清晰的调用接口。但目标代码重用的缺点在于受限于语言,不能做到与开发平台无关,而且函数库靠传统的编程手段来实现,无法将代码与数据有机地结合在一起。类库与函数库一样,也是二进制代码,但它是建立在面向对象技术的基础之上,使软件的可重用性和可维护性得到大大增强。类库也是与特定的开发语言相关的。

部件是目前最优秀的软件重用手段,基于部件的软件开发是目前最先进的软件开发技术。部件是具有特定功能的对象形式的二进制软件模块。基于部件开发技术的出现将对现有的软件开发带来深刻的影响。程序员不用一遍又一遍做重复性的劳动,他们既可以自己开发部件,将业务规则封装在部件中,也可以利用第三方开发的现成部件,然后再将这些部件组装起来,就形成一个软件。软件的开发形式类似于搭积木,基于部件的软件开发提高了软件开发的效率,使软件更易于维护,更适应于大规模的软件生产。

在目前基于部件的开发中,应用最广泛的就是微软的ActiveX部件。所谓ActiveX部件是指可重用的对象形式的二进制代码,比如一个.exe、.dll或.ocx文件,它们在提供对象时遵循ActiveX技术的规范。利用ActiveX部件技术,可以实现业务的封装,开发出能够实现不同业务功能多种ActiveX部件,或是购买第三方提供的ActiveX部件,然后在应用软件的开发中就可以重复利用这些部件,将它们组装在应用软件中。

在Visual Basic中可以使用的ActiveX部件有:ActiveX控件、ActiveX文档、ActiveX DLL 和ActiveX EXE。ActiveX控件是可视的ActiveX部件,可用于快速地组建应用程序;ActiveX 文档可创建交互式的Internet应用程序;ActiveX DLL和ActiveX EXE是代码部件,提供了对象形式的库。

使用ActiveX部件的应用程序调用ActiveX部件采用的是客户机/服务器模式。服务器就是提供具体功能的部件;客户机是使用部件的应用程序或另一个部件。ActiveX部件可能和客户应用程序运行在同一个进程中,也可能运行在不同的进程中。通常,如果ActiveX部件作为一个可执行文件(.exe文件)来实现,它就是一个进程外服务器,运行在它自己的进程中。如果它作为一个动态链接库被实现,则它是一个进程内服务器,和客户应用程序运行在同一个进程中。通常,使用进程内服务器的应用程序比使用进程外的服务器的应用程序执行起来要快些,因为应用程序不必跨进程来使用对象的属性、方法和事件。

二、创建ActiveX控件

相对于ActiveX DLL和ActiveX EXE部件,ActiveX控件是具有可视化界面的对象部件。

利用控件,可以快速地创建应用程序,还可以建立动态的网页。Visual Basic 6.0不仅提供了许多功能强大的ActiveX控件,还可以使编程人员创建用户自己的ActiveX控件。

在本例中,我们将创建AboutBox控件。众所周知,大多数Windows应用程序都带有一个AboutBox窗口,用于显示软件的名称、版本号以及版权提示等信息。我们可以通过创建一个控件在应用程序中显示AboutBox窗口。

1. 创建AboutControl工程

(1) 启动Visual Basic 6.0。在“文件”菜单上单击“新建工程”菜单项,打开“新建工程”对话框。双击“ActiveX控件”图标用以创建新工程。Visual Basic自动地把一个控件UserControll,包括其设计器添加到此工程中。缺省名UserControll作为设计器的标题出现,此时可以观察到在Visual Basic集成开发环境中的“工具箱”中添加了一个名为UserControll 的控件图标,并以灰色显示,表示目前控件尚不可用,还需要按以下的步骤进行操作才能使控件变为可用。

注意一个ActiveX控件工程中可以包含多个控件。缺省情况下,创建一个新的ActiveX控件工程时,其中包含一个UserControl1控件。用户还可以使用“工程”菜单中的“添加UserControl”菜单命令向工程中添加控件。

(2) 在“工程”菜单上,单击“工程1属性”菜单项,打开“工程属性”对话框。选择“通用”选项卡,将工程名称改为:AboutControl。选择“生成”选项卡,设置版本号和版本信息。单击“确定”按钮。

(3) 在“工程资源管理器”窗口中选中UserControl1,在“属性”窗口中双击Name属性,把用户控件名改为AboutBox。新名字出现在设计器的标题和“工程资源管理器”窗口中。

(4) 在该控件设计器中,灰色的区域就表示控件本身的尺寸,即该控件被拖放在一个

窗体上时的大小。控件右下角的拖曳点可调整控件的大小,可以将AboutBox控件设置成

适当的大小。

(5) 在“文件”菜单上,单击“保存工程”菜单命令可保存工程文件,保存文件时所用的文件名如下表一所示。控件中诸如位图之类的二进制信息将会保存到和用户控件文件同名的二进制文件中,扩展名为.ctx。

表一保存文件时所用的文件名

2. 设计控件的可视化界面

我们可使用诸如Circle、Line等图形方法在UserControl控件设计器中的UserControl控件区域上进行绘制,或者将已有的ActiveX控件和Visual Basic内在的控件放置到UserControl 控件区域上,从而创建自己控件的外观。添加给UserControl控件并为其创建外观的那些控件就称之为子控件。

(1) 在“工程资源管理器”窗口中双击AboutBox,打开它的设计器。

(2) 在"212具箱”上双击Label控件,把Label控件放置到AboutBox控件设计器中,命

名为:lblTitle,此控件用于显示程序的名称。

(3) 重复上一步操作,再把两个Label控件放置到AboutBox控件设计器中,分别命名为:lblVersion和lblCopyRight,用于显示版本号和版权提示。

(4) 用鼠标调整Label控件的大小和位置。

(5) 增加其他修饰和功能。

这样就完成了控件的可视化设计。

3. 设置控件的属性

可以在ActiveX控件中添加属性和方法。在本例中,我们将给AboutBox控件添加三个属性;Title、Version和Copyright,分别表示程序名称、版本号和版权提示。

(1) 在“工程资源管理器”窗口双击AboutBox,打开其设计器,然后再双击AboutBox,打开其“代码”窗口。

(2) 在“工具”菜单上,单击“添加过程”菜单项,打开“添加过程”对话框。在“名称”框中输入Title,单击“属性”和“公共的”选项,然后单击“确定”按钮。

(3) 重复上一步操作,再以同样的方式添加两个属性:Version和Copyright。

(4) 在“代码”窗口中,添加如下代码:

Public Property Get Title() As String

Title = lblTitle.Caption

End Property

获取属性Title 属性

Public Property Let Title(ByVal vNewValue As String)

lblTitle.Caption = vNewValue

PropertyChanged "Title"

End Property

设置Title 属性

Public Property Get Version() As String

V ersion = lblVersion.Caption

End Property

Public Property Let Version(ByVal vNewValue As String)

Label2.Caption = vNewValue

PropertyChanged "Version"

End Property

Public Property Get Copyright() As Variant

Copyright = lblCopyRight.Caption

End Property

Public Property Let Copyright(ByVal vNewValue As Variant)

lblCopyRight.Caption = vNewValue

PropertyChanged "Copyright"

End Property

注意如上所示,在将Get属性过程的返回值和Let属性过程的参数的数据类型的声明改为As String时,要注意必须同时更改两个声明行,即Property Get和Property Let 的声明必须匹配。使用特定的类型名可加快执行速度,并且能为使用控件的开发者提供类型检查。作为对比Copyright的Get属性过程的返回值和Let属性过程的参数的数据类型的声明未作改变。

无论何时给Title属性赋新值均执行Property Let过程,它把新值保存到AboutBox控件上的lblTitle控件的Caption属性中。无论何时检索该属性值均执行Property Get过程,它要读取保存在lblTitle控件中的Caption属性的值。Version属性和Copyright属性与此类似。

控件中的Property Let过程必须调用Property Changed函数。Property Changed函数的作用是通知容器某个属性的值已经变更。这里用到了容器这个概念,对于控件来说,它的容器就是窗体,即放置控件的地方。在Property Let过程中调用Property Changed函数,是因为控件的属性被赋了新的值,需要告诉“属性”窗口刷新其显示内容,并通知Visual Basic放置此控件的窗体已经改变了。

(5) 为了初始化Title、Version和Copyright属性,在UserControl—Initialize事件过程中添加如下代码:

Private Sub UserControl_Initialize()

'初始化

Title = App.Title

V ersion = "版本" & App.Major & "." & App.Minor & "." & App.Revision

Copyright = App.LegalCopyright

End Sub

至此,属性设置工作已经完成,可以创建测试工程对控件进行测试了。

4. 创建测试工程

为了测试AboutBox控件,需要创建一个测试窗体。通过在测试窗体放置AboutBox控件的实例,可以对该控件进行测试。

ActiveX控件是进程内部件,为了能够调试进程内部件,Visual Basic允许在一个工程组中加载多个工程。除了允许进程内调试外,工程组的使用还简化了部件工程和测试工程的加载。

在工程组中添加测试工程:

(1) 在“文件”菜单中,单击“添加工程”菜单项,打开“添加工程”对话框。

(2) 双击“标准EXE”图标,添加一个标准EXE工程。在该工程上单击右键,打开上下文菜单,选择“设置为启动”,将该新工程设置成为这个工程组的启动工程。此时在“工程资源管理器”窗口中可以看到两个工程,而且“工程资源管理器”窗口标题栏显示的是缺省的工程组名称。注意在“工程资源管理器”窗口中“工程1”是以粗体显示的,表明“工程1”是启动工程,也就是在按F5键时要运行的工程。

(3) 在“文件”菜单中,单击“保存工程组”菜单项,保存测试工程和工程组。按表二所示方式给文件命名。

表二保存文件时所用的文件名

5. 测试控件

(1) 在“工程资源管理器”窗口中双击AboutBox,将控件设计器置前,然后按下Ctrl+F4键来关闭窗口。关闭设计器窗口使Visual Basic把“工具箱”中本来以灰色显示的AboutBox 控件的图标变为有效,表示AboutBox控件现在可用。

注意不要单击工具栏上的“启动”按钮或者按下F5键,因为那样会使整个工程组进入运行模式从而无法把新控件添加到窗体中。

(2) 在“工程资源管理器”窗口中双击Forml使其置前。

(3) 双击AboutBox图标,把AboutBox控件添加到Forml中,该控件以带有抓取控点的灰色平面矩形的形式出现。在“属性”窗口可以看见新控件的许多属性,其中就有刚才创建的Title、Version和Copyright属性。刚刚添加到窗体的AboutBox控件被赋予缺省名AboutBoxl。

(4) 在Forml上双击AboutBox控件,打开Forml的“代码”窗口,光标将出现在AboutBox 控件的缺省事件过程AboutBoxl—GotFocus上。你可以单击“过程”下拉列表来查看Visual Basic自动为该控件提供的另外四种事件。完成工作后要关闭“代码”窗口。

(5) 在“工程资源管理器”窗口中双击AboutBox以便打开AboutBox控件设计器。注意放在Forml上的AboutBox控件标记上了阴影,这表明它是非活动的。打开一个控件的设计器会使该控件的所有实例变成非活动的,更改控件“代码”窗口中的代码也会使控件实例变成非活动的。

(6) 确保AboutBox控件的设计器在前面,然后按下Ctrl+F4键关闭窗口,重新激活控件实例。阴影从Forml的控件上消失表明实例又被激活了。如果由于改动控件的代码而使控件变成非激活状态时,可用鼠标右键单击测试窗体来显示上下文莱单,单击“更新用户控件”可重新激活控件实例。

(7) 在工具栏上单击“启动”按钮运行TestAbout工程,可以看见运行的结果。

6. 使用ActiveX控件界面向导

前面“设置控件的属性”部分中,控件属性的设置是通过添加Property过程实现的。实际上,Visual Basic 6.0开发环境中提供了ActiveX控件界面向导(ActiveX Control Interface Wizard),可以帮助编程人员更容易地建立控件的属性、方法和事件。这个向导可以利用外接程序管理器添加到开发环境中。

在这一部分将逐步介绍ActiveX控件界面向导的使用方法。

(1) 如果TestAbout工程仍在运行模式中,单击Forml上的“关闭”按钮以返回设计模式。

(2) 在“工程资源管理器”窗口中双击AboutBox使其置前,再双击控件设计器中AboutBox,打开其“代码”窗口。

(3) 将“代码”窗口中已有的代码全部删除。

(4) 在“外接程序”菜单中,单击“外接程序管理器”菜单项,打开“外接程序管理器”对话框,选中VB ActiveX 控件接口向导,单击“加载/卸载”检查框,然后单击“确定”按钮。

(5) 在“外接程序”菜单中,单击“VB ActiveX 控件接口向导”菜单项,打开向导的第一个窗口“介绍“。

注意在使用ActiveX控件界面向导之前,必须先设计好控件的外观。

(6) 单击“下一步”按钮,进入“选定界面成员”窗口。向导程序在这个窗口中提示为该用户控件选择标准的界面成员,即属性、方法和事件。左侧窗口是可以放入用户控件的一系列属性、方法和事件的列表。右侧窗口显示的是Visual Basic已经为该控件选定的常用的界面成员。按动两个窗口之间的箭头按钮可以在两窗口之间选择或清除界面成员。在本例中,AboutBox控件中只保留DblClick事件。

(7) 单击“下一步“按钮,进入“创建自定义界面成员”窗口。在这个窗口中可以为用户控件添加定制的属性、方法和事件。按“新建”按钮,显示“增加自定义成员”窗口。在“名称”框中写入Title,并选择“属性”选项,然后单击“确定”按钮。这就为用户控件增加了一个Title属性,并显示在“自定义成员”框中。重复同样的方法,再增加Version 和Copyright属性。

(8) 单击“下一步“按钮,进入“设置映射”窗口。这一步骤是为了把用户控件的一些界面成员映射到子控件的界面成员上。子控件就是在设计控件外观时,放置在用户控件上的ActiveX控件和Visual Basic标准控件。如果把用户控件的定制属性映射到子控件的属性上,那么在获取或设置用户控件属性时,其实是在获取或设置子控件的属性。为了把Title属性映射到lblTitle的Caption的属性,在左侧的“公有名称”框中选择Title,在右侧的“控件”列表中选择lblTitle,在“成员”列表中选择Caption。为了把Version属性映射到lblVersion 的Caption的属性,在“公有名称”框中选择Version,在“控件”列表中选择lblVersion,在“成员”列表中选择Caption。为了把Copyright属性映射到lblCopyRight的Caption的属性,在“公有名称”框中选择Copyright,在“控件”列表中选择lblCopyRight,在“成员”列表中选择Caption。

在设置事件映射时,区分清UserControl控件对象(或者它内部的子控件)接收的事件与控件引发的事件这一点非常重要。用户控件(或者它内部的子控件)接收的事件表示在用户控件区域或子控件上操作时,它们响应的事件,这些事件的事件过程存在于ActiveX控件工程中UserControl模块的“代码”窗口中。而用户控件引发的事件表示用户在此控件的区域上操作时它引发的事件,这些事件的事件过程存在于控件所在窗体的“代码”窗口中。这样,使用该ActiveX控件的用户在窗体上放置了该控件后,就能在窗体的“代码”窗口中针对该控件的事件过程编程。

在本例中,选择“公有名称”框中的DblClick事件,在“控件”列表中选择UserControl,在“成员”列表中选择DblClick,如图8.16所示。这样,当用户在UserControl控件上双击鼠标时,UserControl控件接收DblClick事件,调用UserControl控件中的DblClick事件的事件过程,在此事件过程中又通过RaiseEvent语句引发一个DblClick事件,发给UserControl 控件所在的窗体,在UserControl控件所在的窗体中就会增加一个UserControl_DblClick事件过程,用户可以在此事件过程中编程。

(9) 单击“下一步”按钮,进入“完成”窗口。单击“完成”按钮,.结束使用ActiveX 控件界面向导来建立用户控件界面的工作。

(10) ActiveX控件界面向导在AboutBox控件的“代码”窗口中自动产生了如下代码:'事件声明:

Event Click() 'MappingInfo=cmdOK,cmdOK,-1,Click

Private Sub cmdOK_Click()

RaiseEvent Click

End Sub

RaiseEvent 把控件或其上的子控件的事件进行转发,因为控件总是由其它的子控件组成'注意!不要删除或修改下列被注释的行!

'MappingInfo=lblTitle,lblTitle,-1,Caption

Public Property Get Title() As String

Title = lblTitle.Caption

End Property

Public Property Let Title(ByVal New_Title As String)

lblTitle.Caption() = New_Title

PropertyChanged "Title"

End Property

'注意!不要删除或修改下列被注释的行!

'MappingInfo=lblVersion,lblVersion,-1,Caption

Public Property Get Version() As String

V ersion = lblVersion.Caption

End Property

Public Property Let Version(ByVal New_Version As String)

lblVersion.Caption() = New_Version

PropertyChanged "Version"

End Property

'注意!不要删除或修改下列被注释的行!

'MappingInfo=lblCopyRight,lblCopyRight,-1,Caption

Public Property Get Copyright() As String

Copyright = lblCopyRight.Caption

End Property

Public Property Let Copyright(ByVal New_Copyright As String)

lblCopyRight.Caption() = New_Copyright

PropertyChanged "Copyright"

End Property

'从存贮器中加载属性值

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

lblTitle.Caption = PropBag.ReadProperty("Title", "通用库房管理")

lblVersion.Caption = PropBag.ReadProperty("Version", "1.0.0 版")

lblCopyRight.Caption = PropBag.ReadProperty("Copyright", "陕西省信息网络与软件创新工程中心2003年版权所有(C)")

End Sub

'将属性值写到存储器

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

Call PropBag.WriteProperty("Title", lblTitle.Caption, "通用库房管理")

Call PropBag.WriteProperty("Version", lblVersion.Caption, "1.0.0 版")

Call PropBag.WriteProperty("Copyright", lblCopyRight.Caption, "陕西省信息网络与软件创新工程中心2003年版权所有(C)")

End Sub

注意不要修改以上代码。

(11) 在文件采单中,单击“保存工作组”菜单项,保存所做的工作。

7. 添加属性到内部变量

我们前面开发的控件都将控件的属性映射控件,下面我们看看怎样将控件的属性映射到控件的私有变量。

(1) 手工添加属性

在代码中添加私有变量UserName和UserUnit

Dim strUserName As String '用户名

Dim strUserUnit As String '用户单位

添加相关属性读写代码如下:

Public Property Get UserName() As Variant

UserName = strUserName

End Property

Public Property Let UserName(ByVal vNewValue As Variant)

strUserName = vNewV alue

PropertyChanged "UserName"

End Property

Public Property Get UserUnit() As Variant

UserUnit = strUserUnit

End Property

Public Property Let UserUnit(ByVal vNewValue As Variant)

strUserUnit = vNewValue

PropertyChanged "UserUnit"

End Property

再添加一个属性Licens与控件Text1映射,添加代码如下:

Public Property Get Licens() As Variant

Licens = Text1.Text

End Property

Public Property Let Licens(ByVal vNewValue As Variant)

Text1.Text = "用户名:" & strUserName & vbCrLf & vbCrLf & "用户单位:" & strUserUnit & vbCrLf & vbCrLf & "序列号:" & vNewValue

PropertyChanged "Licens"

End Property

在测试工程的Form1窗体的Form_Load过程中添加如下代码。

https://www.wendangku.net/doc/fd10371267.html,erName = "李德华"

https://www.wendangku.net/doc/fd10371267.html,erUnit = "西安五一饭店"

AboutBox1.Licens = "12345678901234567890"

运行测试。

(2) 使用ActiveX控件界面向导

在上面制作的控件基础上,打开ActiveX 控件接口向导,翻到“创建自定义接口成员”界面,新建自定义成员UserName和UserUnit,跳过“设置映射”窗口,到“设置属性”窗口(注意:这个窗口前面用向导时没有出现),如图设置参数,完成。

其他和(1)类似。

8. 增加属性页

ActiveX控件可以具有属性页(Property Page)。属性页提供了设置控件属性的另一种方

法。使用属性过程所创建的一些简单属性将自动显示在Visual Basic的“属性”窗口中,属性页则以另一种格式显示控件的各种属性。将控件和属性页相连接,就可以通过属性页设置控件的属性,而且属性页提供了更好更灵活的控件属性设置界面(见过MSFlexGrid的属性页吧)。

与控件连接的每一个属性页都成为属性对话框上的一个选项卡。Visual Basic处理属性对话框上的页面的所有细节,并管理“确定”、“取消”和“应用”等按钮。用户必须做的全部事情就是在属性页上设计将用于设置属性值的控件。

当一组属性以复杂的方式相互作用时,正如Visual Basic包含的Toolbar控件的情况,属性页就十分有用。对于将在各国发布的控件来说属性页也很有用,因为针对不同语言可将属性页上标志每个属性项的标题本地化。属性页也使控件能够和没有“属性”窗口的开发工具一起使用。

Visual Basic 6.0提供了属性页设置向导,使属性页的设计工作大大简化。接着前面“使用ActiveX控件界面向导”中的工作,下面将利用属性页设置向导,建立本例的属性页。

(1) 在“工程”菜单中,单击“添加属性页”菜单项,打开“添加属性页”窗口。双击“VB属性页向导”,打开向导程序。

(2) 越过“介绍”窗口,进入“选择属性页”窗口。在本例中将建立一个About属性页。单击“添加”按钮,出现“属性页名称”窗口。在文本框中输入About,单击“确定”按钮回到上一窗口。

(3) 单击“下一步”按钮,进入“添加属性”窗口。这一步骤是指定属性页上要显示的属性。单击“>>”按钮,将左侧“可用属性”列表框中的Title、Version和Copyright等都移入到右侧的列表框中。

(4) 单击“下一步”按钮,进入“完成”窗口。单击“完成”按钮,至此属性页建立完成。

(5) 在“工程资源管理器“窗口中可以看到新增的属性页About。双击About,打开属性页设计器,调整其布局。拖动右下角的拖曳点将页面缩小。将Caption分别为Title、V er —sion、Copyright的Label控件的Caption改为“名称:”、“版本号:”和“版权提示:”等。

(6) 单击“文件”菜单上的“保存About.pag”菜单项。

(7) 测试,在测试工程的Form1设计窗口中右击About1控件,选择“属性”,弹出About 属性页。

9. 编译About Control部件并测试

一旦创建了包含一个或多个UserControl对象的ActiveX控件工程时,就可以将其编译成.OCX文件并在其它应用程序中使用那些控件。

(1) 确保TestAbout工程处于设计模式。

(2) 在“工程资源管理器”窗口中单击AboutControl以选择该工程。

(3) 在“文件”菜单中,单击“生成AboutContr01.OCX”菜单项,打开“生成工程”对话框。单击“确定”按钮,创建.OCX文件。

(4) 在“文件”菜单上单击“删除工程”菜单项,从工程组中删除AboutControl工程,从而使Visual Basic采用编译的二进制部件(.OCX文件)代替该工程。

当从工程组删除了AboutControl工程时,Visual Basic在Windows注册表中寻找AboutControl.OCX。如果存在.OCX文件,Visual Basic便自动将TestAbout工程中对AboutControl.vbp的引用更新为对AboutControl.OCX的引用。要将引用切换回用工程代替二

进制部件状态,可在“文件”菜单上单击“添加工程”菜单项,并且将AboutControl工程再添加回到工程组中。

(5) 在“工程资源管理器”窗口中双击Forml,打开窗体设计器。在AboutBox控件上单击右键打开上下文菜单,单击“属性”命令,打开AboutBox控件的“属性页”对话框。在三个文本框中分别填写Microsoft Visual Basic、6.0、Copyright 1987—1998 Microsoft Corp.。单击“确定”按钮,返回窗体设计器,可以看见窗体中AboutBox控件上已经显示出它的属性信息。

(6) 在AboutBox控件上双击鼠标,打开AboutBox控件的“代码”窗口,可以看见在“使用ActiveX控件界面向导”部分为该控件设置的一个新的事件DblClick。在AboutBoxl_ DblClick事件过程中添加如下代码:

‘在AboutBox控件上双击鼠标将关闭窗体

Private Sub AboutBoxl_DblClick()

Unload Me

End Sub

将DblClick事件映射到

①件本身的DblClick属性上。

Private Sub UserControl_DblClick()

RaiseEvent DblClick

End Sub

②CmdOK按钮的Click属性上。

添加代码:

Private Sub cmdOK_Click()

RaiseEvent DblClick

End Sub

③同时添加①和②。

(7) 按下F5键运行使用.OCX文件的TestAbout工程。在AboutBox控件上单击确定,将结束程序的运行。

当AboutControl作为工程正在由其源代码运行时,不能从其它应用程序或者从另一个Visual Basic程序访问AboutBox控件,这是因为ActiveX控件是进程内部件。一旦AboutBox 控件被编译进一个.OCX部件,就可以被其它应用程序共享,并可以通过其它应用程序.来测试它。

注意一个ActiveX控件工程能够包含任意个所需的控件。创建.OCX部件时,.OCX 文件中包含已添加的所有控件。

10. 在控件中增加窗体

我们还可以在控件中添加新的窗体,为控件增加功能。

11. 创建控件的一般步骤

使用VisualBasic 6.0创建ActiveX控件时,一般应遵循下列步骤:

(1) 确定控件将要提供的功能。

(2) 创建控件工程。

(3) 通过把控件和或代码添加到UserControl对象中来实现控件的外观。

(4) 实现控件的接口和功能。

(5) 设计和实现控件的属性页。

(6) 创建由控件工程和测试工程组成的工程组。

(7) 编译控件部件(.OCX文件)并用各种可能使用该控件的应用程序对它进行测试。12. ActiveX控件的注册与反注册

为了在VB中访问Active.ocx,首先要注册ActiveX控件

开始–运行– regsvr32 路径(一般为:c:\系统路径\system32\) xxx.ocx

例:regsvr32 c:\WINNT\system32\ AboutControl.ocx

成功或错误提示。

如果一个ActiveX控件不再使用,首先要反注册,然后将其对应的.ocx文件删除。

开始–运行– regsvr32 路径(一般为:c:\系统路径\system32\) xxx.ocx –u

例:regsvr32 c:\WINNT\system32\ AboutControl.ocx –u

成功或错误提示。

13. ActiveX控件的引用

.ocx控件工程–部件

.dll部件工程–引用

14. VB ActiveX 控件接口向导给出的测试步骤

下面是“To Do”列表项,用来完成测试、调试用户控件并使用户控件安全可靠。

A) 创建用户控件测试程序

有两种方法可以给用户控件建立测试程序,依赖于是在标准EXE 中插入的还是创建的ActiveX 控件工程。

如果是创建了ActiveX 控件工程,按下列步骤将建立测试程序:

1) 保存用户控件。

2) 关闭用户控件设计器,并进入运行模式。

3) 如果已经创建了测试工程,则从“文件”菜单选择“添加工程”添加一个标准EXE 工程。

4) 在工具箱中双击用户控件图标,在标准EXE 工程的Form1 上放置一个用户控件实例。您可以根据需要移动控件或调整控件大小。

5) 保存工程组。在以后的开发和测试过程中,您可以通过打开工程组而同时打开两个工程。

如果是在标准EXE 工程中插入用户控件,则应遵循下列步骤:

1) 保存用户控件。

2) 关闭用户控件设计器,并进入运行模式。

3) 在工程窗口,双击标准EXE 工程的Form1,打开设计器。

4) 在工具箱中双击用户控件图标,在标准EXE 工程的Form1 上放置一个用户控件实例。您可以根据需要移动控件或调整控件大小。

B) 在设计时和运行时测试用户控件行为。

1) 选中测试工程的Form1 上放置的控件,按下F4 打开属性窗口。确认可以看到并改变添加到控件中的属性。

2) 关闭Form1 并重新打开它,并确认用户控件的属性值已被正确地保存和获取。

3) 双击放在Form1 上的用户控件,并在代码窗口右边(过程)的下拉框中选择合适的事件。

4) 为用户控件的事件处理过程添加代码。

5) 添加其他控件,并分别在其事件过程中添加代码,测试控件的属性和方法在运行时的行为。

6) 按下F5 运行测试工程,测试运行时控件行为。

C) 生成安全可靠、功能齐全的控件(添加向导没有提供的详细代码)

1) 如果窗体中包含构成控件,某些事件和属性需要被映射到多个构成控件。例如,BackColor 属性应该映射到用户控件的BackColor 属性和任何label 控件。MouseMove 事件需要映射到所有构成控件的MouseMove 事件。

2) 为所有事件(如MouseMove) 添加坐标翻译,指定X 和Y 坐标。

3) 对于所有有枚举项的属性(如MousePointer 和BorderStyle),改变属性的数据类型为适合的枚举项名称(如MousePointerConstants 和BorderStyleConstants),以至于枚举项元素将出现在属性窗口中。

4) 给您自己的属性添加自定义的枚举项,并添加代码使之有效。

5) 向ReadProperties 事件添加错误捕获,以保护无效值或错误数据类型不会人为地编辑到.frm 文件中。对于每个属性,当出现这样一个错误时,添加代码来切换到缺省设置。(请参见联机手册中“保存控件属性”和“创建仅设计时、仅运行时或运行时只读属性”。)

6) 如果您有构成控件,当调整控件大小时,添加代码到UserControl_Resize 来调整其大小。

7) 为生效的属性设置过程ID,这样当生效或禁止时您的控件将与其他ActiveX 控件一样工作。

8) 向导用类似的名称映射控件的属性到构成控件(或用户控件) 的属性。有些情况下,可能需要用不同的名称映射(例如,ShapeLabel 映射其BackColor 到构成Shape 控件的FillColor);这种再映射必须由人工完成。

9) 任何影响控件大小的属性(如字体大小,控件中的AutoSize 属性) 应从Property Let 调用调整大小代码。

10) 对于用户画的控件,添加代码到用户控件的Paint 事件来画控件的外观。(请参见联机手册中“用户画控件”和“任何在控件中处理焦点”。)

11) 如果有的控件为数据绑定,请参见联机手册中“为控件绑定数据源”。

12) 为控件添加附加功能。联机手册中“Visual Basic ActiveX 控件功能”将会有所帮助。

(请参见CtlPlus.vbg 实例应用程序。)

可以通过再次运行向导而修改控件,并选择用户控件。

使用“属性页向导”为您的用户控件创建属性页。

欲知有关创建和测试ActiveX 控件的详细信息,请参见第4章“创建ActiveX 控件”和第9章“联编ActiveX 控件”。

第6章“部件设计的常用规则”和第7章“调试、测试并配置ActiveX 部件”也包含一些有用信息。

15控件的注册

1.手动注册

方法是:单击Windows的开始菜单,选择运行命令,在打开的对话框中输入以下命令: regsvr32

regsvr32.exe是Windows自带的ActiveX注册工具,可以在Windows的系统目录中找到,假定要注册一个自建的控件New.ocx,那么就输入如下命令:regsvr32 new.ocx,如图1所示。

图1 运行窗口

单击确定按钮,如果注册成功,将会出现如图2所示的对话框,提示成功,否则会出现如图3所示的对话框,提示没有注册成功,原因一般是已经注册过该控件或控件本身有问题。

图2 注册成功对话框

图3 注册失败对话框

若要解除某一个ActiveX控件的注册,则格式如下:

regsvr32 /u

比如要删除刚才.注册的控件new.ocx,就可以在运行窗口输入以下命令:

regsvr32 /u new.ocx

然后单击确定按钮,如果删除成功,将出现对话框来提示成功删除,如图4所示。

应用ActiveX技术进行AutoCAD二次开发

应用ActiveX技术进行AutoCAD二次开发 应用ActiveX技术进行AutoCAD二次开发 于亚东1 Autodesk公司的AutoCAD软件广泛地应用于设计领域。AutoCAD作为强大而专业的工程绘图软件,近几年在工程地质制图方面也得到了广泛应用,如钻孔柱状图、剖面图等。但由于CAD本身的原因以及地质图件的特殊性,完全依赖CAD而不借助第三方软件或对CAD进行二次开发,实现地质图件的计算机化也是一件非常困难的事情。好在CAD是 一个灵活而又开放的系统,它提供了许多开放式的接口,允许用户通过这些接口对CAD进行二次开发,以满足不同用 户的需要。 在当前AutoCAD系统中,最常见的开发用具是AutoLisp、VisualLisp、ADS和ARX,但Lisp处理数据库能力差,编 制界面困难,而ARX和ADS是基于C++语言的开发环境,要求相对较高。幸运的是,在AutoCAD R14以后的版本中,Autodesk公司在AutoCAD中加入了ActiveX自动化服务功能(ActiveX Automation server capabilities),使得用户可以通过可视化编程工具,如Visual Basic(以下简称VB)对AutoCAD进行二次开发,不但提高了工作效率,也满足了不同专业的需要。本文简略地说明AutoCAD中的ActiveX对

象模型结构及对模型对象的编程引用。 1 AutoCAD中的ActiveX对象模型 AutoCAD ActiveX提供了一种机制,或者说是一种方法,可以供开发者通过编程手段来操纵AutoCAD。ActiveX是由一系列的对象,按一定的层次结构组成的,每一个对象都代表了AutoCAD中的一个明确的功能。每一个对象本身包含 着自己的属性和方法,通过方法可以实现对象的一些操作,如控制CAD的启动,打开一个文档,一条直线的生成。而 属性则是对象自己本身所具有的一些性质,如一个文本对象,它的属性有文本的高度,宽度、文本的颜色,所在层等。应用程序正是通过对AutoCAD暴露的各级对象的方法和属性 的引用控制AutoCAD工作的。 理解AutoCAD的对象模型是实现编程的基础。AutoCAD以层次结构组织对象,在顶层是Application对象(即AutoCAD 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(优先设置)和Document(文档)对象,通过Preferences对象可以对AutoCAD Tools —> Preferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变AutoCAD的优先设置。Document对象是控制AutoCAD图形文件的直接对象,它 代表某一个装入的CAD图形文件(一般设为当前激活的文件)。Document对象下面有Model Space(模型空间)和

步步学ACTIVEX网页控件开发

步步学ACTIVEX网页控件开发 本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍Ac tiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。 MyActiveX控件的效果图 简介 ActiveX是由Microsoft在90年代中期提出的一项技术。利用ActiveX技术,开发者可以创建像Java小程序applet一样的小型应用程序。这些应用程序可以被下载然后在M icrosoft的浏览器中运行。这篇文章是为那些想学习如何开发他们的第一个ActiveX控件的Visual C++开发者准备的。

当我自己尝试学习这些技术的时候,我发现很多针对ActiveX技术的资料都已经不再适用了,都已经过时了,或者丢失了很多关键性的信息,这些都使得我在为我的项目创建一个ActiveX控件的时候,变得困难重重。这篇文章将帮助你实现ActiveX网页控件开发的快速入门。本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。 另外,你也将学习到如何在默认的Internet Explorer安全设置下取消掉控件加载过程中的警告或者错误提示,使你的控件成为一个“安全”的ActiveX控件。 在本文中,我们将创建一个实际的ActiveX控件。在控件加载的过程中,它将显示一个动态的进度条,告诉用户控件正在加载并处理信息。同时,这个控件也将展示如何在Act iveX控件和Web页面之间传递信息。本文将引导你一步步地利用Microsoft Visual St udio 2005完成ActiveX控件的开发工作。 创建ActiveX控件 要创建一个ActiveX控件,首先启动Visual Studio 2005,执行下面这些步骤: 1.选择“文件”菜单,然后选择“新建”->“项目”。 2.在“新建项目”对话框中,如下图1所示,选择“Visual C++”分类下的“MFC”。然后选择“MFC ActiveX控件”作为项目模板。 3.将新项目命名为“MyActiveX”,然后选择项目的保存目录,最后点击“确定”按钮,关闭“新项目”对话框,进入“MFC ActiveX控件”向导。

基于Activex Automation技术的cad二次开发

基于ActivexAutomation技术的 T—FLExCAD二次开发 姜莉莉,李宗亮 (广东工业大学机电工程学院,广东广州510090) 摘要:介绍了T—FLEXCAD的三i三妥特点,分析丁T一腿X缸£tv鼹Amo嘲mn对象模硝.蛤出r用VC++对’I—nFx进行‘次开发的关键步骤,最后实例说明如何提取CAn圈形中的产品描述倍赢.蹦及如何建立更∞便踟的撮作环境。 关键词:最统集成;ActiveXAu幻mmion:nFEEXGAD:二拨。砰箍 中圈分类号:TP39l72文献标识码:A文章编号:}009—9492f200610l一∞7l—03 1引言 T—FIEXCAD是由莫斯科工、Ik大学ToPsYSTEMs公司推小的基于特征的二维段i维参数化cAD系统。在T—FLEXCAD图形中.周形的约束关系以几何关系、函数表达式和逻辑表达式为基础,从而使设计的图形具有“柔性”,其主要特点有:基于结构线的作图模式;所有图形图索参数化;可为参数的取值建立数据库;由二维T程图直接生成三维文体模型等…。T-FLExcAD不仅在柔性几何模型构建方向快捷方便,而且在产品描述信息(如T艺信息、BOM结构、技术要求等)管理方面详细完备,如。r_FI.ExCAl)具有装配图的参数化设计、明细表白动生成等功能。在此基础上,若对T一儿.ExcAD进行二次开发,做一世简单的数据采集接[I工作,即可采集到完备的产品描述信息,轻松解决普通CAD难以与PDM等系统集成的问题“。 T—FIEXCAD提供r非常开放的二次开发环境,使开发者可以充分利用T—FIExcAD内部的各种功能。二次开发不仅可以在图形绘制方面进行,为各种行业的用户开发专用的CAD设计环境,提高设计生产效率;而月可以在信息管理』j面进行,提取产出数据信息,实现与其它CAx或PDM、ERP等系统的集成,加快企业信息化进程。 2T—FLExCAD中的Activex对象模型ActivexAutomat谕l是微软公司推出的一个技术标准,该技术是0I.E技术的进一步扩展,其作用是在wjn—dows系统的统一管理下协捌不同的应用程序,允许膻Hj程序之间相瓦控制、相互调坩;其原理是被调埔的程序外显自身的对象体系结构,供调用程序弓|用”。T—FI.Ex CAD所具备的绝大多数功能,均以属性和方法的方式被 封装在T—FLEXActiveX对象中,在运行时.T—FLEXCAD与其它膻用程序之问的关系是服务器与客户(S㈣er/Client)的关系,即T—FLExCAD是一个A(-tivcxAutomation服务器,它外品了自身的对象体系结构,供外部应崩程序引刷。 T_Fl,ExActivex由一系列的对象组成,每一个对象代表了T—FLEx?巾个明确的功能,如块国、变量和数据库等。所有这些对象都具有一种层次荧系,根据它们在T—FIExcf,的功能,组成一种树形结构,称之为对象模型(ObieetModel)树,图l显示了T—F墟XAcIivex的对象模型树结构。这里应注意,模型中父对象与子对象之间的关系并不足继承关系,而是包含关系。 根据对象功能的不同,可以把这些At?tiveX对象分成以r儿类。 (1)应用程序与文档(Appll(,ation&Document)类对象:如T—FLHxCAD应用程序本身或grb文什。应用程序对象是’r—FLFxAct?vex对象模型的根列象,通过应用程序对象,町防问其它的对象,或调用该对象的方法。文档对象,实际上就是T一¨.Ex文件,它町山应用程序对象得到,提供访问所有图形的和非图形的T—FLFX对象。 (2)块图与阴影区域(F。agment&Shadmg)类对象:如静态块图、活动块图和阴影区域。通过块幽对象可以更改关联的块图史件,插人新块图,设置或获取块幽q +广珠省科技计划项目(项日编号:20048501010()4) 啦稿日期:20050824f!雩__叮———下———r———,—.1 降*《一gI71巨≥ii万方数据

ActiveX技术原理

网络实名插件通过微软ActiveX技术来进行安装,点击弹出窗口中的“详细信息”后,微软已经告诉用户应该了解的信息(包括数字证书的发行商、有效期、所有者等),并根据用户点击“是”或“否”来决定是否安装插件。网络实名插件安装时的弹出窗口是ActiveX标准的安装界面,是由Windows控制的,只能通过点击上面的链接来查看软件详细介绍和使用许可协议等信息。 以下是关于ActiveX技术和网络实名控件技术原理细节的一些具体问题: 1.什么是ActiveX插件? 2.ActiveX插件的安装方式如何? 3.哪些厂商和软件使用ActiveX技术? 4.浏览器如何保证ActiveX插件的安全性? 什么是ActiveX插件? 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。 返回顶端 ActiveX插件的安装方式如何? 在因特网上,ActiveX插件软件的特点是:一般软件需要用户单独下载然后执行安装,而ActiveX插件是当用户浏览到特定的网页时,IE浏览器即可自动下载并提示用户安装。 ActiveX插件安装的一个前提是必须经过用户的同意及确认。 返回顶端 哪些厂商和软件使用ActiveX技术? ActiveX插件技术是国际上通用的基于Windows平台的软件技术,除了网络实名插件之外,许多软件均采用此种方式开发,例如Flash动画播放插件、Microsoft MediaPlayer插件、CNNIC通用网址插件等。 返回顶端

ActiveX技术

一、ActiveX技术 ActiveX技术的出现对于Internet的发展起着十分重要的作用。在网络上,ActiveX部件能够帮助应用程序开发者和Web网页制作者建立动态的网页和站点。使用ActiveX技术建立具有漂亮的交互式界面和强大功能的Internet应用程序已经成为十分容易的事情。实际上,ActiveX技术已成为微软技术发展的重点。 多少年来,人们在软件开发中一直在探索软件重用技术。软件重用可以提高软件开发速度,还可以显著地提高软件质量。早期软件重用的形式有源代码重用、目标代码重用和类库。源代码重用就是将源代码在程序之间复制使用,这是最低级的重用。这种方法有很大的局限性,程序员往往很难读懂别人编写的代码,在重用过程中也容易犯错误。目标代码重用靠函数库来实现。相对于源代码重用,它的优点是程序员不用再研究源代码,而且函数库一般都提供了清晰的调用接口。但目标代码重用的缺点在于受限于语言,不能做到与开发平台无关,而且函数库靠传统的编程手段来实现,无法将代码与数据有机地结合在一起。类库与函数库一样,也是二进制代码,但它是建立在面向对象技术的基础之上,使软件的可重用性和可维护性得到大大增强。类库也是与特定的开发语言相关的。 部件是目前最优秀的软件重用手段,基于部件的软件开发是目前最先进的软件开发技术。部件是具有特定功能的对象形式的二进制软件模块。基于部件开发技术的出现将对现有的软件开发带来深刻的影响。程序员不用一遍又一遍做重复性的劳动,他们既可以自己开发部件,将业务规则封装在部件中,也可以利用第三方开发的现成部件,然后再将这些部件组装起来,就形成一个软件。软件的开发形式类似于搭积木,基于部件的软件开发提高了软件开发的效率,使软件更易于维护,更适应于大规模的软件生产。 在目前基于部件的开发中,应用最广泛的就是微软的ActiveX部件。所谓ActiveX部件是指可重用的对象形式的二进制代码,比如一个.exe、.dll或.ocx文件,它们在提供对象时遵循ActiveX技术的规范。利用ActiveX部件技术,可以实现业务的封装,开发出能够实现不同业务功能多种ActiveX部件,或是购买第三方提供的ActiveX部件,然后在应用软件的开发中就可以重复利用这些部件,将它们组装在应用软件中。 在Visual Basic中可以使用的ActiveX部件有:ActiveX控件、ActiveX文档、ActiveX DLL 和ActiveX EXE。ActiveX控件是可视的ActiveX部件,可用于快速地组建应用程序;ActiveX 文档可创建交互式的Internet应用程序;ActiveX DLL和ActiveX EXE是代码部件,提供了对象形式的库。 使用ActiveX部件的应用程序调用ActiveX部件采用的是客户机/服务器模式。服务器就是提供具体功能的部件;客户机是使用部件的应用程序或另一个部件。ActiveX部件可能和客户应用程序运行在同一个进程中,也可能运行在不同的进程中。通常,如果ActiveX部件作为一个可执行文件(.exe文件)来实现,它就是一个进程外服务器,运行在它自己的进程中。如果它作为一个动态链接库被实现,则它是一个进程内服务器,和客户应用程序运行在同一个进程中。通常,使用进程内服务器的应用程序比使用进程外的服务器的应用程序执行起来要快些,因为应用程序不必跨进程来使用对象的属性、方法和事件。 二、创建ActiveX控件 相对于ActiveX DLL和ActiveX EXE部件,ActiveX控件是具有可视化界面的对象部件。

相关文档