【应用说明】
某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示(如下图)。红灯与绿灯持续的时间分别为30秒与40秒。持续时间结束时,立即变更红绿灯,并重新显示剩余秒数。

【Visual Basic开发说明】
在开发过程中,先在窗体内制作形状“红绿灯框架”(长方形,透明),在该框架中,上部制作形状“红灯”(ShpRed,圆形),默认属性为透明;下部制作形状“绿灯” (ShpGreen,圆形),初始设置其填充方式属性FillStyle为实心,填充颜色属性FillColor为绿色。
再设置两个图像框(Image1在左,Image2在右),使其能分别装入数字图像文件,以显示当前红绿灯状态剩余的秒数。10个数字图像文件N0.bmp~N9.bmp分别用于显示数字0、1、…、9,这些文件存放在该应用程序所在目录中,以便在程序运行时按需要选择装入这两个图像框。为使图像文件装入图像框时能自动改变大小以适应图像框,这些图像框的Stretch属性都应设置成 (1) 。为使这些数字能每秒变化一次,开发窗体中设置了计时器Timcr1,其Enable属性设置成True,其Interval属性设置成1000。
程序中,全局变量Light用以标志当前红灯(0)或绿灯状态(1),RedT和GreenT分别表示红灯或绿灯状态剩余的秒数。
计时器Timer1的定时过程是在该程序启动1秒后首次执行的,以后每隔1秒执行1次。开发者应考虑对以下四种情况的处理:绿灯持续、绿灯转红灯、红灯持续、红灯转绿灯。
过程LoadNumber的功能是:将红绿灯剩余秒数N(2位整数)分离出两个一位数i与i,再将其变换成字符,删除前面可能产生的空格,再将数字图像文件Ni.bmp与Nj.bmp装入两个图像框(其中i与j应以相应的数字字符代替)。
【Visual Basic程序代码】
Public Light AS Integer, RedT As Integer, GreenT As Integer
Private Sub Form_Load()
Light = 1 : GreenT = 40 : RedT - 0 ’初始化设置
End Sub
Private Sub Timer1_Timer() ’计时器定时过程
If Light = 1 Then ’绿灯状态时
(2)
If GreenT > 0 Then ’绿灯持续时
Call LoadNumber (GreenT) ’调用过程,显示数字GreenT
Else ’绿灯转红灯时
ShpRed.FillStyle = 0 ’置红灯形状实心
ShpRed.FillColor = vbRed ’为红灯形状填充红色
ShpGreen.FillStyle = 1 ’置绿灯形状透明
Call LoadNumber(30)
Light = 0 : RedT = 30
End If
Else ’红灯状态时
RedT = RedT - 1
If RedT > 0 Then ’红灯持续时
Call LoadNumber(RedT)
Else ’红灯转绿灯时
ShpRed.FillStyle = 1
ShpGreen.FillStyle = 0
ShpGreen.FillColor = vbGreen
(3)
Light = 1 : GreenT = 40
End If
End If
End Sub
Sub LoadXumber (N As Integer) ’根据剩余秒数N将数字图象装入图像框
Dim i As Integer, j As Integer
i = Int( (4) )
j = (5)
Image1.Picture = LoadPicture("N"&Trim(Str(i))&".bmp") ’显示十位上的数字
Image2.Picture = LoadPicture("N"&Trim(Str(j))&".bmp") ’显示个位上的数字
End Sub