Cuenta regresiva con timer

Tengo un pequeño problema, resulta que quiero que el timer inicie una cuenta regresiva, le pongo un tiempo en un text y quiero que ese tiempo se empiece a consumir.
Ejemplo si pongo en el text dos horas quiero que en una etiqueta se muestre la cuenta regresiva, si conoces algún método o alguna rutina para ayudarme te lo agradeceré.

1 respuesta

Respuesta
1
Aquí te envío el ejemplo para una cuenta atrás.
Necesitas un formulario y añadir tres cajas de texto:
Nombre del objeto:
-TxtSegundos: Mostrará los segundos
-TxtMinutos: Mostrará los minutos
-TxtHoras: Mostrará las horas.
Tambien necesitas 2 Command Button:
Nombre del objeto:
-CmdCuentaAtras : Sirve para iniciar la cuenta atrás.
-CmdStop : Sirve para detener la cuenta.
También necesitas añadir un objeto Timer.
Nombre del objeto:
-Reloj
Y añadir este código a tu formulario: Form1
Espero que te sea útil. Un saludo.
Private Sub CmdCuentaAtras_Click()
'Habilitamos el reloj
Reloj.Enabled = True
End Sub
Private Sub CmdStop_Click()
'Deshabilitamos el reloj
Reloj.Enabled = False
End Sub
Private Sub Form_Load()
'Establecemos las propiedades.
Reloj.Interval = 1000 'que vienen a ser mas o menos como un segundo
Reloj.Enabled = False
End Sub
Private Sub Reloj_Timer()
'cada segundo se activará este evento.
'Así pues cada segundo decrementaremos en 1 el valor del segundero.
TxtSegundos = TxtSegundos - 1
If CInt(TxtHoras) = 0 And CInt(TxtMinutos) = 0 And CInt(TxtSegundos) = 0 Then
'en este caso hemos llegado al final de la cuenta atrás.
MsgBox "Fin de la cuenta atras", vbOKOnly
'paramos el reloj
Reloj.Enabled = False
Else
'Ahora hacemos el chequeo de comprobación para los segundos.
If CInt(TxtSegundos) = -1 Then
TxtSegundos = 59
TxtMinutos = TxtMinutos - 1
End If
End If
TxtSegundos = Format(TxtSegundos, "00")
End Sub
Private Sub TxtMinutos_Change()
'En caso contrario significa que estamos en la cuenta
If CInt(TxtMinutos) = -1 Then
'Si hemos llegado al valor -1 significa que ya hemos contado
'el 0 y debemos poner 59 en minutos y descontar 1 a la hora
TxtMinutos = 59
TxtHoras = TxtHoras - 1
TxtHoras = Format(TxtHoras, "00")
End If
TxtMinutos = Format(TxtMinutos, "00")
End Sub
Lo que quiero es pasar un parámetro con un solo text, pues este se copia de otro que esta ubicado en otro form, agradezco tu ayuda, probé tu ejemplo, pero pasa que al asignarle en un solo text el dato, este me funciona pero incicia el reloj de sistema a las 12:00 e inicia la cuenta regresiva.
Gracias, lo solucione colocando otro formulario en mi programa y desde ese form pasar el dato a donde quiero, pero creo que es algo complicado, si tienes algún ejemplo mejor envíamelo please.
Gracias
Lo siento pero no entiendo muy bien que es lo que quieres conseguir...
¿Cómo qué inicia el reloj de sistema?
En vez de cajas de texto utiliza variables o un type de tipo hora que contenga horas, minutos y segundos y pasa ese objeto como parámetro...
El ejemplo lo hice para enviártelo y no tengo ningún otro mejor. Si quieres enviame el trozo de código o explícamelo mejor...
En el evento load de el form le paso parámetro al text1 para que este sea diferente a 0 tomado el parámetro de otro formulario de captura
Private Sub Timer1_Timer()
If (Format$(Text1, "hh:mm:ss")) <> "00:00:00" Then
time = DateAdd("s", -1, Text1)
Text1 = time
Label1.Visible = False
' aquí le paso el valor del text al label para que se muestre
Label1 = time
Label1.Caption = Format(time, "hh:mm:ss") '& ":" & Format$(time, "nn") & ":" & Format$(time, "ss")
Label1.Visible = True
' y aquí le paso el valor de la label a otra label que esta en otro formulario
Form3.Label11 = Label1
Else
Timer1.Enabled = False
Beep
Beep
End If
End Sub
El código arriba puesto funciona bien, ha el timer lo inicialice a 985 para que fuera exacto porque a 1000 se adelanta al cronometro normal, pero también observaras que doy mucha vuelta para que se muestre, pero lo que pasa es que si lo pongo en el formulario en el que quiero que se muerte la cuenta regresiva pasa lo que te comente anteriormente, el reloj del sistema se inicaliza a las 12:00 horas.
Bueno de cualquier manera así como te lo describo me funciona bien.
Muchas gracias.
Tengo otra pregunta sencillita te la hago llegar en otro mensaje muchas gracias por tu tiempo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas