Spostare con il mouse un'ellisse in una DrawingArea

Da Gambas-it.org - Wikipedia.

Nel seguente esempio si potrà spostare con il mouse sulla superficie di una DrawingArea un'ellisse precedentemente disegnata. [Nota 1]

Private DrawingArea1 As DrawingArea
Private Const RAGGIO_MAGGIORE As Float = 200.0
Private Const RAGGIO_MINORE As Float = 100.0
Private x As Short
Private y As Short
Private difx As Short = -1
Private dify 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"
   .X = 0
   .Y = 0
   .Background = Color.White
 End With

End

Public Sub Form_Activate()

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

End

Public Sub DrawingArea1_MouseDown()

' Verifica se il punto ove si è cliccato con il mouse non è esterno al rettangolo di selezione dell'ellisse:
 If (Mouse.X < x) Or (Mouse.X > (x + RAGGIO_MAGGIORE)) Or (Mouse.Y < y) Or (Mouse.Y > (y + RAGGIO_MINORE)) Then Return

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

Public Sub DrawingArea1_MouseMove()

' Se il punto, ove si è cliccato con il mouse è esterno al rettangolo di selezione dell'ellisse, allora la variabile "difx" non ha cambiato il valore assegnatogli dall'ultimo Evento "_MouseUp()":
 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
   .Ellipse(x, y, RAGGIO_MAGGIORE, RAGGIO_MINORE, Rad(0), Rad(360), False)
   .Stroke
   .End
 End With

End


Note

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