How can I draw an analog clock?
AtDhVaAnNkCsE
Printable View
How can I draw an analog clock?
AtDhVaAnNkCsE
Take a look at http://www.planet-source-code.com's search results.
Try something like:Code:Private sngRadius As Single
Private sngCX As Single
Private sngCY As Single
Private Const pi = 3.14
Private Sub Form_Paint()
Form_Resize
End Sub
Private Sub Form_Resize()
Dim sngAngle As Single
Dim lHour As Long, lMin As Long
Timer1.Enabled = False
Cls
DoEvents
sngCX = ScaleWidth / 2
sngCY = ScaleHeight / 2
sngRadius = sngCX - 1000
Me.DrawWidth = 2
Me.FillColor = vbWhite
Me.FillStyle = vbSolid
Me.Circle (sngCX, sngCY), sngRadius
For lHour = 0 To 11
sngAngle = (lHour * 30) * (pi / 180)
Me.Line (sngCX + (Sin(sngAngle) * (sngRadius - 90)), sngCY + (-Cos(sngAngle) * (sngRadius - 90)))-Step(Sin(sngAngle) * 100, -Cos(sngAngle) * 100), vbBlack
Next
Me.DrawWidth = 1
For lMin = 0 To 59
sngAngle = (lMin * 6) * (pi / 180)
Me.Line (sngCX + (Sin(sngAngle) * (sngRadius - 50)), sngCY + (-Cos(sngAngle) * (sngRadius - 50)))-Step(Sin(sngAngle) * 50, -Cos(sngAngle) * 50), vbBlack
Next
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Static sngSecAng As Single, sngHrAng As Single, sngMinAng As Single
Dim sngMnX As Single, sngMnY As Single
Dim sngHrX As Single, sngHrY As Single
Dim sngScX As Single, sngScY As Single
Dim sngAngle As Single, sngMilli As Single
Dim lSecs As Long, lMin As Long, lHr As Long
Timer1.Enabled = False
Me.DrawWidth = 1
sngMilli = Timer
lSecs = CLng(Format(Time, "S"))
lMin = CLng(Format(Time, "N"))
lHr = CLng(Format(Time, "H"))
sngAngle = (CSng(lSecs + (sngMilli - Int(sngMilli))) * 6) * (pi / 180)
sngScX = Sin(sngSecAng) * (sngRadius - 100)
sngScY = Cos(sngSecAng) * (sngRadius - 100)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbWhite
sngScX = Sin(sngAngle) * (sngRadius - 100)
sngScY = Cos(sngAngle) * (sngRadius - 100)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbRed
sngSecAng = sngAngle
sngAngle = ((CSng(lMin) + (lSecs / 60)) * 6) * (pi / 180)
sngScX = Sin(sngMinAng) * (sngRadius - 100)
sngScY = Cos(sngMinAng) * (sngRadius - 100)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbWhite
sngScX = Sin(sngAngle) * (sngRadius - 100)
sngScY = Cos(sngAngle) * (sngRadius - 100)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbBlue
sngMinAng = sngAngle
sngAngle = ((CSng(lHr) + (lMin / 60)) * 30) * (pi / 180)
sngScX = Sin(sngHrAng) * (sngRadius / 3 * 2)
sngScY = Cos(sngHrAng) * (sngRadius / 3 * 2)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbWhite
sngScX = Sin(sngAngle) * (sngRadius / 3 * 2)
sngScY = Cos(sngAngle) * (sngRadius / 3 * 2)
Me.Line (sngCX, sngCY)-Step(sngScX, -sngScY), vbBlack
sngHrAng = sngAngle
Timer1.Enabled = True
End Sub