Sie sind auf Seite 1von 10

Ejercicios

de Visual Basic

Reloj Analgico
Roberto Priegue

17/08/2013

Ejercicios de Visual Basic


1. Ejercicio: Reloj Analgico
Este ejercicio se propone como aplicacin directa del ejercicio anterior Indicador Circular,
solo que en este caso se aaden dos indicadores ms. En resumen, esta aplicacin cuenta con un
indicador para las horas, otro para los minutos y otro para los segundos.
Tambin se ha incluido un reloj analgico para identificar de una manera directa la hora
exacta del sistema.
En esta ocasin, el ngulo con el que se representa el indicador no est directamente
relacionada con el valor entregado por el usuario (en el ejercicio Indicador Circular el valor era
exactamente el ngulo del indicador). Para las horas, el indicador deber representarse en 12
posiciones diferentes a lo largo de la circunferencia, mientras que para los indicadores de minutos
y segundos, la circunferencia tendr que dividirse en 60 posiciones diferentes.
A travs del MenuStrip, el usuario podr configurar la apariencia de la aplicacin, pudiendo
modificar dos aspectos, por un lado el color y por el otro la visualizacin. Con el primero, podr
cambiar el color de las agujas y el color de fondo del reloj analgico. Con el segundo, el usuario
podr decidir si mostrar o no el reloj digital o los nmeros del reloj analgico.

1.1 Aplicacin

Roberto Priegue

Ejercicios de Visual Basic

1.2 Cdigo
1.2.1 Formulario Principal
Public Class Form1
Function getAngulo(ByVal valor As Double, ByVal isH As Boolean)
Dim Rdo As Double
If isH Then
valor = valor * 720.0 / 24.0
Else
valor = valor * 360 / 60
End If
Rdo = ConverGtoR(valor 90)
Return Rdo
End Function
'Cdigo que devuelve el punto final de la lnea indicadora
Function getPoint(ByVal IsH As Boolean, ByVal Angulo As Double)
Dim Rdo As Point
Dim x As Integer
Dim y As Integer
If IsH Then
x = LS_Minutos.StartPoint.X
y = LS_Minutos.StartPoint.Y
Else
x = LS_Minutos.StartPoint.X
y = LS_Minutos.StartPoint.Y
End If

+ getPosX(30, Angulo)
+ getPosY(30, Angulo)
+ getPosX(50, Angulo)
+ getPosY(50, Angulo)

Roberto Priegue

Ejercicios de Visual Basic


Rdo = New Point(x, y)
Return Rdo
End Function
'Funcin que devuelve el valor que debe tener X
Function getPosX(ByVal hipotenusa As Double, ByVal angulo As Double)
Dim Rdo As Double
Rdo = Math.Cos(angulo) * hipotenusa
Return Rdo
End Function
'Funcin que devuelve el valor que debe tener Y
Function getPosY(ByVal hipotenusa As Double, ByVal angulo As Double)
Dim Rdo As Double
Rdo = Math.Sin(angulo) * hipotenusa
Return Rdo
End Function
'Funcin que convierte Grados a Radianes
Function ConverGtoR(ByVal Grados As Double)
Dim Rdo As Double
Rdo = Grados * Math.PI / 180
Return Rdo
End Function
'Cdigo que se ejecuta al cargar el formulario principal
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Timer_Segundo.Enabled = True
ActualizarRelojAnalogico()
ActualizarRelojDigital()
End Sub
'Cdigo que se ejecuta cada segundo
Private Sub Timer_Segundo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer_Segundo.Tick
ActualizarRelojAnalogico()
ActualizarRelojDigital()
End Sub
'Funcin que visualiza/oculta los nmeros del reloj
Sub VisualizarNumeros()
Static Visibles_OnOff As Boolean
If Visibles_OnOff Then

Roberto Priegue

Ejercicios de Visual Basic


Lb_1.Visible = True
Lb_2.Visible = True
Lb_3.Visible = True
Lb_4.Visible = True
Lb_5.Visible = True
Lb_6.Visible = True
Lb_7.Visible = True
Lb_8.Visible = True
Lb_9.Visible = True
Lb_10.Visible = True
Lb_11.Visible = True
Lb_12.Visible = True
MS_Configuracion_Numeros.Checked = True
Visibles_OnOff = Not (Visibles_OnOff)
Else
Lb_1.Visible = False
Lb_2.Visible = False
Lb_3.Visible = False
Lb_4.Visible = False
Lb_5.Visible = False
Lb_6.Visible = False
Lb_7.Visible = False
Lb_8.Visible = False
Lb_9.Visible = False
Lb_10.Visible = False
Lb_11.Visible = False
Lb_12.Visible = False
MS_Configuracion_Numeros.Checked = False
Visibles_OnOff = Not (Visibles_OnOff)
End If
End Sub
'Cdigo que se ejecuta al pulsar la opcin de visualizar/ocultar del men
Private Sub MS_Configuracion_Numeros_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MS_Configuracion_Numeros.Click
VisualizarNumeros()
End Sub
'Funcin que visualiza/oculta los nmeros del reloj
Sub VisualizarDigital()
Static Visible_OnOff As Boolean
If Visible_OnOff Then
Lb_Hora.Visible = True
Lb_Minutos.Visible = True
Lb_Segundos.Visible = True
Label2.Visible = True
Label3.Visible = True
RS_Digital.Visible = True
MS_Configuracion_Digital.Checked = True
Visible_OnOff = Not (Visible_OnOff)
Else
Lb_Hora.Visible = False
Lb_Minutos.Visible = False
Lb_Segundos.Visible = False
Label2.Visible = False

Roberto Priegue

Ejercicios de Visual Basic


Label3.Visible = False
RS_Digital.Visible = False
MS_Configuracion_Digital.Checked = False
Visible_OnOff = Not (Visible_OnOff)
End If
End Sub
'Funcin que actualiza el reloj digital de la aplicacin
Sub ActualizarRelojDigital()
Lb_Hora.Text = getHora()
Lb_Minutos.Text = getMinutos()
Lb_Segundos.Text = getSegundos()
End Sub
'Funcin que actualiza el reloj analgico de la aplicacin
Sub ActualizarRelojAnalogico()
Dim anguloH As Double
Dim anguloM As Double
Dim anguloS As Double
anguloH = getAngulo(Now.TimeOfDay.Hours, True)
anguloM = getAngulo(Now.TimeOfDay.Minutes, False)
anguloS = getAngulo(Now.TimeOfDay.Seconds, False)
LS_Horas.EndPoint = getPoint(True, anguloH)
LS_Minutos.EndPoint = getPoint(False, anguloM)
LS_Segundos.EndPoint = getPoint(False, anguloS)
End Sub
'Funcin que devuelve la hora del reloj del sistema
Function getHora()
Dim rdo As String
Dim numero As Integer
numero = Now.TimeOfDay.Hours
If numero < 10 Then
rdo = "0" + numero.ToString
Else
rdo = numero.ToString
End If
Return rdo
End Function
'Funcin que devuelve los minutos del reloj del sistema
Function getMinutos()
Dim rdo As String
Dim numero As Integer
numero = Now.TimeOfDay.Minutes
If numero < 10 Then
rdo = "0" + numero.ToString
Else
rdo = numero.ToString
End If
Return rdo

Roberto Priegue

Ejercicios de Visual Basic


End Function
'Funcin que devuelve los segundos del reloj del sistema
Function getSegundos()
Dim rdo As String
Dim numero As Integer
numero = Now.TimeOfDay.Seconds
If numero < 10 Then
rdo = "0" + numero.ToString
Else
rdo = numero.ToString
End If
Return rdo
End Function
'Cdigo que se ejecuta cuando se pulsa la opcin ocultar/visualizar el reloj digital
Private Sub RelojDigitalToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MS_Configuracion_Digital.Click
VisualizarDigital()
End Sub
'Cdigo que se ejecuta al seleccionar un color para el minutero
Private Sub RojoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MS_Minuto_Verde.Click, MS_Minuto_Rojo.Click, MS_Minuto_Negro.Click,
MS_Minuto_Azul.Click
If sender.Equals(MS_Minuto_Azul) Then
LS_Minutos.BorderColor = getColor(2)
CheckColorMin(2)
ElseIf sender.Equals(MS_Minuto_Negro) Then
LS_Minutos.BorderColor = getColor(1)
CheckColorMin(1)
ElseIf sender.Equals(MS_Minuto_Rojo) Then
LS_Minutos.BorderColor = getColor(3)
CheckColorMin(3)
ElseIf sender.Equals(MS_Minuto_Verde) Then
LS_Minutos.BorderColor = getColor(4)
CheckColorMin(4)
End If
End Sub
'Funcin que devuelve un color segn un nmero de entrada
Function getColor(ByVal num As Integer)
Dim Rdo As Color
Select Case num
Case 1
Rdo = Color.Black
Case 2
Rdo = Color.Blue
Case 3
Rdo = Color.Red
Case 4

Roberto Priegue

Ejercicios de Visual Basic


Rdo
Case 5
Rdo
Case 6
Rdo
Case 7
Rdo

= Color.Green
= Color.BlanchedAlmond
= Color.Lavender
= Color.WhiteSmoke

End Select
Return Rdo
End Function
'Gestiona el marcado de la opcin de color del minutero
Sub CheckColorMin(ByVal num As Integer)
Select Case num
Case 1
MS_Minuto_Negro.Checked = True
MS_Minuto_Azul.Checked = False
MS_Minuto_Rojo.Checked = False
MS_Minuto_Verde.Checked = False
Case 2
MS_Minuto_Negro.Checked = False
MS_Minuto_Azul.Checked = True
MS_Minuto_Rojo.Checked = False
MS_Minuto_Verde.Checked = False
Case 3
MS_Minuto_Negro.Checked = False
MS_Minuto_Azul.Checked = False
MS_Minuto_Rojo.Checked = True
MS_Minuto_Verde.Checked = False
Case 4
MS_Minuto_Negro.Checked = False
MS_Minuto_Azul.Checked = False
MS_Minuto_Rojo.Checked = False
MS_Minuto_Verde.Checked = True
End Select
End Sub
'Gestiona el marcado de la opcin de color de la aguja de las horas
Sub CheckColorHor(ByVal num As Integer)
Select Case num
Case 1
MS_Hora_Negro.Checked = True
MS_Hora_Azul.Checked = False
MS_Hora_Rojo.Checked = False
MS_Hora_Verde.Checked = False
Case 2
MS_Hora_Negro.Checked = False
MS_Hora_Azul.Checked = True
MS_Hora_Rojo.Checked = False
MS_Hora_Verde.Checked = False
Case 3
MS_Hora_Negro.Checked = False
MS_Hora_Azul.Checked = False
MS_Hora_Rojo.Checked = True
MS_Hora_Verde.Checked = False
Case 4
MS_Hora_Negro.Checked = False
MS_Hora_Azul.Checked = False
MS_Hora_Rojo.Checked = False
MS_Hora_Verde.Checked = True
End Select

Roberto Priegue

Ejercicios de Visual Basic


End Sub
'Gestiona el marcado de la opcin de color del reloj
Sub CheckColorReloj(ByVal num As Integer)
Select Case num
Case 1
MS_Reloj_Marron.Checked = True
MS_Reloj_Gris.Checked = False
MS_Reloj_Blanco.Checked = False
Case 2
MS_Reloj_Marron.Checked
MS_Reloj_Gris.Checked =
MS_Reloj_Blanco.Checked
Case 3
MS_Reloj_Marron.Checked
MS_Reloj_Gris.Checked =
MS_Reloj_Blanco.Checked

= False
True
= False
= False
False
= True

End Select
End Sub
'Cdigo que se ejecuta al seleccionar un color para la aguja de las horas
Private Sub MS_Hora_Rojo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MS_Hora_Verde.Click, MS_Hora_Rojo.Click, MS_Hora_Negro.Click, MS_Hora_Azul.Click
If sender.Equals(MS_Hora_Azul) Then
LS_Horas.BorderColor = getColor(2)
CheckColorHor(2)
ElseIf sender.Equals(MS_Hora_Negro) Then
LS_Horas.BorderColor = getColor(1)
CheckColorHor(1)
ElseIf sender.Equals(MS_Hora_Rojo) Then
LS_Horas.BorderColor = getColor(3)
CheckColorHor(3)
ElseIf sender.Equals(MS_Hora_Verde) Then
LS_Horas.BorderColor = getColor(4)
CheckColorHor(4)
End If
End Sub
'Cdigo que se ejecuta al seleccionar un color de fondo para el reloj
Private Sub MS_Reloj_Blanco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MS_Reloj_Marron.Click, MS_Reloj_Gris.Click, MS_Reloj_Blanco.Click
If sender.Equals(MS_Reloj_Marron) Then
OS_Reloj.FillColor = getColor(5)
CheckColorReloj(1)
ElseIf sender.Equals(MS_Reloj_Gris) Then
OS_Reloj.FillColor = getColor(6)
CheckColorReloj(2)
ElseIf sender.Equals(MS_Reloj_Blanco) Then

Roberto Priegue

Ejercicios de Visual Basic


OS_Reloj.FillColor = getColor(7)
CheckColorReloj(3)
End If
End Sub
End Class

Roberto Priegue

Das könnte Ihnen auch gefallen