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 Xyon: Primero lo facil, porque he recortado el nombre. Lo he hecho porque al poner en el label el formato " ddd hh:mm:ss " ...

  #31 (permalink)  
Antiguo 25/07/2010, 09:59
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Reloj fijo

Hola Xyon:

Primero lo facil, porque he recortado el nombre. Lo he hecho porque al poner en el label el formato "ddd hh:mm:ss" el contenido dice por ejemplo dom 15:25:00 por lo que utilizo 8 posiciones de la derecha 15:25:00 para saber la hora y tres de la izquierda dom para saber el dia

La otra respuestas es que NO HE CREADOS DOS ARRAYS de variables sino 2 ARRAYS de LABELS

Creas un Label y le pones de nombre QueHora y después vas a la propiedad Index de QueHora y le pones 0, en este momento verás que el nombre del label en la ventana de porpiedades se convierte en QueHora(0), lo Copias y Pegas automaticamente vas a tener el QueHora(1), y así hasta el QueHora(8)

Haces lo mismo con un grupo de labels llamado ComoEsta(0) hasta ComoEsta(8) y ya tienes los labels, la gran ventaja de esto es que puedes acceder a ellos dentro de un bucle por su propiedad Index.

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

IMPORTANTE:

No me había dado cuenta de que en esta rutina hay un error garrafal, ya que había dejado como fijo -1 Hora cuando debia indica ser en DateAdd Diferencia


'################################################# ##########
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", Diferencia, LaHora), "ddd hh:mm:ss")
' Después, la misma rutina, efectua el cambio de Abierta/Cerrada
ComoEsta(Indice) = CloseOpen(QueHora(Indice))
End Sub


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

Hola erbuson!

Disculpas aceptadas, nadie es perfecto es ley de vida. He corregido lo por ti comentado y ahora me sale el reloj como en la imagen inferior .:



Pero en vez de darme la hora me dice el dia, como ves, ¿Donde esta el error ahora?.

Supongo, pues es nuevo para mi que es a esto a lo que comentas del Label y del Index de renombrarlos.:



A cada label en el Nombre le he renombrado con el QueHora o ComoEsta y en el index de cada label se le ha asignado automaticamente un index del 0 al 8.

¿es asi? Pues aunque en la imagen he escrito QueHora_01 realmente solo le he nombrado con QueHora o ComoEsta a palo seco.

Un saludo

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

Hola Xyon:

Mas o menos es como dices, pero sólo mas o menos, ya que los nombres de los Labels, deben ser QueHora y ComoEsta y es muy fácil renombrarlas.

Vas sobre la primera y en la Propiedad (Nombre) le pones QueHora, después vas a su Propiedad Index y le pones un 0 (Cero) veras que en la linea azul de las propiedades te la marca como QueHora(0), después vas a la siguiente que debe ser del grupo QueHora y con sólo cambiarle el (Nombre) VB le asignará automaticamente el Index.

Después lo mismo con la otra columna de ComoEsta.

Respecto al error que has editado mientras yo escribía, si el format está con ddd hh:mm se me ocurre que aumentes el tamaño del label ya que podría ser este el problema de que no te enseñe todo el contenido.



Saludos
__________________
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; 26/07/2010 a las 15:27 Razón: Editado para añadir imagen de Propiedades
  #35 (permalink)  
Antiguo 26/07/2010, 15:09
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Reloj fijo

Hola erbuson!

Referente a los Label,s es como lo he realizado y sobre lo del dia, es como comentas, he cambiado el tamaño de estos y ahora se ve el dia y la hora con minutos y segundos.

Como ultima consulta para este tema, ¿Es posible en un formulario insertar una imagen de tamaño X y encima de esta imagen Label, combobox, etc? pues mi idea es para mejorar el reloj es añadir como fondo una imagen del Mapa Mundi y los Label de la hora encima o al lado de la situación de la ciudad correspondiente por pura estetica, un poco de ubicación y para que no se vea tan tosco o pobre.

Un saludo
  #36 (permalink)  
Antiguo 26/07/2010, 15:17
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Reloj fijo

Hola Xyon:

Debes cargar la imagen en la propiedad Picture del Formulario y ya está, sin problemas.

Tal vez debas ajustar la imagen antes al tamaño adecuado para evitar distorsión.

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

Hola erbuson!


Un millon de gracias, lo voy a remodelar y cuando lo finalice posteare la imagen.


Un saludote y buenas noches
  #38 (permalink)  
Antiguo 26/07/2010, 17:03
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Reloj fijo

y mejor posteas tu codigo... o subes tu aplicacion para beneficio de todos... siiii
__________________
Odio verte ir, pero me encanta verte yendo :)
  #39 (permalink)  
Antiguo 27/07/2010, 23:42
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Reloj fijo

Cita:
Iniciado por -rommel_ Ver Mensaje
y mejor posteas tu codigo... o subes tu aplicacion para beneficio de todos... siiii
Por mi parte no hay ningun problema aunque podriamos decir mejor el codigo de erbuson, ya que me lo ha corregido, mejorado y eliminar todo error, dejandolo como de un profesional y no de un autodidacta como hobby como soy yo.

Aqui posteo una imagen de como queda ahora con este codigo, las pictures o todo el paquete si alguien lo quiere se lo remito por E-mail.

Un saludote



aunque la version mejorada sera asi mas o menos(esta en proceso)




Bueno aqui el codigo lo de los Label necesarios, etc. con las fotos se ve, espero.

codigo .:

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


'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


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

'################################################# ##########
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


'################################################# ##########
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", Diferencia, 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

Última edición por XYON126; 29/07/2010 a las 11:36
  #40 (permalink)  
Antiguo 28/07/2010, 01:20
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Reloj fijo

Hola amigo Xyon:

Gracias por la mención que haces de mi, pero puedes considerarlo propio, no me voy a enfadar en absoluto, te doy mi palabra, si tienes claro el como y el porque de mis correcciones yo por mi parte estoy mas que satisfecho.

Probablemente la diferencia entre tu código y el mio está en que el mio es fruto de la experiencia y generalmente la experiencia es fruto de la edad (en mi caso, puedo garantizarte que es así), ojala pudiera estar yo empezando ahora con unos añitos menos pero las cosas hay que aceptarlas como vienen, no podemos tenerlo todo.

En fin, dejemos de filosofar que aquí estamos para programar. Ya sabes que cualquier duda que este en mis manos resolver lo hago y haré de buen grado.

Saludos .

Pd: Cuando tengas un momento , puedes editar tu mensaje anterior y eliminar los Dim ya que como habrás podido comprobar con el nuevo sistema no se utilizan para nada.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #41 (permalink)  
Antiguo 29/07/2010, 11:39
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Reloj fijo

Muchas gracias maestro!

Ya esta re-editado, por cierto la edad es un grado pero en mi caso solo es vejez pues creo que soy mayor que tu aunque me haya iniciado ahora con VB, como ya habre comentado en algún post es mas por hobby que por laboro aunque lo aprovecho siempre que puedo.

Un saludo
  #42 (permalink)  
Antiguo 08/08/2010, 13:14
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Reloj fijo

Cita:
Iniciado por erbuson Ver Mensaje
Hola Xyon:

Creas un Label y le pones de nombre QueHora y después vas a la propiedad Index de QueHora y le pones 0, en este momento verás que el nombre del label en la ventana de porpiedades se convierte en QueHora(0), lo Copias y Pegas automaticamente vas a tener el QueHora(1), y así hasta el QueHora(8)

Haces lo mismo con un grupo de labels llamado ComoEsta(0) hasta ComoEsta(8) y ya tienes los labels, la gran ventaja de esto es que puedes acceder a ellos dentro de un bucle por su propiedad Index.

Saludos y comenta las dudas.
Hola erbuson!

Una consulta, quiero añadir un nuevo grupo (QueHora+ComoEsta) que el horario es el mismo de Madrid pero su apertura y cierre es diferente al resto es especifico de él, he añadido este codigo en la función CloseOpen como creia que habia yo entendido y no me funciona ¿Porque, donde esta el error?

Nuevo
Código vb:
Ver original
  1. 'Funcion para determinar Abierta/Cerrada
  2. '################################################# ##########
  3. ' Ha sido modificada para recibir el Caption del Label que muestra el día y hora
  4. Public Function CloseOpen(LabelHora As Label) As String
  5. Dim Hora As Date, Dia As String
  6. Hora = CDate(Right$(LabelHora.Caption, 8))
  7. Dia = Left$(LabelHora.Caption, 3)
  8. If Hora > CDate("8:29:59") And Hora < CDate("17:29:59") Then
  9. CloseOpen = "ABIERTA"
  10. Else
  11. CloseOpen = "CERRADA"
  12. End If
  13. If Dia = "sáb" Or Dia = "dom" Then CloseOpen = "CERRADA"
  14. If Dia = "vie" And Hora >= CDate("21:55:59") Then
  15. ComoEsta(9) = "CERRADA"
  16. ElseIf Dia = "dom" And Hora >= CDate("20:48:59") Then
  17. ComoEsta(9) = "ABIERTA"
  18. End If
  19. End Function

Las lineas que he añadido son de la 14 a la 17

Un saludo y gracias por adelantado.
  #43 (permalink)  
Antiguo 09/08/2010, 00:32
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Reloj fijo

Hola Xyon:

Tu lo has modificado así:

Código:
If Dia = "vie" And Hora >= CDate("21:55:59") Then
    ComoEsta(9) = "CERRADA"
ElseIf Dia = "dom" And Hora >= CDate("20:48:59") Then
    ComoEsta(9) = "ABIERTA"
End If
El problema que tienes en este código es que, a una rutina de uso GENERICO, le has indicado un condicionante propio de una LOCALIDAD

O sea, cualquier llamada a la misma efectúa la comparación y modifica ComoEsta(9) cuando realmente sólo debería hacerse cuando recibe el valor de 9, una manera de solucionarlo sería comprobando el valor Index antes de la comparación que haces.

Voy a intentar explicártelo para que lo comprendas y lo puedas tener claro para próximas ocasiones que es lo importante:

Como sabes, CloseOpen, recibe un Label para devolver un estado. Cuando una funcion recibe un OBJETO como parámetro, TODAS las propiedades de este objeto están disponibles dentro de la misma, Tag, Index, BackColor, etc, .. así pues, en caso de ser necesario como ahora, puedes hacer las comparaciones oportunas, podrías por ejemplo añadirle algo así:


Código:
' Si estoy comprobando el 9 
IF LabelHora.Index = 9 Then
    If Dia = "vie" And Hora >= CDate("21:55:59") Then
        CloseOpen = "CERRADA"
    ElseIf Dia = "dom" And Hora >= CDate("20:48:59") Then
        CloseOpen = "ABIERTA"
    End If
End If
IMPORTANTE: Fíjate además que estoy modificando el valor devuelto y no la etiqueta que va a contener este valor devuelto ya que la misión básica de una función es devolver un valor y no modificar datos externos a ella.

Si la comparación de día y hora es correcta tal como la tienes planteada, ya que ignoro los condicionantes, debería funcionar.

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

hola erbuson!

Haber si lo he entendido, yo ahora he creado otro label el cual automaticamente se le ha asignado un index 9, que creo que es lo que me preguntas y entonces por lo que comentas el tema es que no es que se llame 9 sino que tiene un valor de una de un identificador y es a este al que hay que apuntar para cambiarle una propiedad y de esta manera solo a este se le cambia como en el caso de la hora o de la etiqueta, ¿Es correcto?


Un saludo
  #45 (permalink)  
Antiguo 09/08/2010, 02:39
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Reloj fijo

Hola:

Totalmente de acuerdo en que el LABEL te lo crea automáticamente con un indice correlativo en el momento que haces un copiar y pegar de otro Label o simplemente creas un nuevo label y le pones el mismo nombre de un array de labels y te lo asigna directamente.

De esta manera es muy simple ir añadiendo opciones, de hecho si no hubiera sido por este condicionante adicional del horario que comentas en este último caso, tan solo tenías que añadir los labels, añadirlo a HoraActual para asignarle adecuadamente el horario y listos.

El hecho es que en este caso de alguna manera debes controlar unas nuevas opciones, por lo que hacerlo condicionando el Indice dentro de la Función adecuada, consigues mantener el resto sin cambios.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

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 19:06.