Disegnare un orologio su una DrawingArea prendendo l'orario del sistema
Vai alla navigazione
Vai alla ricerca
Il codice, che segue, mostra come disegnare su una DrawingArea con la Classe Paint un essenziale orologio circolare con lancette, che segnano le ore, i minuti e i secondi, prendendo come riferimento l'orario del sistema mediante le funzioni native "Hour()", "Minute()" e "Second()".
Private DrawingArea1 As DrawingArea
Private bo As Boolean
Private h As Short
Private m As Short
Private s As Short
Public Sub _new()
With Me
.Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
.Arrangement = Arrange.Fill
End With
With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
.Background = Color.SoftYellow
End With
End
Public Sub Form_Open()
Me.Show
While Not bo
' Ottiene il valore dell'ora, del minuto e del secondo corrente e li moltiplica rispettivamente per un determinato valore, al fine di ottenere la correlazione fra gradi, ore, minuti e secondi sull'orologio grafico virtuale:
h = Hour(Time) * 30
m = Minute(Time) * 6
s = Second(Time) * 6
If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh
' L'uso dell'istruzione "Wait" consente di operare sui "Controlli" grafici eventualmente posti sul "Form":
Wait 0.1
Wend
End
Public Sub DrawingArea1_Draw()
Dim x, y, r As Short
Dim d, sx, sy, dmx, dmy As Single
x = DrawingArea1.W * 0.5
y = DrawingArea1.H * 0.5
' Imposta la dimensione del raggio del cerchio principale esterno del disegno dell'orologio:
r = 200
d = 2.0
dmx = 228
dmy = 234
With Paint
' Imposta il cerchio esterno dell'orologio:
.Brush = .Color(Color.Red)
.LineWidth = 10.0
.Ellipse(x - r, y - r, r * d, r * d, Rad(0), Rad(360), False)
.Stroke
' Imposta i numeri delle ore sul quadrante dell'orologio:
.Brush = .Color(Color.Black)
' Imposta il tipo e la dimensione del "Font" usato per mostrare i numeri delle ore sul quadrante dell'orologio:
.Font = Font["z003"]
.Font.Size = 30.0
For c As Short = 30 To 360 Step 30
sx = Cos(Rad(c - 90))
sy = Sin(Rad(c - 90))
If c / 30 > 6 Then
dmx = 236
dmy = 240
Endif
.DrawText(CStr(c / 30), dmx * sx + x, dmy * sy + y, 4, 4, Align.Center)
.Stroke
Next
' Imposta il cerchio e la lancetta delle ore:
.Brush = .Color(Color.DarkGreen)
.LineWidth = 1.0
.Ellipse(x - ((r + 40 * d) / 2), y - ((r + 40 * d) / 2), r + 40 * d, r + 40 * d, Rad(0), Rad(360), False)
.Stroke
.LineWidth = 6.1
.MoveTo(x - 1, y - 1)
.LineTo(x - ((r - 60) * Sin(Rad(-h))), y - ((r - 60) * Cos(Rad(-h))))
.Stroke
' Imposta il cerchio e la lancetta dei minuti:
.Brush = .Color(Color.Blue)
.LineWidth = 1.0
.Ellipse(x - ((r + 80 * d) / 2), y - ((r + 80 * d) / 2), r + 80 * d, r + 80 * d, Rad(0), Rad(360), False)
.Stroke
.LineWidth = 3.1
.MoveTo(x, y)
.LineTo(x - ((r - 20) * Sin(Rad(-m))), y - ((r - 20) * Cos(Rad(-m))))
.Stroke
' Imposta il cerchio e la lancetta dei secondi:
.Brush = .Color(Color.Orange)
.Ellipse(x - ((r + 90 * d) / 2), y - ((r + 90 * d) / 2), r + 90 * d, r + 90 * d, Rad(0), Rad(360), False)
.Stroke
.LineWidth = 1.0
.MoveTo(x, y)
.LineTo(x - ((r - 10) * Sin(Rad(-s))), y - ((r - 10) * Cos(Rad(-s))))
.Stroke
' Imposta il cerchio pieno nero al centro dell'orologio:
.Brush = .Color(Color.Black)
.Ellipse(x - 7, y - 6, r * 0.06, r * 0.06, Rad(0), Rad(360), False)
.Fill
End With
End
Public Sub Form_Close()
bo = True
End