Differenze tra le versioni di "Disegnare un orologio su una DrawingArea prendendo l'orario del sistema"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il codice, che segue, mostra come disegnare su una ''DrawingArea'' con la Classe ''Paint'' un essenziale orologio circolare con lancetta, prendendo come riferimento l'orario d...")
 
 
(23 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Il codice, che segue, mostra come disegnare su una ''DrawingArea'' con la Classe ''Paint'' un essenziale orologio circolare con lancetta, prendendo come riferimento l'orario del sistema.
+
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 n As Single
+
  Private DrawingArea1 As DrawingArea
 +
Private bo As Boolean
 +
Private h As Short
 +
Private m As Short
 +
Private s As Short
 
   
 
   
  '''Public''' Sub Form_Open()
+
   
    
+
Public Sub _new()
   With Timer1
+
<FONT Color=gray>' ''Ogni centesimo di secondo si attiva il "Timer" per andare a vedere l'orario del sistema:''</font>
+
   With Me
     .Delay = 100
+
    .W = Screen.AvailableWidth
    .Start
+
    .H = Screen.AvailableHeight
 +
    .Arrangement = Arrange.Fill
 +
   End With
 +
  With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
 +
     .Background = Color.SoftYellow
 
   End With
 
   End With
 
 
'''End'''
 
 
   
 
   
  '''Public''' Sub DrawingArea1_Draw()
+
  End
 
+
 +
Public Sub Form_Open()
 +
 +
  Me.Show
 +
 +
  While Not bo
 +
<FONT Color=gray>' ''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:''</font>
 +
    h = Hour(Time) * 30
 +
    m = Minute(Time) * 6
 +
    s = Second(Time) * 6
 +
    If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh
 +
<FONT Color=gray>' ''L'uso dell'istruzione "Wait" consente di operare sui "Controlli" grafici eventualmente posti sul "Form":''</font>
 +
    Wait 0.1
 +
  Wend
 +
 +
End
 +
 +
Public Sub DrawingArea1_Draw()
 +
 
   Dim x, y, r As Short
 
   Dim x, y, r As Short
   Dim c, d As Float
+
   Dim d, sx, sy, dmx, dmy As Single
 
+
 
   x = DrawingArea1.W * 0.5
 
   x = DrawingArea1.W * 0.5
 
   y = DrawingArea1.H * 0.5
 
   y = DrawingArea1.H * 0.5
  <FONT Color=gray>' ''Imposta la dimensione del raggio del cerchio, ossia della lancetta dell'orologio:''</font>
+
  <FONT Color=gray>' ''Imposta la dimensione del raggio del cerchio principale esterno del disegno dell'orologio:''</font>
   r = 60
+
   r = 200
<FONT Color=gray>' ''Imposta il punto sulla circonferenza dove è posto il secondo n. 0, ossia il grado da dove avrà inizio a ruotare la lancetta:''</font>
+
  d = 2.0
   c = (n - 90)
+
   d = 2
+
   dmx = 228
 
+
   dmy = 234
 +
 
   With Paint
 
   With Paint
 +
<FONT Color=gray>' ''Imposta il cerchio esterno dell'orologio:''</font>
 
     .Brush = .Color(Color.Red)
 
     .Brush = .Color(Color.Red)
     .Ellipse(x - 2, y - 2, 4, 4, 0, 360, False)
+
     .LineWidth = 10.0
     .Ellipse(x - ((r * d) / 2), y - ((r * d) / 2), r * d, r * d, 0, 360, False)
+
     .Ellipse(x - r, y - r, r * d, r * d, Rad(0), Rad(360), False)
 
     .Stroke
 
     .Stroke
 +
<FONT Color=gray>' ''Imposta i numeri delle ore sul quadrante dell'orologio:''</font>
 +
    .Brush = .Color(Color.Black)
 +
<FONT Color=gray>' ''Imposta il tipo e la dimensione del "Font" usato per mostrare i numeri delle ore sul quadrante dell'orologio:''</font>
 +
    .Font = Font["<FONT Color=#B22222>z003</font>"]
 +
    .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
 +
<FONT Color=gray>' ''Imposta il cerchio e la lancetta delle ore:''</font>
 +
    .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
 +
<FONT Color=gray>' ''Imposta il cerchio e la lancetta dei minuti:''</font>
 
     .Brush = .Color(Color.Blue)
 
     .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
 +
<FONT Color=gray>' ''Imposta il cerchio e la lancetta dei secondi:''</font>
 +
    .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)
 
     .MoveTo(x, y)
     .LineTo(x + (r * Cos(Rad(c))), y + (r * Sin(Rad(c))))
+
     .LineTo(x - ((r - 10) * Sin(Rad(-s))), y - ((r - 10) * Cos(Rad(-s))))
 
     .Stroke
 
     .Stroke
 +
<FONT Color=gray>' ''Imposta il cerchio pieno nero al centro dell'orologio:''</font>
 +
    .Brush = .Color(Color.Black)
 +
    .Ellipse(x - 7, y - 6, r * 0.06, r * 0.06, Rad(0), Rad(360), False)
 +
    .Fill
 +
<FONT Color=gray>' ''Termina l'operazione di disegno:''</font>
 
     .End
 
     .End
 
   End With
 
   End With
 
 
'''End'''
 
 
   
 
   
  '''Public''' Sub Timer1_Timer()
+
  End
 
+
  <FONT Color=gray>' ''Ottiene il valore del secondo corrente e lo moltiplica per 6.0, al fine di ottenere la correlazione fra gradi e secondi sull'orologio grafico virtuale:''</font>
+
Public Sub Form_Close()
   n = CSingle(Format(Time, "ss")) * 6.0
+
   
 
+
   bo = True
  DrawingArea1.Refresh
+
 
+
  End
  '''End'''
 

Versione attuale delle 16:10, 22 giu 2023

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
   .W = Screen.AvailableWidth
   .H = 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
' Termina l'operazione di disegno:
   .End
 End With

End

Public Sub Form_Close()

 bo = True

End