Colores en RichTextBox [Solucionado]

Iniciado por Stelio Kontos, 18 Marzo 2011, 22:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Stelio Kontos

Buenas, estoy haciendo una aplicación en la que quiero que después de un nombre, tenga una parte coloreada tal que así:
Pepe dice: Hola
Pepa dice: Hola
Lo separo en dos vectores, uno para el nombre y uno para el mensaje. El que quiero ver coloreado es el del mensaje.
Hago ésto pero solo se colorea la primera vez, y segun recibe mensajes los colores se cambian de sitio:
Pepe dice: Hola
Pepa dice: Hola

Código (vb) [Seleccionar]
If Mid(datos, 1, 3) = "MSG" Then 'Cuando recibo es MSGmensaje
   mensaje = Split(Mid(datos, 4, Len(datos)), ":")
   Text1.Text = Text1.Text & mensaje(0) & ":" & mensaje(1) & vbNewLine 'nombre dice: mensaje

   lennombre = Len(mensaje(0)) 'tamano del nombre
   lenmensaje = Len(mensaje(1)) 'tamano del mensaje

   With Text1 'creo que falla aqui
       .SelStart = lennombre 'selecciono desde donde acaba el nombre
       .SelLength = lenmensaje 'hasta que acaba el mensaje
       .SelColor = vbBlue 'se supone que tiene que colorearlo todas las veces que quiera
       .SelBold = True
   End With

End If


¿Sugerencias?
Saludos.

raul338

SelStart lo estas asignando mal, debes poner el lugar donde empieza, esto es:

Tamaño del texto Actual en el ritchtextbox + Variable nombre + "dice: "

Por lo demas, esta bien :P

Stelio Kontos

Gracias por la respuesta.
El "dice: " viene en el vector(0).
El servidor envia Nombre dice: Hola, cuando el cliente lo recibe hace un split separado por ":", entonces, para que se vea hago mensaje(0) & ":" & mensaje(1), de forma que sale Nombre dice: Hola. He probado como me has dicho y no sale ningún color.

raul338

Porque no me explique del todo :xD, en instrucciones seria

Agrega el texto principal "X dice:"
Despues tienes que guardar en una variable el Len(Text1.Text)
Despues agregas el mensaje en si
Y por ultimo, coloreas, en SelStart pones la variable anterior (el len) y listo :P

Stelio Kontos

Vale, creo que he hecho lo que me has dicho, y ahora sale coloreado siempre el ultimo mensaje, es decir, digo Hola y se ve azul, pero vuelvo a decir Hola, el anterior se pone negro y el nuevo azul.
Código (vb) [Seleccionar]
mensaje = Split(Mid(datos, 4, Len(datos)), ":")
    Text1.Text = Text1.Text & mensaje(0) & ":" 'Agrego el texto principal X dice:"

    lentext = Len(Text1.Text) 'Guardo en una variable el len(text1)
   
    Text1.Text = Text1.Text & mensaje(1) & vbNewLine 'Agrego el mensaje en si
   
    Text1.SelStart = lentext 'Pongo en el SelStart la variable anterior
    Text1.SelLength = Len(Text1.Text) ' mal aqui?
    Text1.SelColor = vbBlue
    Text1.SelBold = True

raul338

Es raro eso que dices :-\

aunque yo cambiaria esta linea que dices

Código (vb) [Seleccionar]
    Text1.SelLength = Len(Text1.Text) ' mal aqui?

por

Código (vb) [Seleccionar]
    Text1.SelLength = Len(mesnaje(1))

Stelio Kontos

#6
También he probado y nada :(
Sale así:

Siempre se colorea el ultimo mensaje.

raul338

Cierto! me habia olvidado, cada vez que seteas la propiedad "Text" todo lo formateado se borra :xD

Fijate si tiene una funcion llamada "AppendText" o similar :P sino, no hay ocacion, vas a tener que colorear siempre :(

Stelio Kontos

Qué va, no hay nada de eso. ¿Cómo coloreo todo?

raul338

Y... Fijate si tenes alguna otra propiedad relacionada con Text, tipo RichtText o algo asi u.u