ayuda sobre relojes

NEOnel
18 de Noviembre del 2003
hola, antes que nada soy un poco principiante en el lenguaje visual, y queria ver si me pueden aiudar a hacer un RELOJ ANALOGO como el de windows, es para un formulario igual que tenga fecha y hora pero solo necesito el reloj, por favor aiudenme lo mas rapido posible he pasado varias noches sin dormir pensando en como se hace

rafa
18 de Noviembre del 2003
Hola:
solo tienes que poner una label, o un textbox no editable.
Luego, el caption(label) o el text(textbox) ir cambiandolo cada segundo. Esto lo consigues con el objeto timer.

Baltasar
18 de Noviembre del 2003
Rafa, creo que lo que quiere es un reloj analógico, de manecillas.
He preparado uno muy sencillo que seguro servirá de ejmplo:

Pon un control Timer1 en un formulario, su propiedad interval=1000 y enabled=true

luego agregas un picture control llamado picture1, y metes este código en el timer:

Private Sub Timer1_Timer()
Dim AngH, AngM, AngS As Double
Dim CentroX, CentroY As Double
Dim RelojW, RelojH As Double
Const pi = 3.141592
AngH = Hour(Now) * pi / 6
AngM = Minute(Now) * pi / 30
AngS = Second(Now) * pi / 30
CentroX = Picture1.Width / 2
CentroY = Picture1.Height / 2
RelojW = Picture1.Width / 2.2
RelojH = Picture1.Height / 2.2
Picture1.Cls
Picture1.DrawWidth = 3
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngH) * 0.5, CentroY - RelojH * Cos(AngH) * 0.5), RGB(50, 50, 50)
Picture1.DrawWidth = 2
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngM) * 0.8, CentroY - RelojH * Cos(AngM) * 0.8), RGB(100, 100, 100)
Picture1.DrawWidth = 1
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngS), CentroY - RelojH * Cos(AngS)), RGB(255, 0, 0)
End Sub


P.D. Si cambiamos la propiedad BackColor del picture a blanco quedará más lindo (picture1.backcolor=rgb(255,255,255) )

Saludos.

Baltasar
18 de Noviembre del 2003
Por cierto, el picture no tiene que ser cuadrado, hay que probar a hacerlo rectangular, que queda muy chulo.

rafa
18 de Noviembre del 2003
Hola de nuevo.
Siento no haber entendido bien antes tu pregunta.
Espero que consigas solucionar tu problema.
Un saludo

Elena
18 de Noviembre del 2003
no me funciona el reloj, no puedo insertar el codigo

¿a alguien le ha funcionado el reloj de baltasar?

Baltasar
18 de Noviembre del 2003
Elena, debería funcionarte. Qué error te da? Dices que no puedes insertar el código, lo que has de hacer es copiar el código tal cual está, sustituyendo al evento TIMER del control.
Me he entretenido un poco jugando con el relojito, y me ha quedado algo más lindo (ya no hace falta asignarle color, lo hace solo) :

Private Sub Timer1_Timer()
Dim AngH, AngM, AngS As Double
Dim CentroX, CentroY As Double
Dim RelojW, RelojH As Double
Const pi = 3.141592
AngH = Hour(Now) * (pi / 6)
AngM = Minute(Now) * (pi / 30)
AngS = Second(Now) * (pi / 30)
CentroX = Picture1.Width / 2
CentroY = Picture1.Height / 2
RelojW = Picture1.Width / 2.2
RelojH = Picture1.Height / 2.2
Picture1.Cls
Picture1.Top = 100
Picture1.Left = Me.Width - Picture1.Width - 200
Picture1.BackColor = BackColor
Picture1.DrawWidth = 3
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngH) * 0.5, CentroY - RelojH * Cos(AngH) * 0.5), RGB(50, 50, 50)
Picture1.DrawWidth = 2
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngM) * 0.8, CentroY - RelojH * Cos(AngM) * 0.8), RGB(100, 100, 100)
Picture1.DrawWidth = 1
Picture1.Line (CentroX, CentroY)-(CentroX + RelojW * Sin(AngS), CentroY - RelojH * Cos(AngS)), RGB(255, 0, 0)
For A = 0 To 11
Picture1.Circle (CentroX + RelojW * Sin(A * pi / 6) * 0.95, CentroY - RelojH * Cos(A * pi / 6) * 0.95), 15
Next A
End Sub

Por favor, si alguien más tiene problemas, que lo diga aquí, tal vez se me escape algo.
Saludos

sdemingo
18 de Noviembre del 2003
Hola,

Yo he probado el reloj de Baltasar y me ha funcionado perfectamente.
Yo también me he entretenido un poco arreglándolo más.
Me ha parecido una solución muy elegante la que utilizas para hacer el reloj ;-)

Un saludo
sdemingo

Baltasar
18 de Noviembre del 2003
También le has puesto día del mes como en los relojes de pulsera? jajaja (yo sí)

Bueno, me alegro de que guste, la verdad, a mí me ha encantado, ;-)

sdemingo
18 de Noviembre del 2003
Hola,

jajaja, no lo he puesto, pero ahora ya me he picado y se lo voy a poner.

Al final acabaremos con una agenda en lugar de un reloj ;-)

Saludos

Baltasar
18 de Noviembre del 2003
Sdemingo:

quiero ver cómo queda ese reloj después de pasar por tus talleres (me lo merezco, no?)

jajajaja ;-)

Baltasar
18 de Noviembre del 2003
He encontrado un problema en el reloj, y es que las manecillas daban saltos muy grandes (le he pasado la aspiradora y he engrasado el engranaje).

la línea que calcula el ángulo de las horas ANGH y el de los minutos ANGM las sustituimos por:

AngH = (Hour(Now) + (Minute(Now) / 60)) / 6 * pi
AngM = (Minute(Now) + (Second(Now) / 60)) / 30 * pi

Saludos