学习VB的人对ActiveX控件一定不会陌生,多数情况下使用VB编程的过程实际上就是利用控件的各种属性、方法响应事件的过程。控件是象微软这样的软件商在发售给用户之前编写的软件组件,利用这些软件商早已编好的功能,实现我们的各种要求。VB本身提供的控件能够帮助我们完成大多数的应用,但有时总有软件商们未想到的需求, ;自己动手,丰衣足食”,此时我们可以利用VB强大的功能编写自己的ActiveX控件。
编写控件该做哪些事情呢?ActiveX控件向使用者提供属性,以供访问设置,影响控件的行为;提供方法以供编程调用;提供事件响应,以供捕捉对控件的事件。我们这里设计一个名为;MoveText”的控件,此控件的主要作用在于将给定的文字匀速移动,这样可以将其放置在网页中,动态显示一些友好信息。当然它也可以被其它支持ActiveX的编程语言所使用。我们的控件应该提供的属性有Text,该属性表示在控件上移动的文字,还准备响应用户的 Click事件。说干就干, Three、Two、One ,Let’s Go!
创建ActiveX控件工程
启动VB5.0。
选File下的New Project,在工程类型列表中选择ActiveX Control确定。
经过上一步后,会有一个没有边框、按钮的;画布”出现,这就是VB为我们提供的编写控件的;雏形”,它的名字是UserControl,很丑,我们修改VB属性窗口中的Name属性,将其改为;MoveText”,这就是我们的控件正式名字。
添加属性、唤醒事件
右键点击工程窗口中的MoveText,在弹出的菜单中选择View
Code,进入代码窗口。
在Option Explicit下输入以下代码:Public Text As String。将
MoveText的Text变量声明为公用,实际即将其规定为控件的一
个属性,属性的类型为String。
在Public Text As String 下输入语句:Public Event Click(),接着在代码窗口中输入代码:
Private Sub UserControl_Click()
RaiseEvent Click
End Sub
这样,MoveText可以响应的事件中增加了Click事件。
如果要提供方法,只需简单的编写一个Sub即可。
详细设计控件的行为
为了产生文字移动的效果,我们可以让文字先用前景色写一遍,隔一段时间后在用背景色在原来的位置上再写一次,这样循环往复产生文字移动的感觉。我们前面提到的控件的;雏形”实际上是一个窗口,为了在此上显示文字,我们可以利用Windows API函数来控制颜色、位置等的精确定位。为了精确定时,我们需要在;画布”上放置一个Timer。具体步骤如下:
启动VB5附带的API Text Viewer,浏览Win32Api.txt,将其中的TextOut、GetTextColor、SetTextColor、GetBkColor等函数的声明拷贝至VB当前工程的代码窗口。
在每一个函数的声明前加上关键字Private,否则后面的编译不能通过。
为了后面的代码使用,在Public Event Click()后定义以下变量:
Dim i As Long '该变量控制文字在控件内坐标(位置)
Dim oldTextColor As Long '保存在用背景色显示文字前的当前文 字前景色
Dim bkColor As Long '保存当前背景色
从控件面板拖出Timer控件至控件上,设置Interval属性值为80。
双击Timer图标,进入代码窗口,在Sub Timer_Timer()中输入:
Private Sub Timer1_Timer()
TextOutOld 0, i, Text
i = i + 1
If i 〉= 30 Then
i = 0
End If
TextOutNew 0, i, Text
End Sub
其中的 TextOutOld 和TextOutNew过程为自定义,分别为用背景色输出文字和用前景色输出文字具体的说明为:
Private Sub TextOutOld(x As Long, y As Long, mText As String)
bkColor = GetBkColor(hdc)
oldTextColor = GetTextColor(hdc)
SetTextColor hdc, bkColor
TextOut hdc, x, y, mText, Len(mText) * 2 '汉字两个字节,故乘2
SetTextColor hdc, oldTextColor
End Sub
Private Sub TextOutNew(x As Long, y As Long, str As String)
TextOut hdc, x, y, str, Len(str) * 2
End Sub
这一组函数中用到的hdc是一个MoveText从;画布”继承的属性,无需声明。利用它,WinAPI才能完成各自的功能。
6.为了给其中用到的变量给出适当的初始值,实现以下代码:
Private Sub UserControl_Initialize()
i = 1
Text = "欢迎"
End Sub
编译控件
选File菜单下的Make Project1.ocx,将弹出一个对话框,用于指定编译后的.ocx文件的名称位置,最好将其置于Windows\system目录下,名称为MoveText.ocx。如果上面的步骤无误,则您会得到一个;地道”的ActiveX控件,并且VB会自动将它注册到您的系统注册表。
测试控件
为了测试刚才编写的控件,我们再新建一个工程,此时的控件面板上还没有刚才编写的控件。我们右击控件面板,选择Components…,在弹出的控件列表中选中刚才建立的MoveText。如果在编译时您未将MoveText控件放置于Windows\system下,则需要点击Brose…按钮,选定刚才编译的控件的文件名。之后,会在控件面板中出现MoveText的图标。选择MoveText,在Form1中插入,此时您将看到Form1中的MoveText1内有;欢迎”在移动,如果此时修改MoveText的Text属性值,譬如为;欢迎您棗电脑爱好者”,您将立即看到这句话在控件上移动。您甚至可以将其嵌入您的网页中棗多么神奇,这是您自己编写的控件!好好欣赏一下吧!
【注:本文由控件中国网转载】