Autore Topic: [Risolto] Problema con TextArea  (Letto 502 volte)

Offline borch

  • Gamberetto
  • *
  • Post: 38
    • Mostra profilo
[Risolto] Problema con TextArea
« il: 12 Dicembre 2015, 16:19:21 »
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:
Codice: [Seleziona]
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:
« Ultima modifica: 14 Dicembre 2015, 18:30:31 da borch »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:Problema con TextArea
« Risposta #1 il: 12 Dicembre 2015, 19:34:21 »
A parte che ti basta fare doppio click sulla parola per ottenerne facilmente la selezione,  comunque se desideri farlo tu col codice dovrai tener conto non solo degli spazi ma anche degli “a capo” (\n) dei non spazio (“”) dell'inizio del testo, tieni conto che Pos utilizzato con Mid ti da la posizione della lettera a sinistra dell'inserimento, le virgole i punti ecc.
Dovrai darti un po più da fare ciclando avanti e indietro l'inserimento e tener conto di tutto.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Online vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.375
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Problema con TextArea
« Risposta #2 il: 13 Dicembre 2015, 18:41:58 »
Un altro percorso potrebbe essere il seguente:
Codice: [Seleziona]
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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.161
  • Tonno verde
    • Mostra profilo
Re:Problema con TextArea
« Risposta #3 il: 14 Dicembre 2015, 18:17:47 »
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.
Codice: [Seleziona]
Print TextArea1.Selection.Text

nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline borch

  • Gamberetto
  • *
  • Post: 38
    • Mostra profilo
[Risolto] Re:Problema con TextArea
« Risposta #4 il: 14 Dicembre 2015, 18:29:57 »
Grazie mille! :2birre:
I vostri suggerimenti funzionano alla perfezione.

Metto risolto nel titolo.
Grazie ancora. :ciao: