趙俊峰
[摘要] VB中的定時器控件具有靈活多變、易于控制等特點,在應用程序的開發(fā)中,利用VB定時器控件可以實現(xiàn)時間控制、隨機控制、動畫設計和游戲設計等制作。VB定時器控件和其他控件相結(jié)合,可以制作既靈活又實用的應用程序。
[關(guān)鍵詞] VB 定時器 控制 Timer
VB中的定時器控件(Timer)是一個在程序運行時不可見的控件,在程序運行時,每隔若干時間(通過Interval屬性設置)執(zhí)行一次Timer事件中的相應代碼。定時器控件最核心的屬性是Enabled和Interval屬性。利用Enabled可以設置定時器控件是否可用,其取值只有邏輯值True和False兩種。利用Interval屬性可以設置定時器控件激活Timer事件的時間間隔,其單位為毫秒,其取值范圍為0-65535,當取值為0時,定時器控件不可用。由于定時器控件具有靈活多變、易于控制等特點,可以應用于時間控制、隨機控制、動畫制作、游戲制作等應用程序的開發(fā)中。
一、時間控制
1.整點播時器
在實際工作中,有時需要利用計算機實現(xiàn)整點報時的功能,以提醒用戶及時知曉當前時間。整點播時器的功能是:若當前系統(tǒng)時間為整點時(即當前時刻的分鐘數(shù)和秒數(shù)均為0),彈出對話框提示“現(xiàn)在是北京時間X點整”。在設計整點報時器時,定時器控件Timer1的Interval屬性應設置為1000(1000毫秒=1秒),Timer1的timer事件代碼如下:
Private Sub Timer1_Timer()
If Second(Time()) = 0 And Minute(Time()) = 0 Then
a = MsgBox("現(xiàn)在是北京時間" + Str(Hour(Time())) + "點整")
End If
End Sub
2.倒計時器
在實際生活中,有時需要通過倒計時的方法,讓觀眾隨時了解當前距正式活動(比賽)的時間差。比如奧運會倒計時、開幕式倒計時等等。倒計時器的功能是:先在文本框text1中輸入倒計時的時間(形式為hh:mm:ss),當單擊“開始倒計時”按鈕command1時,每隔一秒鐘,文本框text1中的時間倒退一秒鐘,直到時間為0(00:00:00)時,彈出對話框提示“時間到!!!”。在窗體中應添加按鈕控件(command1)、定時器控件(timer1)和文本框控件(text1)。定時器控件timer1的Interval屬性應設置為1000,Enabled屬性應設置為False。相關(guān)代碼如下:
Public h, m, s, sum
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
h = Val(Left(Text1.Text, 2))
m = Val(Mid(Text1.Text, 4, 2))
s = Val(Right(Text1.Text, 2))
sum = h * 3600 + m * 60 + s
sum = sum - 1
h = sum \ 3600
m = (sum Mod 3600) \ 60
s = sum Mod 60
h = IIf(h < 10, "0" + Trim(Str(h)), Trim(Str(h)))
m = IIf(m < 10, "0" + Trim(Str(m)), Trim(Str(m)))
s = IIf(s < 10, "0" + Trim(Str(s)), Trim(Str(s)))
Text1.Text = h + ":" + m + ":" + s
If sum = 0 Then
Timer1.Enabled = False
x = MsgBox("時間到!!!", "提示")
End If
End Sub
二、隨機控制
1.搖獎器
搖獎器功能是根據(jù)搖獎規(guī)則,從規(guī)定的數(shù)字范圍內(nèi)隨機的選出規(guī)定個數(shù)的隨機號碼。下面以體彩22選5為例介紹搖獎器的制作方法。單擊命令按鈕控件command1開始進行搖獎,標簽控件Label1-Label5不斷地隨機顯示抽取出的五個幸運號碼,單擊命令按鈕command2實現(xiàn)抽獎。command1的Caption設置為“搖獎”, command2的Caption設置為“抽獎”,定時器控件Timer1的Interval屬性值為10。相關(guān)代碼如下:
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
While Not (Label1.Caption <> Label2.Caption And Label1.Caption <> Label3.Caption And Label1.Caption <> Label4.Caption And Label1.Caption <> Label5.Caption And Label2.Caption <> Label3.Caption And Label2.Caption <> Label4.Caption And Label2.Caption <> Label5.Caption And Label3.Caption <> Label4.Caption And Label3.Caption <> Label5.Caption And Label4.Caption <> Label5.Caption And )
Label1.Caption = Int(Rnd() * 22+ 1)
Label2.Caption = Int(Rnd() * 22+ 1)
Label3.Caption = Int(Rnd() * 22+ 1)
Label4.Caption = Int(Rnd() * 22+ 1)
Label5.Caption = Int(Rnd() * 22+ 1)
Wend
End Sub
Private Sub Timer1_Timer()
Label1.Caption = Int(Rnd() * 22+ 1)
Label2.Caption = Int(Rnd() * 22+ 1)
Label3.Caption = Int(Rnd() * 22+ 1)
Label4.Caption = Int(Rnd() * 22+ 1)
Label5.Caption = Int(Rnd() * 22+ 1)
End Sub
其中,While Not (…) … Wend循環(huán)語句的目的是監(jiān)測隨機抽取的五個號碼是否有重復值,如果有重復值則重新抽取,直到五個號碼各不相同為止。
2.禮花綻放
禮花綻放的功能是隨機地出現(xiàn)以窗體中心點為中心的隨機顏色的線條,以模擬禮花綻放效果。只需在窗體中添加定時器控件Timer1,設置其Interval屬性值為10,在定時器控件的Timer事件中利用窗體的line方法實現(xiàn)禮花綻放效果,相關(guān)代碼如下:
Private Sub Timer1_Timer()
coulor = RGB(Rnd() * 255, Rnd() * 255, Rnd() * 255)
x = Rnd() * Form1.Width
y = Rnd() * Form1.Height
Form1.Line (Form1.Width/2, Form1.Height/2)-(x,y), coulor
End Sub
三、動畫制作
1.進度條
在VB應用程序設計中,有時需要通過進度條動畫來表達一些對象的操作進度,如安裝進度、下載進度、完成進度等等。下圖為“進度條制作”的運行界面。標簽控件Label1用于顯示進度比例,標簽控件Label2用于顯示標題“進度條的制作”,形狀控件Shape2為進度框(其屬性BackStyle的值為Transparent),形狀控件Shape1為進度條(其屬性Bordercolor的值&H00FF0000&,屬性BackStyle的值為Opaque)。定時器控件的Interval屬性值為10,其Timer事件代碼如下:
Private Sub Timer1_Timer()
Shape1.Width = Shape1.Width + 10
Label1.Caption = Str(Int(Shape1.Width / Shape2.Width * 100)) + "%"
If Shape1.Width >= Shape2.Width Then
Timer1.Enabled = False
End If
End Sub
2.滾動字幕
在VB應用程序開發(fā)中,可以通過定時器控件(Timer)制作類似網(wǎng)頁中滾動字幕的效果。利用VB可以制作從左往右、從右往左、交替三種方式的滾動字幕效果。下面以“交替”方式的滾動字幕為例介紹滾動字幕的制作方法。交替方式的滾動字幕就是字幕不斷地來回滾動,文字碰到頁面邊界后就向相反方向滾動。在窗體中應添加標簽控件(label1)和定時器控件(timer1)。設置標簽控件label1的caption屬性為“歡迎使用本軟件”,設置定時器控件的Interval屬性值為1。定義全局變量a以控制滾動的方向,相關(guān)代碼如下:
Public a
Private Sub Timer1_Timer()
If a = 0 Then
Label1.Left = Label1.Left + 10
If Label1.Left >= Form1.Width - Label1.Width Then a = 1
End If
If a = 1 Then
Label1.Left = Label1.Left - 10
If Label1.Left <= 0 Then a = 0
End If
End Sub四、游戲制作
VB定時器控件和其他控件結(jié)合,可以制作簡單的游戲。下面以“鍵盤輸入測試”游戲為例進行介紹。此游戲的功能是:由應用程序隨機抽取并顯示10個字母,等待用戶依次輸入。當輸入正確時,抽取并顯示下一個隨機字母。直到抽取十個字母,并均輸入正確為止。最后彈出對話框,顯示輸入速度。此程序需要用到3個公共變量,變量a來記錄隨機抽取出的字母的ASCII值,變量s用來記錄游戲開始時的系統(tǒng)時刻(通過s=timer(),使s賦值為從午夜算起已經(jīng)過的秒數(shù)),變量n用來記錄抽取字母的個數(shù)。通過窗體的KeyDown事件來記錄并檢測按鍵所對應的字母是否正確,如果正確,則設置定時器控件Timer1的Enabled屬性值為True,即讓定時器控件Timer1繼續(xù)下一個隨機字母的抽取和顯示。定時器控件Timer1的Interval屬性應設置為1。相關(guān)代碼如下:
Public a, s, n
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = a Then
Timer1.Enabled = True
p = 0
End If
End Sub
Private Sub Form_Load()
s = Timer()
End Sub
Private Sub Timer1_Timer()
Randomize
a = 65 + Int(Rnd() * 26)
Label1.Caption = Chr(a)
n = n + 1
Timer1.Enabled = False
If n = 10 Then
speed = Str(Int((Timer() - s) / 10 * 60))
MsgBox ("您的速度為" + speed + "字/分鐘")
End If
End Sub
綜上所述,VB定時器控件由于其具有功能靈活、易于控制、操作簡單等優(yōu)點,在軟件開發(fā)中有著廣泛的應用價值。利用VB定時器控件不僅可以實現(xiàn)程序控制和動畫設計的功能,還可以實現(xiàn)簡單游戲的制作。
參考文獻:
[1]林信成等.Visual Basic 6入門經(jīng)典[M].北京:中國電力出版社,1999,10.
[2]劉炳文.二級教程Visual Basic語言程序設計[M].北京:高等教育出版社,2001,10.
[3]邱玉輝.Visual Basic語言程序設計[M].昆明:云南科技出版社,2002,8.
本論文為太原大學外語師范學院“基于《計算機公共基礎》的網(wǎng)絡課程設計與研究”的課題成果。