	

    Imports System.ComponentModel
    Imports System.Threading
     
    <DefaultEvent("Tick")> _
    Public Class FastTimer
        Inherits System.ComponentModel.Component
     
        Public Event Tick(ByVal e As Integer)
        Public Event LetterTick(letter As String)
     
        Private _started As Boolean = False
     
        Public Property Speed As State = State.Fastest
     
        Public Property CountStyle As CountStyleState = CountStyleState.Up
     
        Public Property CountValueType As CountValueState
     
        Public Enum State
            Fastest = 0
            Fast = 1
            Normal = 2
            Slow = 3
            Slowest = 4
        End Enum
     
        Public Enum CountValuestate
            Numbers
            Letters
        End Enum
     
        Public Enum CountStyleState
            Up = 0
            Down = 1
        End Enum
     
        Public Sub [Stop]()
            _started = False
            ticks = 0
        End Sub
     
        Public Sub Enable()
            _started = True
        End Sub
     
        Public Property Interval As Integer = 1
     
     
        Dim ticks As Integer = 0
        Dim Cletter As Letter = Letter.Z
        Public Sub Start()
            While (_started)
                If CountValueType = CountValuestate.Numbers Then
                    If CountStyle = CountStyleState.Up Then
                        ticks += 1 + Interval
                    ElseIf CountStyle = CountStyleState.Down Then
                        ticks -= 1 + Interval
                    End If
                    checkstate(Speed)
                    RaiseEvent Tick(ticks)
                Else
                    If CountStyle = CountStyleState.Up Then
                        checkletter()
                        checkstate(Speed)
                        RaiseEvent LetterTick([Enum].GetName(GetType(Letter), Cletter))
                    End If
                End If
            End While
        End Sub
     
        Sub checkletter()
            Select Case Cletter
                Case Letter.A
                    Cletter = Letter.B
                Case Letter.B
                    Cletter = Letter.C
                Case Letter.C
                    Cletter = Letter.D
                Case Letter.D
                    Cletter = Letter.E
                Case Letter.E
                    Cletter = Letter.F
                Case Letter.F
                    Cletter = Letter.G
                Case Letter.G
                    Cletter = Letter.H
                Case Letter.H
                    Cletter = Letter.I
                Case Letter.I
                    Cletter = Letter.J
                Case Letter.J
                    Cletter = Letter.K
                Case Letter.K
                    Cletter = Letter.L
                Case Letter.L
                    Cletter = Letter.M
                Case Letter.M
                    Cletter = Letter.N
                Case Letter.N
                    Cletter = Letter.O
                Case Letter.O
                    Cletter = Letter.P
                Case Letter.P
                    Cletter = Letter.Q
                Case Letter.Q
                    Cletter = Letter.R
                Case Letter.R
                    Cletter = Letter.S
                Case Letter.S
                    Cletter = Letter.T
                Case Letter.T
                    Cletter = Letter.U
                Case Letter.U
                    Cletter = Letter.V
                Case Letter.V
                    Cletter = Letter.W
                Case Letter.W
                    Cletter = Letter.X
                Case Letter.X
                    Cletter = Letter.Y
                Case Letter.Y
                    Cletter = Letter.Z
                Case Letter.Z
                    Cletter = Letter.A
            End Select
            Application.DoEvents()
        End Sub
     
        Sub checkstate(ByVal states As State)
            Select Case states
                Case State.Fastest
                    Thread.Sleep(0)
                Case State.Fast
                    Thread.Sleep(100)
                Case State.Normal
                    Thread.Sleep(1000)
                Case State.Slow
                    Thread.Sleep(10000)
                Case State.Slowest
                    Thread.Sleep(100000)
                Case Else
                    Thread.Sleep(0)
            End Select
            Application.DoEvents()
        End Sub
     
        Public Enum Letter
            A
            B
            C
            D
            E
            F
            G
            H
            I
            J
            K
            L
            M
            N
            O
            P
            Q
            R
            S
            T
            U
            V
            W
            X
            Y
            Z
        End Enum
     
    End Class

