加入收藏  广告服务  关于我们
 2008-3-10

用VB做出漩涡状的跟随鼠标运动的时钟——Active Clock

发表:gongjie852   阅读:次  关键字:vb .net 控件   字体:[ ]

曾经在Java看见过一个漩涡状的跟随鼠标运动的时钟,它同样能在VB.net的工程里实现!它能快速的运用,但是我还是不断的在完善它。我想要他能运行在不同的控件里和不同的线程模式里。不断的调试更新,我感谢任何的注释和改进。

 [构造,析构]

Public Sub New(ByVal ParentForm As Form)
        Me.Parent = ParentForm
        InitArrays()
        ClockThread.Start()
        'StartTimer()

    End Sub
    Public Sub Dispose()
        ClockThread.Abort()
        'StopTimer()

        Application.DoEvents()
        KillObjects()
    End Sub

 [画表] 

Sub DrawClock()
        Dim sec As Single = -1.57 + Math.PI * Now.Second / 30
        Dim min As Single = -1.57 + Math.PI * Now.Minute / 30
        Dim hrs As Single = -1.575 + Math.PI * Now.Hour / 6 + Math.PI * (Now.Minute / 360)
        Dim i As Integer
        For i = 0 To D.Length - 1
            DObj(i).Top = Dy1(i) + ClockHeight * 1.5 * Math.Sin(CurStep + i * Dsplit * Math.PI / 180) + scrll
            DObj(i).Left = Dx1(i) + ClockWidth * 1.5 * Math.Cos(CurStep + i * Dsplit * Math.PI / 180)
            'DObj(i).Invalidate()

            'Parent.Invalidate(New Rectangle(DObj(i).Left, DObj(i).Top, DObj(i).Width, DObj(i).Height))

            'DObj(i).BringToFront()

        Next i
        For i = 0 To H.Length - 1
            HObj(i).Top = Fy1(i) + HandY + (i * HandHeight) * Math.Sin(hrs) + scrll
            HObj(i).Left = Fx1(i) + HandX + (i * HandWidth) * Math.Cos(hrs)
            'HObj(i).Invalidate()

            'Parent.Invalidate(New Rectangle(HObj(i).Left, HObj(i).Top, HObj(i).Width, HObj(i).Height))

            'HObj(i).BringToFront()

        Next
        For i = 0 To M.Length - 1
            MObj(i).Top = Fy1(i) + HandY + (i * HandHeight) * Math.Sin(min) + scrll
            MObj(i).Left = Fx1(i) + HandX + (i * HandWidth) * Math.Cos(min)
            'MObj(i).Invalidate()

            'Parent.Invalidate(New Rectangle(MObj(i).Left, MObj(i).Top, MObj(i).Width, MObj(i).Height))

            'MObj(i).BringToFront()

        Next
        For i = 0 To S.Length - 1
            SObj(i).Top = Fy1(i) + HandY + (i * HandHeight) * Math.Sin(sec) + scrll
            SObj(i).Left = Fx1(i) + HandX + (i * HandWidth) * Math.Cos(sec)
            'SObj(i).Invalidate()

            'Parent.Invalidate(New Rectangle(SObj(i).Left, SObj(i).Top, SObj(i).Width, SObj(i).Height))

            'SObj(i).BringToFront()

        Next
        For i = 0 To F.Length - 1
            FObj(i).Top = Fy1(i) + ClockHeight * Math.Sin(-1.0471 + i * Split * Math.PI / 180) + scrll
            FObj(i).Left = Fx1(i) + ClockWidth * Math.Cos(-1.0471 + i * Split * Math.PI / 180)
            'FObj(i).Invalidate()

            'Parent.Invalidate(New Rectangle(FObj(i).Left, FObj(i).Top, FObj(i).Width, FObj(i).Height))

            'FObj(i).BringToFront()

        Next
        Try
            CurStep -= ClockStep
        Catch ex As Exception
            'we over-flowed the counter!

            CurStep = 0
        End Try
    End Sub

 [表的事件函数和鼠标位置的获得] 

Sub ClockEvent()
        CaptureMouse()
        Dim i As Integer
        Dy2(0) += ((ymouse) - Dy2(0)) * speed
        Dy1(0) = Math.Round(Dy2(0))
        Dx2(0) += ((xmouse) - Dx2(0)) * speed
        Dx1(0) = Math.Round(Dx2(0))
        For i = 1 To D.Length - 1
            Dy2(i) += (Dy1(i - 1) - Dy2(i)) * speed
            Dy1(i) = Math.Round(Dy2(i))
            Dx2(i) += (Dx1(i - 1) - Dx2(i)) * speed
            Dx1(i) = Math.Round(Dx2(i))
        Next
        Fy2(0) += ((ymouse) - Fy2(0)) * speed
        Fy1(0) = Math.Round(Fy2(0))
        Fx2(0) += ((xmouse) - Fx2(0)) * speed
        Fx1(0) = Math.Round(Fx2(0))
        For i = 1 To F.Length - 1
            Fy2(i) += (Fy1(i - 1) - Fy2(i)) * speed
            Fy1(i) = Math.Round(Fy2(i))
            Fx2(i) += (Fx1(i - 1) - Fx2(i)) * speed
            Fx1(i) = Math.Round(Fx2(i))
        Next
        DrawClock()
        Parent.Refresh()
        ClockEvent()
    End Sub
    Sub CaptureMouse()
        GetCursorPos(mPos)
        xmouse = mPos.X - Parent.Left + ClockFromMouseX
        ymouse = mPos.Y - Parent.Top + ClockFromMouseY
    End Sub

 热门文章
 推荐信息