Disegnare un misuratore analogico su una DrawingArea
Vai alla navigazione
Vai alla ricerca
Mostriamo con seguente codice per disegnare su una DrawingArea di un possibile misuratore analogico virtuale da poter usare:
Private Const VALORI As Short = 100 ' L'ambito dei valori (da 0 sino al massimo qui espresso)
Private ARCO As Short = VALORI * 2 ' L'arco entro il quale si stenderanno graficamente i valori (da 0 sino a VALORI)
Private Const INIZIALE As Short = 170 ' Il punto (in gradi) di inizio dell'arco dei valori mostrati
Private Const PASSO As Byte = 20 ' Il passo dei valori effettivamente mostrati lungo l'arco
Private Const RAGGIO As Short = 100
Private Const AUM_RAGG As Single = 2.3
Private INARC075 As Single = INIZIALE + (ARCO * 0.75)
Private ii As Integer[] = [Color.Green, INIZIALE, ARCO * 0.75,
Color.Yellow, INARC075, ARCO * 0.15,
Color.Red, INARC075 + (ARCO * 0.15), ARCO * 0.1]
Private n As Single
Private DrawingArea1 As DrawingArea
Public Sub Form_Open()
With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
.X = 0
.Y = 0
.W = Me.W
.H = Me.H
End With
End
Public Sub DrawingArea1_MouseMove()
n = (((DrawingArea1.H / 2) - (Mouse.Y - 45)) / (DrawingArea1.H / 3)) * ARCO
If n < 0 Then n = 0
If n > ARCO Then n = ARCO
DrawingArea1.Refresh
End
Public Sub DrawingArea1_Draw()
Dim x, y, t As Short
Dim c, r2 As Float
Dim b As Byte
x = DrawingArea1.W * 0.5
y = DrawingArea1.H * 0.5
' Quando "n" è 0 deve posizionarsi sul valore in gradi rappresentato dalla Costante "INIZIALE", tenendo conto che qui 0° è posto tra il I e il IV Quadrante del piano cartesiano:
c = (n + INIZIALE)
With Paint
.Brush = .Color(Color.DarkBlue)
' Disegna il cerchietto interno:
.LineWidth = 4.0
.Ellipse(x - 4, y - 4, 8, 8, 0, 360, False)
.Stroke
' Disegna il cerchio esterno:
.LineWidth = 12.0
.Ellipse(x - ((RAGGIO * AUM_RAGG) / 2), y - ((RAGGIO * AUM_RAGG) / 2), RAGGIO * AUM_RAGG, RAGGIO * AUM_RAGG, 0, 360, False)
.Stroke
' Disegna i valori:
.Brush = .Color(Color.DarkBlue)
.Font.Size = 8.0
r2 = RAGGIO * 0.8
For t = INIZIALE To (INIZIALE + ARCO) Step PASSO
.DrawText(CStr(Fix(t - INIZIALE) \ (ARCO \ VALORI)), (x - 2) + (r2 * Cos(Rad(t))), (y - 1) + (r2 * Sin(Rad(t))), 5, 5, Align.Center)
Next
.Stroke
' Disegna l'arco con i 3 colori:
.LineWidth = 12.0
r2 = RAGGIO * 0.95
For b = 0 To 6 Step 3
.Brush = .Color(ii[b])
.Arc(x, y, r2, Rad(ii[b + 1]), Rad(ii[b + 2]), False)
.Stroke
Next
' Disegna la lancetta:
.Brush = .Color(Color.Red)
.LineWidth = 1.0
.MoveTo(x, y)
.LineTo(x + (RAGGIO * Cos(Rad(c))), y + (RAGGIO * Sin(Rad(c))))
.Stroke
' Disegna i numeri:
.DrawText(CStr(Fix(n / (ARCO / VALORI))), x - 3, y + 20, 10, 10, Align.Center)
.End
End With
End
Per far ruotare la lancetta indicatrice, cliccare all'altezza dello zero del quadrante e, mantenendo premuto il tasto sinistro del mouse, spostarsi in verticale.