Ho questa funzione (presa da MultiChat di HeDo) che uso per aggiungere del testo in una richtextbox (txtChat)
Sub AddText(Testo As String, Optional ACapo As Boolean = True, Optional colore As ColorConstants)
txtChat.SelColor = colore
txtChat.Text = txtChat.Text & Testo ' chat
If ACapo Then txtChat.Text = txtChat.Text & vbCrLf
txtChat.SelStart = Len(txtChat.Text)
txtChat.Refresh
End Sub
Testo è la stringa che deve apparire nella txtChat, ACapo da il comando vbcrlf se è su True e colore contiene il codice di un colore.
Vorrei che quando viene usata la funzione l'ultimo testo inserito nella txtChat cambiasse colore (a seconda del codice contenuto in colore) e credevo che così potesse andare e invece no.
Il testo rimane nero, credo per qualche problema di refresh o cose simili...
Allora pensavo. Come posso dire da codice di selezionare solo il testo che mi interessa? Così una volta inserito il testo potrei dire di selezionarlo e cambiargli colore.
Una cosa tipo:
txtChat.selstart=0
txtChat.sellenght=len(txtChat.text)
txtChat.SelColor = colore
Solo che facendo così viene selezionato il testo di tutta la textbox. E di conseguenza impostato il colore uguale per tutte le righe.
Nella textbox vengono scritte sempre righe che terminano con un a capo vbcrlf, se può essere utile come info.
Ah e non rispondetemi "basta cambiare la selstart a seconda di dove vuoi partire", lo so! E' che non saprei come fare.
Siccome il testo che viene aggiunto è di lunghezza variabile e non determinabile a priori, come faccio a dirgli di iniziare la selezione da prima di inserirlo fino alla fine dello stesso?
Perchè se gli dico
txtChat.selstart=len(txtchat.text)
txtChat.Text = txtChat.Text & Testo
txtchat.sellenght=len(txtchat.text)
Non funziona. Cioè io ingenuamente gli direi, inizia la selezione dove si è arrivati a scrivere, poi aggiungi il testo, e infine continua la selezione fino alla fine del nuovo testo. Ma ovviamente se inizi la selezione e poi scrivi la stessa viene persa.
|