Differenze tra le versioni di "Disegnare in una DrawingArea una pseudo-galleria rettangolare tridimensionale in prospettiva con effetto grafico di movimento in avanti"
Da Gambas-it.org - Wikipedia.
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
Private c As Short = -1 | Private c As Short = -1 | ||
− | Private clr As Integer | + | Private clr As Integer |
Private vch As Integer = Color.Blue | Private vch As Integer = Color.Blue | ||
Riga 9: | Riga 9: | ||
With Me | With Me | ||
− | |||
.W = Screen.AvailableWidth | .W = Screen.AvailableWidth | ||
.H = Screen.AvailableHeight | .H = Screen.AvailableHeight | ||
Riga 20: | Riga 19: | ||
End | End | ||
+ | |||
Public Sub Form_Open() | Public Sub Form_Open() | ||
Riga 27: | Riga 27: | ||
Do | Do | ||
Inc c | Inc c | ||
− | Wait 0. | + | Wait 0.2 |
If Object.IsValid(DrawingArea1) Then | If Object.IsValid(DrawingArea1) Then | ||
DrawingArea1.Refresh | DrawingArea1.Refresh | ||
Riga 36: | Riga 36: | ||
End | End | ||
+ | |||
Public Sub DrawingArea1_Draw() | Public Sub DrawingArea1_Draw() | ||
Riga 63: | Riga 64: | ||
If c = 20 Then | If c = 20 Then | ||
+ | Paint.End() | ||
+ | c = 0 | ||
+ | vch = clr | ||
+ | clr = Rand(&000099, &FFFF99) | ||
+ | Endif | ||
+ | |||
+ | End | ||
+ | o anche con i quadrati a distanza proporzionale per un effetto un po' più realistico: | ||
+ | Private DrawingArea1 As DrawingArea | ||
+ | Private c As Short = -1 | ||
+ | Private clr As Integer | ||
+ | Private vch As Integer = Color.Blue | ||
+ | |||
+ | |||
+ | 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.White | ||
+ | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub Form_Open() | ||
+ | |||
+ | Me.Show | ||
+ | |||
+ | Do | ||
+ | Inc c | ||
+ | Wait 0.1 | ||
+ | If Object.IsValid(DrawingArea1) Then | ||
+ | DrawingArea1.Refresh | ||
+ | Else | ||
+ | Break | ||
+ | Endif | ||
+ | Loop | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub DrawingArea1_Draw() | ||
+ | |||
+ | Dim b As Short | ||
+ | |||
+ | For b = c + 1 To 24 | ||
+ | With Paint | ||
+ | .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) | ||
+ | .LineWidth = (0.1 * b) + (b / 6) | ||
+ | .Brush = Paint.Color(vch) | ||
+ | .Stroke() | ||
+ | End With | ||
+ | Next | ||
+ | |||
+ | If c == 0 Then clr = Rand(&000099, &FFFF99) | ||
+ | For b = 0 To c | ||
+ | With Paint | ||
+ | .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) | ||
+ | .LineWidth = (0.1 * b) + (b / 6) | ||
+ | .Brush = Paint.Color(clr) | ||
+ | .Stroke() | ||
+ | End With | ||
+ | Next | ||
+ | |||
+ | If c = 24 Then | ||
Paint.End() | Paint.End() | ||
c = 0 | c = 0 |
Versione attuale delle 12:36, 23 nov 2024
Disegniamo in una DrawingArea una pseudo-galleria rettangolare tridimensionale in prospettiva con effetto grafico di movimento di chi guarda in avanti, dando altresì l'impressione di percorrere tratti della galleria, ciascuno diversamente colorato rispetto al precedente:
Private DrawingArea1 As DrawingArea Private c As Short = -1 Private clr As Integer Private vch As Integer = Color.Blue 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.White End With End Public Sub Form_Open() Me.Show Do Inc c Wait 0.2 If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh Else Break Endif Loop End Public Sub DrawingArea1_Draw() Dim b As Byte ' Definisce il rettangolo per disegnare la iniziale pseudo-galleria in 3D: For b = c + 1 To 20 With Paint .Rectangle((DrawingArea1.W * 0.5) - ((DrawingArea1.W * (b / 20)) / 2), ((DrawingArea1.H * 0.5) - (DrawingArea1.H * (b / 20)) / 2), DrawingArea1.W * (b / 20), DrawingArea1.H * (b / 20)) .LineWidth = 2.5 .Brush = Paint.Color(vch) .Stroke() End With Next ' Definisce il rettangolo per disegnare la nuova pseudo-galleria con un colore diverso: If c == 0 Then clr = Rand(&000099, &FFFF99) For b = 0 To c With Paint .Rectangle((DrawingArea1.W * 0.5) - ((DrawingArea1.W * (b / 20)) / 2), ((DrawingArea1.H * 0.5) - (DrawingArea1.H * (b / 20)) / 2), DrawingArea1.W * (b / 20), DrawingArea1.H * (b / 20)) .LineWidth = 2.5 .Brush = Paint.Color(clr) .Stroke() End With Next If c = 20 Then Paint.End() c = 0 vch = clr clr = Rand(&000099, &FFFF99) Endif End
o anche con i quadrati a distanza proporzionale per un effetto un po' più realistico:
Private DrawingArea1 As DrawingArea Private c As Short = -1 Private clr As Integer Private vch As Integer = Color.Blue 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.White End With End Public Sub Form_Open() Me.Show Do Inc c Wait 0.1 If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh Else Break Endif Loop End Public Sub DrawingArea1_Draw() Dim b As Short For b = c + 1 To 24 With Paint .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) .LineWidth = (0.1 * b) + (b / 6) .Brush = Paint.Color(vch) .Stroke() End With Next If c == 0 Then clr = Rand(&000099, &FFFF99) For b = 0 To c With Paint .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) .LineWidth = (0.1 * b) + (b / 6) .Brush = Paint.Color(clr) .Stroke() End With Next If c = 24 Then Paint.End() c = 0 vch = clr clr = Rand(&000099, &FFFF99) Endif End