ActiveX技术.docx
- 文档编号:24117930
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:22
- 大小:86.71KB
ActiveX技术.docx
《ActiveX技术.docx》由会员分享,可在线阅读,更多相关《ActiveX技术.docx(22页珍藏版)》请在冰豆网上搜索。
ActiveX技术
一、ActiveX技术
ActiveX技术的出现对于Internet的发展起着十分重要的作用。
在网络上,ActiveX部件能够帮助应用程序开发者和Web网页制作者建立动态的网页和站点。
使用ActiveX技术建立具有漂亮的交互式界面和强大功能的Internet应用程序已经成为十分容易的事情。
实际上,ActiveX技术已成为微软技术发展的重点。
多少年来,人们在软件开发中一直在探索软件重用技术。
软件重用可以提高软件开发速度,还可以显著地提高软件质量。
早期软件重用的形式有源代码重用、目标代码重用和类库。
源代码重用就是将源代码在程序之间复制使用,这是最低级的重用。
这种方法有很大的局限性,程序员往往很难读懂别人编写的代码,在重用过程中也容易犯错误。
目标代码重用靠函数库来实现。
相对于源代码重用,它的优点是程序员不用再研究源代码,而且函数库一般都提供了清晰的调用接口。
但目标代码重用的缺点在于受限于语言,不能做到与开发平台无关,而且函数库靠传统的编程手段来实现,无法将代码与数据有机地结合在一起。
类库与函数库一样,也是二进制代码,但它是建立在面向对象技术的基础之上,使软件的可重用性和可维护性得到大大增强。
类库也是与特定的开发语言相关的。
部件是目前最优秀的软件重用手段,基于部件的软件开发是目前最先进的软件开发技术。
部件是具有特定功能的对象形式的二进制软件模块。
基于部件开发技术的出现将对现有的软件开发带来深刻的影响。
程序员不用一遍又一遍做重复性的劳动,他们既可以自己开发部件,将业务规则封装在部件中,也可以利用第三方开发的现成部件,然后再将这些部件组装起来,就形成一个软件。
软件的开发形式类似于搭积木,基于部件的软件开发提高了软件开发的效率,使软件更易于维护,更适应于大规模的软件生产。
在目前基于部件的开发中,应用最广泛的就是微软的ActiveX部件。
所谓ActiveX部件是指可重用的对象形式的二进制代码,比如一个.exe、.dll或.ocx文件,它们在提供对象时遵循ActiveX技术的规范。
利用ActiveX部件技术,可以实现业务的封装,开发出能够实现不同业务功能多种ActiveX部件,或是购买第三方提供的ActiveX部件,然后在应用软件的开发中就可以重复利用这些部件,将它们组装在应用软件中。
在VisualBasic中可以使用的ActiveX部件有:
ActiveX控件、ActiveX文档、ActiveXDLL和ActiveXEXE。
ActiveX控件是可视的ActiveX部件,可用于快速地组建应用程序;ActiveX文档可创建交互式的Internet应用程序;ActiveXDLL和ActiveXEXE是代码部件,提供了对象形式的库。
使用ActiveX部件的应用程序调用ActiveX部件采用的是客户机/服务器模式。
服务器就是提供具体功能的部件;客户机是使用部件的应用程序或另一个部件。
ActiveX部件可能和客户应用程序运行在同一个进程中,也可能运行在不同的进程中。
通常,如果ActiveX部件作为一个可执行文件(.exe文件)来实现,它就是一个进程外服务器,运行在它自己的进程中。
如果它作为一个动态链接库被实现,则它是一个进程内服务器,和客户应用程序运行在同一个进程中。
通常,使用进程内服务器的应用程序比使用进程外的服务器的应用程序执行起来要快些,因为应用程序不必跨进程来使用对象的属性、方法和事件。
二、创建ActiveX控件
相对于ActiveXDLL和ActiveXEXE部件,ActiveX控件是具有可视化界面的对象部件。
利用控件,可以快速地创建应用程序,还可以建立动态的网页。
VisualBasic6.0不仅提供了许多功能强大的ActiveX控件,还可以使编程人员创建用户自己的ActiveX控件。
在本例中,我们将创建AboutBox控件。
众所周知,大多数Windows应用程序都带有一个AboutBox窗口,用于显示软件的名称、版本号以及版权提示等信息。
我们可以通过创建一个控件在应用程序中显示AboutBox窗口。
1.创建AboutControl工程
(1)启动VisualBasic6.0。
在“文件”菜单上单击“新建工程”菜单项,打开“新建工程”对话框。
双击“ActiveX控件”图标用以创建新工程。
VisualBasic自动地把一个控件UserControll,包括其设计器添加到此工程中。
缺省名UserControll作为设计器的标题出现,此时可以观察到在VisualBasic集成开发环境中的“工具箱”中添加了一个名为UserControll的控件图标,并以灰色显示,表示目前控件尚不可用,还需要按以下的步骤进行操作才能使控件变为可用。
注意一个ActiveX控件工程中可以包含多个控件。
缺省情况下,创建一个新的ActiveX控件工程时,其中包含一个UserControl1控件。
用户还可以使用“工程”菜单中的“添加UserControl”菜单命令向工程中添加控件。
(2)在“工程”菜单上,单击“工程1属性”菜单项,打开“工程属性”对话框。
选择“通用”选项卡,将工程名称改为:
AboutControl。
选择“生成”选项卡,设置版本号和版本信息。
单击“确定”按钮。
(3)在“工程资源管理器”窗口中选中UserControl1,在“属性”窗口中双击Name属性,把用户控件名改为AboutBox。
新名字出现在设计器的标题和“工程资源管理器”窗口中。
(4)在该控件设计器中,灰色的区域就表示控件本身的尺寸,即该控件被拖放在一个
窗体上时的大小。
控件右下角的拖曳点可调整控件的大小,可以将AboutBox控件设置成
适当的大小。
(5)在“文件”菜单上,单击“保存工程”菜单命令可保存工程文件,保存文件时所用的文件名如下表一所示。
控件中诸如位图之类的二进制信息将会保存到和用户控件文件同名的二进制文件中,扩展名为.ctx。
表一保存文件时所用的文件名
文件
文件名
扩展名
用户控件
AboutBox
.ctl
工程
AboutControl
.vbp
2.设计控件的可视化界面
我们可使用诸如Circle、Line等图形方法在UserControl控件设计器中的UserControl控件区域上进行绘制,或者将已有的ActiveX控件和VisualBasic内在的控件放置到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)在“代码”窗口中,添加如下代码:
PublicPropertyGetTitle()AsString
Title=lblTitle.Caption
EndProperty
获取属性Title属性
PublicPropertyLetTitle(ByValvNewValueAsString)
lblTitle.Caption=vNewValue
PropertyChanged"Title"
EndProperty
设置Title属性
PublicPropertyGetVersion()AsString
Version=lblVersion.Caption
EndProperty
PublicPropertyLetVersion(ByValvNewValueAsString)
Label2.Caption=vNewValue
PropertyChanged"Version"
EndProperty
PublicPropertyGetCopyright()AsVariant
Copyright=lblCopyRight.Caption
EndProperty
PublicPropertyLetCopyright(ByValvNewValueAsVariant)
lblCopyRight.Caption=vNewValue
PropertyChanged"Copyright"
EndProperty
注意如上所示,在将Get属性过程的返回值和Let属性过程的参数的数据类型的声明改为AsString时,要注意必须同时更改两个声明行,即Property Get和Property Let的声明必须匹配。
使用特定的类型名可加快执行速度,并且能为使用控件的开发者提供类型检查。
作为对比Copyright的Get属性过程的返回值和Let属性过程的参数的数据类型的声明未作改变。
无论何时给Title属性赋新值均执行PropertyLet过程,它把新值保存到AboutBox控件上的lblTitle控件的Caption属性中。
无论何时检索该属性值均执行PropertyGet过程,它要读取保存在lblTitle控件中的Caption属性的值。
Version属性和Copyright属性与此类似。
控件中的PropertyLet过程必须调用PropertyChanged函数。
PropertyChanged函数的作用是通知容器某个属性的值已经变更。
这里用到了容器这个概念,对于控件来说,它的容器就是窗体,即放置控件的地方。
在PropertyLet过程中调用PropertyChanged函数,是因为控件的属性被赋了新的值,需要告诉“属性”窗口刷新其显示内容,并通知VisualBasic放置此控件的窗体已经改变了。
(5)为了初始化Title、Version和Copyright属性,在UserControl—Initialize事件过程中添加如下代码:
PrivateSubUserControl_Initialize()
'初始化
Title=App.Title
Version="版本"&App.Major&"."&App.Minor&"."&App.Revision
Copyright=App.LegalCopyright
EndSub
至此,属性设置工作已经完成,可以创建测试工程对控件进行测试了。
4.创建测试工程
为了测试AboutBox控件,需要创建一个测试窗体。
通过在测试窗体放置AboutBox控件的实例,可以对该控件进行测试。
ActiveX控件是进程内部件,为了能够调试进程内部件,VisualBasic允许在一个工程
组中加载多个工程。
除了允许进程内调试外,工程组的使用还简化了部件工程和测试工程
的加载。
在工程组中添加测试工程:
(1)在“文件”菜单中,单击“添加工程”菜单项,打开“添加工程”对话框。
(2)双击“标准EXE”图标,添加一个标准EXE工程。
在该工程上单击右键,打开上下文菜单,选择“设置为启动”,将该新工程设置成为这个工程组的启动工程。
此时在“工程资源管理器”窗口中可以看到两个工程,而且“工程资源管理器”窗口标题栏显示的是缺省的工程组名称。
注意在“工程资源管理器”窗口中“工程1”是以粗体显示的,表明“工程1”是启动工程,也就是在按F5键时要运行的工程。
(3)在“文件”菜单中,单击“保存工程组”菜单项,保存测试工程和工程组。
按表二
所示方式给文件命名。
表二保存文件时所用的文件名
文件
文件名
扩展名
窗体
TestAbout_Form1
.ctl
工程
TestAbout
.vbp
工程组
TestAbout
.vbg
5.测试控件
(1)在“工程资源管理器”窗口中双击AboutBox,将控件设计器置前,然后按下Ctrl+F4键来关闭窗口。
关闭设计器窗口使VisualBasic把“工具箱”中本来以灰色显示的AboutBox控件的图标变为有效,表示AboutBox控件现在可用。
注意不要单击工具栏上的“启动”按钮或者按下F5键,因为那样会使整个工程组进入运行模式从而无法把新控件添加到窗体中。
(2)在“工程资源管理器”窗口中双击Forml使其置前。
(3)双击AboutBox图标,把AboutBox控件添加到Forml中,该控件以带有抓取控点的灰色平面矩形的形式出现。
在“属性”窗口可以看见新控件的许多属性,其中就有刚才创建的Title、Version和Copyright属性。
刚刚添加到窗体的AboutBox控件被赋予缺省名AboutBoxl。
(4)在Forml上双击AboutBox控件,打开Forml的“代码”窗口,光标将出现在AboutBox控件的缺省事件过程AboutBoxl—GotFocus上。
你可以单击“过程”下拉列表来查看VisualBasic自动为该控件提供的另外四种事件。
完成工作后要关闭“代码”窗口。
(5)在“工程资源管理器”窗口中双击AboutBox以便打开AboutBox控件设计器。
注意放在Forml上的AboutBox控件标记上了阴影,这表明它是非活动的。
打开一个控件的设计器会使该控件的所有实例变成非活动的,更改控件“代码”窗口中的代码也会使控件实例变成非活动的。
(6)确保AboutBox控件的设计器在前面,然后按下Ctrl+F4键关闭窗口,重新激活控件实例。
阴影从Forml的控件上消失表明实例又被激活了。
如果由于改动控件的代码而使控件变成非激活状态时,可用鼠标右键单击测试窗体来显示上下文莱单,单击“更新用户控件”可重新激活控件实例。
(7)在工具栏上单击“启动”按钮运行TestAbout工程,可以看见运行的结果。
6.使用ActiveX控件界面向导
前面“设置控件的属性”部分中,控件属性的设置是通过添加Property过程实现的。
实际上,VisualBasic6.0开发环境中提供了ActiveX控件界面向导(ActiveXControlInterfaceWizard),可以帮助编程人员更容易地建立控件的属性、方法和事件。
这个向导可以利用外接程序管理器添加到开发环境中。
在这一部分将逐步介绍ActiveX控件界面向导的使用方法。
(1)如果TestAbout工程仍在运行模式中,单击Forml上的“关闭”按钮以返回设计模式。
(2)在“工程资源管理器”窗口中双击AboutBox使其置前,再双击控件设计器中AboutBox,打开其“代码”窗口。
(3)将“代码”窗口中已有的代码全部删除。
(4)在“外接程序”菜单中,单击“外接程序管理器”菜单项,打开“外接程序管理器”对话框,选中VBActiveX控件接口向导,单击“加载/卸载”检查框,然后单击“确定”按钮。
(5)在“外接程序”菜单中,单击“VBActiveX控件接口向导”菜单项,打开向导的第一个窗口“介绍“。
注意在使用ActiveX控件界面向导之前,必须先设计好控件的外观。
(6)单击“下一步”按钮,进入“选定界面成员”窗口。
向导程序在这个窗口中提示为该用户控件选择标准的界面成员,即属性、方法和事件。
左侧窗口是可以放入用户控件的一系列属性、方法和事件的列表。
右侧窗口显示的是VisualBasic已经为该控件选定的常用的界面成员。
按动两个窗口之间的箭头按钮可以在两窗口之间选择或清除界面成员。
在本例中,AboutBox控件中只保留DblClick事件。
(7)单击“下一步“按钮,进入“创建自定义界面成员”窗口。
在这个窗口中可以为用户控件添加定制的属性、方法和事件。
按“新建”按钮,显示“增加自定义成员”窗口。
在“名称”框中写入Title,并选择“属性”选项,然后单击“确定”按钮。
这就为用户控件增加了一个Title属性,并显示在“自定义成员”框中。
重复同样的方法,再增加Version和Copyright属性。
(8)单击“下一步“按钮,进入“设置映射”窗口。
这一步骤是为了把用户控件的一些界面成员映射到子控件的界面成员上。
子控件就是在设计控件外观时,放置在用户控件上的ActiveX控件和VisualBasic标准控件。
如果把用户控件的定制属性映射到子控件的属性上,那么在获取或设置用户控件属性时,其实是在获取或设置子控件的属性。
为了把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控件的“代码”窗口中自动产生了如下代码:
'事件声明:
EventClick()'MappingInfo=cmdOK,cmdOK,-1,Click
PrivateSubcmdOK_Click()
RaiseEventClick
EndSub
RaiseEvent把控件或其上的子控件的事件进行转发,因为控件总是由其它的子控件组成
'注意!
不要删除或修改下列被注释的行!
'MappingInfo=lblTitle,lblTitle,-1,Caption
PublicPropertyGetTitle()AsString
Title=lblTitle.Caption
EndProperty
PublicPropertyLetTitle(ByValNew_TitleAsString)
lblTitle.Caption()=New_Title
PropertyChanged"Title"
EndProperty
'注意!
不要删除或修改下列被注释的行!
'MappingInfo=lblVersion,lblVersion,-1,Caption
PublicPropertyGetVersion()AsString
Version=lblVersion.Caption
EndProperty
PublicPropertyLetVersion(ByValNew_VersionAsString)
lblVersion.Caption()=New_Version
PropertyChanged"Version"
EndProperty
'注意!
不要删除或修改下列被注释的行!
'MappingInfo=lblCopyRight,lblCopyRight,-1,Caption
PublicPropertyGetCopyright()AsString
Copyright=lblCopyRight.Caption
EndProperty
PublicPropertyLetCopyright(ByValNew_CopyrightAsString)
lblCopyRight.Caption()=New_Copyright
PropertyChanged"Copyright"
EndProperty
'从存贮器中加载属性值
PrivateSubUserControl_ReadProperties(PropBagAsPropertyBag)
lblTitle.Caption=PropBag.ReadProperty("Title","通用库房管理")
lblVersion.Caption=PropBag.ReadProperty("Version","1.0.0版")
lblCopyRight.Caption=PropBag.ReadProperty("Copyright","陕西省信息网络与软件创新工程中心2003年 版权所有(C)")
EndSub
'将属性值写到存储器
PrivateSubUserControl_WriteProperties(PropBagAsPropertyBag)
CallPropBag.WriteProperty("Title",lblTitle.Caption,"通用库房管理")
CallPropBag.WriteProperty("Version",lblVersion.Caption,"1.0.0版")
CallPropBag.WriteProperty("Copyright",lblCopyRight.Caption,"陕西省信息网络与软件创新工程中心200
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ActiveX 技术