Drag-Drop di un testo in una DrawingArea

Da Gambas-it.org - Wikipedia.

Mostriamo un possibile codice per effettuare un semplice Drag-Drop di un testo da un qualsiasi oggetto in una DrawingArea. In particolare nell'esempio che segue un testo verrà prelevato e trascinato da una TextArea e rilasciato in una DrawingArea:

Private drX As Short
Private drY As Short
Private testo As String


Public Sub Form_Open()

  TextArea1.Text = "testo qualsiasi"
   
' Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop()":
  DrawingArea1.Drop = True

End


Public Sub TextArea1_MouseDrag()

' Preleviamo e trasciniamo il testo dalla "TextArea":
  TextArea1.Drag(TextArea1.Text, "text/html")

End


Public Sub DrawingArea1_Drop()

' All'atto del rilascio del testo vengono assegnate in apposite variabili
' il testo medesimo, nonché le coordinate X ed Y di rilascio all'interno della "DrawingArea".
' I valori contenuti in dette variabili, saranno utilizzati per disegnare il testo nella "DrawingArea":
  testo = Drag.Data
  drx = Drag.X
  drY = Drag.Y

End


Public Sub DrawingArea1_Draw()   ' Si disegna il testo nella "DrawingArea"

  DrawingArea1.Refresh

  With Paint
    .Font.Size = 10
    .Brush = Paint.Color(Color.Red)
    .DrawRichText(testo, drX, drY)
    .End
  End With

End


Va fatto notare che, qualora il testo da trascinare contenga caratteri di controllo supportati attualmente da Gambas (come ad esempio \n "fine riga e a capo"), se viene effettuato il semplice trascinamento del testo, esso sarà disegnato nella DrawingArea su un'unica riga senza rispettare l'effetto dei caratteri di controllo in esso presenti. Se il testo, invece, viene evidenziato, cliccando prima con il tasto sinistro del mouse all'inizio del testo medesimo tenendo contemporaneamente premuto il tasto dello Shift, e poi cliccando (sempre tenendo premuto il tasto dello Shift) alla fine del testo, allora il testo trascinato e rilasciato nella DrawingArea sarà disegnato con il rispetto dell'effetto dei caratteri di controllo supportati da Gambas.