En VB, ¿cuál es el código para hacer un reloj analógico? Preferiblemente con comentarios.
'Agregue un control Temporizador al formulario y establezca el Intervalo en menos de 1000.
'/////////////////////////////////
Opción Explícita Const PI = 3,1415926
Atenuar BaseX como entero, BaseY como entero, R como entero
Atenuar r1 como entero, r2 como entero, r3 como enteroPrivate Sub Form_Load()
Me.ScaleMode = 3
Me.AutoRedraw = True
Si Me.Width lt; ; 3000 Entonces Me.Height = 3000
Fin SubPrivate Sub Init()
Atenuar i como entero BaseX = Me.ScaleWidth / 2
BaseY = Me. Altura de escala / 2
R = IIf(BaseX gt; BaseY, BaseY * 0.8, BaseY * 0.8)
r1 = R * 0.2
r2 = R * 0.1
r3 = R * 0.05 Para i = 0 a 360 Paso 6
Si i Mod 30 = 0 Entonces 'Cuando
Me.DrawWidth = 2
DrawLine BaseX (R - 3) * Sin(i * PI / 180), BaseY - (R - 3) * Cos(i * PI / 180), BaseX (R - 8) * Sin(i * PI / 180), BaseY - (R - 8) * Cos(i * PI / 180), 3
Else 'Min
Me.DrawWidth = 2
Me.PSet (BaseX (R - 3) * Sin(i * PI / 180), BaseY - (R - 3) * Cos(i * PI / 180))
Fin Si
Siguiente
Me.DrawWidth = 1
Me.Circle (BaseX, BaseY), R
End Sub'draw pointer p> p>
Private Sub DrawClock()
Atenuar el segundo como entero
Atenuar el minuto como entero
Atenuar las horas como entero Segundo = DatePart(" s", Hora)
Minuto = FechaParte("n", Hora)
<p> Horas = DatePart("h", Hora)
Si Horas gt 12 Entonces
Horas = Horas - 12
Fin Si Me.DrawWidth = 1
Me.Circle (BaseX, BaseY), 4 DrawLine BaseX - r1 * Sin (Segundo * PI / 30), BaseY r1 * Cos (Segundo * PI / 30), BaseX (R - 10) * Sin(Segundo * PI / 30), BaseY - (R - 10) * Cos(Segundo * PI / 30), 0
DrawLine BaseX - r2 * Sin(Minuto * PI / 30), BaseY r2 * Cos(Minuto * PI / 30), BaseX R * 0,8 * Sin(Minuto * PI / 30), BaseY - R * 0,8 * Cos(Minuto * PI / 30), 1
DrawLine BaseX - r3 * Sin((Horas Minuto / 60) * PI / 6), BaseY r3 * Cos((Horas Minuto / 60) * PI / 6), BaseX R * 0.6 * Sin((Horas Minuto / 60) * PI / 6), BaseY - R * 0.6 * Cos((Horas Minuto / 60) * PI / 6), 2
Función de dibujo de sublínea final
Sub DrawLine privada (x1 como Entero, y1 como entero, x2 como entero, y2 como entero, bandera como entero)
Estático OldSX1 como entero, OldSX2 como entero, OldSY1 como entero, OldSY2 como entero
Estático OldMX1 Como entero, OldMX2 como entero, OldMY1 como entero, OldMY2 como entero
Estático OldHX1 como entero, OldHX2 como entero, OldHY1 como entero, OldHY2 como entero
Seleccionar indicador de caso
Caso 0
Me.DrawWidth = 1
Me.Line (OldSX1, OldSY1)-(OldSX2, OldSY2), Me.BackColor
Me.Line (x1, y1)-(x2, y2)
AntiguoSX1 = x1
AntiguoSX2 = x2
OldSY1 = y1
OldSY2 = y2
Caso 1
Me.DrawWidth = 2
Me.Line (OldMX1, OldMY1)-(OldMX2, OldMY2), Me.BackColor
Me.Line (x1, y1)-(x2, y2)
OldMX1 = x1
OldMX2 = x2
OldMY1 = y1
OldMY2 = y2
Caso 2
Me.DrawWidth = 3
Me.Line (OldHX1, OldHY1)-(OldHX2, OldHY2), Me.BackColor
Me.Line (x1, y1)-(x2, y2)
OldHX1 = x1
OldHX2 = x2
OldHY1 = y1
OldHY2 = y2
Caso más
Me.Line ( x1, y1)-(x2, y2)
Finalizar selección
Finalizar SubPrivate Sub Form_Resize()
Me.Cls
Llamar Init
End SubPrivate Sub Timer1_Timer()
Llamar a DrawClock
End Sub
Lo comenté un poco, pero creo que es Demasiado simple y no es necesario comentarlo. Antes de decir esto, lo escribí cuando estaba aburrido. Si realmente no lo entiendes, simplemente presiona F8 y léelo lentamente.