sábado, 25 de agosto de 2012

Control Timer


Algunas veces necesitamos en una parte de nuestra aplicación añadir un retardo.
Un evento cada cierto tiempo. Ya sea para la creación de un archivo. Comprobar
la existencia de este archivo,la ejecución de un proceso cada x segundos.

Este control tiene propiedades importantes como son:

  • Delay
  • Enabled

Delay es la cantidad de tiempo o el retardo que se produce cada x milisegundos
antes de ejecutar un grupo de instrucciones incluidas dentro del código del Timer.
El valor de la propiedad esta por defecto en 1000 mS, un segundo. :-)

¿ Como hacemos para activar nuestro Timer ?.

Lo podemos hacer de dos formas.

Timer.Enabled = True

Activa el Timer. O de una manera mas sencilla.

Timer.Start

Y nos ahorramos algo de código.
Para parar nuestro timer hacemos:

Timer.Enabled = false

Ó

Timer.Stop

Nuestro código se encuentra en el procedimiento del Timer tal que así:

PUBLIC SUB Timer1_Timer()


END

En el podemos añadir nuestro código o también llamadas a otros procedimientos.


A continuación os muestro varios ejemplos con este componente:



Imitación de una barra de progreso con el componente Label y Timer.



Public Sub Timer1_Timer()
   If lblBarra.Width < 335 Then
   lblBarra.Width = lblBarra.Width + 5 'Aumentamos el ancho de la barra en 5,10,20...
  Else
    Timer1.Stop 'Se para el Timer1
  Endif
End

Public Sub Form_Open()
   'Inicializamos los valores
   Me.Caption = "Simula barra de progreso"
   Me.Center
   'Podemos asignar estos valores en las propiedades de los componentes
  lblBarra.Width = 0
  lblBarra.Background = Color.Blue
  Timer1.Delay = 50
  Timer1.Start 'Iniciamos el Timer1
End

Un reloj:



Public Sub _new()

End

Public Sub Form_Open()
  Me.Caption = "RELOJ"
End

Public Sub Timer1_Timer()
  Dim tiempo As Date
  tiempo = Time
  lblreloj.Text = Format$(tiempo, "hh:nn:ss")

End

Public Sub cmdIniciar_Click()
  Timer1.Start
End

Public Sub cmdDetener_Click()
  Timer1.Stop
End

Un temporizador:


Private inicio As Date

Public Sub _new()

End

Public Sub Form_Open()
   Me.Caption = "TEMPORIZADOR"
End

Public Sub Timer1_Timer()
  Dim tiempo As Date
  tiempo = Time - inicio
  lbltempo.Text = Format$(tiempo, "hh:nn:ss")
End

Public Sub cmdIniciar_Click()
  inicio = Time
  Timer1.Start
End

Public Sub cmdDetener_Click()
  Timer1.Stop
End

Con pocas instrucciones hemos creados dos aplicaciones que pueden ser útiles.
Hemos visto la instrucción Format. Nos muestra en la etiqueta el contenido de la
variable tiempo con el formato horas,minutos,segundos con dos dígitos cada una.


Un ejemplo más:

' Gambas class file
PRIVATE estado AS Boolean
PRIVATE alerta AS Sound
PRIVATE canal1 AS Channel
'La aplicación usara la pantalla completa,usar Alt-Tabulador para cambiar
'entre aplicaciones y usar stop del editor.Esto hay que cambiarlo

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
'Ajustamos el tamaño del formulario
WITH ME
   .Width = Desktop.Width
   .Height = Desktop.Height
   .FullScreen = TRUE
END WITH
'Ajustamos propiedades de la etiqueta
WITH lbMensaje
   .Alignment = Align.Center
'Cambiar el divisor por un valor más grande si no entra todo el texto en vuestra pantalla.
'En este equipo uso 1680x1050
   .Font.Size = lbMensaje.Height / 1.2
   .Font.Bold = TRUE
END WITH
'Cambiamos o creamos las propiedades para el sonido
Channels.Count = 1
canal1 = Channels[0]
canal1.Volume = 0.4
alerta = NEW Sound["Alert.wav"]
Timer1.Start
END

PUBLIC SUB Timer1_Timer()
canal1.Play(alerta) 'Hacemos sonar el sonido que contiene la variable alerta
'Cada segundo cambia el contenido del texto de la etiqueta
IF estado = FALSE THEN
WITH lbMensaje
   .Background = Color.Yellow
   .Foreground = Color.Red
   .Text = "ALERTA"
END WITH
ELSE
lbMensaje.Text = "INTRUSO"
ENDIF
estado = NOT estado
END