Ho un problema che non riesco a risolvere. :-\
Vorrei poter selezionare una parola intera di una TextArea, partendo dalla posizione del cursore.
Ad esempio:
... lorem ipsum dolor ...
se il cursore si trova ta la "p" e la "s", premendo un pulsante tutta la parola "ipsum" dovrebbe essere selezionata.
Ho scritto queste due linee al volo:
i = TextArea1.Pos
j = TextArea1.Pos
While (i > 1) And (Mid(TextArea1.Text, i, 1) <> " ")
i = i - 1
Wend
While (Mid(TextArea1.Text, j, 1) <> " ") And (j < Len(TextArea1.Text))
j = j + 1
Wend
TextArea1.Select(i, j - i -1)
Ottengo però un comportamento strano.
A volte la parola è effettivamente evidenziata.
Altre volte invece solo mezza, o parte della parola precedente.
Ho notato che se immetto nella TextArea del testo direttamente da tastiera il problema non compare.
Se invece faccio copia e incolla da un browser, allora sorge questa anomalia.
Forse con il copia e incolla vengono immessi dei caratteri speciali invisibili?
Sto realizzando una semplice interfaccia che mi permetta di costruire facilmente dei csv da importare in un programma SRS come Anki.
Grazie mille. :ciao:
Un altro percorso potrebbe essere il seguente:
Public Sub Form_Open()
TextArea1.Text = "aaa bbbé ccccc,\ndddddd eeeeò ffff."
End
Public Sub Button1_Click()
Dim i, ri As Integer
Dim testo As String
' Teniamo in dovuta considerazione quanto evidenziato da Gianluigi.
' In più aggiungiamo uno spazio alla fine del testo.
testo = Replace(TextArea1.Text, "\n", Chr(32)) & Chr(32)
' Nel calcolo della lunghezza reale del testo rendiamo unico il doppio valore dei caratteri non-ASCII:
For i = 1 To TextArea1.Length
If IsAscii(Mid(testo, i, 1)) = False Then Mid(testo, i, 1) = Null
Next
' Aggiustiamo la posizione del cursore qualora esso sia all'inizio del testo:
If TextArea1.Pos = 0 Then TextArea1.Pos = 1
' Troviamo il primo carattere dello "spazio" alla sinistra del cursore:
ri = RInStr(testo, Chr(32), TextArea1.pos)
' Selezioniamo la parola, dopo aver individuato alche il primo "spazio" dopo la posizione del cursore:
TextArea1.Select(ri, InStr(testo, Chr(32), TextArea1.pos) - ri - 1)
End
Adesso funziona bene l'unica cosa un po bizzarra è che quando ti posizioni all'inizio del testo seleziona lo spazio fra due parole, mentre se ti poni alla fine seleziona la parola.
Io comunque penso che l'utente preferisca selezionare la parola e agire poi sulla selezione.
Print TextArea1.Selection.Text