Differenze tra le versioni di "Disegnare un orologio su una DrawingArea prendendo l'orario del sistema"
Da Gambas-it.org - Wikipedia.
Riga 51: | Riga 51: | ||
.Brush = .Color(Color.Red) | .Brush = .Color(Color.Red) | ||
.LineWidth = 10.0 | .LineWidth = 10.0 | ||
− | .Ellipse(x - ((r * d) / 2), y - ((r * d) / 2), r * d, r * d, 0, 360, False) | + | .Ellipse(x - ((r * d) / 2), y - ((r * d) / 2), r * d, r * d, Rad(0), Rad(360), False) |
.Stroke | .Stroke | ||
<FONT Color=gray>' ''Imposta il cerchio e la lancetta delle ore:''</font> | <FONT Color=gray>' ''Imposta il cerchio e la lancetta delle ore:''</font> | ||
.Brush = .Color(Color.Green) | .Brush = .Color(Color.Green) | ||
.LineWidth = 1.0 | .LineWidth = 1.0 | ||
− | .Ellipse(x - ((r + 40 * d) / 2), y - ((r + 40 * d) / 2), r + 40 * d, r + 40 * d, 0, 360, False) | + | .Ellipse(x - ((r + 40 * d) / 2), y - ((r + 40 * d) / 2), r + 40 * d, r + 40 * d, Rad(0), Rad(360), False) |
.Stroke | .Stroke | ||
.LineWidth = 6.1 | .LineWidth = 6.1 | ||
Riga 65: | Riga 65: | ||
.Brush = .Color(Color.Blue) | .Brush = .Color(Color.Blue) | ||
.LineWidth = 1.0 | .LineWidth = 1.0 | ||
− | .Ellipse(x - ((r + 80 * d) / 2), y - ((r + 80 * d) / 2), r + 80 * d, r + 80 * d, 0, 360, False) | + | .Ellipse(x - ((r + 80 * d) / 2), y - ((r + 80 * d) / 2), r + 80 * d, r + 80 * d, Rad(0), Rad(360), False) |
.Stroke | .Stroke | ||
.LineWidth = 3.1 | .LineWidth = 3.1 | ||
Riga 73: | Riga 73: | ||
<FONT Color=gray>' ''Imposta il cerchio e la lancetta dei secondi:''</font> | <FONT Color=gray>' ''Imposta il cerchio e la lancetta dei secondi:''</font> | ||
.Brush = .Color(Color.Orange) | .Brush = .Color(Color.Orange) | ||
− | .Ellipse(x - ((r + 90 * d) / 2), y - ((r + 90 * d) / 2), r + 90 * d, r + 90 * d, 0, 360, False) | + | .Ellipse(x - ((r + 90 * d) / 2), y - ((r + 90 * d) / 2), r + 90 * d, r + 90 * d, Rad(0), Rad(360), False) |
.Stroke | .Stroke | ||
.LineWidth = 1.0 | .LineWidth = 1.0 |
Versione delle 18:51, 6 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.01 Wend End Public Sub DrawingArea1_Draw() Dim x, y, r As Short Dim d As Single x = DrawingArea1.W * 0.5 y = DrawingArea1.H * 0.5 ' Imposta la dimensione del raggio del cerchio, ossia della lancetta dell'orologio: r = 200 d = 2.0 With Paint ' Imposta il cerchio esterno dell'orologio: .Brush = .Color(Color.Red) .LineWidth = 10.0 .Ellipse(x - ((r * d) / 2), y - ((r * d) / 2), r * d, r * d, Rad(0), Rad(360), False) .Stroke ' Imposta il cerchio e la lancetta delle ore: .Brush = .Color(Color.Green) .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, y) .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 .End End With End Public Sub Form_Close() bo = True End