Disegnare in successione dei punti in una DrawingArea

Da Gambas-it.org - Wikipedia.

Si intendono disegnare in una DrawingArea alcuni punti in successione e con un ritardo temporale.


Visibile soltanto il punto corrente disegnato

Nel primo caso verrà mostrato soltanto il nuovo punto disegnato: quelli precedentemente disegnati non saranno più visibili.


Uso della Classe Paint

Utilizzeremo la Classe Paint, e per imporre il ritardo temporale nel disegno dei punti, potremo adottare due modalità.


Uso del Timer

Di seguito un possibile codice con luso dell'oggetto Timer:

Private j As Short

Public Sub Form_Open()
   
 DrawingArea1.Background = Color.White
 Timer1.Delay = 1000   ' Ritardo = 1 secondo
 Timer1.Start()
   
End


Public Sub Timer1_Timer()
 
  DrawingArea1.Refresh()
 
End


Public Sub DrawingArea1_Draw()

 Dim i As Short

  i = 50 * j

  With Paint
    .FillRect(i, 100, 3, 3, Color.Red)
    .End
  End With

  Inc j

End


Uso di Wait

Di seguito un possibile codice con luso della funzione Wait:

Private j As Short


Public Sub Form_Open()

 Me.Show
  
 DrawingArea1.Background = Color.White
 
 While True
   DrawingArea1.Refresh()
   Wait 1
   Inc j
 Wend
 
End


Public Sub DrawingArea1_Draw()  

 Dim i As Short

  i = 50 * j

  With Paint
    .FillRect(i, 100, 2, 2, Color.Red)
    .End
  End With

End


Uso della Classe Draw

Utilizzeremo la Classe Draw, e per imporre il ritardo temporale nel disegno dei punti, potremo adottare due modalità.


Uso del Timer

Di seguito un possibile codice con luso dell'oggetto Timer:

Private c As Short

Public Sub Form_Open()
   
 DrawingArea1.Background = Color.White
 Timer1.Delay = 300   ' Ritardo = 300 millisecondi
 Timer1.Start()
   
End


Public Sub Timer1_Timer()
 
  DrawingArea1.Refresh()
 
End


Public Sub DrawingArea1_Draw()

  With Draw
    .Point(c, 100)
    .End
  End With

  Inc c

End


Uso di Wait

Di seguito un possibile codice con luso della funzione Wait:

Private c As Short


Public Sub Form_Open()

 Me.Show
  
 DrawingArea1.Background = Color.White
 
 While True
   DrawingArea1.Refresh()
   Wait 0.3
   Inc c
 Wend
 
End


Public Sub DrawingArea1_Draw()  

  With Draw
    .Point(c, 100)
    .End
  End With

End


Visibili il punto corrente disegnato e tutti i punti precedentemente disegnati

Nel secondo caso resteranno visibili tutti i punti precedentemente disegnati.

Utilizzeremo la Classe Draw e la funzione .FillRect() (anziché .Point(), ma potremmo utilizzare anche questa), e per imporre il ritardo temporale nel disegno dei punti, potremo adottare due modalità.


Uso del Timer

Di seguito un possibile codice con luso dell'oggetto Timer:

Private j As Short


Public Sub Form_Open()  

 DrawingArea1.Background = Color.White 
 DrawingArea1.Cached = True 

 Timer1.Delay = 1000   ' Ritardo = 1 secondo
 Timer1.Start()

End

 
Public Sub Timer1_Timer()
 
 Dim i As Short

  i = 50 * j
  With Draw
    .Begin(DrawingArea1)
    .FillRect(i, 100, 2, 2, Color.Red)
    .End
  End With
  
  Inc j
 
End


Uso di Wait

Di seguito un possibile codice con luso della funzione Wait:

Private j As Short


Public Sub Form_Open()

 Dim i As Short 

  DrawingArea1.Background = Color.White 
  DrawingArea1.Cached = True 

  Me.Show
 

  While True
    i = 50 * j
    With Draw
      .Begin(DrawingArea1)
      .FillRect(i, 100, 2, 2, Color.Red)
      .End
    End With
  
    Wait 1   ' Ritardo = 1 secondo
    Inc j
  Wend
 
End