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