Results 1 to 3 of 3

Thread: Clock draw

  1. #1

    Thread Starter
    Addicted Member
    Join Date
    Jul 2000
    Location
    Novi Sad, Serbia and Montenegro (formerly known as Yugoslavia)
    Posts
    148

    Question

    How can I draw an analog clock?
    AtDhVaAnNkCsE
    ( : ns-code : )
    FCP Products

  2. #2

  3. #3
    Guru Aaron Young's Avatar
    Join Date
    Jun 1999
    Location
    Red Wing, MN, USA
    Posts
    2,177
    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

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width