Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Dos Timer y uno no funciona.

Estas en el tema de Dos Timer y uno no funciona. en el foro de Visual Basic clásico en Foros del Web. Hola compañer@s! Hace tiempo que no he pasado por el foro a causa del laboro que incluso me ha parado el tiempo libre para programar ...
  #1 (permalink)  
Antiguo 27/11/2010, 05:55
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Dos Timer y uno no funciona.

Hola compañer@s!

Hace tiempo que no he pasado por el foro a causa del laboro que incluso me ha parado el tiempo libre para programar u aprender VB. ahora que puedo retornar a esto he continuado con un programilla que ya me funciona y le estoy aplicando unas modificaciones, esta es la de añadirle un cronometro de tiempo estipulado de inicio en un dia y fin en otro, el problema y consulta esta en lo siguiente.

1º ¿Es posible tener varios Timer en un mismo codigo y que actuen indistintamente?
2º ¿Es posible que un cronometro de cuenta atras o regresivo se inicie con por ejemplo : 1dia 20 horas 32 min 15 seg, naturalmente el formato de presentación es indiferente es solo a nivel de cantidad o volumen?

Posiblemente alguno se pregunte para que pueda ser lo que quiero hacer, la 1ª parte que ya funciona esta en este post
"http://www.forosdelweb.com/f69/reloj-fijo-825454/index2.html"
por si alguno le interesa, ahora lo que pretendo es aplicarlo como reloj de apertura y cierre y de hay añadirle el cronometro, para que os hagais una idea aqui os posteo una imagen del programita en ejecucion .:



Un saludo
  #2 (permalink)  
Antiguo 27/11/2010, 16:26
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Dos Timer y uno no funciona.

Hola Xyon, encantado de saludarte de nuevo, ante la duda de si o no puedes utilizar varios timer, acabo de hacer esta prueba.

Necesitas un Formulario con un array de 3 Timer y un array de 3 Labels

Timer1(0), Timer1(1), Timer1(2)
Label1(0), Label1(1), Label1(2)

Código vb:
Ver original
  1. Private Sub Label1_Click(Index As Integer)
  2.   ' Al pulsar sobre el label se activa/desactiva su timer
  3.  If Timer1(Index).Enabled Then
  4.     Timer1(Index).Enabled = False
  5.   Else
  6.     Timer1(Index).Enabled = True
  7.   End If
  8. End Sub
  9.  
  10. Private Sub Timer1_Timer(Index As Integer)
  11.   ' Al producirse el evento, se incrementa en 1 el label
  12.  Label1(Index) = Val(Label1(Index).Caption) + 1
  13. End Sub
Con este código puedes comprobar que funcionan independientes, después el cálculo que dena efectuar cada uno de ellos ya es independiente.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 28/11/2010, 03:55
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Dos Timer y uno no funciona.

Para hacer la cuenta atrás solo tienes que poner un timer con interval 1000 e ir descontando segundos cada vez que entras.
Si es durante mucho tiempo quizá te interese hacerlo con un interval menor aún y hacer la cuenta atras comparando la hora actual con la hora anterior.
Simplificando. Suponiendo que quieres esperar 3600 segundos (1 hora):

Código vb:
Ver original
  1. Dim TiempoEspera As Long
  2. Dim HoraActual As Long
  3.  
  4. Private Sub Command4_Click()
  5.   TiempoEspera = 3600
  6.   HoraActual = Int(Timer)
  7.   TimerCuentaAtras.Interval = 100
  8.   TimerCuentaAtras.Enabled = True
  9. End Sub
  10.  
  11. Private Sub TimerCuentaAtras_Timer()
  12.   If HoraActual <> Int(Timer) Then
  13.     HoraActual = Int(Timer)
  14.     TiempoEspera = TiempoEspera - 1
  15.     If TiempoEspera <= 0 Then
  16.       TimerCuentaAtras.Enabled = False
  17.       MsgBox "Tiempo transcurrido"
  18.     End If
  19.   End If
  20. End Sub

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 28/11/2010 a las 04:18
  #4 (permalink)  
Antiguo 29/11/2010, 14:33
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Dos Timer y uno no funciona.

Hola erbuson & pkj!

Muchas gracias por vuestra ayuda, por lo de varios timer como comentas erbuson lo he probado y si funciona aunque no es exactamente como tengo en mente, mi idea es en el formulario de la foto parte ya os es conocido, uso un timer para con el array que me ensenastes ha hacer, tengo el horario mundial de las ciudades especificadas; ahora el otro timer es para la otra parte del formulario la derecha, donde tengo un cronometro de cuentra atras que es de exactamente 121 horas y se inicia el domingo a las 22:00 Madrid o 16:00 New York y finaliza el viernes a las 23:00 Madrid o 17:00 New York, este cronometro lo que hace es avisarme cuanto tiempo me queda de mercado de divisas abierto para poder cerrar antes del cierre del mercado las operaciones o tradings que tenga abiertas y no tener que pagar Swap si es negativo, con esto mas o menos respondo a la idea que me esta dando pkj.
Lo malo de todo esto es que he probado dos timer en un programilla independiente y me funciona pero en este no y lo unico que he cambiado es poner la orden del command_Click en el Form_Load() toda la funcion o como funcion independiente y llamandola y no me funciona, ¿Porque razon me ocurre esto?

Aqui os posteo la foto del formulario y el codigo .:



Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Dim Tiempo_restante As Date
  4. Dim Horafinal As Date
  5. Dim Horainicio As Date
  6. Dim Fecha As Date
  7. Dim Dia2 As Integer
  8.  
  9. Dim Londres As Date
  10. Dim Nueva_York As Date
  11. Dim Tokyo As Date
  12. Dim Sidney As Date
  13. Dim Madrid As Date
  14. Dim Francfort As Date
  15. Dim Zurich As Date
  16. Dim Wellington As Date
  17. Dim Toronto As Date
  18. Dim Horario As Date
  19. Dim Dia As String
  20.  
  21. Dim DifLondres As Date
  22. Dim DifNueva_York As Date
  23. Dim DifTokyo As Date
  24. Dim DifSidney As Date
  25. Dim DifWellington As Date
  26. Dim DifToronto As Date
  27.  
  28. 'Funcion para cambiar el color del texto
  29. '################################################# ##########
  30. Private Sub AjustaColor(Letrero As Label)
  31. If Letrero.Caption = "ABIERTA" Then
  32. Letrero.ForeColor = vbGreen
  33. ElseIf Letrero.Caption = "CERRADA" Then
  34. Letrero.ForeColor = vbRed
  35. Else
  36. Letrero.ForeColor = vbBlack
  37. End If
  38. End Sub
  39.  
  40. 'Funcion para determinar Abierta/Cerrada
  41. '################################################# ##########
  42. ' Ha sido modificada para recibir el Caption del Label que muestra el día y hora
  43. Public Function CloseOpen(LabelHora As Label) As String
  44. Dim Hora As Date, Dia As String
  45. Hora = CDate(Right$(LabelHora.Caption, 8))
  46. Dia = Left$(LabelHora.Caption, 3)
  47. If Hora > CDate("8:29:59") And Hora < CDate("17:29:59") Then
  48. CloseOpen = "ABIERTA"
  49. Else
  50. CloseOpen = "CERRADA"
  51. End If
  52. If Dia = "sáb" Or Dia = "dom" Then CloseOpen = "CERRADA"
  53. If LabelHora.Index = 9 Then
  54.     CloseOpen = "ABIERTA"
  55.     If Dia = "vie" And Hora >= CDate("23:00:00") Then
  56.     'If Dia = "dom" And Hora >= CDate("23:00:00") Then
  57.    CloseOpen = "CERRADA"
  58.     ElseIf Dia = "sáb" Or Dia = "dom" And Hora <= CDate("22:00:00") Then CloseOpen = "CERRADA"
  59.     'ElseIf Dia = "dom" And Hora <= CDate("22:00:00") Then CloseOpen = "CERRADA"
  60.    Else
  61.     CloseOpen = "ABIERTA"
  62.     End If
  63. End If
  64. End Function
  65.  
  66. Private Sub Command1_Click()
  67. Dim Capital, Porcentaje, Riesgo, Volumen, Temp, Pips As Single
  68. Capital = cmb_Capital
  69. Porcentaje = cmb_riesgo
  70. Pips = txt_pips
  71.  
  72. Riesgo = Capital * Porcentaje / 100
  73. txt_pips = Pips
  74. txt_riesgo = Riesgo
  75.  
  76. Temp = Riesgo / Pips
  77.  
  78. If Temp <= 0.1 Then
  79. Volumen = 0.1
  80. ElseIf Temp <= 0.2 Then
  81. Volumen = 0.2
  82. ElseIf Temp <= 0.3 Then
  83. Volumen = 0.3
  84. ElseIf Temp <= 0.4 Then
  85. Volumen = 0.4
  86. ElseIf Temp <= 0.5 Then
  87. Volumen = 0.5
  88. ElseIf Temp <= 1 Then
  89. Volumen = 1
  90. ElseIf Temp <= 2 Then
  91. Volumen = 2
  92. ElseIf Temp <= 3 Then
  93. Volumen = 3
  94. ElseIf Temp <= 4 Then
  95. Volumen = 4
  96. ElseIf Temp <= 5 Then
  97. Volumen = 5
  98. ElseIf Temp <= 6 Then
  99. Volumen = 6
  100. ElseIf Temp <= 7 Then
  101. Volumen = 7
  102. Else
  103. Volumen = 8
  104. End If
  105.  
  106. txt_volumen = Volumen
  107.  
  108. End Sub
  109.  
  110. 'Funcion para cambiar el color del texto en cada Label
  111. '################################################# ##########
  112. Private Sub ComoEsta_Change(Index As Integer)
  113. AjustaColor Comoesta(Index)
  114. End Sub
  115.  
  116. '################################################# ##########
  117. Private Sub HoraActual()
  118. Dim Ahora As Date, Indice As Integer
  119. Ahora = Now
  120. PonerHora 0, Ahora, -1 'Londres
  121. PonerHora 1, Ahora, -6 'NuevaYork
  122. PonerHora 2, Ahora, 7 'Tokyo
  123. PonerHora 3, Ahora, 8 'Sidney
  124. PonerHora 4, Ahora, 0 'Madrid
  125. PonerHora 5, Ahora, 0 'Francfort
  126. PonerHora 6, Ahora, 0 'Zurich
  127. PonerHora 7, Ahora, 10 'Wellington
  128. PonerHora 8, Ahora, -6 'Toronto
  129. PonerHora 9, Ahora, 0 'Madrid
  130. PonerHora 10, Ahora, -6 'NuevaYork
  131. End Sub
  132.  
  133.  
  134. '################################################# ##########
  135. Private Sub PonerHora(Indice As Integer, LaHora As Date, Diferencia As Integer)
  136. ' Pone la Hora en la Etiqueta correspondiente a Indice
  137. QueHora(Indice) = Format(DateAdd("h", Diferencia, LaHora), "ddd hh:mm:ss")
  138. ' Después, la misma rutina, efectua el cambio de Abierta/Cerrada
  139. Comoesta(Indice) = CloseOpen(QueHora(Indice))
  140. End Sub
  141.  
  142.  
  143. '################################################# ##########
  144. Private Sub Timer1_Timer()
  145. HoraActual
  146. End Sub
  147. '################################################# ##########
  148. Private Sub Timer2_Timer()
  149.  
  150. 'Contador regresivo
  151.    Tiempo_restante = Horafinal - Time
  152.     Label7.Caption = Format(Tiempo_restante, "hh:mm:ss")
  153.  
  154. End Sub
  155. '################################################# ##########
  156. Private Sub cronometro()
  157. Horainicio = Time
  158.     'el 1 indica los minutos desde los que comenzará la cuenta atrás.
  159.    Horafinal = DateAdd("n", 1, Now)
  160.     Timer2.Enabled = True
  161.     Label7.Caption = Format(Tiempo_restante, "hh:mm:ss")
  162. End Sub
  163. '################################################# ##########
  164. Private Sub Form_Load()
  165.  
  166. 'Inicio función general relojes Bolsa.
  167. HoraActual
  168. Timer1.Interval = 1000
  169. Timer1.Enabled = True
  170.  
  171. Fecha = Format(Date, "dd mmmm YYYY")
  172. Label10 = Fecha
  173. 'Fin función general relojes Bolsa.
  174.  
  175. 'Inicio función cronometro apertura-cierre Bolsa.
  176. cronometro
  177.  
  178. Dia2 = DatePart("w", Fecha)
  179.  
  180. If Dia2 = "6" And Horainicio > CDate("22:59:59") Or Dia2 = "7" Or Dia2 = "1" And Horainicio > CDate("22:00:00") Then
  181. Label13.Caption = "MERCADO CERRADO"
  182. Else
  183. Label13.Visible = False
  184. Label8 = Dia2 - 7
  185.  
  186. End If
  187.  
  188. 'Fin función cronometro apertura-cierre Bolsa.
  189.  
  190. End Sub


Un saludo

Etiquetas: dos, time
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:23.