Spostare con il mouse un'immagine caricata in una DrawingArea

Da Gambas-it.org - Wikipedia.
Versione del 19 giu 2023 alle 15:39 di Vuott (Discussione | contributi) (Creata pagina con "Mostriamo un possibile codice per spostare con il mouse all'interno di una ''DrawingArea'' l'<SPAN Style="text-decoration:underline">immagine</span> caricata da un file immagi...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Mostriamo un possibile codice per spostare con il mouse all'interno di una DrawingArea l'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