Private Enum ModoIluminado
LUM_HORARIO = 0
LUM_ANTI_HORARIO = 1
LUM_PARAPDEO = 2
End Enum
Private Const Encendido = vbRed ' color del led encendido
Private Const Apagado = &HC0C0FF ' color del led apagado
Private Ilumina As ModoIluminado ' modo en que se iluminan los leds
Private LedActual As Byte ' led que se enciende actualmente
Private Sub Form_Load()
Dim k As Single, x As Single, y As Single
Dim radian As Single
Dim resp As VbMsgBoxResult
' mostramos el formulario para ir viendo (si vamos paso a paso) como se realizan estas acciones.
Me.Show
' damos forma al shape
With ShaLed(0)
.Move .Width, .Height
.FillStyle = 0 ' sólido
.FillColor = Apagado
.Shape = 3 ' círculo
End With
' Cramos dinámicamente los otros 11 leds...
For k = 1 To 11
Load ShaLed(k)
ShaLed(k).Move ShaLed(k - 1).Left + ShaLed(k).Width
ShaLed(k).Visible = True
Next
' aseguramos unas medidas y dividimos el form. en 4 cuadrantes de 120 partes cada una
Me.ScaleMode = vbPixels
Me.Width = ScaleX(640, vbPixels, vbTwips)
Me.Height = Me.Width
Me.Scale (-120, -120)-(120, 120)
' centramos el frame..
Frame1.Move -Frame1.Width / 2, -Frame1.Height / 2
' posicionamos los leds en círculo respecto del centro (cordenada 0,0
For k = 0 To 11
radian = 6.28 / 12 * k
x = Cos(radian) * 60 + Sin(radian) * 60
y = Cos(radian) * 60 - Sin(radian) * 60
ShaLed(k).Move x - 15, y - 15
Next
TimLed.Interval = 100 ' un tiempo que permita apreciar el cambio.
LedActual = 0
resp = InputBox("Elija el modo inicial de iluminación:" & vbCrLf & "0 : Iluminación en sentido horario." & vbCrLf & "1 : Iluminación en sentido antihorario." & vbCrLf & "2 : Iluminación parpadeante alterna." & vbCrLf & "cualquier otra plsación se interpreta como 0", "Iniciamos, la iluminación de los leds...", "0")
If resp < 1 Or resp > 2 Then resp = 0
' desactivamos previamente toodas las opciones, para que al activar uno, se invoque la rutina...
For k = 0 To 2
Option1(k).Value = False
Next
Option1(CInt(resp)).Value = True
End Sub
Private Sub Option1_Click(Index As Integer)
Dim k As Byte
' 1º apagamos el timer
TimLed.Enabled = False
' 2º marcamos el modo de iluminación
Ilumina = Index
' 3º apagamos todos los leds.
For k = 0 To 11
ShaLed(k).FillColor = Apagado
Next
' hacemos que el led actual sea el primero, el 0
LedActual = 0
' 4º ponemos en marcha el nuevo modo de iluminación
TimLed.Enabled = True
End Sub
' aquí se ejecuta todo
Private Sub TimLed_Timer()
Dim anterior As Byte
If Ilumina = LUM_HORARIO Then
' 1º marcamos el que ahora está encendido para apagarlo
If LedActual = 11 Then
anterior = 0
Else
anterior = LedActual + 1
End If
' 2º lo apagamos
ShaLed(anterior).FillColor = Apagado
' 3º marcamos el siguiente para encenderse
If LedActual > 0 Then
LedActual = LedActual - 1
Else
LedActual = 11
End If
' 4º lo encendemos
ShaLed(LedActual).FillColor = Encendido
ElseIf Ilumina = LUM_ANTI_HORARIO Then
' 1º marcamos el que ahora está encendido para apagarlo
If LedActual = 0 Then
anterior = 11
Else
anterior = LedActual - 1
End If
' 2º lo apagamos
ShaLed(anterior).FillColor = Apagado
' 3º marcamos el siguiente para encenderse
If LedActual < 11 Then
LedActual = LedActual + 1
Else
LedActual = 0
End If
' 4º lo encendemos
ShaLed(LedActual).FillColor = Encendido
Else
anterior = LedActual
LedActual = (LedActual + 1) Mod 2
For k = 0 To 10 Step 2
ShaLed(k + anterior).FillColor = Apagado
ShaLed(k + LedActual).FillColor = Encendido
Next
End If
End Sub