Differenze tra le versioni di "Disegnare un misuratore analogico su una DrawingArea"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Mostriamo con seguente codice per disegnare su una ''DrawingArea'' di un possibile misuratore analogico virtuale da poter usare: Private Const VALORI As Short = 100 <FONT...")
 
Riga 83: Riga 83:
 
  <FONT Color=gray>' ''Disegna i numeri:''</font>
 
  <FONT Color=gray>' ''Disegna i numeri:''</font>
 
     .DrawText(CStr(Fix(n / (ARCO / VALORI))), x - 3, y + 20, 10, 10, Align.Center)
 
     .DrawText(CStr(Fix(n / (ARCO / VALORI))), x - 3, y + 20, 10, 10, Align.Center)
 
+
   
 
     .End
 
     .End
 
   End With
 
   End With
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 11:16, 6 apr 2021

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