Disegnare in una DrawingArea linee rette con il mouse

Da Gambas-it.org - Wikipedia.

Disegnare linee rette

Con il seguente codice si disegnerà una linea retta, cliccando con il tasto sinistro del mouse sulla DrawingArea e - mantenendo cliccato il tasto - spostando il puntatore del mouse lungo la superficie grafica:

Private OldX As Single   
Private OldY As Single   
Private StartX As Single   
Private StartY As Single   
Private punti As New Integer[]


Public Sub Form_Open()

 DrawingArea1.Cursor = New Cursor(Picture["icon:/16/pen"], 2, 13)
  
End


Public Sub DrawingArea1_Draw()   
  
 Dim i As Integer 
 
 With Paint
   .Brush = .Color(Color.Red)
   .MoveTo(StartX, StartY)
   .LineTo(OldX, OldY)
   For i = 0 To punti.Max Step 4 
     .MoveTo(punti[i], punti[i + 1])
     .LineTo(punti[i + 2], punti[i + 3])
   Next
   .Stroke
   .End
 End With       
 
End
 

Public Sub DrawingArea1_MouseDown()     
  
  StartX = Mouse.X   
  StartY = Mouse.Y   
  OldX = StartX   
  OldY = StartY         
  
End
  

Public Sub DrawingArea1_MouseMove() 
  
  OldX = Mouse.X   
  OldY = Mouse.Y   

  DrawingArea1.Refresh()     
  
End


Public Sub DrawingArea1_MouseUp() 
  
  punti.Push(StartX) 
  punti.Push(StartY) 
  punti.Push(Mouse.StartX)
  punti.Push(Mouse.StartY)
   
End


Far restare visibili le linee precedentemente disegnate

Per disegnare su una DrawingArea con il mouse due o più linee rette in modo tale che, le linee precedentemente disegnate, restino visibili sulla DrawingArea ad ogni disegno di una nuova linea, potremo adottare un codice come il seguente: [Nota 1]

Private OldX As Single   
Private OldY As Single   
Private StartX As Single   
Private StartY As Single   
Private punti As New Integer[]


Public Sub Form_Open()

 DrawingArea1.Cursor = New Cursor(Picture["icon:/16/pen"], 2, 13)
  
End


Public Sub DrawingArea1_Draw()   
  
 Dim i As Integer 
 
 With Paint
   .Brush = .Color(Color.Red)
   .MoveTo(StartX, StartY)
   .LineTo(OldX, OldY)
   For i = 0 To punti.Max Step 4 
     .MoveTo(punti[i], punti[i + 1])
     .LineTo(punti[i + 2], punti[i + 3])
   Next
   .Stroke
   .End
 End With       
 
End
 

Public Sub DrawingArea1_MouseDown()     
  
  StartX = Mouse.X   
  StartY = Mouse.Y   
  OldX = StartX   
  OldY = StartY         
  
End
  

Public Sub DrawingArea1_MouseMove() 
  
  OldX = Mouse.X   
  OldY = Mouse.Y   

  DrawingArea1.Refresh()     
  
End


Public Sub DrawingArea1_MouseUp() 
  
  punti.Push(StartX) 
  punti.Push(StartY) 
  punti.Push(OldX) 
  punti.Push(OldY)
   
End


Note

[1] Il codice è stato realizzato dall'utente Gianluigi del forum gambas-it.org .