建材秒知道
登录
建材号 > 设计 > 正文

vb中怎样做出时钟

坚强的枕头
愤怒的曲奇
2023-03-07 16:31:37

vb中怎样做出时钟?

最佳答案
不安的宝贝
踏实的缘分
2025-08-28 01:35:19

VB可使用Timer控件、Line控件和绘图或加载图片等制作指针式时钟。

Timer 控件,通过引发 Timer 事件,Timer 控件可以有规律地隔一段时间执行一次代码。

Line 控件,Line 控件是图形控件,它显示水平线、垂直线或者对角线。

运行时不能使用 Move 方法移动 Line 控件,但是可以通过改变 X1、X2、Y1 和 Y2

属性来移动它或者调整它的大小。

Circle 方法,在对象上画圆、椭圆或弧。

以下是通过加载图片的指针式时钟代码:

Option Explicit

    Private 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

最新回答
酷炫的柠檬
粗心的小笼包
2025-08-28 01:35:19

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

疯狂的帅哥
优美的寒风
2025-08-28 01:35:19

提供个做好钟的代码,自己修改为适合给出图片的效果。

Option Explicit

    Dim 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

无心的鱼
深情的水壶
2025-08-28 01:35:19
时钟简单, hour(time) Minute(time) second(time)很容易取得时间,然后就是怎么显示的问题

日历么,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

着急的宝马
迷人的眼神
2025-08-28 01:35:19
'用一个标签控件和一个计时器控件简单的模拟一下

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

无辜的美女
义气的绿草
2025-08-28 01:35:19
label字体什么的自己改吧,主要功能实现了

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

干净的高山
体贴的火
2025-08-28 01:35:19
'Option

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