Differenze tra le versioni di "Disegnare un orologio su una DrawingArea prendendo l'orario del sistema"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
− | Il codice, che segue, mostra come disegnare su una ''DrawingArea'' con la Classe ''Paint'' un essenziale orologio circolare con | + | 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. |
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
− | Private | + | Private bo As Boolean |
+ | Private h As Short | ||
+ | Private m As Short | ||
+ | Private s As Short | ||
Riga 21: | Riga 24: | ||
Me.Show | Me.Show | ||
− | + | While Not bo | |
− | <FONT Color=gray>' ''Ottiene il valore del secondo corrente e lo moltiplica per | + | <FONT Color=gray>' ''Ottiene il valore del secondo corrente e lo moltiplica 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 | If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh | ||
− | <FONT Color=gray>' ''L'uso dell'istruzione "Wait" consente di operare | + | <FONT Color=gray>' ''L'uso dell'istruzione "Wait" consente di operare sui "Controlli" grafici eventualmente posti sul "Form":''</font> |
Wait 0.01 | Wait 0.01 | ||
− | + | Wend | |
End | End | ||
Riga 34: | Riga 39: | ||
Dim x, y, r As Short | Dim x, y, r As Short | ||
− | Dim | + | Dim fh, fm, fs, d 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, ossia della lancetta dell'orologio:''</font> | ||
− | r = | + | 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> | <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> | ||
− | + | fh = h - 90 | |
− | d = 2 | + | fm = m - 90 |
+ | fs = s - 90 | ||
+ | d = 2.0 | ||
With Paint | With Paint | ||
.Brush = .Color(Color.Red) | .Brush = .Color(Color.Red) | ||
− | .Ellipse(x - 2, y - 2, | + | .Brush = .Color(Color.Red) |
+ | .LineWidth = 10.0 | ||
+ | .Ellipse(x - 2.5, y - 2.5, 5, 5, 0, 360, False) | ||
.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, 0, 360, False) | ||
+ | .Stroke | ||
+ | .Brush = .Color(Color.Green) | ||
+ | .LineWidth = 6.1 | ||
+ | .MoveTo(x, y) | ||
+ | .LineTo(x + (r * Cos(Rad(fh))), y + (r * Sin(Rad(fh))))' - (r * 0.3)) | ||
.Stroke | .Stroke | ||
.Brush = .Color(Color.Blue) | .Brush = .Color(Color.Blue) | ||
+ | .LineWidth = 3 | ||
.MoveTo(x, y) | .MoveTo(x, y) | ||
− | .LineTo(x + (r * Cos(Rad( | + | .LineTo(x + (r * Cos(Rad(fm))), y + (r * Sin(Rad(fm))))' - (r * 0.1)) |
+ | .Stroke | ||
+ | .LineWidth = 1.0 | ||
+ | .MoveTo(x, y) | ||
+ | .LineTo(x + (r * Cos(Rad(fs))), y + (r * Sin(Rad(fs)))) | ||
.Stroke | .Stroke | ||
.End | .End | ||
End With | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | Public Sub Form_Close() | ||
+ | |||
+ | bo = True | ||
End | End |
Versione delle 12:07, 4 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.
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 del secondo corrente e lo moltiplica 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 fh, fm, fs, 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 ' Imposta il punto sulla circonferenza dove è posto il secondo n. 0, ossia il grado da dove avrà inizio a ruotare la lancetta: fh = h - 90 fm = m - 90 fs = s - 90 d = 2.0 With Paint .Brush = .Color(Color.Red) .Brush = .Color(Color.Red) .LineWidth = 10.0 .Ellipse(x - 2.5, y - 2.5, 5, 5, 0, 360, False) .Ellipse(x - ((r * d) / 2), y - ((r * d) / 2), r * d, r * d, 0, 360, False) .Stroke .Brush = .Color(Color.Green) .LineWidth = 6.1 .MoveTo(x, y) .LineTo(x + (r * Cos(Rad(fh))), y + (r * Sin(Rad(fh))))' - (r * 0.3)) .Stroke .Brush = .Color(Color.Blue) .LineWidth = 3 .MoveTo(x, y) .LineTo(x + (r * Cos(Rad(fm))), y + (r * Sin(Rad(fm))))' - (r * 0.1)) .Stroke .LineWidth = 1.0 .MoveTo(x, y) .LineTo(x + (r * Cos(Rad(fs))), y + (r * Sin(Rad(fs)))) .Stroke .End End With End Public Sub Form_Close() bo = True End