CSDN博客

img shanhe

手把手教你学编ActiveX控件

发表于2004/6/24 9:52:00  2681人阅读

分类: VB

 

手把手教你学编ActiveX控件

  杨山河

 

学习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属性值,譬如为“欢迎您棗电脑爱好者”,您将立即看到这句话在控件上移动。您甚至可以将其嵌入您的网页中棗多么神奇,这是您自己编写的控件!好好欣赏一下吧!

 

利用VB来编写VB控件是一件令人兴奋的事,在领教VB强大功能的同时,我们也看到“开发软件”原来也只不过如此!只要您用心投入了,什么都难不倒您,真的,我不骗您,不信,您试试!

==

1998年写的

阅读全文
0 0

相关文章推荐

img
取 消
img