Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Stelio Kontos en 18 Marzo 2011, 22:23 pm



Título: Colores en RichTextBox [Solucionado]
Publicado por: Stelio Kontos en 18 Marzo 2011, 22:23 pm
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
  1. If Mid(datos, 1, 3) = "MSG" Then 'Cuando recibo es MSGmensaje
  2.    mensaje = Split(Mid(datos, 4, Len(datos)), ":")
  3.    Text1.Text = Text1.Text & mensaje(0) & ":" & mensaje(1) & vbNewLine 'nombre dice: mensaje
  4.  
  5.    lennombre = Len(mensaje(0)) 'tamano del nombre
  6.    lenmensaje = Len(mensaje(1)) 'tamano del mensaje
  7.  
  8.    With Text1 'creo que falla aqui
  9.        .SelStart = lennombre 'selecciono desde donde acaba el nombre
  10.        .SelLength = lenmensaje 'hasta que acaba el mensaje
  11.        .SelColor = vbBlue 'se supone que tiene que colorearlo todas las veces que quiera
  12.        .SelBold = True
  13.    End With
  14.  
  15. End If

¿Sugerencias?
Saludos.


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 18 Marzo 2011, 22:42 pm
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


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 18 Marzo 2011, 22:50 pm
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.


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 18 Marzo 2011, 23:02 pm
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


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 18 Marzo 2011, 23:13 pm
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
  1. mensaje = Split(Mid(datos, 4, Len(datos)), ":")
  2.    Text1.Text = Text1.Text & mensaje(0) & ":" 'Agrego el texto principal X dice:"
  3.  
  4.    lentext = Len(Text1.Text) 'Guardo en una variable el len(text1)
  5.  
  6.    Text1.Text = Text1.Text & mensaje(1) & vbNewLine 'Agrego el mensaje en si
  7.  
  8.    Text1.SelStart = lentext 'Pongo en el SelStart la variable anterior
  9.    Text1.SelLength = Len(Text1.Text) ' mal aqui?
  10.    Text1.SelColor = vbBlue
  11.    Text1.SelBold = True


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 18 Marzo 2011, 23:35 pm
Es raro eso que dices :-\

aunque yo cambiaria esta linea que dices

Código
  1.    Text1.SelLength = Len(Text1.Text) ' mal aqui?

por

Código
  1.    Text1.SelLength = Len(mesnaje(1))


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 18 Marzo 2011, 23:37 pm
También he probado y nada :(
Sale así:
(http://img198.imageshack.us/img198/7812/chatpb.png)
Siempre se colorea el ultimo mensaje.


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 18 Marzo 2011, 23:57 pm
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 :(


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 19 Marzo 2011, 16:01 pm
Qué va, no hay nada de eso. ¿Cómo coloreo todo?


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 19 Marzo 2011, 16:13 pm
Y... Fijate si tenes alguna otra propiedad relacionada con Text, tipo RichtText o algo asi u.u


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 19 Marzo 2011, 16:42 pm
No, sólo tiene la propiedad text, pero estoy seguro de que se puede, ví hace poco una aplicación similar a la que quiero desarrollar hecha en VB6, la pena es que no era de código abierto :(


Título: Re: Colores en RichTextBox
Publicado por: TGa. en 19 Marzo 2011, 17:19 pm
adecualo a tu codigo :D

Código
  1. Private Sub Form_Load()
  2.    Dim pos As Long
  3.  
  4.    RichTextBox1.Text = "Sergio dice: Hola" & vbCrLf & _
  5.                        "Sergio dice: Hola" & vbCrLf & _
  6.                        "Sergio dice: Hola" & vbCrLf & _
  7.                        "Sergio dice: Hola"
  8.  
  9.    pos = 1
  10.  
  11.    Do While InStr(pos, RichTextBox1.Text, ":") <> 0
  12.        RichTextBox1.SelStart = InStr(pos, RichTextBox1.Text, ":") + 1
  13.        RichTextBox1.SelLength = 4
  14.        RichTextBox1.SelBold = True
  15.        RichTextBox1.SelColor = vbBlue
  16.        RichTextBox1.SelStart = Len(RichTextBox1.Text)
  17.  
  18.        pos = InStr(pos, RichTextBox1.Text, ":") + 1
  19.    Loop
  20. End Sub


Título: Re: Colores en RichTextBox
Publicado por: raul338 en 19 Marzo 2011, 17:33 pm
y si el mensaje contiene ":" descuadra todo :D


Título: Re: Colores en RichTextBox
Publicado por: TGa. en 19 Marzo 2011, 18:26 pm
:S jaja bueno pero hasta ahi hice codigo creo que ahora le toca a el seguir :D


Título: Re: Colores en RichTextBox
Publicado por: Edu en 19 Marzo 2011, 19:14 pm
Puedes explicar de nuevo o dejar todo todo tu codigo? no entiendo q quieres hacer


Título: Re: Colores en RichTextBox
Publicado por: Sanlegas en 19 Marzo 2011, 19:28 pm
Código
  1. Public Function ChangeColor(RT As RichTextBox, StrStart As String, StrEnd As String, Color As Long)
  2. Dim Text        As String
  3. Dim N           As Long
  4.  
  5.        Text = RT.Text
  6.        N = InStr(Text, StrStart)
  7.        Do While CBool(N)
  8.            Mid(Text, N, Len(StrStart)) = String(Len(StrStart), "?")
  9.            RT.SelStart = N + Len(StrStart)
  10.            N = InStr(Text, StrEnd)
  11.            If CBool(N) Then
  12.                Mid(Text, N, Len(StrEnd)) = String(Len(StrEnd), "?")
  13.                RT.SelLength = N - RT.SelStart - 1
  14.                RT.SelColor = Color
  15.                RT.SelStart = 0
  16.            End If
  17.        N = InStr(Text, StrStart)
  18.        DoEvents
  19.        Loop
  20.        If CBool(RT.SelStart) Then
  21.            RT.SelLength = Len(RT.Text) - RT.SelStart
  22.            RT.SelColor = color
  23.        End If
  24.  
  25. End Function
  26.  
  27. ChangeColor RT, ":", vbNewLine, vbBlue
  28.  
:P, lo hize a prisas XD


Título: Re: Colores en RichTextBox
Publicado por: DarkMatrix en 19 Marzo 2011, 21:15 pm
Yo lo hago asi

En un Modulo:

Código
  1. Option Explicit
  2.  
  3. Enum eTextColor
  4.  
  5.    Black = 0
  6.    Blue = 1
  7.    Green = 2
  8.    Cyan = 3
  9.    Red = 4
  10.    Magenta = 5
  11.    Brown = 6
  12.    Grey = 7
  13.    DarkGrey = 8
  14.    BrightBlue = 9
  15.    BrightGreen = 10
  16.    BrightCyan = 11
  17.    BrightRed = 12
  18.    Pink = 13
  19.    Yellow = 14
  20.    white = 15
  21.  
  22. End Enum
  23.  
  24. Public Sub AddText(oRichTextBox As Object, ByVal Msg As String, ByVal Color As eTextColor, Optional NewLine As Boolean = True, Optional CustomColor As Long = -1)
  25.  
  26.    Dim s As String
  27.    Dim c As Long
  28.  
  29.    If NewLine = True Then
  30.  
  31.        s = Msg & vbNewLine
  32.  
  33.    Else
  34.  
  35.        s = Msg
  36.  
  37.    End If
  38.  
  39.    c = oRichTextBox.SelStart
  40.    oRichTextBox.SelStart = Len(oRichTextBox.Text)
  41.  
  42.    If CustomColor <> -1 Then
  43.  
  44.        oRichTextBox.SelColor = CustomColor
  45.  
  46.    Else
  47.  
  48.        oRichTextBox.SelColor = QBColor(Color)
  49.  
  50.    End If
  51.  
  52.    oRichTextBox.SelText = s
  53.    oRichTextBox.SelStart = Len(oRichTextBox.Text) - 1
  54.  
  55. End Sub

En Tu Codigo lo llamarias asi

Código
  1. If Mid(Datos, 1, 3) = "MSG" Then 'Cuando recibo es MSGmensaje
  2.  
  3.    Mensaje = Split(Mid(Datos, 4, Len(Datos)), ":")
  4.  
  5.    Call AddText(Text1.Text, Mensaje(0) & ": ", vbBlack, False)
  6.    Call AddText(Text1.Text, Mensaje(1), vbBlue, True)
  7.  
  8. End If


Título: Re: Colores en RichTextBox
Publicado por: Stelio Kontos en 23 Marzo 2011, 15:11 pm
Usé y modifiqué a mi gusto el módulo de DarkMatrix y funciona perfecto.
Solucionado, muchas gracias.