Como imaginaba el truco parece estar en hacer invisible el texto antes de modificarlo y hacerlo visible después.
Con una sub que he creado para el mensaje anterior he hecho unas pruebas con este código y ha dejado de parpadear.
Aqui te dejo el código que he probado:
Código :
Ver originalSub CambiaColor(Palabra As String, Color As ColorConstants, RTB As RichTextBox, Optional DiferenciarEntreMayuscMinusc As Boolean = False)
Dim Pos As Long
Pos = IIf(DiferenciarEntreMayuscMinusc, InStr(1, RTB.Text, Palabra), InStr(1, UCase$(RTB.Text), UCase$(Palabra)))
Do While Pos > 0
RTB.SelStart = Pos - 1
RTB.SelLength = Len(Palabra)
RTB.SelColor = Color
Pos = IIf(DiferenciarEntreMayuscMinusc, InStr(Pos + 1, RTB.Text, Palabra), InStr(Pos + 1, UCase$(RTB.Text), UCase$(Palabra)))
Loop
End Sub
Private Sub Form_Load()
Me.Show
RichTextBox1.Text = "<html>" & vbCrLf & _
"<head></head>" & vbCrLf & _
"<body>" & vbCrLf & _
"</body>" & vbCrLf & _
"</html>"
End Sub
Private Sub RichTextBox1_Change()
Dim Pos As Long
RichTextBox1.Visible = False
Pos = RichTextBox1.SelStart
CambiaColor "<html>", vbBlue, RichTextBox1
CambiaColor "</html>", vbBlue, RichTextBox1
CambiaColor "<head>", vbRed, RichTextBox1
CambiaColor "</head>", vbRed, RichTextBox1
CambiaColor "<body>", vbGreen, RichTextBox1
CambiaColor "</bodY>", vbGreen, RichTextBox1
RichTextBox1.SelStart = Pos
RichTextBox1.Visible = True
RichTextBox1.SetFocus ' hay que enfocar porque al ponerlo invisible pierde el foco
End Sub
Suerte
PD: Como no he puesto control de errores, este ejemplo da error al arrancar, ya que en el load se modifica el texto y al querer enfocarlo no puede porque el form aun no es visible.
Añado una línea en el Load que evita el error.