|
2008-3-10
用VB做出漩涡状的跟随鼠标运动的时钟——Active Clock曾经在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
热门文章
推荐信息
|