Differenze tra le versioni di "Drag-Drop di un testo in una DrawingArea"
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Mostriamo un possibile codice per effettuare un semplice ''Drag-Drop'' di un testo da un qualsiasi | + | Mostriamo un possibile codice per effettuare un semplice ''Drag-Drop'' di un testo da un qualsiasi Controllo grafico in una ''DrawingArea''. |
+ | |||
+ | Nell'esempio che segue un testo verrà semplicemente prelevato e trascinato da una ''TextArea'' e rilasciato in una ''DrawingArea'': | ||
Private drX As Short | Private drX As Short | ||
Private drY As Short | Private drY As Short | ||
Riga 7: | Riga 9: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | + | TextArea1.Text = "testo qualsiasi" | |
<FONT color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop()":''</font> | <FONT color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop()":''</font> | ||
− | + | DrawingArea1.Drop = True | |
'''End''' | '''End''' | ||
Riga 18: | Riga 20: | ||
<FONT color=gray>' ''Preleviamo e trasciniamo il testo dalla "TextArea":''</font> | <FONT color=gray>' ''Preleviamo e trasciniamo il testo dalla "TextArea":''</font> | ||
− | + | TextArea1.Drag(TextArea1.Text, "text/html") | |
'''End''' | '''End''' | ||
Riga 25: | Riga 27: | ||
'''Public''' Sub DrawingArea1_Drop() | '''Public''' Sub DrawingArea1_Drop() | ||
− | <FONT color=gray>' ''All'atto del rilascio del testo vengono assegnate in apposite variabili | + | <FONT color=gray>' ''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":''</font> | ' ''I valori contenuti in dette variabili, saranno utilizzati per disegnare il testo nella "DrawingArea":''</font> | ||
− | + | testo = Drag.Data | |
− | + | drx = Drag.X | |
− | + | drY = Drag.Y | |
− | + | ||
+ | DrawingArea1.Refresh | ||
+ | |||
'''End''' | '''End''' | ||
Riga 37: | Riga 40: | ||
'''Public''' Sub DrawingArea1_Draw() <FONT color=gray>' ''Si disegna il testo nella "DrawingArea"''</font> | '''Public''' Sub DrawingArea1_Draw() <FONT color=gray>' ''Si disegna il testo nella "DrawingArea"''</font> | ||
− | + | With Paint | |
− | + | .Font.Size = 10 | |
− | + | .Brush = Paint.Color(Color.Red) | |
− | + | .DrawRichText(testo, drX, drY) | |
− | + | .End | |
− | + | End With | |
− | |||
− | |||
'''End''' | '''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. | 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. | ||
Riga 55: | Riga 54: | ||
Per conservare - durante un nuovo rilascio del testo nella ''DrawingArea'' - il testo già trascinato, bisognerà inserire i valori (ed in particolare: testo e coordinate di rilascio) di ciascun trascinamento effettuato in una variabile di tipo ''Struttura'', che a sua volta dovrà essere memorizzata all'interno di una variabile vettoriale del tipo della ''Struttura'' dichiarata nel programma. | Per conservare - durante un nuovo rilascio del testo nella ''DrawingArea'' - il testo già trascinato, bisognerà inserire i valori (ed in particolare: testo e coordinate di rilascio) di ciascun trascinamento effettuato in una variabile di tipo ''Struttura'', che a sua volta dovrà essere memorizzata all'interno di una variabile vettoriale del tipo della ''Struttura'' dichiarata nel programma. | ||
− | Ogni qualvolta avviene il disegno all'interno della ''DrawingArea'' del nuovo testo trascinato, bisognerà mediante un apposito ciclo far ridisegnare dalla ''DrawingArea'' anche gli elementi grafici (i vari testi), sino a quel momento trascinati e disegnati, sulla base dei valori memorizzati - per ciascun testo trascinato - in un'apposita variabile | + | Ogni qualvolta avviene il disegno all'interno della ''DrawingArea'' del nuovo testo trascinato, bisognerà mediante un apposito ciclo far ridisegnare dalla ''DrawingArea'' anche gli elementi grafici (i vari testi), sino a quel momento trascinati e disegnati, sulla base dei valori memorizzati - per ciascun testo trascinato - in un'apposita variabile del tipo della ''Struttura'' dichiarata. |
− | |||
Mostriamo un semplice esempio: | Mostriamo un semplice esempio: | ||
Riga 71: | Riga 69: | ||
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
− | + | TextArea1.Text = "testo 1" | |
<FONT Color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font> | <FONT Color=gray>' ''Attiviamo la capacità della "DrawingArea" di sollevare l'evento "_Drop():''</font> | ||
− | + | DrawingArea1.Drop = True | |
'''End''' | '''End''' | ||
Riga 82: | Riga 80: | ||
<FONT Color=gray>' ''Preleviamo e trasciniamo il testo dalla "TextArea":''</font> | <FONT Color=gray>' ''Preleviamo e trasciniamo il testo dalla "TextArea":''</font> | ||
− | + | TextArea1.Drag(TextArea1.Text, "text/html") | |
'''End''' | '''End''' | ||
Riga 92: | Riga 90: | ||
<FONT Color=gray>' ''All'atto del rilascio del testo viene creata una variabile del tipo della "Struttura" dichiarata.'' | <FONT Color=gray>' ''All'atto del rilascio del testo viene creata una variabile del tipo della "Struttura" dichiarata.'' | ||
− | ' ''Inoltre vengono assegnate ai corrispondenti membri della variabile "Struttura" il testo trascinato, | + | ' ''Inoltre vengono assegnate ai corrispondenti membri della variabile "Struttura" il testo trascinato, nonché le coordinate X ed Y di rilascio del testo medesimo all'interno della "DrawingArea".'' |
− | |||
' ''I valori contenuti nei predetti membri della "Struttura", saranno utilizzati per disegnare il testo nella "DrawingArea".''</font> | ' ''I valori contenuti nei predetti membri della "Struttura", saranno utilizzati per disegnare il testo nella "DrawingArea".''</font> | ||
− | + | With t = New VALORITESTO | |
− | + | .testo = Drag.Data | |
− | + | .drx = Drag.X | |
− | + | .dry = Drag.Y | |
− | + | End With | |
− | + | vt.Push(t) | |
− | + | Inc i | |
− | + | TextArea1.Text = "testo " & CStr(i + 1) | |
+ | |||
+ | DrawingArea1.Refresh | ||
'''End''' | '''End''' | ||
− | '''Public''' Sub DrawingArea1_Draw() <FONT Color=gray>' ''Si disegna il testo nella "DrawingArea"</font> | + | '''Public''' Sub DrawingArea1_Draw() <FONT Color=gray>' ''Si disegna il testo nella "DrawingArea"''</font> |
Dim n As Integer | Dim n As Integer | ||
− | + | For n = 0 To vt.Max | |
+ | With Paint | ||
+ | .Font.Size = 10 | ||
+ | .Brush = Paint.Color(Color.Red) | ||
+ | .DrawRichText(vt[n].testo, vt[n].drX, vt[n].drY) | ||
+ | End With | ||
+ | Next | ||
+ | |||
+ | <FONT Color=gray>' ''Per non rischiare di perdere gli inserimenti già effettuati sulla "DrawingArea", è opportuno non prelevare per il trascinamento parti del testo evidenziate. Pertanto si provvederà nel codice ad eliminare ogni eventuale automatica evidenziazione anche parziale del testo da trascinare.</font> | ||
+ | TextArea1.Select(String.Len(TextArea1.Text), 0) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' |
Versione attuale delle 17:12, 5 giu 2023
Mostriamo un possibile codice per effettuare un semplice Drag-Drop di un testo da un qualsiasi Controllo grafico in una DrawingArea.
Nell'esempio che segue un testo verrà semplicemente 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 DrawingArea1.Refresh End Public Sub DrawingArea1_Draw() ' Si disegna il testo nella "DrawingArea" 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.
Conservare il testo precedentemente trascinato
Per conservare - durante un nuovo rilascio del testo nella DrawingArea - il testo già trascinato, bisognerà inserire i valori (ed in particolare: testo e coordinate di rilascio) di ciascun trascinamento effettuato in una variabile di tipo Struttura, che a sua volta dovrà essere memorizzata all'interno di una variabile vettoriale del tipo della Struttura dichiarata nel programma.
Ogni qualvolta avviene il disegno all'interno della DrawingArea del nuovo testo trascinato, bisognerà mediante un apposito ciclo far ridisegnare dalla DrawingArea anche gli elementi grafici (i vari testi), sino a quel momento trascinati e disegnati, sulla base dei valori memorizzati - per ciascun testo trascinato - in un'apposita variabile del tipo della Struttura dichiarata.
Mostriamo un semplice esempio:
Public Struct VALORITESTO drx As Short dry As Short testo As String End Struct Private vt As New VALORITESTO[] Private i As Integer Public Sub Form_Open() TextArea1.Text = "testo 1" ' 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() Dim t As VALORITESTO ' All'atto del rilascio del testo viene creata una variabile del tipo della "Struttura" dichiarata. ' Inoltre vengono assegnate ai corrispondenti membri della variabile "Struttura" il testo trascinato, nonché le coordinate X ed Y di rilascio del testo medesimo all'interno della "DrawingArea". ' I valori contenuti nei predetti membri della "Struttura", saranno utilizzati per disegnare il testo nella "DrawingArea". With t = New VALORITESTO .testo = Drag.Data .drx = Drag.X .dry = Drag.Y End With vt.Push(t) Inc i TextArea1.Text = "testo " & CStr(i + 1) DrawingArea1.Refresh End Public Sub DrawingArea1_Draw() ' Si disegna il testo nella "DrawingArea" Dim n As Integer For n = 0 To vt.Max With Paint .Font.Size = 10 .Brush = Paint.Color(Color.Red) .DrawRichText(vt[n].testo, vt[n].drX, vt[n].drY) End With Next ' Per non rischiare di perdere gli inserimenti già effettuati sulla "DrawingArea", è opportuno non prelevare per il trascinamento parti del testo evidenziate. Pertanto si provvederà nel codice ad eliminare ogni eventuale automatica evidenziazione anche parziale del testo da trascinare. TextArea1.Select(String.Len(TextArea1.Text), 0) End