若想做一个带表盘的时钟的话,刻度线该怎么画?表针一端每次移动的坐标该怎以样计算?(这可能牵涉到数字问题了)
请给予明晰思路及代码(至少关键部分的代码)

解决方案 »

  1.   

    VB设计动画时钟 程 序 名:Sec-Time.vbp
    程序类别:完整的VB程序
    功 能:显示一个动画时钟,该时针随着每一秒而动态变化。 程序说明  1.如何画时钟表盘上的所有直线元素?
      用Load命令建立原始Line控制的14个拷贝(因为表盘有12个点和时、分、秒共15个Line),该控制数组每一个实例的端点坐标属性设置为每条线在时钟表盘上的适当位置。这些拷贝中大多数只放置一次,而3个Line控制每秒钟更新一次,产生时钟指针移动的感觉。
      注意:在应用程序代码中并没有直接擦除任何一条线。当我们改变每一个Line控制的端点时,每一根针在移动时擦除和重画的所有技术工作都由VB来处理。  2.如何修改时针的形状?
      通过调整代码中的属性设置,可以改变时钟的形状。例如:通过改变每一个Line控制的Borderwidth属性设置,可以建立更细或更粗的线。  3.计时器的Interval(间距)属性设置
      计时器的Interval属性设置为100,即为1/10秒。程序的编写与执行  (1)新建工程
      先新建一个工程(工程类型为标准EXE),然后用“工具箱”中的工具加入一个Timer1(计时器)和line1(直线),其index(指针)分别设置为空和0。然后双击Form1窗体,输入源代码。  (2)程序源代码
      Option Explicit
      DefDbl A-Z
      Private Sub Form_Load()
      timer1.Interval = 100
      Width = 4000
      Height = 4000
      Left = Screen.Width \ 2 - 2000
      Top = (Screen.Height - Height) \ 2
      End Sub
      Private Sub Form_Resize()
      Dim i, Angle
      Static flag As Boolean
      If flag = False Then
        flag = True
      For i = 0 To 14
      ’画出表盘12个点和时、分、秒共15个LINE
        If i > 0 Then Load Line1(i)
        Line1(i).Visible = True
        Line1(i).BorderWidth = 5
        Line1(i).BorderColor = RGB(0, 128, 0) ’设置LINE的粗细和颜色
        Next i
       End If
      For i = 0 To 14
        Scale (-1, 1)-(1, -1)
        Angle = i * 2 * Atn(1) / 3
        Line1(i).X1 = 0.9 * Cos(Angle)
        Line1(i).Y1 = 0.9 * Sin(Angle)
        Line1(i).X2 = Cos(Angle)
        Line1(i).Y2 = Sin(Angle)
        Next i
       End Sub
      Private Sub timer1_Timer()
      Const HH = 0
      Const MH = 13
      Const SH = 14
      Dim Angle
      Static LS
      If Second(Now) = LS Then Exit Sub
      LS = Second(Now)
      Angle = 0.5236 * (15 - (Hour(Now) + Minute(Now) / 60))’设置时针
      Line1(HH).X1 = 0
      Line1(HH).Y1 = 0
      Line1(HH).X2 = 0.3 * Cos(Angle)
      Line1(HH).Y2 = 0.3 * Sin(Angle)
      Angle = 0.1047 * (75 - (Minute(Now) + Second(Now) / 60))’设置分针
      Line1(MH).X1 = 0
      Line1(MH).Y1 = 0
      Line1(MH).X2 = 0.7 * Cos(Angle)
      Line1(MH).Y2 = 0.7 * Sin(Angle)
      Angle = 0.5236 * (75 - Second(Now))
      ’设置秒针
      Line1(SH).X1 = 0
      Line1(SH).Y1 = 0
      Line1(SH).X2 = 0.8 * Cos(Angle)
      Line1(SH).Y2 = 0.8 * Sin(Angle)
      form1.Caption = Str(Now())
      '窗口显示精确的日期和数字化的时间
      End Sub  (3)程序的编译和执行
      点击VB“运行”菜单中的“启动”或“全面编译”命令,即可对程序编译并运行!
      注:上述程序在中文Windows 98和 VB5.0中文企业版下调试通过。 
      

  2.   

    http://www.dapha.net/down/download.asp?downid=1&id=205
      

  3.   

    Angle = 0.5236 * (75 - Second(Now)) 改为  Angle = 0.5236 * (75 - Second(Now)) / 5
    修改以下为你需要的就能限制大小了
     Left = Screen.Width \ 2 - 2000
        Top = (Screen.Height - Height) \ 2
      

  4.   

    Const DX = 3500
    Const DY = 2300
    Const PI = 3.1415926
    Private Sub Form_Load()
     Label1.Visible = False
     Dim i As Integer
     Shape1.Visible = False
     Linem.X1 = DX
     Linem.Y1 = DY
     Lines.X1 = DX
     Lines.Y1 = DY
     Lineh.X1 = DX
     Lineh.Y1 = DY
     Shape1.Left = DX - 2000
     Shape1.Top = DY - 2000
     Shape1.Width = 4000
     Shape1.Height = 4000
     img_hwid = Image1(0).Width / 2
     img_hheg = Image1(0).Height / 2
     Form1.Refresh
    End Sub
    Private Sub Form_Paint()
    Dim i As Integer
    Form1.DrawWidth = 4
    For i = 0 To 59
       If (i Mod 5) = 0 Then
           Form1.DrawWidth = 7
          Else
           Form1.DrawWidth = 4
       End If
        Form1.PSet (DX + 2000 * Cos((i - 60) * 2 * PI / 60 - PI / 2), DY + 2000 * Sin((i - 60) * 2 * PI / 60 - PI / 2))
    Next i
    End Sub
    Private Sub Timer1_Timer()
    Dim h As Integer, s As Integer, mm As Integer
    s = Second(Time) '秒
    mm = Minute(Time) '分
    h = Hour(Time) '时
    If h >= 12 Then h = h - 12
    Lineh.X2 = 800 * Cos((h - 12) * 2 * PI / 12 - PI / 2) + DX
    Lineh.Y2 = 800 * Sin((h - 12) * 2 * PI / 12 - PI / 2) + DY
    Lines.X2 = 1300 * Cos((s - 60) * 2 * PI / 60 - PI / 2) + DX
    Lines.Y2 = 1300 * Sin((s - 60) * 2 * PI / 60 - PI / 2) + DY
    Linem.X2 = 1000 * Cos((mm - 60) * 2 * PI / 60 - PI / 2) + DX
    Linem.Y2 = 1000 * Sin((mm - 60) * 2 * PI / 60 - PI / 2) + DY
    End Sub窗体上放一个shape控件,三个line控件,name属性见程序
      

  5.   

    danielinbiti(金) :
    谢谢你的答案,不过调试的时候有点小问题,帮忙解答一下:
    1. img_hwid = Image1(0).Width / 2
       img_hheg = Image1(0).Height / 2 这两句出现问题,我也看不懂是什么意思
    2. label1在此处是起什么作用?
      

  6.   

    那几句删了,是我附加功能里用的,label1也没用,也是附加功能里的,
    程序中我删除了附加功能:(