VB提供了一种叫定时器(Timer)的控件,定时器每隔一定的时间间隔就产生一次Timer事件,用户根据这个特性设置时间间隔来控制某些操作,如使用定时器控件进行动画制作。
1.Timer定时器控件的属性和事件
Interval属性:返回或设置定时事件发生的时间间隔。单位为ms。缺省为0,表示时间间隔无穷大,这时Timer控件无效。
Enabled属性:返回或设置Timer控件运行时是否响应各种事件。为定时器的启动或关闭开关。
Timer事件:是Timer唯一可识别事件。在Timer的Enabled属性为True时,每隔Interval毫秒系统触发一次Timer的Timer事件。
在运行时,定时器是不可见的。其Top与Left属性实际上无意义。
2.VB动画设计应用举例
[例2—11]试编程实现在图片框中慢慢地绘出一个圆。如图2-15所示。
对象属性设置:
窗体的Caption为“动画的控制”;窗体上放置一命令按钮,其Caption为“绘制动画”;窗体上放置定时器和图片框控件各一个。运行时,单击命令按钮,开始画圆。界面设置如图2-14所示。

图2-14 界面的设置

图2-15 动画的绘制过程
程序如下:
Option Explicit
Private Sub Form_Load()
Show
Picture1.Scale (-1.2, 1.2)-(1.2, -1.2) ′原点在图片框中心位置
Picture1.AutoRedraw = True
Picture1.Line (-1.2, 0)-(1.2, 0) ′画X轴
Picture1.Line (0, 1.2)-(0, -1.2) ′画Y轴
Picture1.AutoRedraw = False
Timer1.Enabled = False
Timer1.Interval = 100
End Sub
Private Sub Command1_Click()
Picture1.Cls
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Const pi As Single = 3.14159
Static i As Integer
Picture1.Circle (0, 0), 1, QBColor(12), i / 180# * pi, (i + 10) / 180# * pi
i = i + 10
If i = 360 Then
i = 0
Timer1.Enabled = False
End If
End Sub
1.目的
本项目要求使用文本框和命令按钮来设计计算器。学习目标包括:
(1)控件和控件数组的使用
(2)事件过程的设计
(3)VB的几个内部函数和选择语句的使用
(4)程序错误的处理
2.内容
(1)设计界面
程序的运行界面如图2-16所示。

图2-16 计算器运行界面
在程序中设计两个命令按钮控件数组分别表示0-9这10个数字和+、-、*、/四个运算符号,其余均为单个控件。
步骤1 设置窗体的Caption属性为“简易四则计算器”。
步骤2 在窗体添加文本框控件,Name属性为TxtDisplay,Alignment为1,Text为空。
步骤3 在窗体上添加一个命令按钮,Name属性为CmdNumber,Index 为0、Caption为0。
步骤4 在命令按钮的上面,添加三个命令按钮,Name均为CmdNumber,Index和Caption均分别为1、2和3。
步骤5 鼠标左键按下,移动鼠标,划过的区域包括上面三个命令按钮,释放鼠标,选中了三个控件。
步骤6 选择“格式|统一尺寸|两者都相同”菜单命令,调整三个控件尺寸大小相同。
步骤7 选择“格式|对齐方式|顶端对齐”菜单命令,调整控件的高度相同。
步骤8 选择“格式|水平间距|相同间距”菜单命令,设置控件间距相同。
步骤9 右键单击鼠标,选择“复制”菜单命令。
步骤10 在窗体上单击鼠标,取消控件的选中,右键单击鼠标,在快捷菜单中,选择“粘贴”菜单命令。
步骤11 移动添加的三个控件到合适位置。
步骤12 右键单击鼠标,再次选择“粘贴”,将新的三个控件添加到合适位置。
步骤13 依次修改上面各命令按钮的Index和Caption属性值分别为1~9。
步骤14 以类似的方法添加运算符控件数组CmdOpt(Index的值:+为0、-为1、*为2、/为3),并相应修改Caption值。
步骤15 添加命令按钮,Name为CmdPoint,Caption为“.”。
步骤16 添加命令按钮,Name为CmdClear,Caption为“C”。
步骤15 添加命令按钮,Name为CmdExit,Caption为“OFF”。
步骤16 添加命令按钮,Name为CmdEqual,Caption为“=”。
(2) 编写代码
在程序中要考虑到符号按钮和小数点按钮的处理。
●符号按钮的处理
4个符号按钮作为控件数组,当单击任一个符号按钮时,首先应判断单击的是否是“-”按钮。如果在输入第一个操作数前单击了该按钮,则将它作为负号处理;如果单击了运算符号按钮后,紧接着单击了该按钮,也作为负号处理。
例中使用了模块级变量LastInput记录上次单击按钮的类型。该变量的初始值为“Nul”,代表没有输入任何数据;当变量的值为“Num”时,表示上次单击了数字键0~9,如果LastInput的值为“Neg”,则代表上次单击了负号键;而“Opt”代表上次单击了符号键,当单击了“=”时,变量LastInput的值为“Eqv”。
因此当变量LastInput的值为“Opt”或“Nul”时,单击按钮“-”,将“-”作为负号处理。
●小数点按钮的处理
数据中最多包含一个小数点,因此在单击该按钮时,应检查现有数据中是否包含了小数点。可以使用函数InStr(1,TxtDisplay.Text,".")来判断文本框TxtDispay中是否已有小数点。
提示:函数InStr用于在指定字符串中查找是否有特定的子串,如果有,返回子串的第一个字符在字符串中的位置,其格式为:InStr([n1],C1,C2,[n2])。其中:n1指定从字符串C1的第n1个字符位置起开始查找子串C2,n1省略时,从C1的第一个字符起查找;n2的默认值为0,表示执行二进制比较,为1时表示按照原文比较。如果返回值为0,表示C1中不包含子串C2。
在窗体的通用部分进行下列变量的定义,变量的声明及其含义如下:
Option Explicit
Dim LastInput As String * 3 ′记录上次按下的按键
Dim Num1 As Double ′第一个操作数
Dim Num2 As Double ′第二个操作数
Dim OptType As Integer ′按下哪一个运算符
Dim ResultAs Double ′表示运算结果
在窗体的Load事件中编写如下代码,进行变量的初始化。
Private Sub Form_Load()
′加载窗体,变量初始化
LastInput = "nul"
Num1 = 0 ′第一个操作数初始值为0
Num2 = 0 ′第二个操作数初始值为0
OptType = -1
TxtDisplay.Text = "0"
End Sub
在命令按钮CmdNumber的Click事件中添加代码,用于处理用户单击数字键的情况。
Private Sub CmdNumber_Click(Index As Integer)
′当按下数字键(0-9)时,向文本框尾部追加数据
′并通过变量LastInput记录上次按键为数字键
If Len(TxtDisplay.Text) > 16 Then Exit Sub
If TxtDisplay.Text = "0" Or LastInput = "Eqv" Then TxtDisplay.Text = ""
TxtDisplay.Text = TxtDisplay.Text & Index ′追加数据
LastInput = "Num"
End Sub
在小数点按钮CmdPoint的Click事件中编写如下代码。
Private Sub CmdPoint_Click()
′按下小数点按钮的处理过程
′如果数据位数超出范围或数据中已包含小数点,退出本过程
If Len(TxtDisplay.Text) > 16 Or InStr(1, TxtDisplay, ".") > 0 _
And LastInput <> "Eqv" Then Exit Sub