Spostare con il mouse un Controllo grafico generato in una DrawingArea

Da Gambas-it.org - Wikipedia.
Versione del 7 giu 2023 alle 05:44 di Vuott (Discussione | contributi) (Creata pagina con "Il codice necessario per creare e per spostare all'interno di una ''DrawingArea'' un proprio Oggetto grafico "''figlio''" è abbastanza semplice. <SUP>[[[#Note|nota 1]]&#...")

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

Il codice necessario per creare e per spostare all'interno di una DrawingArea un proprio Oggetto grafico "figlio" è abbastanza semplice. [nota 1]

Private DrawingArea1 As DrawingArea
Private lb As Label
Private i As Integer
Private spx As Short
Private spy 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"
   .Background = Color.White
 End With

End

Public Sub DrawingArea1_MouseDown()

' Se non si è cliccato con il tasto sinistro del mouse, si esce dalla routine:
 If Not Mouse.Left Then Return

 Inc i
 
' Genera e imposta una "Label", assegnadola come "figlia" alla "DrawingArea":
 With lb = New Label(DrawingArea1) As "Etichetta"
   .X = Mouse.X
   .Background = Color.SoftOrange
   .Border = Border.Raised
   .Text = " Label " & CStr(i)
 End With
    
End 

Public Sub DrawingArea1_MouseMove()   
 
' Se non si è cliccato con il tasto sinistro del mouse, si esce dalla routine:
 If Not Mouse.Left Then Return

 DrawingArea1.Mouse = 18
 lb.X = Mouse.X
 lb.Y = Mouse.Y
  
End

Public Sub DrawingArea1_MouseUp()

' Se non si è cliccato con il tasto sinistro del mouse, si esce dalla routine:
 If Not Mouse.Left Then Return

 DrawingArea1.Mouse = Mouse.Default
 
 With lb
   .W = .Font.TextWidth(.Text) + 5
   .H = .Font.TextHeight(.Text)
   .Y = Mouse.Y - .H
 End With
   
End 

Public Sub Etichetta_MouseDown()
 
 Select Case Mouse.Button
   Case 1
     spx = Mouse.X
     spy = Mouse.Y
   Case 2          ' Se si clicca con il tasto destro del mouse, la "Label" puntata viene distrutta
     Last.Delete
 End Select
 
End

Public Sub Etichetta_MouseMove()
 
 Last.Mouse = 18
 With Last
   .X = .X + Mouse.X - spx
   .Y = .Y + Mouse.Y - spy
 End With
 
End

Public Sub Etichetta_MouseUp()
 
 Last.Mouse = Mouse.Default
 
End


Note

[1] Si rimanda più in generale sugli Oggetti grafici alla seguente pagina: Spostare oggetti con il mouse all'interno di un contenitore senza Drag & Drop.