Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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 (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.
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 (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
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 (vb) [Seleccionar]
    Text1.SelLength = Len(Text1.Text) ' mal aqui?

por

Código (vb) [Seleccionar]
    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 (vb) [Seleccionar]
Private Sub Form_Load()
    Dim pos As Long
   
    RichTextBox1.Text = "Sergio dice: Hola" & vbCrLf & _
                        "Sergio dice: Hola" & vbCrLf & _
                        "Sergio dice: Hola" & vbCrLf & _
                        "Sergio dice: Hola"
   
    pos = 1
   
    Do While InStr(pos, RichTextBox1.Text, ":") <> 0
        RichTextBox1.SelStart = InStr(pos, RichTextBox1.Text, ":") + 1
        RichTextBox1.SelLength = 4
        RichTextBox1.SelBold = True
        RichTextBox1.SelColor = vbBlue
        RichTextBox1.SelStart = Len(RichTextBox1.Text)
       
        pos = InStr(pos, RichTextBox1.Text, ":") + 1
    Loop
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 (vb) [Seleccionar]
Public Function ChangeColor(RT As RichTextBox, StrStart As String, StrEnd As String, Color As Long)
Dim Text        As String
Dim N           As Long

       Text = RT.Text
       N = InStr(Text, StrStart)
       Do While CBool(N)
           Mid(Text, N, Len(StrStart)) = String(Len(StrStart), "?")
           RT.SelStart = N + Len(StrStart)
           N = InStr(Text, StrEnd)
           If CBool(N) Then
               Mid(Text, N, Len(StrEnd)) = String(Len(StrEnd), "?")
               RT.SelLength = N - RT.SelStart - 1
               RT.SelColor = Color
               RT.SelStart = 0
           End If
       N = InStr(Text, StrStart)
       DoEvents
       Loop
       If CBool(RT.SelStart) Then
           RT.SelLength = Len(RT.Text) - RT.SelStart
           RT.SelColor = color
       End If
       
End Function

ChangeColor RT, ":", vbNewLine, vbBlue

: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 (vb) [Seleccionar]
Option Explicit

Enum eTextColor

    Black = 0
    Blue = 1
    Green = 2
    Cyan = 3
    Red = 4
    Magenta = 5
    Brown = 6
    Grey = 7
    DarkGrey = 8
    BrightBlue = 9
    BrightGreen = 10
    BrightCyan = 11
    BrightRed = 12
    Pink = 13
    Yellow = 14
    white = 15

End Enum

Public Sub AddText(oRichTextBox As Object, ByVal Msg As String, ByVal Color As eTextColor, Optional NewLine As Boolean = True, Optional CustomColor As Long = -1)

    Dim s As String
    Dim c As Long

    If NewLine = True Then

        s = Msg & vbNewLine

    Else

        s = Msg

    End If

    c = oRichTextBox.SelStart
    oRichTextBox.SelStart = Len(oRichTextBox.Text)

    If CustomColor <> -1 Then

        oRichTextBox.SelColor = CustomColor

    Else

        oRichTextBox.SelColor = QBColor(Color)

    End If

    oRichTextBox.SelText = s
    oRichTextBox.SelStart = Len(oRichTextBox.Text) - 1

End Sub


En Tu Codigo lo llamarias asi

Código (vb) [Seleccionar]
If Mid(Datos, 1, 3) = "MSG" Then 'Cuando recibo es MSGmensaje

    Mensaje = Split(Mid(Datos, 4, Len(Datos)), ":")

    Call AddText(Text1.Text, Mensaje(0) & ": ", vbBlack, False)
    Call AddText(Text1.Text, Mensaje(1), vbBlue, True)

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.