Copiare uno o più caratteri di un testo da una Label o da una TextLabel e incollarli in un altro Controllo di testo
Da Gambas-it.org - Wikipedia.
Versione del 31 mag 2023 alle 10:03 di Vuott (Discussione | contributi)
Per copiare uno o più caratteri - anche quelli accentati (àèéìòù) di un testo da una Label o da una TextLabel e incollarli in un altro Controllo grafico di testo, è possibile usare il seguente codice:
Private fo As New Font Private rrcc As New Rect[] Private lt As Short Private cp As String Public Sub Form_Open() TextLabel1.Text = "Lì o là andrò, perché è sempre di più !" With Label1 .Alignment = Align.TopLeft .Background = Color.SoftYellow End With For c As Short = 0 To TextLabel1.Text.Len - 1 ' Per ogni carattere del testo, presente nella "TextLabel", viene individuato il rettangolo dato dalle sue dimensioni: rrcc.Push(fo.TextSize(TextLabel1.Text[c])) ' Per ogni carattere del testo si individua a quanti pixel dall'inizio del testo si trova il lato sinistro del proprio rettangolo (quindi a quanti pixel il carattere si trova dal pixel iniziale del testo): rrcc[c].X = fo.TextSize(Left(TextLabel1.Text, c)).W Next End Public Sub TextLabel1_MouseDown() For Each rc As Rect In rrcc ' Se il puntatore del mouse clicca all'interno di un rettangolo di un carattere...: If rc.Contains(Mouse.X, Mouse.Y) Then ' ...allora copia il carattere sul quale si è cliccato con il mouse: For c As Short = rrcc.Find(rc) To rrcc.Find(rc) + 1 t.Push(Asc(TextLabel1.Text[c])) cp = t.ToString(0, t.Count) If Asc(TextLabel1.Text[c]) < 128 Then Break Next t.Clear ' Ricorda la posizione numerica all'interno della stringa testuale del primo carattere copiato : lt = rrcc.Find(rc) Endif Next End Public Sub TextLabel1_MouseMove() For c As Short = 0 To rrcc.Max ' Se spostando il puntatore del mouse, si passa sopra il rettangolo di un carattere...: If rrcc[c].Contains(Mouse.X, Mouse.Y) Then ' ...allora, se si sta andando da sinistra a destra, ossia in senso inverso alla scrittura del testo, il passaggio del puntatore del mouse non viene preso in considerazione...: If rrcc.Find(rrcc[c]) < lt Then Continue ' ...altrimenti, si copia nella variabile "cp" di tipo stringa il carattere sul quale il puntatore del mouse è passato: For n As Short = rrcc.Find(rrcc[c]) To rrcc.Find(rrcc[c]) + 1 If Asc(TextLabel1.Text[n]) > 127 Then t.Push(Asc(TextLabel1.Text[n])) t.Push(Asc(TextLabel1.Text[n + 1])) ' Incrementa il contatore del ciclo "FOR...NEXT": n += 1 Else t.Push(Asc(TextLabel1.Text[n])) Endif cp &= t.ToString(0, t.Count) If Asc(TextLabel1.Text[n]) < 128 Then Break Next t.Clear ' Inoltre ricorda la posizione numerica del carattere copiato all'interno della stringa testuale: lt = rrcc.Find(rrcc[c]) Endif Next End Public Sub TextLabel1_MouseUp() Clipboard.Copy(cp) End Public Sub Label1_MouseUp() Label1.Text = Clipboard.Paste() End