Tengo que mejorar el titulo y la descripción de este mensaje.
Quería usar el comando input y timer en un ejemplo de consola.
Pero me dio problemas. Timer no hace nada hasta que se escribe algo.
La idea era que si se tardaba en responder mas de la cuenta, de alguna manera la aplicación avisa.
Es lo mas parecido a los concursos. Cuando te pasas de tiempo en responder.
Hice dos ejemplos parecidos. Se nota una programación distinta.
Este es el primero con un input. Una vez escrito se comprueba el tiempo que ha tardado
y avisa si el tiempo fue mayor del deseado. Pero no se temporiza mientras no se escribe nada.
Public Sub Comprueba_Tiempo()
Dim nombre As String
Dim hora_al_inicio As Date
Dim hora_al_final As Date
Dim segundos As Integer
Print "Ingrese su nombre: "
hora_al_inicio = Time(Now)
Do While Not nombre
Input nombre 'Cualquier texto
Loop
hora_al_final = Time(Now)
segundos = Abs(DateDiff(hora_al_final, hora_al_inicio, gb.Second))
If segundos > 10 Then
Print "Ha tardado demasiado en escribir su nombre"
Else
Print "Ha tardado en escribir su nombre en : " & segundos & " segundos"
Endif
End
Dim nombre As String
Dim hora_al_inicio As Date
Dim hora_al_final As Date
Dim segundos As Integer
Print "Ingrese su nombre: "
hora_al_inicio = Time(Now)
Do While Not nombre
Input nombre 'Cualquier texto
Loop
hora_al_final = Time(Now)
segundos = Abs(DateDiff(hora_al_final, hora_al_inicio, gb.Second))
If segundos > 10 Then
Print "Ha tardado demasiado en escribir su nombre"
Else
Print "Ha tardado en escribir su nombre en : " & segundos & " segundos"
Endif
End
Ahora el ejemplo con un formulario. Es distinto. Se controla mejor. Aquí si va mejor Timer.
Private ha_escrito_algo As Boolean
Private contador As Integer
Public Sub _new()
End
Public Sub Form_Open()
Timer1.Delay = 1000
Timer1.Start
End
Public Sub Timer1_Timer()
If ha_escrito_algo Then
Print "Ha ingresado un nombre"
Print "Ha tardado en escribirlo: " & contador & " segundos"
Timer1.Stop
Else If contador >= 10 Then
Print "Ha tardado más de diez segundos en escribirlo"
Timer1.Stop
Else If contador < 10 Then
contador += 1
Endif
End
Public Sub txtNombre_KeyPress()
If Key.Code = Key.Return Then ha_escrito_algo = True
End
Private contador As Integer
Public Sub _new()
End
Public Sub Form_Open()
Timer1.Delay = 1000
Timer1.Start
End
Public Sub Timer1_Timer()
If ha_escrito_algo Then
Print "Ha ingresado un nombre"
Print "Ha tardado en escribirlo: " & contador & " segundos"
Timer1.Stop
Else If contador >= 10 Then
Print "Ha tardado más de diez segundos en escribirlo"
Timer1.Stop
Else If contador < 10 Then
contador += 1
Endif
End
Public Sub txtNombre_KeyPress()
If Key.Code = Key.Return Then ha_escrito_algo = True
End
No se si en consola esto tendrá solución.
Imaginar los interpretes de basic antiguo. Una linea de comando que esta esperando a que escribas algo y no se hace.
La aplicación no acabaría nunca
Saludos