Spostare con il mouse senza Drag&Drop un'immagine caricata in una DrawingArea

Da Gambas-it.org - Wikipedia.

Mostriamo un possibile codice per spostare con il mouse senza le risorse del Drag&Drop all'interno di una DrawingArea un'immagine caricata da un file immagine. Durante lo spostamento si manterrà il puntatore del mouse premuto nel punto dell'immagine, ove si è cliccato. [nota 1]
Va chiarito che non si farà uso di una PictureBox, per mostrare l'immagine se caricata da un file, si avrà lo spostamento della DrawingArea sul Form, bensì si avrà lo spostamento del disegno dell'immagine sulla superficie della DrawingArea !

Private DrawingArea1 As DrawingArea
Private im As Image
Private rc As Rect
Private x As Short
Private y As Short


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .Background = Color.Orange
 End With

 im = Image.Load("/percorso/del/file/immagine")

End


Public Sub Form_Arrange()

 ' Imposta un quadrilatero rettangolo ideale, adattato alle dimensioni dell'immagine caricata, che sarà usato per consentire di spostare l'immagine solo se si è cliccato al suo interno:
 rc = New Rect((DrawingArea1.W / 2) - (im.W / 2), (DrawingArea1.H / 2) - (im.H / 2), im.W, im.H)

End


Public Sub DrawingArea1_Draw()
 
 With Paint
   .DrawImage(im, rc.X, rc.Y, rc.W, rc.H, 1.0)
   .End
 End With
  
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


Note

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