OptionExplicit
PrivateConstSRCCOPY=HCC0020
PrivateDeclareFunctionBitBltLibgdi32(ByValhdcDestAsLong,ByValXDestAsLong,ByValYDestAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhDCSrcAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong
PrivateWithEventsmobjSlumberAsclsSlumber
PrivatemobjProgBarAsclsProgressBar
PrivatemobjPieBarAsclsPieBar
PrivatemdTotalTimeAsDouble
PrivatemdCurrentTimeAsDouble
PrivatemdCurrentHoursAsLong
PrivatemdCurrentMinsAsLong
PrivatemdCurrentSecsAsDouble
PrivatembInterruptedAsBoolean
PrivateSubcmdStart_Click()
OnErrorGoToErrHandler
DimsMsgAsString
IfcmdStart.Caption=StopThen
mbInterrupted=True
mobjSlumber.WakeUp
ExitSub
EndIf
EnsureDataisNumeric
txtHours.Text=Val(txtHours.Text)
txtMins.Text=Val(txtMins.Text)
txtSecs.Text=Val(txtSecs.Text)
EnsureValuesarewholenumbers
txtHours.Text=Int(txtHours.Text)
txtMins.Text=Int(txtMins.Text)
txtSecs.Text=Int(txtSecs.Text)
ValidateInputData
SelectCaseVal(txtHours.Text)
CaseIs0
sMsg=Hourscannotbeanegativenumber!
GoToDisplayMsg
EndSelect
SelectCaseVal(txtMins.Text)
CaseIs0
sMsg=Minutescannotbeanegativenumber!
GoToDisplayMsg
CaseIs=60
sMsg=Minutescannotbegreaterthanorequalto60!
GoToDisplayMsg
EndSelect
SelectCaseVal(txtSecs.Text)
CaseIs0
sMsg=Secondscannotbeanegativenumber!
GoToDisplayMsg
CaseIs=60
sMsg=Secondscannotbegreaterthanorequalto60!
GoToDisplayMsg
EndSelect
IfVal(txtHours.Text)=0AndVal(txtMins.Text)=0AndVal(txtSecs.Text)=0Then
sMsg=Pleaseinputcountdowntime!
GoToDisplayMsg
EndIf
DisplayMsg:
IfLen(sMsg)0Then
MsgBoxsMsg,vbInformation+vbOKOnly,App.Title
ExitSub
EndIf
LockInputBoxes
txtHours.Locked=True
txtMins.Locked=True
txtSecs.Locked=True
mbInterrupted=False
cmdStart.Caption=Stop
SettoSlumberevery10milliseconds
(ThismeansthatclsSlumberwillputthethreadtosleepfor
10millisecondsatatimeuntilthetotaltimehaselapsed)
mobjSlumber.SlumberInterval=10
Calculatetotalnumberofmilliseconds
mdTotalTime=(((Val(txtHours.Text)*60)+Val(txtMins.Text))*60)+Val(txtSecs.Text)
StartSlumbering
mobjSlumber.SlumberCLng(mdTotalTime*1000)
Resetformstate
cmdStart.Caption=Start
IfNotmbInterruptedThen
CallDisplay(000.00.00.0000)
mobjProgBar.Value=100
mobjPieBar.Value=100
EndIf
UnLockInputBoxes
txtHours.Locked=False
txtMins.Locked=False
txtSecs.Locked=False
ExitSub
ErrHandler:
MsgBoxErr.Description,vbCritical+vbOKOnly,App.Title
EndSub
PrivateSubForm_L)
OnErrorGoToErrHandler
pbTextBuffer.BackColor=vbBlack
pbTextBuffer.Cls
pbTextBuffer.FontBold=True
pbTextBuffer.FontSize=24
pbTextBuffer.ForeColor=vbGreen
pbTextBuffer.ScaleMode=vbPixels
pbTextBuffer.AutoRedraw=True
pbTextBuffer.Visible=False
SetmobjSlumber=NewclsSlumber
SetmobjProgBar=NewclsProgressBar
SetmobjProgBar.PictureBox=Picture1
mobjProgBar.BackColor=Picture1.BackColor
SetmobjPieBar=NewclsPieBar
SetmobjPieBar.PictureBox=Picture2
Me.ScaleMode=vbPixels
Me.Show
mobjProgBar.Value=100
mobjPieBar.Value=100
DoEvents
CallConvertTime
ExitSub
ErrHandler:
MsgBoxErr.Description,vbCritical+vbOKOnly,App.Title
EndSub
PrivateSubForm_UnlCancelAsInteger)
SetmobjSlumber=Nothing
SetmobjProgBar=Nothing
SetmobjPieBar=Nothing
End
EndSub
PrivateSubmobjSlumber_Slumber()
OnErrorGoToErrHandler
IfmobjSlumber.ElapsedMilliseconds0Then
mdCurrentTime=mdTotalTime-CDbl(mobjSlumber.ElapsedMilliseconds/1000)
mobjProgBar.Value=(100*(mobjSlumber.ElapsedMilliseconds/(mdTotalTime*1000)))
mobjPieBar.Value=mobjProgBar.Value
Else
mobjProgBar.Value=0
mobjPieBar.Value=0
mdCurrentTime=mdTotalTime
EndIf
mdCurrentHours=Int(CStr(mdCurrentTime))\3600
mdCurrentSecs=mdCurrentTime-(mdCurrentHours*3600)
mdCurrentMins=Int(CStr(mdCurrentSecs))\60
mdCurrentSecs=mdCurrentSecs-(mdCurrentMins*60)
CallDisplay(Format$(mdCurrentHours,000).Format$(mdCurrentMins,00).Format$(mdCurrentSecs,00.0000))
ExitSub
ErrHandler:
Err.RaiseErr.Number,Err.Source,[frmCountdown.mobjSlumber_Slumber]Err.Description
EndSub
PrivateSubDisplay(TextAsString)
WithpbTextBuffer
.Cls
.CurrentX=0
.CurrentY=10
pbTextBuffer.PrintText
BitBltMe.hDC,.Left,.Top,.ScaleWidth,.ScaleHeight,.hDC,0,0,SRCCOPY
EndWith
EndSub
PrivateSubConvertTime()
CallDisplay(Format$(Val(txtHours.Text),000).Format$(Val(txtMins.Text),00).Format$(Val(txtSecs.Text),00).0000)
EndSub
PrivateSubtxtHours_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
CallConvertTime
EndSub
PrivateSubtxtMins_Change()
CallConvertTime
EndSub
PrivateSubtxtSecs_Change()
CallConvertTime
EndSub
读书三件事:阅读,收藏,加打赏!