在平常生活当中,闹钟的指针是按照顺时针方向旋转的,如何实现指针按照系统时间而像现实当中那样随着时间而旋转??

解决方案 »

  1.   

    用Timer控件,每隔一秒重画一条线而已
      

  2.   

    VERSION 5.00
    Begin VB.Form Form1 
       Appearance      =   0  'Flat
       BackColor       =   &H80000005&
       Caption         =   "日历表"
       ClientHeight    =   4080
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   6375
       LinkTopic       =   "Form1"
       ScaleHeight     =   4080
       ScaleWidth      =   6375
       StartUpPosition =   3  '窗口缺省
       Begin VB.Timer Timer1 
          Left            =   240
          Top             =   360
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    Dim sngCX As Single, sngCY As Single '重置坐标
    Dim blnBeginFlag As Boolean          '是否初次
    Dim sngRClock As Single              '时钟半径
    Dim intPreHr As Integer              '前次小时
    Dim intPreMin As Integer             '前次分
    Dim intPreX As Integer               '前次秒
    Dim intPreY As Integer               '前次分
    Dim sngHLen As Single                '时针长
    Dim sngMLen As Single                '分针长
    Dim sngSLen As Single                '秒针长
    Const pi = 3.1415926
    Sub DrawClock()               '画表盘的子程序
        Dim intI As Integer
        Dim sngX As Single, sngY As Single
        Circle (0, 0), sngRClock         '时钟外圆
        For intI = 0 To 60               '时钟刻度
            sngX = (sngRClock - 50) * Sin(intI * pi / 30)
            sngY = (sngRClock - 50) * Cos(intI * pi / 30)
            If (intI Mod 5) = 0 Then     '绘主刻度
                DrawWidth = 4
                PSet (sngX, sngY)
            Else                         '绘次刻度
                DrawWidth = 2
                PSet (sngX, sngY)
            End If
        Next intI
        DrawWidth = 1
    '建立打印日期和星期的矩形框
        Line (0.3 * sngRClock, 100)-(0.9 * sngRClock, -100) _
                                                        , , B
        Line (0.7 * sngRClock, 100)-(0.7 * sngRClock, -100)
        FillStyle = 0                '填充
        FillColor = vbBlack          '黑色
        Circle (0, 0), 70            '画中心的小圆
    End Sub
    Private Sub Form_Load()
        Timer1.Interval = 1000
        Form1.AutoRedraw = True     '窗体改变后可重绘
        sngCX = ScaleWidth / 2
        sngCY = ScaleHeight / 2
    '使窗口中心为(0,0)
        Scale (-sngCX, sngCY)-(sngCX, -sngCY)
        blnBeginFlag = True
        sngRClock = 1500                     '时钟半径
        sngHLen = sngRClock * 0.6            '时针长
        sngMLen = sngRClock * 0.8            '分针长
        sngSLen = sngRClock * 0.9            '秒针长
    End Sub
    Private Sub Timer1_Timer()
        Dim intX As Integer, intY As Integer
        Dim intHr As Integer, intMin As Integer
        Dim intSec As Integer
        Dim sngH As Single
        Dim vntBlack, vntGray
    '初次执行需绘表盘
        If blnBeginFlag = True Then
            DrawClock
        End If
    '填写日期和星期
        CurrentX = 0.7 * sngRClock
        CurrentY = 80
        Print Day(Now)                  '日期
        CurrentX = 0.35 * sngRClock
        CurrentY = 80
        Print WeekdayName(Weekday(Now)) '星期
        intHr = Hour(Now)
        intHr = intHr Mod 12          '使小时在0-11之间
        intMin = Minute(Now)          '取得分
        DrawWidth = 3                 '时针和分针宽度
        vntBlack = vbBlack            '黑色时针及分针
        If blnBeginFlag = True Then
            DrawMode = 13             'CopyPen绘图模式
            sngH = intHr * 5 + intMin / 12
            intX = sngHLen * Sin(sngH * pi / 30)
            intY = sngHLen * Cos(sngH * pi / 30)
            intPreHr = intHr
            Line (0, 0)-(intX, intY), vntBlack  '绘时针
            intX = sngMLen * Sin(intMin * pi / 30)
            intY = sngMLen * Cos(intMin * pi / 30)
            Line (0, 0)-(intX, intY), vntBlack  '绘分针
            intPreMin = intMin
        End If
        If intPreMin <> intMin Then   '如果分针改变
            DrawMode = 10             'NotXorPen绘图模式
            sngH = intPreHr * 5 + intPreMin / 12
            intX = sngHLen * Sin(sngH * pi / 30)
            intY = sngHLen * Cos(sngH * pi / 30)
            Line (0, 0)-(intX, intY), vntBlack  '清除旧时针
            intX = sngMLen * Sin(intPreMin * pi / 30)
            intY = sngMLen * Cos(intPreMin * pi / 30)
            Line (0, 0)-(intX, intY), vntBlack  '清除旧分针
            DrawMode = 13             'CopyPen绘图模式
            sngH = intHr * 5 + intMin / 12
            intX = sngHLen * Sin(sngH * pi / 30)
            intY = sngHLen * Cos(sngH * pi / 30)
            intPreHr = intHr
            Line (0, 0)-(intX, intY), vntBlack  '绘新时针
            intX = sngMLen * Sin(intMin * pi / 30)
            intY = sngMLen * Cos(intMin * pi / 30)
            Line (0, 0)-(intX, intY), vntBlack  '绘新分针
            intPreMin = intMin
        End If
        intSec = Second(Now)                    '取得秒
        intX = sngSLen * Sin(intSec * pi / 30)
        intY = sngSLen * Cos(intSec * pi / 30)
        DrawWidth = 1
        DrawMode = 10                 'NotXorPen绘图模式
        vntGray = QBColor(8)          '灰色秒针
        Line (0, 0)-(intPreX, intPreY), vntGray
        Line (0, 0)-(intX, intY), vntGray '绘新秒针
        intPreX = intX
        intPreY = intY
        blnBeginFlag = False              '已经执行过该程序
    End Sub
      

  3.   

    谢谢楼上的各位帮助,分我会照给的,但现在我想问一下为什么VERSION 5.00到了VB里面就变成VERSION 5#
      

  4.   

    为什么VB会说Begin VB.Form Form1 没有结束语句呢?