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

Reloj fijo

Estas en el tema de Reloj fijo en el foro de Visual Basic clásico en Foros del Web. Hola compañeros! Tengo un problemilla, he realizado un reloj con horarios de varias ciudades y tengo el problema que el reloj se ejecuta pero se ...

  #1 (permalink)  
Antiguo 16/07/2010, 10:28
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Reloj fijo

Hola compañeros!

Tengo un problemilla, he realizado un reloj con horarios de varias ciudades y tengo el problema que el reloj se ejecuta pero se queda la hora fija, por otro lado le mando ejecutar dependiendo de que hora sea unos cambios de color y texto y me lo realiza pero no siempre, he realizado varios relojes y jamas me han dado problemas y ahora o estoy muy espeso y ciego pues lo habre mirado tantas veces que no veo los errores. ¿Podriasis echarme una manita?

Un saludo



Aqui os posteo el codigo .:

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Dim Londres As Date
  4. Dim Nueva_York As Date
  5. Dim Tokyo As Date
  6. Dim Sidney As Date
  7. Dim Madrid As Date
  8. Dim Francfort As Date
  9. Dim Zurich As Date
  10. Dim Wellington As Date
  11. Dim Toronto As Date
  12. Dim Horario As Date
  13. Dim dia As String
  14.  
  15. Dim DifLondres As Date
  16. Dim DifNueva_York As Date
  17. Dim DifTokyo As Date
  18. Dim DifSidney As Date
  19. Dim DifWellington As Date
  20. Dim DifToronto As Date
  21.  
  22.  
  23. 'Funcion para cambiar el color del texto
  24. '###########################################################
  25. Private Sub Label10_Change()
  26.   If Label10.Caption = "ABIERTA" Then
  27.     Label10.ForeColor = vbGreen
  28.   ElseIf Label10.Caption = "CERRADA" Then
  29.     Label10.ForeColor = vbRed
  30.   Else
  31.     Label10.ForeColor = vbBlack
  32.   End If
  33. End Sub

Última edición por XYON126; 19/07/2010 a las 12:36
  #2 (permalink)  
Antiguo 19/07/2010, 09:44
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Reloj fijo

perdon amigo, el "Label" en que momento cambia???... ese procedimiento si no lo entiendoo... haces que cambie de valor el label???
explicanos en que consiste tu Change del Label
  #3 (permalink)  
Antiguo 19/07/2010, 12:23
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Cita:
Iniciado por -rommel_ Ver Mensaje
perdon amigo, el "Label" en que momento cambia???... ese procedimiento si no lo entiendoo... haces que cambie de valor el label???
explicanos en que consiste tu Change del Label

Hola rommel!

Cierto, acabo de ver que el codigo esta incompleto aqui lo posteo de nuevo .:

Código vb:
Ver original
  1. 'Funcion para cambiar el color del texto
  2. '####################################################
  3. Private Sub Label11_Change()
  4.   If Label11.Caption = "ABIERTA" Then
  5.     Label11.ForeColor = vbGreen
  6.   ElseIf Label11.Caption = "CERRADA" Then
  7.     Label11.ForeColor = vbRed
  8.   Else
  9.     Label11.ForeColor = vbBlack
  10.   End If
  11. End Sub
  12. 'Funcion para cambiar el color del texto
  13. '####################################################
  14. Private Sub Label12_Change()
  15.   If Label12.Caption = "ABIERTA" Then
  16.     Label12.ForeColor = vbGreen
  17.   ElseIf Label12.Caption = "CERRADA" Then
  18.     Label12.ForeColor = vbRed
  19.   Else
  20.     Label12.ForeColor = vbBlack
  21.   End If
  22. End Sub
  23. 'Funcion para cambiar el color del texto
  24. '####################################################
  25. Private Sub Label13_Change()
  26.   If Label13.Caption = "ABIERTA" Then
  27.     Label13.ForeColor = vbGreen
  28.   ElseIf Label13.Caption = "CERRADA" Then
  29.     Label13.ForeColor = vbRed
  30.   Else
  31.     Label13.ForeColor = vbBlack
  32.   End If
  33. End Sub

Última edición por XYON126; 19/07/2010 a las 12:37
  #4 (permalink)  
Antiguo 19/07/2010, 12:28
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Veo que se corta el codigo aqui posteo el resto .:


Código vb:
Ver original
  1. 'Funcion para cambiar el color del texto
  2. '###########################################################
  3. Private Sub Label14_Change()
  4.   If Label14.Caption = "ABIERTA" Then
  5.     Label14.ForeColor = vbGreen
  6.   ElseIf Label14.Caption = "CERRADA" Then
  7.     Label14.ForeColor = vbRed
  8.   Else
  9.     Label14.ForeColor = vbBlack
  10.   End If
  11. End Sub
  12. 'Funcion para cambiar el color del texto
  13. '###########################################################
  14. Private Sub Label15_Change()
  15.   If Label15.Caption = "ABIERTA" Then
  16.     Label15.ForeColor = vbGreen
  17.   ElseIf Label15.Caption = "CERRADA" Then
  18.     Label15.ForeColor = vbRed
  19.   Else
  20.     Label15.ForeColor = vbBlack
  21.   End If
  22. End Sub
  23. 'Funcion para cambiar el color del texto
  24. '###########################################################
  25. Private Sub Label16_Change()
  26.   If Label16.Caption = "ABIERTA" Then
  27.     Label16.ForeColor = vbGreen
  28.   ElseIf Label16.Caption = "CERRADA" Then
  29.     Label16.ForeColor = vbRed
  30.   Else
  31.     Label16.ForeColor = vbBlack
  32.   End If
  33. End Sub

Última edición por XYON126; 19/07/2010 a las 12:38
  #5 (permalink)  
Antiguo 19/07/2010, 12:29
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

y mas codigo .:

Código vb:
Ver original
  1. 'Funcion para cambiar el color del texto
  2. '###########################################################
  3. Private Sub Label17_Change()
  4.   If Label17.Caption = "ABIERTA" Then
  5.     Label17.ForeColor = vbGreen
  6.   ElseIf Label17.Caption = "CERRADA" Then
  7.     Label17.ForeColor = vbRed
  8.   Else
  9.     Label17.ForeColor = vbBlack
  10.   End If
  11. End Sub
  12. 'Funcion para cambiar el color del texto
  13. '###########################################################
  14. Private Sub Label18_Change()
  15.   If Label18.Caption = "ABIERTA" Then
  16.     Label18.ForeColor = vbGreen
  17.   ElseIf Label18.Caption = "CERRADA" Then
  18.     Label18.ForeColor = vbRed
  19.   Else
  20.     Label18.ForeColor = vbBlack
  21.   End If
  22. End Sub
  23.  
  24. Private Sub Form_Load()
  25.  
  26. 'Diferencia horaria en menos
  27.  
  28. DifLondres = "1:00"
  29. DifNueva_York = "6:00"
  30. DifToronto = "6:00"

Última edición por XYON126; 19/07/2010 a las 12:40
  #6 (permalink)  
Antiguo 19/07/2010, 12:31
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

y esto creo es lo ultimo.

Código vb:
Ver original
  1. 'Diferencia horaria en más
  2.  
  3. DifTokyo = "7:00"
  4. DifSidney = "8:00"
  5. DifWellington = "10:00"
  6.  
  7. Horario = Format(Time, "hh:mm")
  8. dia = Format(Date, "dddd")
  9.  
  10. Londres = Horario - DifLondres
  11. Nueva_York = Horario - DifNueva_York
  12. Tokyo = Horario + DifTokyo
  13. Sidney = Horario + DifSidney
  14. Madrid = Horario
  15. Francfort = Horario
  16. Zurich = Horario
  17. Wellington = Horario + DifWellington
  18. Toronto = Horario - DifToronto
  19.  
  20.  
  21. Label1.Caption = Format(Londres, "hh:mm")
  22. Label2.Caption = Format(Nueva_York, "hh:mm")
  23. Label3.Caption = Format(Tokyo, "hh:mm")
  24. Label4.Caption = Format(Sidney, "hh:mm")
  25. Label5.Caption = Format(Madrid, "hh:mm")
  26. Label6.Caption = Format(Francfort, "hh:mm")
  27. Label7.Caption = Format(Zurich, "hh:mm")
  28. Label8.Caption = Format(Wellington, "hh:mm")
  29. Label9.Caption = Format(Toronto, "hh:mm")

Última edición por XYON126; 19/07/2010 a las 12:42
  #7 (permalink)  
Antiguo 19/07/2010, 12:32
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

pues no aún queda esto .:

Código vb:
Ver original
  1. 'Control horario Londres
  2. If Label1 >= "17:30" Then
  3. Label10.Caption = "CERRADA"
  4. ElseIf Label1 <= "8:30" Then
  5. Label10.Caption = "CERRADA"
  6. Else
  7. Label10.Caption = "ABIERTA"
  8. End If
  9.  
  10. 'Control horario New York
  11. If Label2 <= "17:30" Then
  12. Label11.Caption = "ABIERTA"
  13. ElseIf Label2 >= "8:30" Then
  14. Label11.Caption = "ABIERTA"
  15. ElseIf dia = "sabado" Then
  16. Label11.Caption = "CERRADA"
  17. ElseIf dia = "domingo" Then
  18. Label11.Caption = "CERRADA"
  19. Else
  20. Label11.Caption = "CERRADA"
  21. End If
  22.  
  23. 'Control horario Tokyo
  24. If Label3 >= "17:30" Then
  25. Label12.Caption = "CERRADA"
  26. ElseIf Label3 <= "8:30" Then
  27. Label12.Caption = "CERRADA"
  28. Else
  29. Label12.Caption = "ABIERTA"
  30. End If

Última edición por XYON126; 19/07/2010 a las 12:42
  #8 (permalink)  
Antiguo 19/07/2010, 12:33
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

esto.:

Código vb:
Ver original
  1. 'Control horario Sidney
  2. If Label4 >= "17:30" Then
  3. Label13.Caption = "CERRADA"
  4. ElseIf Label4 <= "8:30" Then
  5. Label13.Caption = "CERRADA"
  6. Else
  7. Label13.Caption = "ABIERTA"
  8. End If
  9.  
  10. 'Control horario Madrid
  11. If Label5 >= "17:30" Then
  12. Label14.Caption = "CERRADA"
  13. ElseIf Label5 <= "8:30" Then
  14. Label14.Caption = "CERRADA"
  15. Else
  16. Label14.Caption = "ABIERTA"
  17. End If
  18.  
  19. 'Control horario Francfort
  20. If Label6 >= "17:30" Then
  21. Label15.Caption = "CERRADA"
  22. Else
  23. Label15.Caption = "ABIERTA"
  24. End If
  25.  
  26. 'Control horario Zürich
  27. If Label7 >= "17:30" Then
  28. Label16.Caption = "CERRADA"
  29. Else
  30. Label16.Caption = "ABIERTA"
  31. End If

Última edición por XYON126; 19/07/2010 a las 12:44
  #9 (permalink)  
Antiguo 19/07/2010, 12:40
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Reloj fijo

El reloj solo se actualiza una vez al hecer el evento load.
Falta codificar una funcion en bucle que actualice todos los labels igualmente despues de cambiar el valor de la hora base y todas las diferencias y de ahi todo el resto

Saludos
  #10 (permalink)  
Antiguo 19/07/2010, 12:45
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

y finalmente esto .:


Código vb:
Ver original
  1. 'Control horario Wellington
  2. If Label8 <= "17:30" Then
  3. Label17.Caption = "CERRADA"
  4. ElseIf Label8 >= "8:30" Then
  5. Label17.Caption = "CERRADA"
  6. Else
  7. Label17.Caption = "ABIERTA"
  8. End If
  9.  
  10. 'Control horario Toronto
  11. If Label9 >= "17:30" Then
  12. Label18.Caption = "CERRADA"
  13. ElseIf Label8 >= "8:30" Then
  14. Label18.Caption = "CERRADA"
  15. Else
  16. Label18.Caption = "ABIERTA"
  17. End If
  18.  
  19.  
  20. End Sub
  #11 (permalink)  
Antiguo 19/07/2010, 12:49
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Cita:
Iniciado por angcam Ver Mensaje
El reloj solo se actualiza una vez al hecer el evento load.
Falta codificar una funcion en bucle que actualice todos los labels igualmente despues de cambiar el valor de la hora base y todas las diferencias y de ahi todo el resto

Saludos
Hola angcam!

Ya se que hay muchas lotes iguales, suponiendo que solo esta Madrid y Wellington el bucle que comentas ¿como lo realizarias? pues posiblemente al utilizar solo un reloj no me he encontrado con el problema y ahora voy perdido.


un saludo
  #12 (permalink)  
Antiguo 19/07/2010, 14:22
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola compañero:

Creo que una manera de simplificar loas ajustes de Color, sería por ejemplo creando una función que recibe un Label y en función de su Caption ajusta el Color:

Código vb:
Ver original
  1. Private Sub AjustaColor(Letrero As Label)
  2.   ' Función para unificar y simplificar
  3.  If Letrero.Caption = "ABIERTA" Then
  4.     Letrero.ForeColor = vbGreen
  5.   ElseIf Letrero.Caption = "CERRADA" Then
  6.     Letrero.ForeColor = vbRed
  7.   Else
  8.     Letrero.ForeColor = vbBlack
  9.   End If
  10. End Sub
  11.  
  12.  
  13. Private Sub Label17_Change()
  14.   AjustaColor label17
  15. End Sub
  16.  
  17. Private Sub Label18_Change()
  18.   AjustaColor label18
  19. End Sub

De este modo, te evitas muchas sentencias repetidas y si por casualidad decidieras algun cambio adicional, como por ejemplo poner en Negrita, Itálica, etc, con efectuar un ligero cambio en la Rutina AjustaColor, cambias todo el programa.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #13 (permalink)  
Antiguo 19/07/2010, 14:30
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Reloj fijo

asi es... eso queria recomendarte... pero aun no entiendo que necesitas de todo ese codigo que pusiste inicialmente... en que momento no te funciona el codigo???
  #14 (permalink)  
Antiguo 20/07/2010, 12:25
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

hola erbuson, rommel!

Ante todo gracias por la función erbuson, de echo yo habia intentado algo parecido cuando me pasastes lo del color en el otro post y lo que no sabia (estaba muy espeso) como ejecutarla función.

Rommel, referente a tu consulta el tema es el siguiente, este reloj me da la hora en todos esos paises y si la hora en ese pais esta entre las 8:30 y las 17:30 pero no antes de las 8:30 ni despues de las 17:30 me sale el letrero ABIERTA por lo contrario visualiza CERRADA que es el horario activo de la BOLSA, el problema esta en:

El reloj no se actualiza, se me queda con la hora de inicio.
El reloj no actualiza siempre a su horario real, aleatoriamente y no se porque si es OK, con lo que me sale ABIERTA a las 7:30 o a las 18:30 cuando deberia ser CERRADA o lo contrario a las 13:00 por ejemplo.
Y en el reloj de New York ademas tambien pregunta si es Sabado o domingo para enseñar CERRADA pero pasa lo mismo, me da ABIERTA y a veces CERRADA.

Como ves estos son los problemas que tengo he estado un mes y medio sin hacer VB y ahora me pierdo hasta que me ponga al dia dentro de mi desconocimiento de este.

Un saludo

Última edición por XYON126; 20/07/2010 a las 12:31
  #15 (permalink)  
Antiguo 20/07/2010, 12:34
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola, si por lo que entiendo el condicionante es para todos el mismo, se me ocurre que deberías hacer también un función reutilizable a la que mandes la hora y te devuelva el título de ABIERTA o CERRADA

Algo así como, (voy pensando a medida que escribo y solo es para dar una idea, se aceptan sugerencias)

Suponiendo que Label18 es HoraToronto, se podria tener una funcion tal que así:

Function CloseOpen(HoraActual As String) As String
If HoraActual >= "08:30" And HoraActual <= "17:30" Then
CloseOpen = "ABIERTA"
Else
CloseOpen = "CERRADA"
End If
End Function


A la que podrías llamar Label18.Caption = CloseOpen(HoraToronto)

Es una idea para simplificar el código.

Saludos

DE TODOS MODOS NO ME GUSTA EL TIPO DE DATOS STRING YA QUE SEGURISIMO QUE HAY ERRORES DE COMPARACION YA QUE EN STRING "17:30" ES MENOR QUE "8:30" PERO MAYOR QUE "08:30" SERIA MEJOR EMPLEAR TIPOS DATE
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #16 (permalink)  
Antiguo 20/07/2010, 12:50
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Con esta funcion, (me pico la curiosidad) te puede valer, la he testeado y funciona:

Código vb:
Ver original
  1. Public Function CloseOpen(HoraActual As Date) As String
  2.   If HoraActual > CDate("8:29:59") And HoraActual < CDate("17:29:59") Then
  3.     CloseOpen = "ABIERTA"
  4.   Else
  5.     CloseOpen = "CERRADA"
  6.   End If
  7. End Function

Puedes utilizarla así para Wellington Label17 = CloseOpen(cdate(Label8.Caption))

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #17 (permalink)  
Antiguo 21/07/2010, 13:30
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Hola erbuson!

Lo he probado y funciona como dices, el tema del refresco del reloj supongo que debere hacer un bucle pero donde, otra cosa ¿Cuantas veces es posible poner la orden "and" en un If? pues quiero activar tambien si es sabado y domingo para cerrar o dejar abierta.

Un saludo y 1000 gracias
  #18 (permalink)  
Antiguo 21/07/2010, 14:21
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola:

Puedes poner los And que quieras siempre que la comparación tenga un sentido, sin embargo en este caso se me ocurre que lo mas simple que puedes hacer es algo así ajustando debidamente las variables.

Public Function CloseOpen(HoraActual As Date) As String
If HoraActual > CDate("8:29:59") And HoraActual < CDate("17:29:59") Then
CloseOpen = "ABIERTA"
Else
CloseOpen = "CERRADA"
End If

'--------
If Dia = "Sabado" Or Dia = "Domingo" Then CloseOpen = "CERRADA"
'--------
End Function

Ya que de este modo independientemente de que por la Hora este abierta, si es Sabado o Domingo siempre la dara CERRADA

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #19 (permalink)  
Antiguo 24/07/2010, 01:23
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Hola erbuson!

Gracias por el codigo, ahora esa parte me funciona perfectamente aunque despues de un arreglillo tonto, este :

Tu codigo:

If Dia = "Sabado" Or Dia = "Domingo" Then CloseOpen = "CERRADA"

con arreglillo:

If Dia = "bado" Or Dia = "domingo" Then CloseOpen = "CERRADA"

por esa chorradita que supongo tu ya lo sabias me fallaba lo del finde, ahora solo me falta lo del refresco del reloj púes como principal problema es que se queda con la hora fija y no refresca, ¿Donde esta el error?

Un saludo
  #20 (permalink)  
Antiguo 24/07/2010, 01:42
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola:

¿ Como lo haces para actualizar los labels ? Imagino que tienes un timer y que lo tienes en enabled ya que no se me ocurre otra posibilidad.

El AutoRedraw del formulario, un DoEvents, ...

Pega la parte que usas para actualizarlo y lo pruebo.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #21 (permalink)  
Antiguo 24/07/2010, 12:14
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Hola erbuson!

Aqui posteo todo el codigo corregido, posiblemente sean varios post.

Un saludote y muchas gracias.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Dim Londres As Date
  4. Dim Nueva_York As Date
  5. Dim Tokyo As Date
  6. Dim Sidney As Date
  7. Dim Madrid As Date
  8. Dim Francfort As Date
  9. Dim Zurich As Date
  10. Dim Wellington As Date
  11. Dim Toronto As Date
  12. Dim Horario As Date
  13. Dim dia As String
  14.  
  15. Dim DifLondres As Date
  16. Dim DifNueva_York As Date
  17. Dim DifTokyo As Date
  18. Dim DifSidney As Date
  19. Dim DifWellington As Date
  20. Dim DifToronto As Date
  21. 'Funcion para cambiar el color del texto
  22. '###########################################################
  23. Private Sub AjustaColor(Letrero As Label)
  24.   ' Función para unificar y simplificar
  25.  If Letrero.Caption = "ABIERTA" Then
  26.     Letrero.ForeColor = vbGreen
  27.   ElseIf Letrero.Caption = "CERRADA" Then
  28.     Letrero.ForeColor = vbRed
  29.   Else
  30.     Letrero.ForeColor = vbBlack
  31.   End If
  32. End Sub

Efectivamente solo puedo postear 36 lineas por post, este es el primero.
  #22 (permalink)  
Antiguo 24/07/2010, 12:15
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

segundo..
Código vb:
Ver original
  1. 'Funcion para cambiar el color del texto
  2. '###########################################################
  3. Private Sub AjustaColor(Letrero As Label)
  4.   ' Función para unificar y simplificar
  5.  If Letrero.Caption = "ABIERTA" Then
  6.     Letrero.ForeColor = vbGreen
  7.   ElseIf Letrero.Caption = "CERRADA" Then
  8.     Letrero.ForeColor = vbRed
  9.   Else
  10.     Letrero.ForeColor = vbBlack
  11.   End If
  12. End Sub
  13. 'Funcion para activar el color del texto
  14. '###########################################################
  15. Public Function CloseOpen(HoraActual As Date) As String
  16.   If HoraActual > CDate("8:29:59") And HoraActual < CDate("17:29:59") Then
  17.     CloseOpen = "ABIERTA"
  18.   Else
  19.     CloseOpen = "CERRADA"
  20.   End If
  21.  
  22. '--------
  23. If dia = "sábado" Or dia = "domingo" Then CloseOpen = "CERRADA"
  24. '--------
  25.  
  26. End Function
  27.  
  28. 'Funcion para cambiar el color del texto
  29. '###########################################################
  30. Private Sub Label10_Change()
  31.   AjustaColor Label10
  32. End Sub
  #23 (permalink)  
Antiguo 24/07/2010, 12:19
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Tercero

Código vb:
Ver original
  1. 'Funcion para cambiar el color del texto
  2.  
  3. Private Sub Label11_Change()
  4.   AjustaColor Label11
  5. End Sub
  6.  
  7. Private Sub Label12_Change()
  8.   AjustaColor Label12
  9. End Sub
  10.  
  11. Private Sub Label13_Change()
  12.   AjustaColor Label13
  13. End Sub
  14.  
  15. Private Sub Label14_Change()
  16.   AjustaColor Label14
  17. End Sub
  18.  
  19. Private Sub Label15_Change()
  20.   AjustaColor Label15
  21. End Sub
  22.  
  23. Private Sub Label16_Change()
  24.   AjustaColor Label16
  25. End Sub
  26.  
  27. Private Sub Label17_Change()
  28.   AjustaColor Label17
  29. End Sub
  30.  
  31. Private Sub Label18_Change()
  32.   AjustaColor Label18
  33. End Sub
  #24 (permalink)  
Antiguo 24/07/2010, 12:21
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Cuarto..
Código vb:
Ver original
  1. Private Sub Form_Load()
  2.  
  3. 'Diferencia horaria en menos
  4. DifLondres = "1:00"
  5. DifNueva_York = "6:00"
  6. DifToronto = "6:00"
  7.  
  8. 'Diferencia horaria en más
  9. DifTokyo = "7:00"
  10. DifSidney = "8:00"
  11. DifWellington = "10:00"
  12.  
  13. Horario = Format(Time, "hh:mm")
  14. dia = Format(Date, "dddd")
  15.  
  16. Londres = Horario - DifLondres
  17. Nueva_York = Horario - DifNueva_York
  18. Tokyo = Horario + DifTokyo
  19. Sidney = Horario + DifSidney
  20. Madrid = Horario
  21. Francfort = Horario
  22. Zurich = Horario
  23. Wellington = Horario + DifWellington
  24. Toronto = Horario - DifToronto
  25.  
  26. Label1.Caption = Format(Londres, "hh:mm")
  27. Label2.Caption = Format(Nueva_York, "hh:mm")
  28. Label3.Caption = Format(Tokyo, "hh:mm")
  29. Label4.Caption = Format(Sidney, "hh:mm")
  30. Label5.Caption = Format(Madrid, "hh:mm")
  31. Label6.Caption = Format(Francfort, "hh:mm")
  32. Label7.Caption = Format(Zurich, "hh:mm")
  33. Label8.Caption = Format(Wellington, "hh:mm")
  34. Label9.Caption = Format(Toronto, "hh:mm")
  #25 (permalink)  
Antiguo 24/07/2010, 15:42
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola Xyon:

Si este es todo el código, evidentemente el problema esta en que para cambiar el valor de los labels, SOLO lo hace en el Form_Load y como bien sabes esto solamente ocurre en cuanto se carga el formulario.

Te hace falta el MOTOR que las hace cambiar.

Personalmente pienso que deberías crear una rutina que te cambie los labels, por ejemplo cambiando el nombre de Form_Load por HoraActual, ya que el código que veo incluido en el mismo es el que necesitas, despues cambias el siguiente código:

Deberás incluir un Timer con el intervalo que desees ajustar, cada minuto, cada medio minuto, etc, tu mismo y supongamos que le llamas TimerHora

Private Sub Form_Load()
HoraActual
TimerHora.Enabled = True
End

Después en el en el evento

Private Sub TimerHora_Timer()
HoraActual
End Sub


De este modo debería cambiarte cuando tu decidas los labels de Hora.

Una duda, que se me ocurre así, sin analizar demasiado es el hecho de que por la diferencia horaria, tal vez pueda darse, ya te digo que no me he entretenido en comprobarlo que sea el mismo Dia en todas los poblaciones.

De ser así la comparación Sabado/Domingo deberías condicionarla en base a cada hora local.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #26 (permalink)  
Antiguo 24/07/2010, 16:09
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola de nuevo Xyon:

Efectivamente, acabo de comprobar lo que te comentaba del horario:

¿ Que tal te parece esta idea ?

Código VB:
Ver original
  1. Private Sub Form_Load()
  2.   HoraActual
  3. End Sub
  4.  
  5. Private Sub HoraActual()
  6.   Dim Ahora As Date
  7.   Ahora = Now
  8.   Label1 = Format(DateAdd("h", -1, Ahora), "ddd hh:mm") 'Londres
  9.  Label2 = Format(DateAdd("h", -6, Ahora), "ddd hh:mm") 'NuevaYork
  10.  Label3 = Format(DateAdd("h", 7, Ahora), "ddd hh:mm")  'Tokyo
  11.  Label4 = Format(DateAdd("h", 8, Ahora), "ddd hh:mm")  'Sidney
  12.  Label5 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm")  'Madrid
  13.  Label6 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm")  'Francfort
  14.  Label7 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm")  'Zurich
  15.  Label8 = Format(DateAdd("h", 10, Ahora), "ddd hh:mm") 'Wellington
  16.  Label9 = Format(DateAdd("h", -6, Ahora), "ddd hh:mm") 'Toronto
  17. End Sub

Saludos

Por cierto, acabo de probar lo de insertar código en el foro y a mi personalmente no me aparece ninguna limitación de lineas.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Última edición por erbuson; 24/07/2010 a las 16:50
  #27 (permalink)  
Antiguo 25/07/2010, 02:22
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Hola Erbuson!

Referente a lo del tamaño del codigo, a menos que el Firefox o algo me lo limite ahora pues antes no me pasaba solo me admite 36 lineas y utilizo el HIGHLIGHT= vbScript aunque ahora lo posteo sin esto, he realizado unos cambios como comentas pero me da error "13" en esta linea y no se porque pues todos son Date o asi creo .:

Código vb:
Ver original
  1. 'Control horario Londres
  2. Label10 = CloseOpen(CDate(Label1.Caption))

el codigo con el motor (No se si lo he hecho bien) es este ahora, ¿Podrias comprobarlo?

Muchas gracias

Un saludo

Option Explicit

Dim Londres As Date
Dim Nueva_York As Date
Dim Tokyo As Date
Dim Sidney As Date
Dim Madrid As Date
Dim Francfort As Date
Dim Zurich As Date
Dim Wellington As Date
Dim Toronto As Date
Dim Horario As Date
Dim dia As String

Dim DifLondres As Date
Dim DifNueva_York As Date
Dim DifTokyo As Date
Dim DifSidney As Date
Dim DifWellington As Date
Dim DifToronto As Date


'Funcion para cambiar el color del texto
'################################################# ##########
Private Sub AjustaColor(Letrero As Label)
' Función para unificar y simplificar
If Letrero.Caption = "ABIERTA" Then
Letrero.ForeColor = vbGreen
ElseIf Letrero.Caption = "CERRADA" Then
Letrero.ForeColor = vbRed
Else
Letrero.ForeColor = vbBlack
End If
End Sub

'Funcion para activar el color del texto
'################################################# ##########
Public Function CloseOpen(HoraActual As Date) As String
If HoraActual > CDate("8:29:59") And HoraActual < CDate("17:29:59") Then
CloseOpen = "ABIERTA"
Else
CloseOpen = "CERRADA"
End If

'--------
If dia = "sábado" Or dia = "domingo" Then CloseOpen = "CERRADA"
'--------

End Function

'Funcion para cambiar el color del texto en cada Label
'################################################# ##########
Private Sub Label10_Change()
AjustaColor Label10
End Sub

Private Sub Label11_Change()
AjustaColor Label11
End Sub

Private Sub Label12_Change()
AjustaColor Label12
End Sub

Private Sub Label13_Change()
AjustaColor Label13
End Sub

Private Sub Label14_Change()
AjustaColor Label14
End Sub

Private Sub Label15_Change()
AjustaColor Label15
End Sub

Private Sub Label16_Change()
AjustaColor Label16
End Sub

Private Sub Label17_Change()
AjustaColor Label17
End Sub

Private Sub Label18_Change()
AjustaColor Label18
End Sub


'################################################# ##########
Private Sub HoraActual()

Dim Ahora As Date
Ahora = Now
Label1 = Format(DateAdd("h", -1, Ahora), "ddd hh:mm") 'Londres
Label2 = Format(DateAdd("h", -6, Ahora), "ddd hh:mm") 'NuevaYork
Label3 = Format(DateAdd("h", 7, Ahora), "ddd hh:mm") 'Tokyo
Label4 = Format(DateAdd("h", 8, Ahora), "ddd hh:mm") 'Sidney
Label5 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm") 'Madrid
Label6 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm") 'Francfort
Label7 = Format(DateAdd("h", 0, Ahora), "ddd hh:mm") 'Zurich
Label8 = Format(DateAdd("h", 10, Ahora), "ddd hh:mm") 'Wellington
Label9 = Format(DateAdd("h", -6, Ahora), "ddd hh:mm") 'Toronto

'Control horario Londres
Label10 = CloseOpen(CDate(Label1.Caption))

'Control horario New York
Label11 = CloseOpen(CDate(Label2.Caption))

'Control horario Tokyo
Label12 = CloseOpen(CDate(Label3.Caption))

'Control horario Sidney
Label13 = CloseOpen(CDate(Label4.Caption))

'Control horario Madrid
Label14 = CloseOpen(CDate(Label5.Caption))

'Control horario Francfort
Label15 = CloseOpen(CDate(Label6.Caption))

'Control horario Zürich

Label16 = CloseOpen(CDate(Label7.Caption))

'Control horario Wellington
Label17 = CloseOpen(CDate(Label8.Caption))

'Control horario Toronto
Label18 = CloseOpen(CDate(Label9.Caption))
End Sub

'################################################# ##########
Private Sub Timer1_Timer()
HoraActual
End Sub

'################################################# ##########
Private Sub Form_Load()

HoraActual
Timer1.Interval = 1000
Timer1.Enabled = True

End Sub
  #28 (permalink)  
Antiguo 25/07/2010, 04:32
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola, después te lo compruebo, de todos modos el error que te da es ur error lógico ya que yo lo único que pretendía demostrarte visualizando el día es que pueden cambiar y cuando en uno es viernes, ser sábado en el otro.

Al hacer el cdate de "sab 15:00" por ejemplo, da un error porque esto no es una fecha ya que hemos utilizado el format para ver lo que a nosotros nos interesa.

Debe hacerse de otra manera, con algun truquillo por ejemplo hacer con el right$ y el left$ separar el día de la hora o algo por el estilo.

Ya te digo, un poco mas tarde lo reviso y te comento lo que yo haría.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #29 (permalink)  
Antiguo 25/07/2010, 06:00
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Reloj fijo

Hola Xyon:

He corregido parcialmente tu código . Cuando se van a utilizar muchos Labels o controles iguales con una función mas o menos parecida es muchos mas simple y facil utilizar arrays de Controles.

En este caso he creado lo necesario, tu puedes crear el resto para la imagen del programa.

Un Array llamado QueHora con los indices QueHora(0) a QueHora(8)
Un Array llamado ComoEsta con los indices ComoEsta(0) a ComoEsta(8)

Se corresponden de o a 8 con las Poblaciones que utilizas.

Este sería el código del programa

Option Explicit

'Funcion para cambiar el color del texto
'################################################# ##########
Private Sub AjustaColor(Letrero As Label)
If Letrero.Caption = "ABIERTA" Then
Letrero.ForeColor = vbGreen
ElseIf Letrero.Caption = "CERRADA" Then
Letrero.ForeColor = vbRed
Else
Letrero.ForeColor = vbBlack
End If
End Sub


La siguiente ha sido modificada para evitar el error y recibe el Label que contiene ddd hh:mm:ss por lo que efectúa la separación y conversión necesaria.

'Funcion para determinar Abierta/Cerrada
'################################################# ##########
' Ha sido modificada para recibir el Caption del Label que muestra el día y hora
Public Function CloseOpen(LabelHora As Label) As String
Dim Hora As Date, Dia As String
Hora = CDate(Right$(LabelHora.Caption, 8))
Dia = Left$(LabelHora.Caption, 3)
If Hora > CDate("8:29:59") And Hora < CDate("17:29:59") Then
CloseOpen = "ABIERTA"
Else
CloseOpen = "CERRADA"
End If
If Dia = "sáb" Or Dia = "dom" Then CloseOpen = "CERRADA"
End Function


La siguiente rutina es el Change del Label, con la ventaja de que SOLO necesitas una por muchos Labels que tengas ya que el Index determina que Label ha cambiado.

'Funcion para cambiar el color del texto en cada Label
'################################################# ##########
Private Sub ComoEsta_Change(Index As Integer)
AjustaColor ComoEsta(Index)
End Sub


Modificada la siguiente para llamar a una nueva PonerHora, que al tenerlo de este modo tiene la ventaja de que puede muy facilmente cambiar el formato de visualización ya que debes hacerlo sólo en un sitio.

'################################################# ##########
Private Sub HoraActual()
Dim Ahora As Date, Indice As Integer
Ahora = Now
PonerHora 0, Ahora, -1 'Londres
PonerHora 1, Ahora, -6 'NuevaYork
PonerHora 2, Ahora, 7 'Tokyo
PonerHora 3, Ahora, 8 'Sidney
PonerHora 4, Ahora, 0 'Madrid
PonerHora 5, Ahora, 0 'Francfort
PonerHora 6, Ahora, 0 'Zurich
PonerHora 7, Ahora, 10 'Wellington
PonerHora 8, Ahora, -6 'Toronto
End Sub


La siguiente de poner hora, que como ves se encarga ella misma de llamar a la que modificará el texto de ABIERTA/CERRADA al tener los indices es muy facil ya que QueHora(Indice) se corresponde con ComoEsta(Indice)

'################################################# ##########
Private Sub PonerHora(Indice As Integer, LaHora As Date, Diferencia As Integer)
' Pone la Hora en la Etiqueta correspondiente a Indice
QueHora(Indice) = Format(DateAdd("h", -1, LaHora), "ddd hh:mm:ss")
' Después, la misma rutina, efectua el cambio de Abierta/Cerrada
ComoEsta(Indice) = CloseOpen(QueHora(Indice))
End Sub



'################################################# ##########
Private Sub Timer1_Timer()
HoraActual
End Sub

'################################################# ##########
Private Sub Form_Load()
HoraActual
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub


Bueno, espero no haberte confundido, la única intención como muy bien sabes por otros contactos que hemos tenido es que simplifiques tus futuaras aplicaciones.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #30 (permalink)  
Antiguo 25/07/2010, 09:43
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Reloj fijo

Hola erbuson!

Como bien dices "esperas no confundirme" desde luego confundirme no pero ahora me toca digerirlo bien y comprender lo que has posteado. Las Arrays que has creado son Date o Integer pues lo he probado y me da en este trozo de codigo el error "error de copilacion" El tipo de argumento de ByRef no coincide. y me apunta a esta parte de codigo.:

Código vb:
Ver original
  1. '################################################# ##########
  2. Private Sub PonerHora(Indice As Integer, LaHora As Date, Diferencia As Integer)
  3. ' Pone la Hora en la Etiqueta correspondiente a Indice
  4. QueHora(Indice) = Format(DateAdd("h", -1, LaHora), "ddd hh:mm:ss")
  5. ' Después, la misma rutina, efectua el cambio de Abierta/Cerrada
  6. ComoEsta(Indice) = CloseOpen(QueHora(Indice))
  7. End Sub

por otro lado veo que en esta linea de codigo recortas el nombre ¿Porque? lo pregunto por desconocimiento.

Código vb:
Ver original
  1. If Dia = "sáb" Or Dia = "dom" Then CloseOpen = "CERRADA"

Un saludo

Etiquetas: fijo, reloj
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 15:10.