学用VB控件编程(三)
软件世界
到目前为止,还没有用过ActiveX控件。本期,向大家介绍几个常用的ActiveX控件。
RichTextBox控件
RichTextBox控件是整个字处理的核心。它提供了文本框的所有功能,能够将不同字体、字号和属性混在一起编辑,能够精确地控制文本边界。在部件窗口选上Microsoft Rich TextBox Control6.0就可把控件引入工具箱。
RichTextBox的文本操作属性,表1(图1)是属性的一部分。

如将选定的文本设置为粗体、斜体。
Richtextbox1.selbold=true
Richtextbox1.selitalic=true
将选定文本变为字符串"thank you very much"
Richtextbox1.seltext="thank you very much"
Richtextbox的方法有两个:
SaveFile将控件内容存放到磁盘文件上;LoadFile将磁盘文件装入控件。
下面将介绍利用以上两个控件和VB的内置ActiveX控件ImageList、TooBar、StatusBar来编写文本编辑器。
ImageList控件 包含一组ImageList对象,要通过索引或键来引用,它作为放置其他图形控件的中央仓库。在程序运行时,可通过Treeview1.imagelist=Imagelist1语句,将Treeview1控件与Imagelist1控件相关联,Treeview1控件就可以使用Imagelist1控件中的图形
TooBar 控件 包含一组Button对象,用于生成与程序相关的工具条。
StatusBar 控件 状态栏就是通过这个控件制作的。
这三个控件包含在Microsoft Windows Common Control6.0中,把它引入工具箱,并把这三个控件放入窗体。
首先设计ImageList控件,在窗体上右击该控件,选属性。按照((图2))设计好该属性页,在通用标题栏中选16*16,将各个图标关键字按索引顺序分别设为new、open、save、print、cut、copy、paste。

然后设计TooBar 控件,右击选属性,在通用标题栏的图像列表中记住要选上 Imagelist1,这样Toobar工具条才能使用Imagelist1控件的图形。点击按钮标题,插入每个按钮,图像中选项的值就是Imagelist1中的关键字。如果我们想插入分隔符,那么在样式中选3,并在图像框中键入0(如(图3))。

再设计StatusBar 状态栏控件。在属性页窗格中,我们插入窗格并选择样式,在本例中,第1格选文本格式(0),第2格选日期格式(6),第三格选时间(5),如((图4))。

设计最后界面如((图5))所示。

下面我们编写代码。
处理ToolBar控件的Click事件。工具栏上虽然有很多按钮,但点击时只产生一个事件。要识别它是哪个按钮,可通过参数来传递。如下:
Private SubToolBar1_ButtonClick(ByVal Button As MSComCtlLib.Button)
Select Case Button.index '也可以通过关键字Button.key来判断
Case 1
......
Case 2
......
End Select
End Sub
根据运行状态改变状态栏
当打开一个文件时,在状态栏中显示该文件名,见((图6))。

StatusBar1.Panels(1).Text=Commondialog1.filename
打开和保存文件
RichTextBox1.loadfile CommonDialog1.file,RrfText
RichTextBox1.savefile CommonDialog1.file,RrfText
把文本文件装入RichTextBox1控件或保存到磁盘文件中,后面参数为装入文件的类型,在此为文本,还有一个类型RtfRTF,为RTF文件。
文本编辑器编程就介绍到此,因为全部写完太长了。
VB给我们带了9个内置ActiveX控件:ImageList、ToolBar、StatusBar、TabStrip、Slider、ProgressBar、TreeView、ListView、CoolBar。这组控件是每个开发人员必须熟练掌握的。初学者在学习时,可以结合这9个控件,多编些程序。
VB提供了许多多媒体控件,如MMControl、Animation、ActiveMove等。即使一个刚开始学习VB的人,只要掌握这些控件基本属性后,也可以很快开发出自己的多媒体应用程序。因为MMControl控件是多媒体编程中最常用和最重要的控件,所以说说它的编程,将Microsoft Multimedia Control6.0引入窗体。
MMControl控件常用属性
Command属性:该属性指定要执行的MCI命令,在设计时不可用,其格式为:
MMControl.command=命令字符串。常用命令子符串如((图7)):

DeviceType属性:指定要打开MCI的类型。常用的MCI类型如((图8)):

Position属性:返回已打开多媒体文件的位置。
Length 属性:当前打开多媒体文件的长度。
UpdateIntgerval属性:该属性设置产生StatusUdate事件的时间间隔,以毫秒为单位。StatusUdate事件与时间控件Timer的Timer事件相似。
设计一个如((图9))所示的窗体:窗体上有Picture1(图像框),CommonDialog1(对话框), Command1,MMControl1,两个Label用来显示播放进度。

将MMControl放置窗体后,不管它是否被设置为可见,第一步都将访问MCI设备,所以开始时就要设置MMControl控件的一些属性,将下列代码放入Command1的Click事件中。
MMControl1.DeviceType = "avivideo"
MMControl1.TimeFormat = 3 '设置时间格式为3,即以帧显示
CommonDialog1.ShowOpen
MMControl1.FileName = CommonDialog1.FileName
MMControl1.Command = "open"
MMControl1.hWndDisplay = Picture1.hWnd '将图像框句柄赋予MMCorntol,用来指定显示窗口
Label2.Caption = MMControl1.Length + 1
MMControl1.UpdateInterval = 1000
为play按钮编写代码
Private Sub MMControl1_PlayClick(Cancel As Integer)
MMControl1.Command = "play"
End Sub
以同样的方法依次实现Pause,Stop,Next等按钮功能。
因为UpdateInterval设置为1000,所以,MMContorl每秒中产生一次StatusUpdate事件,所以可以在该事件中放入播放进度代码。
Private Sub MMControl1_StatusUpdate
Label1.Caption=MMControl1.Position
End Sub
最后程序运行如((图10))所示。

我们在设计控件程序时,应该考虑到会有意外错误导致程序崩溃的情况。这时要编写一些错误处理程序来处理错误。
如果下面的语句,当我们打开公用对话框后,我们没有选择文件,而直接取消,如果没有错误处理程序,此时,因为通过对话框取得的文件名为空的,将会导致程序不能进行下去甚至出错。
MMControl1.FileName = CommonDialog1.FileName
所以我们应将上语句修改为
CommonDialog1.CancelError = True
On Error GoTo errnun
MMControl1.FileName = CommonDialog1.FileName
.....
errnun:
end
错误处理程序还经常用resume语句,它有三种表达方式:
resume next 将控制权让给出错语句的下一句,有点像是“重试”“忽略”中的“忽略”,resume将控制权让给出错语句,与“重试”相似。
Resume label 将控制权交给label处的语句。