Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/12/2009, 20:12
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Colorear TAGS HTML con RichTextBox

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 original
  1. Sub CambiaColor(Palabra As String, Color As ColorConstants, RTB As RichTextBox, Optional DiferenciarEntreMayuscMinusc As Boolean = False)
  2.   Dim Pos As Long
  3.   Pos = IIf(DiferenciarEntreMayuscMinusc, InStr(1, RTB.Text, Palabra), InStr(1, UCase$(RTB.Text), UCase$(Palabra)))
  4.   Do While Pos > 0
  5.     RTB.SelStart = Pos - 1
  6.     RTB.SelLength = Len(Palabra)
  7.     RTB.SelColor = Color
  8.     Pos = IIf(DiferenciarEntreMayuscMinusc, InStr(Pos + 1, RTB.Text, Palabra), InStr(Pos + 1, UCase$(RTB.Text), UCase$(Palabra)))
  9.   Loop
  10. End Sub
  11.  
  12. Private Sub Form_Load()
  13.   Me.Show
  14.   RichTextBox1.Text = "<html>" & vbCrLf & _
  15. "<head></head>" & vbCrLf & _
  16. "<body>" & vbCrLf & _
  17. "</body>" & vbCrLf & _
  18. "</html>"
  19. End Sub
  20.  
  21. Private Sub RichTextBox1_Change()
  22.   Dim Pos As Long
  23.   RichTextBox1.Visible = False
  24.   Pos = RichTextBox1.SelStart
  25.   CambiaColor "<html>", vbBlue, RichTextBox1
  26.   CambiaColor "</html>", vbBlue, RichTextBox1
  27.   CambiaColor "<head>", vbRed, RichTextBox1
  28.   CambiaColor "</head>", vbRed, RichTextBox1
  29.   CambiaColor "<body>", vbGreen, RichTextBox1
  30.   CambiaColor "</bodY>", vbGreen, RichTextBox1
  31.   RichTextBox1.SelStart = Pos
  32.   RichTextBox1.Visible = True
  33.   RichTextBox1.SetFocus ' hay que enfocar porque al ponerlo invisible pierde el foco
  34. 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.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 09/12/2009 a las 20:20