|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

B4A en español - Juan Antonio Villalpando
(BASIC4Android)

-- Tutorial de B4A --

Volver al índice del tutorial

____________________________

16.- Timer (Temporizador). Pausa.
- Bajar Timer.zip

- Presentación.

- Aunque ya lo vimos en el tutorial Tres_iguales, vamos a insistir en la herramienta Timer.

El Timer es un temporizador. El código que tiene dentro de su Subrutina se repite cada cierto Interval de tiempo.

Sub Timer1_Tick
' El código que ponemos aquí
' se repite continuamente cada Interval de tiempo.
' El Interval es una propiedad del Timer

End If

- El Timer no es un control "físico" que aparezca en el Activity. Además lo debemos crear en el código, ya que no existe en el Designer.

____________________________
- Designer. Layout.

Creamos los controles



Insertamos mediante
Designer / Add View

SeekBar1               Max value = 1000       ' 1000 milisegundos son un segundo
Label1
Label2

 

Guardamos el Designer:
File / Save : Layout

 

Una vez cargado el Designer en el emulador, podemos ubicar los controles donde queramos.

____________________________
- Código (copia y pega).

Código del programa Timer
'Activity module
Sub Process_Globals
    ' Juan Antonio Villalpando
    ' juana1991@yahoo.com 

    ' Crea el temporizador 
    Dim Timer1 As Timer
End Sub

Sub Globals
Dim tiempo As Int
Dim cambia As Boolean
cambia = True
Dim SeekBar1 As SeekBar
Dim Label1, Label2 As Label
Timer1.Initialize("Timer1", 500) ' 1000 = 1 segundo
Timer1.Enabled = True

End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
End Sub

Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean)
    tiempo=SeekBar1.Value
    Label1.text=tiempo
    Timer1.Interval=tiempo
End Sub

Sub Timer1_Tick
' Cada vez que pasan 100 milisegundos

If cambia Then
Label2.Color=Colors.Blue
cambia = Not (cambia)
Else
Label2.Color=Colors.Red
cambia = Not (cambia)
End If
End Sub

____________________________
- Comentarios.

- He creado una variable Boolean llamada cambia, esta variable solo tiene dos valores: True y False. Puedo cambiar de un valor a otro mediante:
cambia = Not (cambia)
De esta manera cambia vale lo contrario que su valor anterior.

- También he creado el Timer1 en la Sub Process Global y en la Global. He Inicializado su Interval y lo he activado mediante Enabled = True.

- Timer1.Enabled = False pararía el temporizador

- Al mover el Scroll (SeekBar1), cambia su Value. Su Value lo asigno a tiempo. tiempo lo asigno al Interval del Timer. Y lo pongo en la etiqueta Label1.

- Cada cierto Interval, el programa realiza al Subrutina Timer_Tick

En esta Subrutina, se consulta el valor de cambia.
Si cambia= True Entonces
el Label2 se pone Azul.
En caso contrario
el Label2 se pone Rojo.
Además en los dos casos pone el cambia a lo contrario que estaba mediante:
cambia = Not (cambia)

 

(Se podría haber puesto un solo cambia = Not (cambia) después del End If)

If cambia Then
Label2.Color=Colors.Blue

Else
Label2.Color=Colors.Red

End If

cambia = Not (cambia)

____________________

- Otro código de intermitente.

- Otro ejemplo de intermitente. En este caso utilizo un Canvas, este puede contener elementos gráficos.

- Los controles están creados mediante el código, no tiene Layout. Esta forma de poner controles sin utilizar el Layout lo veremos con más detenimiento en otro tutorial: 18controlesporcodigo.htm

- Copia y pega el código...

Código del programa Timer
' Juan Antonio Villalpando
' juana1991@yahoo.com

' Intermitente.
Sub Process_Globals

End Sub

Sub Globals
    Dim Panel1 As Panel
    Dim Canvas1 As Canvas
    Dim SeekBar1 As SeekBar
    Dim cambia As Boolean
    cambia=True
    Dim Timer1 As Timer

End Sub

Sub Activity_Create(FirstTime As Boolean)

   ' Crea un Panel
    Panel1.Initialize("Panel1")
    Activity.AddView(Panel1, 0, 0, 100%x, 100%y)

    ' Crea un Canvas1 en el Panel
    Canvas1.Initialize(Panel1)
    Canvas1.DrawCircle(100, 100, 90, Colors.Blue, True, 3dip)
    
    ' Crea etiqueta de alcance
    SeekBar1.Initialize("SeekBar1")
    SeekBar1.Max=2000
    Panel1.AddView(SeekBar1, 5, 350, 200, 50)
    
    ' Crea Timer
    Timer1.Initialize("Timer1", 1000) ' 1000 = 1 segundo
    Timer1.Enabled = True
            
End Sub

Sub Activity_Resume

End Sub

Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean)
    Timer1.Interval=Value
End Sub

Sub Timer1_Tick
    If cambia Then
    Canvas1.DrawCircle(100, 100, 90, Colors.Red, True, 3dip)
    Else
    Canvas1.DrawCircle(100, 100, 90, Colors.Blue, True, 3dip)
    End If
cambia = Not (cambia)
Canvas1.Initialize(Panel1)
End Sub
      

 

- Cambia la Sub-rutina Timer1_Tick.

- Cada vez que se ejecute la Sub-rutina Timer1_Tick, se crearán 3 números aleatorios, entre el 1 y el 255.
- El color del círculo estará compuesto por la suma de esos tres colores:
Colors.ARGB(100, R, V, A)

Sub Timer1_Tick
    Dim R, V, A As Int
   
    R = Rnd(1,255)
    V = Rnd(1,255)
    A = Rnd(1,255)

    Canvas1.DrawCircle(100, 100, 90, Colors.ARGB(100, R, V, A), True, 3dip)
    Canvas1.Initialize(Panel1)
End Sub

_____________________

- Varios Timer.

Otro ejemplo deTimer. Este ejemplo no tiene Layout, simplemente lo copias y lo pegas.

Trata de varios Timer, cada uno con un tiempo, que van incrementando el valor de una variable y presentándo en varios Label.

Código del programa variosTimer
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
End Sub

Sub Globals
 Dim Timer1, Timer2, Timer3 As Timer
 Dim Label1, Label2, LAbel3 As Label
 Dim a, b, c As Int
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Timer1.Initialize("Timer1", 500) 
    Timer1.Enabled = True
    Timer2.Initialize("Timer2", 750) 
    Timer2.Enabled = True
    Timer3.Initialize("Timer3", 1000)
    Timer3.Enabled = True

   ' Crea etiqueta (Label)
    Label1.Initialize("Label1")
    Activity.AddView(Label1, 20dip, 70dip, 200dip, 40dip)
    Label2.Initialize("Label2")
    Activity.AddView(Label2, 20dip, 140dip, 200dip, 40dip)
    Label3.Initialize("Label3")
    Activity.AddView(Label3, 20dip, 210dip, 200dip, 40dip)
    a = 0 : b = 0 : c = 0
    End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Timer1_Tick
a = a + 1
Label1.Text = a
End Sub

Sub Timer2_Tick
b = b + 1
Label2.Text= b
End Sub

Sub Timer3_Tick
c = c + 1
Label3.Text= c
End Sub
      


________________________

- Temporizador. Pausa. Sleep.

- Otra cosa distinta sería hacer una Pausa, es decir que el programa quedara pausado unos momentos, para ello se suele utilizar esta Subrutina...

Sub Pausa(segundos As Long)
   Dim now As Long
   now = DateTime.Now
Do Until (DateTime.Now > now + (segundos * 1000)) DoEvents Loop End Sub

Esta Subrutina suele ir al final del código.

En cualquier parte del código podemos llamar a esta función de la manera...

 

Pausa(3)      ' Esto hará una pausa de 3 segundos.

- La función Pausa, lo que hace es tomar el instante actual (Now) y estar haciendo un bucle hasta que se supere el tiempo del momento en que comenzó la función más el tiempo agregado a la función (segundos). now + segundos

- Se ha multiplicado por 1000, porque el Now devuelve el tiempo en milisegundos.

- El DoEvents, permite que se puedan realizar otros eventos (por ejemplo, pulsar una tecla...) mientras está en el bucle.

- DoEvents es una función muy cómoda de utilizar pero a veces da problemas y se ha de intentar otro algoritmo para no utilizarla.

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información