Ver Mensaje Individual
  #10 (permalink)  
Antiguo 03/05/2006, 09:51
Avatar de culd
culd
 
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años, 5 meses
Puntos: 19
Arme una sub accion para buscar cierta palabra (todas las que existe) en un RichTextBox y cambiarle por el color que uno quiera

Código:
'Este codigo fue programado por CULD
'-----------------------------------
'Lo que hace es... cambiar de color
'todas las palabras que encuentre
'en el RichTextBox que uno quiera.
'por el color que uno  quiera
'-----------------------------------
'Para llamar a la accion hay que usar
'Call Colorear(Palabra, "El RichTextBox", Color, 1)
'El Richtextbox es el nombre donde va a colorear
'El color tiene que ser en Hexadecimal (pueden cambiar el color de un label y copiar el codigo)
'La posicion por default siempre tiene que ser 1, si es que se quiere colorear desde el comienzo
'si se quiere colorear desde donde esta el cursor, hay que usar SelStart
Public Sub Colorear(Palabra As String, Objeto As Object, Color As String, Posicion As Long)
Dim Texto As String
Dim Estoy As Long
Texto = Objeto.Text

Estoy = InStr(Posicion, Texto, Palabra, vbTextCompare)
If Estoy > 0 Then
    'Se posiciona el cursor donde encontro la palabra
    Objeto.SelStart = Estoy - 1
    'Selecciona toda la palabra
    Objeto.SelLength = Len(Palabra)
    'Colorea la palabra
    Objeto.SelColor = Color
    'Pone en la posicion al final de la palabra
    Posicion = Estoy + Len(Palabra)
    'vuelve a llamar a la accion recursivamente para encontrar todas las palabras
    Call Colorear(Palabra, Objeto, Color, Posicion)
Else
    Exit Sub
End If
End Sub
Igualmente puse el codigo en las FAQs...

La idea surgio, por ejemplo, al hacer un editor de texto el cual a medida que se baya escribiendo en la propiedad Change dle RichTextBox, vaya buscando las palabras y cambiando el color (como lo hace VB con palabras como IF, etc).
El problema esta en que, cuando el texto es muy muy largo, tarda y se nota en buscar todo el texto y cambiar el color...

Haber si alguien implementa una forma para aminorar el tiempo de cambiar el color y que no vuelva a cambiar el color de algo que ya cambio...

Pense en hacer algo como:
Desde donde esta el cursor, ir buscando y cambiando, 20 caracteres anteriores hasta 20 caracteres posteriores, de esta forma solo se limitaria a buscar 40 caracteres.
Asi el texto que se encuentre antes o despues, teoricamente ya tuvo que haber estado cambiado de color...

Si alguien se le ocurre alguna forma, por favor digala, AUNQUE NO SEPA HACERLO... pero con la idea ya lo hacemos entre todos...