vb中怎样做出时钟?
VB可使用Timer控件、Line控件和绘图或加载图片等制作指针式时钟。
Timer 控件,通过引发 Timer 事件,Timer 控件可以有规律地隔一段时间执行一次代码。
Line 控件,Line 控件是图形控件,它显示水平线、垂直线或者对角线。
运行时不能使用 Move 方法移动 Line 控件,但是可以通过改变 X1、X2、Y1 和 Y2
属性来移动它或者调整它的大小。
Circle 方法,在对象上画圆、椭圆或弧。
以下是通过加载图片的指针式时钟代码:
Option ExplicitPrivate Const PI = 3.1415926
Dim X(1) As Single, Y(1) As Single
Dim OriAngle As Single, DestAngle As Single, r As Single
Private Sub RotateLine(objL As Line, bsPointX As Single, bsPointY As Single, RotateAngle As Single)
With objL
X(0) = .X1
Y(0) = .Y1
X(1) = .X2
Y(1) = .Y2
End With
Dim i As Integer
For i = 0 To 1
If X(i) - bsPointX <> 0 Then
OriAngle = Atn((Y(i) - bsPointY) / (X(i) - bsPointX))
Else
OriAngle = IIf(Y(i) > bsPointY, PI / 2, 1.5 * PI)
End If
If X(i) - bsPointX < 0 Then
If OriAngle < 0 Then
OriAngle = PI - Abs(OriAngle)
Else
OriAngle = PI + Abs(OriAngle)
End If
End If
DestAngle = OriAngle + RotateAngle
r = Sqr((X(i) - bsPointX) ^ 2 + (Y(i) - bsPointY) ^ 2)
X(i) = bsPointX + r * Cos(DestAngle)
Y(i) = bsPointY + r * Sin(DestAngle)
Next i
With objL
.X1 = X(0)
.Y1 = Y(0)
.X2 = X(1)
.Y2 = Y(1)
End With
End Sub
Private Sub Form_Load()
Timer1.Interval = 1000
Dim i As Long
For i = 1 To Val(Mid(Time$, 7, 2))
RotateLine Line3, Line3.X1, Line3.Y1, 1 * PI / 30
Next
For i = 1 To Val(Mid(Time$, 4, 2))
RotateLine Line2, Line2.X1, Line2.Y1, 1 * PI / 30
Next
For i = 1 To Val(Mid(Time$, 1, 2)) * 5 '对时针
RotateLine Line1, Line1.X1, Line1.Y1, 1 * PI / 30
Next
For i = 1 To Val(Mid(Time$, 4, 2)) '对时针
RotateLine Line1, Line1.X1, Line1.Y1, 1 * PI / 360
Next
End Sub
Private Sub Timer1_Timer()
RotateLine Line3, Line3.X1, Line3.Y1, 1 * PI / 30
RotateLine Line2, Line2.X1, Line2.Y1, PI / 1800
If Mid(Time$, 7, 2) = "00" Or Mid(Time$, 7, 2) = "30" Then
RotateLine Line1, Line1.X1, Line1.Y1, 1 * PI / 720
End If
Me.Caption = Time$
End Sub
1、添加一个“label控件”命名为label
2、添加一个“timer控件”命名为timer1
3、设置“timer1”的“Interval属性”为1000
使用到的代码:
Dim Hour As Integer '小时Dim Min As Integer '分钟
Dim Sec As Integer '秒
Private Sub Form_Load()
Hour = 0
Min = 0
Sec = 0
Label1.Caption = "00 : 00 : 00"
End Sub
Private Sub Timer1_Timer()
Dim strHour As String
Dim strMin As String
Dim strSec As String
Sec = Sec + 1
If Sec >= 60 Then
Sec = 0
Min = Min + 1
If Min >= 60 Then
Min = 0
Hour = Hour + 1
If Hour >= 24 Then
Hour = 0
End If
End If
End If
If Hour < 10 Then
strHour = "0" & Hour
Else
strHour = Hour
End If
If Min < 10 Then
strMin = "0" & Min
Else
strMin = Min
End If
If Sec < 10 Then
strSec = "0" & Sec
Else
strSec = Sec
End If
Label1.Caption = strHour & " : " & strMin & " : " & strSec
End Sub
提供个做好钟的代码,自己修改为适合给出图片的效果。
Option ExplicitDim a As Integer, b As Integer, rad As Double
Dim i
Private Sub Form_Load()
a = Me.ScaleWidth \ 2 '圆心X坐标
b = Me.ScaleHeight \ 2 '圆心Y坐标
rad = Atn(1) / 45 '1角度的弧度数
Me.DrawWidth = 3
Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
Dim angle1 As Double, angle2 As Double, angle3 As Double
angle1 = ((Hour(Now) Mod 12) * 30 + Minute(Now) / 2 - 90) * rad '时针的角度
angle2 = (Minute(Now) * 6 + Second(Now) / 10 - 90) * rad '分针的角度
angle3 = (Second(Now) * 6 - 90) * rad '秒针的角度
Cls '清除画面,以便画下一秒的状态
CircleDemo
Me.Circle (a, b), 1000, vbYellow '画石英钟轮廓
'[object.]Circle [Step](x, y), radius[, color]
For i = 1 To 12
Me.CurrentX = a - IIf(i < 7, 115, 170) + 1100 * Cos((i * 30 - 90) * rad) '刻度X坐标
Me.CurrentY = b - 90 + 1100 * Sin((i * 30 - 90) * rad) '刻度Y坐标
Print i '画刻度
Next
Me.Line (a, b)-(a + 300 * Cos(angle1), b + 250 * Sin(angle1)), vbBlue '画时针
Me.Line (a, b)-(a + 400 * Cos(angle2), b + 550 * Sin(angle2)), vbBlue '画分针
Me.Line (a, b)-(a + 600 * Cos(angle3), b + 600 * Sin(angle3)), vbRed '画秒针
End Sub
Sub CircleDemo()
Dim Radius, r, g, b, Xpos, redius, Ypos
'将红色设置为随机数。
r = 255 * Rnd
'将绿色设置为随机数。
g = 255 * Rnd
'将蓝色设置为随机数。
b = 255 * Rnd
'将 x 坐标设置在窗体中间。
Xpos = ScaleWidth / 2
'将 y 坐标设置在窗体中间。
Ypos = ScaleHeight / 2
'将半径设置在窗体高度的 0 到 50% 之间。
Radius = ((Ypos * 0.9) + 1) * Rnd
'用随机颜色画圆。
Circle (Xpos, Ypos), Radius, RGB(r, g, b)
End Sub
日历么,Weekday(date) DateSerial(y,m,d) year(date) month(date) day (date)这几个函数,百度一下用法也很简单了
Private Sub Form_Load()
Dim dat As Date, dat2 As Date, d As Long, w As Long
Dim i As Long, s As String
dat = DateSerial(Year(Date), Month(Date), 1)
If Month(Date) = 12 Then dat2 = DateSerial(Year(Date) + 1, 1, 1) Else dat2 = DateSerial(Year(Date), Month(Date) + 1, 1)
d = DateDiff("d", dat, dat2)
AutoRedraw = True
Print " 日 一 二 三 四 五 六"
w = Weekday(dat)
s = Space(3 * (w - 1))
For i = 1 To d
s = s &" " &IIf(i <10, "0", "") &i
w = w + 1
If w >7 Then
w = 1
Print s
s = ""
End If
Next
Print s
End Sub
Private Sub Form_Load()
With Label1
.Width = 1935 '宽度
.Height = 455 '高度
.BackColor = vbBlack '背景黑色
.ForeColor = vbGreen '文字绿色
.Alignment = 2 '文字居中
.FontBold = True '粗体显示
.FontSize = 20 '字体大小,还可以去下载个液晶字体设置一下FontName
.Caption = Time
End With
Timer1.Interval = 1000 '计时器间隔时间为1秒
End Sub
Private Sub Timer1_Timer()
Label1.Caption = Time
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1000
Timer2.Enabled = False
Timer2.Interval = 500
End Sub
Private Sub Timer1_Timer()
Label1.Caption = Time
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
If Not IsDate(Text1.Text) Then
MsgBox "时间格式错误,正确应为HH:MM:SS"
Else
Text1.Locked = True
Timer2.Enabled = True
End If
End If
End Sub
Private Sub Timer2_Timer()
Dim lTime As Integer
Static LblColor As Boolean
lTime = DateDiff("s", Time, Text1.Text)
If lTime <= 0 Then
If LblColor = True Then
Label1.BackColor = vbRed
LblColor = False
Else
Label1.BackColor = vbWhite
LblColor = True
End If
End If
End Sub
Explicit'添加
Line1
Line2
Line3
Timer1
Dim
xx1%,
yy1%
'宣告变量xx1,yy1为整型(给圆心用的)
Private
Sub
Form_Load()
Me.AutoRedraw
=
True
'重画为真
'窗体置中
Me.Move
(Screen.Width
-
Me.Width)
\
2,
(Screen.Height
-
Me.Height)
\
2
'计算圆心的x轴xx1
xx1
=
Me.Width
\
2
'计算圆心的y轴yy1
yy1
=
(Me.Height
-
405)
\
2
'将下面3根针的起点x1,y1全定位在圆心上
Line1.X1
=
xx1:
Line1.Y1
=
yy1
Line2.X1
=
xx1:
Line2.Y1
=
yy1
Line3.X1
=
xx1:
Line3.Y1
=
yy1
'画钟的外匡让线条粗一点
Me.DrawWidth
=
5
Me.ForeColor
=
vbRed
'画一个圆
Me.Circle
(xx1,
yy1),
50
Line2.BorderWidth
=
1
'秒针的粗度
Line2.BorderColor
=
QBColor(12)
'秒针的颜色
Line1.BorderWidth
=
2
'分针的粗度
Line1.BorderColor
=
QBColor(14)
'分针的颜色
Line3.BorderWidth
=
3
'时针的粗度
Line3.BorderColor
=
QBColor(10)
'时针的颜色
Timer1.Interval
=
500Call
ShowTimeEnd
Sub
Private
Sub
Timer1_Timer()
Call
ShowTime
End
SubPrivate
Sub
ShowTime()
Me.Caption
=
Time
'标题栏显示现在时间
'
Second
Hand
'画秒针
'计算秒针的角度,每一秒是
360度除以60秒=6度,
所以要乘上6
sdeg
=
Second(Time)
*
6
'vb是以弧度为单位来计算,所以角度换算弧度是
3.14/180,
秒针跑了N度就乘上N
srad
=
(3.14
/
180)
*
sdeg
'900是秒针的长度,以圆心(line2的x1,y1)为准,计算出在这个弧度时line2.x2在什么位置
Line2.X2
=
Line2.X1
+
(900
*
Sin(srad))
'900是秒针的长度,以圆心(line2的x1,y1)为准,计算出在这个弧度时line2.y2在什么位置
Line2.Y2
=
Line2.Y1
-
(900
*
Cos(srad))
'
Minute
Hand
'画分针
'计算分针的角度,每一分是360度除以60分=6度,
所以要乘上6,秒针动分针也会动,
'所以还要加上秒针移动所产生的分针移动.
'秒针转了1圈360度,分针才会前进1分钟=6度,所以比例是
6/360等于
1/60
Mdeg
=
Minute(Time)
*
6
+
(sdeg
*
1
/
60)
'vb是以弧度为单位来计算,所以角度换算弧度是
3.14/180,
分针跑了N度就乘上N
mrad
=
(3.14
/
180)
*
Mdeg
'vb是以弧度为单位来计算,所以角度换算弧度是
3.14/180,
分针跑了N度就乘上N
'750是分针的长度,以圆心(line1的x1,y1)为准,计算出在这个弧度时line1.x2在什么位置
Line1.X2
=
(750
*
Sin(mrad))
+
Line1.X1
'750是分针的长度,以圆心(line1的x1,y1)为准,计算出在这个弧度时line1.y2在什么位置
Line1.Y2
=
Line1.Y1
-
(750
*
Cos(mrad))
'
Hour
Hand
'画时针
'计算时针的角度,每一小时时针跑30度,分针动时针也会动,所以还要加上分针移动所产生的时针移动.
'分针转了1圈360度,时针才会前进1刻划=30度,所以比例是
30/360等于
1/12
hdeg
=
Hour(Time)
*
30
+
(Mdeg
/
12)
'vb是以弧度为单位来计算,所以角度换算弧度是
3.14/180,
时针跑了N度就乘上N
hrad
=
(3.14
/
180)
*
hdeg
'500是时针的长度,以圆心(line3的x1,y1)为准,计算出在这个弧度时line3.x2在什么位置
Line3.X2
=
(500
*
Sin(hrad))
+
Line3.X1
'500是时针的长度,以圆心(line3的x1,y1)为准,计算出在这个弧度时line3.y2在什么位置
Line3.Y2
=
Line3.Y1
-
(500
*
Cos(hrad))
End
Sub