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

Da Gambas-it.org - Wikipedia.
 
(19 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, che segna soltanto i secondi, 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 DrawingArea1 As DrawingArea
 
  Private DrawingArea1 As DrawingArea
  Private c As Short
+
  Private bo As Boolean
 +
Private h As Short
 +
Private m As Short
 +
Private s As Short
 
   
 
   
 
   
 
   
 
  Public Sub _new()
 
  Public Sub _new()
 
+
 
   With Me
 
   With Me
 
     .W = Screen.AvailableWidth
 
     .W = Screen.AvailableWidth
Riga 21: Riga 24:
 
   Me.Show
 
   Me.Show
 
   
 
   
   Do
+
   While Not bo
  <FONT Color=gray>' ''Ottiene il valore del secondo corrente e lo moltiplica per 6, al fine di ottenere la correlazione fra gradi e secondi sull'orologio grafico virtuale:''</font>
+
  <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>
     c = Second(Time) * 6
+
     h = Hour(Time) * 30
 +
    m = Minute(Time) * 6
 +
    s = Second(Time) * 6
 
     If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh
 
     If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh
  <FONT Color=gray>' ''L'uso dell'istruzione "Wait" consente di operare sugli Oggetti grafici eventualmente posti sul "Form":''</font>
+
  <FONT Color=gray>' ''L'uso dell'istruzione "Wait" consente di operare sui "Controlli" grafici eventualmente posti sul "Form":''</font>
     Wait 0.01
+
     Wait 0.1
   Loop
+
   Wend
 
   
 
   
 
  End
 
  End
Riga 34: Riga 39:
 
   
 
   
 
   Dim x, y, r As Short
 
   Dim x, y, r As Short
   Dim f, 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
   f = (c - 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
 +
<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
 
     .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(f))), y + (r * Sin(Rad(f))))
+
     .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 Form_Close()
 +
 +
  bo = True
 
   
 
   
 
  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