Differenze tra le versioni di "Spostare con il mouse un rettangolo in una DrawingArea"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
Nel seguente esempio si potrà spostare con il mouse sulla superficie di una ''DrawingArea'' un rettangolo (o un quadrato) precedentemente disegnato. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
Nel seguente esempio si potrà spostare con il mouse sulla superficie di una ''DrawingArea'' un rettangolo (o un quadrato) precedentemente disegnato. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
<BR>In particolare durante lo spostamento del rettangolo il puntatore del mouse resterà laddove si è cliccato all'interno del rettangolo.
 
<BR>In particolare durante lo spostamento del rettangolo il puntatore del mouse resterà laddove si è cliccato all'interno del rettangolo.
  Private x1 As Short
+
  Private x As Short
  Private y1 As Short
+
  Private y As Short
  Private Const X2 As Short = 200
+
  Private Const W As Short = 200
  Private Const Y2 As Short = 100
+
  Private Const H As Short = 100
 
  Private difx As Short = -1
 
  Private difx As Short = -1
 
  Private dify As Short
 
  Private dify As Short
Riga 10: Riga 10:
 
  '''Public''' Sub _new()
 
  '''Public''' Sub _new()
 
   
 
   
   x1 = (DrawingArea1.W / 2) - (X2 / 2)
+
   x = (DrawingArea1.W / 2) - (W / 2)
   y1 = (DrawingArea1.H / 2) - (Y2 / 2)
+
   y = (DrawingArea1.H / 2) - (H / 2)
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 18: Riga 18:
 
   
 
   
 
  <FONT Color=gray>' ''Verifica se è stato cliccato all'interno del rettangolo (o quadrato):''</font>
 
  <FONT Color=gray>' ''Verifica se è stato cliccato all'interno del rettangolo (o quadrato):''</font>
   If (x1 \ Mouse.X) + (Mouse.X \ (x1 + X2)) + (y1 \ Mouse.Y) + (Mouse.Y \ (y1 + Y2)) > 0 Then Return  
+
   If (x \ Mouse.X) + (Mouse.X \ (x + W)) + (y \ Mouse.Y) + (Mouse.Y \ (y + H)) > 0 Then Return  
 
   
 
   
   difx = x1 - Mouse.X
+
   difx = x - Mouse.X
   dify = y1 - Mouse.Y
+
   dify = y - Mouse.Y
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 28: Riga 28:
 
   
 
   
 
   If difx == -1 Then Return
 
   If difx == -1 Then Return
   x1 = Mouse.X + difx
+
   x = Mouse.X + difx
   y1 = Mouse.Y + dify
+
   y = Mouse.Y + dify
 
   With DrawingArea1
 
   With DrawingArea1
 
     .Mouse = 18
 
     .Mouse = 18
Riga 47: Riga 47:
 
   
 
   
 
   With Paint
 
   With Paint
     .Rectangle(x1, y1, 200, 100, 0.0)
+
     .Rectangle(x, y, W, H, 0.0)
 
     .stroke
 
     .stroke
 
     .end
 
     .end

Versione delle 09:20, 28 nov 2021

Nel seguente esempio si potrà spostare con il mouse sulla superficie di una DrawingArea un rettangolo (o un quadrato) precedentemente disegnato. [Nota 1]
In particolare durante lo spostamento del rettangolo il puntatore del mouse resterà laddove si è cliccato all'interno del rettangolo.

Private x As Short
Private y As Short
Private Const W As Short = 200
Private Const H As Short = 100
Private difx As Short = -1
Private dify As Short

Public Sub _new()

 x = (DrawingArea1.W / 2) - (W / 2)
 y = (DrawingArea1.H / 2) - (H / 2)

End

Public Sub DrawingArea1_MouseDown()

' Verifica se è stato cliccato all'interno del rettangolo (o quadrato):
 If (x \ Mouse.X) + (Mouse.X \ (x + W)) + (y \ Mouse.Y) + (Mouse.Y \ (y + H)) > 0 Then Return 

 difx = x - Mouse.X
 dify = y - Mouse.Y
 
End

Public Sub DrawingArea1_MouseMove()

 If difx == -1 Then Return
 x = Mouse.X + difx
 y = Mouse.Y + dify
 With DrawingArea1
   .Mouse = 18
   .Refresh
 End With
 
End

Public Sub DrawingArea1_MouseUp()

 difx = -1
 DrawingArea1.Mouse = Mouse.Default

End

Public Sub DrawingArea1_Draw()

 With Paint
   .Rectangle(x, y, W, H, 0.0)
   .stroke
   .end
 End With

End

In quest'altro codice si farà uso delle risorse della Classe "Rect" per operare idealmente sul rettangolo che sarà disegnato e spostato sulla DrawingArea. [Nota 1]

Private rc As Rect
Private x As Short
Private y As Short

Public Sub _new()

' Viene creato un Oggetto del tipo "Rect", quale rettangolo ideale i cui parametri saranno passati al Metodo ".Rectangle()" della "DrawingArea" per il disegno effettivo del quadrilatero:
 rc = New Rect((DrawingArea1.W / 2) - 20, (DrawingArea1.H / 2) - 10, 40, 20)

End

Public Sub DrawingArea1_MouseDown()

 With rc
   If Not .Contains(Mouse.X, Mouse.Y) Then Return 
   x = Mouse.X - .X
   y = Mouse.Y - .Y
 End With 

End

Public Sub DrawingArea1_MouseMove()

 With rc
   If Not .Contains(Mouse.X, Mouse.Y) Then Return 
   .X = Mouse.X - x
   .Y = Mouse.Y - y
 End With
 With DrawingArea1
  .Mouse = 18
  .Refresh
 End With

End

Public Sub DrawingArea1_MouseUp()

 DrawingArea1.Mouse = Mouse.Default

End

Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = .Color(Color.Red)
   .Rectangle(rc.X, rc.Y, rc.W, rc.H, 0)
   .Fill
   .End
 End With

End


Note

[1] Vedere anche:
- Spostare con il mouse un'immagine in una DrawingArea
- Spostare con il mouse un cerchio in una DrawingArea