第三篇综合提高篇Active9例12页.docx
- 文档编号:18192515
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:15
- 大小:88.47KB
第三篇综合提高篇Active9例12页.docx
《第三篇综合提高篇Active9例12页.docx》由会员分享,可在线阅读,更多相关《第三篇综合提高篇Active9例12页.docx(15页珍藏版)》请在冰点文库上搜索。
第三篇综合提高篇Active9例12页
本将—步—步介绍如何创建—个ActiveX按件,尽管这个ActiveX按件本身并不十分有实际用途,且也并不让人觉得兴趣,但是它作为教本是十分得当的。
往往最简单的实例能够起到说明的效果,这个实例说清了控件内部的所有事件以及设计控件的所有方法。
实例92初建ActiveX控件
从这一例中,读者朋友将学会如何建立一个ActiveX控件。
我们将一步一步地介绍ActiveX控件的创建方法。
1、使用“File|New|ActiveXControl”菜单新建立一个工程。
2、在工程属性窗口里,“工程管理器”窗口中点击名为usercontrol1的对象,在其“属性”窗口中,将控件的(name)设为1abelshape。
3、选择菜单Project|Project1Properties选项,打开该控件工程的属性对话框。
在其“projectname”处可修改名称。
在“ProjectDescription”中写上对该Activex控件工程的说明,将来如果其他人用到该控件时,就可以通过“控件属性”看到你在设计阶段所作的说明。
4、ActiveX控件工程的“大模样”已经设计完毕,选择“File|SaveProject”选项,VisualBasic将为Activex控件工程保存两种格式的文件,一种称作“用户定义控件文件—.ctl”,一种是“工程文件—.vbp”,我们选择后者。
如下图所示:
图92-1创建ActiveX控件
ActiveX控件可以被添加至所有的VisualBasic工程中。
如果一个ActiveX控件被编译成exe文件,则它将不能被其他应用程序共享;而本例中的1abelshape控件是将被编译成ocx文件,所以它可以被其他应用程序共享。
一个ActiveX控件工程中可以包含任意多个ActiveX控件,而以后的ocx文件中也将包合所有你添加的控件。
实例93测试ActiveX控件
上一例我们简单地创建了一个ActiveX控件,为了检验该控件的运行状况,我们需要让它运行在另一个VisualBasic工程中进行控件的测试。
VisualBasic提供了“ProjectGroup”,使women可以在一个工程组中添加若干个工程,从而达到在工程中添加控件件以及测试工程的目的。
的目的。
1、保持上一节中建立的project1工程的打开状态,然后在“File|New|StandardExe”菜单中选择“AddProject”选项。
需要注意的是:
不要选择“OpenProject”或者是“NewProject”选项,因为那样做将关闭你的ActiveX控件工程。
2、这时右侧的工程管理器窗口,它的标题已经变成了“ProjectGroup-Groupl”,而其下
属的工程中也多了一个工程,就是我们刚添加的“Projectl”,将Form1名为testform。
3、在“Project”菜单中,点击“Project2Properties”选项,打开该控件工程的属性对话框。
在“ProjectName”中可以更改工程名称。
在“ProjectDescription”中写上对对该标准工程的说明。
右上方为“StartupObject”,此时自动被设置为testForml。
在ActiveX控件工程中是没有启动对象的。
4、保存工程。
请在“File”菜单中选择“SaveProjectGroup”,VisualBasic将会提示对工程组进行保存,我们将该工程组命名为Group1。
工程组文件的后缀名为.vbg。
然后是对新添
加的工程的保存,我们将其命名为Project2,将窗体保存为testform。
在“工程管理器”窗口中,所有的工程都是包含在一个工程组中,但是每次你只能打开其中的一个工程。
另外,当我们为ActiveX控件工程新添加了一个标准的Exe工程之后,这个新加的工程就成为起始工程,因为ActiveX控件工程是不能作为起始工程来使用的,所以当你按下F5时,运行的将会是这个新添的工程。
图93-1新建的testform窗体
实例94在设计运行ActiveX控件
和其他的可编程对象不同的是,ActiveX控件在设计时就可以被运行。
也就是说,在设计ActiveX控件时,如果你把该控件放置到一个窗体中,控件中的一些代码将会执行。
可以说这是ActiveX控件的一大特性。
本例就是将向你举例说明这个特点:
为前面建立的ActiveX控件的resize事件添加代码,则它将在设计阶段就被运行。
1、在工程管理器中,选择labelshape,然后双击它,进入控件的代码窗口。
为该控件的Resize事件添加程序。
2、在labelshape打开状态下,将关闭控件的“代码”窗口。
此时,在左侧的控件栏中,将出现一个新的控件,鼠标经过它时,会出现“1abelshape”的字样,其实你可能早己发现它的存在了,只不过在设计阶段,它只能呈现灰色,而现在它终于可以使用了。
3、向testForm添加labelshape控件,选择菜单View|ImmediateWindow打开“Immediate”窗口,对Forml中的labelshape控件进行调整,你将看到每次你进行控件大小的调整时,在“Immediate”窗口中就会出现一行提示,而且每回的次数会自动加l。
这就是证明Activex控件在设计阶段就可以产生行为的极好的例子。
如下图所示:
图94-1添加了ActiveX控件后的testform窗体图94-2Immediate窗口信息
4、在testform中双击1abelshape控件,就进入到该控件的代码窗口。
缺省的控件事件为Gotfucus,此时你还可以为它的其他事件添加代码,不过这些事件只能在窗体运行时才可能发生了。
Debug对象在运行时将输出发送到Immediate窗口,主要有Print方法和Assert方法。
本例中使用到的是Print方法。
Print方法作用是在Immediate窗口中显示文本。
在它后面可以用空白或分号来分隔多个表达式。
对系统指定的个别设置,用小数点分隔符将所有打印到Immediate视窗的数据正确格式化。
关键字要用适用于主应用程序的语言输出。
Labelshape的UserControl_Resize事件代码如下
PrivateSubUserControl_Resize()
StatictestAsInteger
test=test+1
Debug.Print"改变"&test;"次"
‘ActiveX控件激活一次test就加1,并打印结果到Immediate窗口
EndSub
实例95控件的关键事件
ActiveX和普通的窗体一般来说具有相通的事件。
当一个普通的VisualBasic窗体运行时,通常会有几个关键的事件,如Initialize、Load、Unload等等,Activex控件也是一样,它的关键的事件分别为Initialize、InitproPerties、ReadProPerties、writeproPerties和Terminate。
通过本例濑熟悉ActiveX控件的关键事件。
1、在工程管理器窗口中双击1abelshape,打开控件的设计器。
然后,双击控件,进入到代码窗口,在窗口中填写相应的代码。
2、在设计器为当前状态下,关闭该窗体。
3、按下工具栏中的“Start”钮,或者直接按下Ctrl十F5运行该工程。
4、在工程管理器中双击Form键,然后双击控件栏上的1abelshape图标,为该窗体再添加一个Activex控件。
在在“Immediate”窗口中就看到的几条信息出现说明,当你把Activex控件的设计窗口关闭后,该控件是经过了从完毕到重建的过程,因此在“Immediate”中才会出现初始化的过程。
继而进行“改变大小”和“读属性”的过程。
重新启动后,testform窗体中的控件是看不到的,但是我们可以通过“立即窗口”来看到它的事件情况。
当把工程转向运行状态时,就会激活writeProPerties事件和Terminate事件,接着在运行状态下又会激活一个新的Initiallze—事件。
在又添加了一个ActiveX控件之后,会激活Initproperties事件,进行属性的初始化过程。
而在属性的初姑化过程中,你完全可以设计代码来设定每个控件属性的默认值或执行其他一些任务。
按下Ctrl十N键,你将在“Immediate”窗口中看到两个控件的初始化过程。
Immediate窗口信息如下图所示:
图95-1Immediate窗口反馈信息
新增的事件控制代码如下:
PrivateSubUserControl_Initialize()
Debug.Print"初始化"
EndSub
PrivateSubUserControl_InitProperties()
Debug.Print"属性初始化"
EndSub
PrivateSubUserControl_Terminate()
Debug.Print"中止"
EndSub
PrivateSubUserControl_WriteProperties(PropBagAsPropertyBag)
Debug.Print"开始写入属性"
EndSub
实例96加工AcitiveX控件的外形
前面我们介绍了按件的许多内容,但是你始终也没有见到该控件的外观。
孰不知,你完全可以利用一些绘图方法,比如用Circle或是Line来描绘你的控件;而反你还可以利用已有的控件为你的ActiveX控件做修饰,本例再为已有的控件添加上一个Shape和一个Label。
1、请在“工程管理器”中双击1abelshape,控件,然后选择Shape控件,将其添加到设计器中,并将BorderStyle为Transparent,填充色为蓝色,Fi11style为Solid,Shape为“4—roundedrectangle”,并为该控件起名为shapeback。
2、然后添加Label,Caption设成ActiveX,BackStyle设成transparent。
3、双击1abelshape控件,给shapeback添写代码,用Move方法将其放置至1abelshape控件的适当位置;然后利用Label的Move方法把Move方法将Label放置于shapeback的中央位置,而且是随着labelshape控件的大小改变,而相应改变其位置,使其总保持在中央。
4、关闭labelshape的设计窗口,将该控件置于运行模式中。
在工程管理器中,双击testform,则可以看到原先表面上已经变成了有形有色的了。
而且,不管shapeback的位置如何何转变,大小如何改变,Label总是能自动地调整到其中央。
效果如下图所示。
图96-1具有外形的ActiveX控件
Move方法用以移动MDIForm、Form或控件。
不支持命名参数。
只有left参数是必须的。
但是,要指定任何其它的参数,必须先指定出现在语法中该参数前面的全部参数。
例如,如果不先指定left和top参数,则无法指定width参数。
任何没有指定的尾部的参数则保持不变。
在本例中,我们没有缺省。
PrivateSubUserControl_Resize()
Shapeback.Move0,0,ScaleWidth,ScaleHeight
Label1.Move0,(ScaleHeight-Label1.Height)/2,ScaleWidth,ScaleHeight
‘使用Move方法定位
EndSub
实例97ActiveX控件的属性
每当我们对窗体中的控件进行调整时,就不得不用到“Properties”窗口,在该窗口中,你可以改变控件的很多属性。
就像其它的控件一样,ActiveX控件同样应该也有自己的属性,常用的属性例如:
Caption、Name等,通过本例,我们介绍如何为ActiveX控件新添加一个属性以及与属性相关的几种方法。
1、选择1abelshape代码编写状体,选择“Tool|AddProcedure”菜单,在出现的对话框中,定义名称为Caption的属性,范围取“Public”。
2、代码窗口中已经自动增加了两个属性的方法,向两个方法中添加代码。
代码窗口中自动增加的属性方法分别是Get和Let。
Get方法是用来取属性的值的,而Let是用来设置属性的值的。
需要注意的是,在Let方法中,设置完Caption值以后,还必须调用PropenyChanged方法才行。
确认labelshape控件的设计窗口处于当前活动状态,关闭该设计窗口,这时属性窗口中确实已经多了一项Caption属性。
你可以在此改变Caption的值,然后该值就会通过Let方法反映到窗体的labelshape控件上,从而改变了标签的值。
不过,此时这种改变是保持不住的。
为了保存对控件属性的改变,还需要增加两个方法:
ReadProperties和WriteProperties。
在控件的代码窗口中添加相应的代码,首先是在控件的初始化属性的过程中添加了Caption=Extender.Name,目的是使Caption的初值为窗体所赋予的默认值,Extender指的是包含控件的容器,这里是该窗体。
PrivateSubUserControl_ReadProperties(PropBagAsPropertyBag)
Debug.Print"开始写入属性"
Caption=PropBag.ReadProperty("caption",Extender.Name)
‘使Caption的初值为窗体所赋予的默认值
EndSub
PublicPropertyGetcaption()AsString
Caption=Label1.caption
EndProperty
PublicPropertyLetcaption(ByValVNewValueAsString)
Label1.caption=vNewValue
PropertyChanged“caption”
EndProperty
实例98添加属性页
上一实例,我们学习了如何添加简单的属性,本例我们将向介绍如何添加一个属性页。
属性页是一组设置值,它们共同工作,配置控件某个方面的特性。
在VisualBasic中,你可以用属性页来定制几种ActiveX控件。
对于属性页,你可能已经见过很多次了,通常一个属性页是由几项选项卡组成的,点击不同的选项卡,则舍相应出现不同的内容。
属性页对于一个拥有很多属性的拴件来说尤其有用,可以利用它未将众多属性分门别类,使用起来就会觉得很是方便。
1、在工程管理器中,在Project1处单击鼠标右键,选在Add|PropertyPage,添加一个PropertyPage。
2、将此Page的“Name”设为ppg,而将它的Caption设为“通用”,此项是以后用来做属性页的选项卡的。
然后在属性页上添加两个控件:
一个是Label,其Caption为“标题”;另一个是TextBox,其“name”为txtcap,而其Text值为空。
3、代码设定完成后,在工程管理器窗口中,双击labelshape打开控件设计器,然后在该控件的属性窗口中找propertypages属性,可能需要利用滚动条来找到它。
找到后,发现它目前是空的,于是双击该属性,进入可选的属性页对话框。
在此我们选择第一个选项—ppg,也就是我们自己建立的属性页,按下“OK”键。
4、关闭1abelshape控件设计器。
在工程管理器窗口中双击testform打开该窗体设计器,用鼠标右键点击窗体中的Activex控件,在出现的弹出菜单里选择“属性”,则会弹出我们设计的ppg的画面。
该属性页中只有一个选项卡“通用”,包括一个标签和一个文本框,这都是我们事先设计好的。
图98-1PropertyPage
实例99添加事件
前面我们介绍了如何给一个ActiveX控件添加属性,而仅仅有属性的ActiveX控件是功能不全的,本例我们将向介绍如何为ActiveX控件添加事件。
VisualBasic可以为Activex控件添加大量的事件,但由于我们的1abelshape控件只是一个简单的标签控件,仅仅作为教学使用,因此我们只向你介绍它的dbclick事件。
1、在工程管理器窗口中点击1abelshape,进入“代码”窗口。
在“General”对象的声明,
添加一个Click事件的声明,在Label1的双击事件中添加RaiseEventdbclick。
2、在控件的代码窗口中选择Userontrol的MouseUp事件,添写代码。
3、在工程管理器中点击testform,进入窗体的代码窗口。
选择labelshape对象的dbclick事件。
给Usercontro1的添加MouseUp事件,目的是当判断出鼠标所在点的颜色与控件底色一致时,激活dbclick事件。
选择labelshape对象的dbclick事件,添加的代码表示当该控件被击中后所发生的响应,即弹出一个消息框。
启动该工程。
在1abelshape标签字体上双击鼠标,将激活dbclick事件会弹出消息框,将鼠移至蓝色区域,然后放开鼠标,则将激活MouseUp事件,也会出现消息框。
一切都和我们设计的一样。
这只是一个简单得不能再简单的例子,你完全可以再设计自己的事件。
图99-1运行结果
OptionExplicit
PublicEventdbclick()
‘声明
PrivateSubLabel1_DblClick()
RaiseEventdbclick
EndSub
‘Label的双击事件
PrivateSubUserControl_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfPoint(X,Y)=Shapeback.FillColorThen
RaiseEventdbclick
Endif
‘鼠标所在点与底色一致时,激活dbclick事件
EndSub
PrivateSublabelshape2_dbclick()
MsgBox"双击"
‘弹出消息框
EndSub
实例100编译生成真正的控件
前面8个实例介绍如何创建一个ActiveX拄件,从它的外观到它的属性和事件,相信读者朋友有所体会。
然而我们以上所有的工作都仅仅是在一个测试工程中进行的,还从来没有真正地在实践中使用,本实例将生成真正控件的问题,从而完成ActiveX控件的创建
1、将该控件生成为ocx文件,这样别人就可以调用它了。
工程管理器窗口中选中project1,然后File|Makecbldemo.ocx”选项即可。
2、生成ocx文件后,在工程组可以选择删除Project1。
3、为了能够演示Activex控件的真正使用,新建一个工程。
选择“File|StandardExe”即可。
然后选择“Project|Componens”选项,则会出现选择框,按住滚动条向下寻找,在最后可以找到我们创建的VB百例控件,添加。
如下图所示:
图100-1选择我们创建的控件
在VisualBasic中开发的ActiveX控件本质上是一个控件类,它是控件创建的依据,这也就是类与对象之间的关系。
当把一个控件(对象)放在窗体上的时候,实际上是创建了该控件类的一个实例。
为了避免混淆,注意所设计的控件类与放在窗体上的控件实例是有区别的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 综合 提高 Active9 12