Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Braayhaan en 3 Septiembre 2009, 02:12 AM

Título: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 3 Septiembre 2009, 02:12 AM
Bueno acá esto pidiendoles ayuda de nuevo xD

Necesito que en un Richtextbox se muestre el texto de distintos colores por ejemplo.

Como el GeSHi de este foro que muestra distintos colores segun el texto.

hay alguna manera de hacerlo?

Todo esto en el VB.NET Claro

Saludos!
Título: Re: Ayuda con colores RichTextBox
Publicado por: seba123neo en 3 Septiembre 2009, 02:19 AM
Código (vbnet) [Seleccionar]
RichTextBox1.SelectionStart = RichTextBox1.Find("Palabra")
RichTextBox1.SelectionColor = Color.Yellow ' El color que quieras


Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 3 Septiembre 2009, 04:55 AM
Me imagino que eso va en el Rich, o quizás en un timer pero me dice error.

Me dice algo de error valuetype-1 is no correct, o algo del value-1, alguna idea?

echame una mano seba!  :xD
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 3 Septiembre 2009, 05:00 AM
Bueno aca les dejo el source haber si me echan una mano ya que no entendi muy bien lo que puso el seba  :-[ me da error

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If RichTextBox1.Text = "" Then
            MessageBox.Show("No se puede compilar un texto vacio")
            Return
        End If
        If SaveFileDialog1.ShowDialog = DialogResult.OK Then
            RichTextBox1.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)
            ProgressBar1.Visible = True
            Timer1.Start()
        End If
        Form1.ActiveForm().Text() = "Batch Creator" + SaveFileDialog1.FileName
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If OpenFileDialog1.ShowDialog = DialogResult.OK Then
            RichTextBox1.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText)
        End If
        Form1.ActiveForm().Text() = "Batch Creator" + OpenFileDialog1.FileName
    End Sub

    Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ProgressBar1.Increment(10)
        If ProgressBar1.Value = ProgressBar1.Maximum Then
            Timer1.Stop()
            MessageBox.Show("Se ha creado satisfactoriamente el archivo .bat en la direccion especificada")
            ProgressBar1.Value = ProgressBar1.Minimum
            ProgressBar1.Visible = False
            Return
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If RichTextBox1.Text = "" Then
            MessageBox.Show("Ya hay un nuevo documento abierto")
            Return
        End If
        Form2.Show()
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Form3.SHOW()
    End Sub

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged

    End Sub

End Class
Título: Re: Ayuda con colores RichTextBox
Publicado por: seba123neo en 3 Septiembre 2009, 05:38 AM
vos preguntaste como se colorea el texto, yo te respondi eso, pero despues no se que hiciste  :xD, el codigo que puse busca "Palabra" en el Richtextbox y lo colorea de amarillo. tambien podes hacerlo con SelectionStart y con SelectionLenght diciendole que desde la posicion 10 hasta la 15 sea de color rojo, de la 16 a la 20 sea azul y asi...ahi en ese codigo que pusiste no veo nada de eso. y no se donde te tira el error. igualmente yo le cambiaria varias cosas a ese codigo.

saludos.
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 3 Septiembre 2009, 14:53 PM
Ese codigo para colorear lo puse en el richtextbox y me da error
Hay les dejo el error que me tira.

(http://i86.servimg.com/u/f86/11/66/25/27/error10.png)

No se que es y al darle a detalles aparecen como 100 lineas con cosas raras :xD

Help me Please ;D
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 3 Septiembre 2009, 15:20 PM
mmm bueno hasta ahora lo resolvi Asi

Código (vbnet) [Seleccionar]
RichTextBox1.Find("@")
RichTextBox1.SelectionColor = System.Drawing.Color.Yellow


Pero a cada rato que escribo algo se me devuelve a la primera linea me imagino que por eso del .Find

Alguna forma de que lo chequee pero que me deje escribir normal?

Thanks
Título: Re: Ayuda con colores RichTextBox
Publicado por: Zzombi en 3 Septiembre 2009, 22:58 PM
lo otro que podrias hacer es que cuando el richtextbox pierda el foco que se pinte el arroba "@" de color rojo

Código (vbnet) [Seleccionar]
Private Sub RichTextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.LostFocus
       
RichTextBox1.Find("@")
RichTextBox1.SelectionColor = Color.Red
 
End Sub
Título: Re: Ayuda con colores RichTextBox
Publicado por: Keyen Night en 3 Septiembre 2009, 23:31 PM
Mira yo tengo la solución a ese problema xD yo tambien lo tube pero luego me dio flojera continuar un bat maker que estaba haciendo tambien; suponiendo que tu RichTextBox se llamará r así como el mio mira el evento TextChanged
Código (vb) [Seleccionar]
Private Sub r_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles r.TextChanged
        If r.Find("@echo") <> -1 Then
            r.SelectionStart = r.Find("@echo")
            r.SelectionColor = Color.Red
            r.SelectionStart = r.TextLength
        End If
    End Sub
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 05:53 AM
Keyen Night me funciono perfecto el ejemplo pero el detalle es este:

si escribo en la primera linea @ o ECHO o Off solo me marca el primer texto escrito por ejemplo si escribi @ me marca en rojo y si despues de @ escribo ECHO me sigue marcando en rojo,Cuando el codigo de ECHO Es azul y deberia marcar el @ en rojo y el ECHO en Azul.

Pero si doy enter y paso a la siguiente linea me pone el color del Richtextbox original.

Entonces haber si me ayudan  :xD
Título: Re: Ayuda con colores RichTextBox
Publicado por: Keyen Night en 4 Septiembre 2009, 06:53 AM
Si tambien me fije de eso habra que buscarle otra solución a eso tambien...
Título: Re: Ayuda con colores RichTextBox
Publicado por: Atrum en 4 Septiembre 2009, 16:02 PM
Pues yo intente hacer un ejemplo, espero sirva, aunque tiene problemas cuando escribes entre texto, podria servir de referencia


Private Reservadas As String() = _
    {"if", "then", "else", "echo", "@"} 'En este arreglo pones todas las palabras que quieras que aparezcan en color


    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Dim i As Integer = RichTextBox1.SelectionStart
        Dim ActualCursor As Integer = RichTextBox1.SelectionStart 'recordar el punto de donde se estaba escribiendo
        Dim j As Integer = 0
        If i <> 0 Then 'evitar que el indice se salga del rango
            Do
                i = i - 1 'recorre en reversa hasta encontrar un espacio
                j = j + 1 'cuenta los caracteres de la palabra
            Loop While RichTextBox1.Text(i) <> CChar(" ") And i <> 0 'termina cuando encuentra un espacio
        End If
        Dim substring As String = RichTextBox1.Text.Substring(i, j).Trim() 'obtiene la ultima palabra escrita, quitandole los espacios

        If Reservadas.Contains(substring) Then 'comprobar que la palabra este en la lista
            RichTextBox1.Find(substring, RichTextBoxFinds.Reverse)
            RichTextBox1.SelectionColor = Color.Blue 'Colorea el texto
            RichTextBox1.SelectionStart = ActualCursor
        End If

        RichTextBox1.SelectionColor = Color.Black 'Vuelve al color primario
        RichTextBox1.SelectionStart = ActualCursor
    End Sub


Este codigo esta hecho en Visual studio 2008, espero que no este muy enrredado, espero sirva de algo amigo
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 16:42 PM
Esta exelente Xtriker me funciono perfectamente, algun tip para ponerle mas colores? no solo el azul.

Gracias de antemano  :xD
Título: Re: Ayuda con colores RichTextBox
Publicado por: raul338 en 4 Septiembre 2009, 17:02 PM
Jó!! Xtriker me gano de mano xD xD

logre hacer esto, que solo falla cuando borras todo el texto (por eso el try xD), no titilea cuando tienes un texto muuuy largo ya que solo trabaja en la linea actual. Y tiene para los colores que tu quieras!!!!  ;D


Código (vbnet) [Seleccionar]
Dim lastPos As Integer ' Donde se estaba escribiendo
   Dim nLine As Integer   ' Linea donde se trabaja
   Dim start As Integer   ' Indice del principio de la linea dentro del texto
   Dim final As Integer   ' Fin de la linea (largo de la linea)

   Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
       ' "@" se colorea                         (NOTA: Funciona a medias, con el tema
       ' "@asfdasd" : @ se colorea        ( de que si se borra queda el color que estaba)
       colorear("@", Color.Red, False, False)
       ' "echo" se colorea
       ' "malechor" : echo no se colorea
       colorear("echo", Color.Blue, False)
   End Sub

   Sub colorear(ByVal clave As String, ByVal color As Color, Optional ByVal spaceAntes As Boolean = True, Optional ByVal spaceDespues As Boolean = True)
       Try
           ' Para recordar en que posicion estaba y no provocar problemas
           lastPos = rtf.SelectionStart
           ' Obtenemos la linea a trabajar
           nLine = rtf.GetLineFromCharIndex(lastPos)
           ' Obtenemos el indice de la linea (indice dentro de todo el texto, no conviene separar la linea en otra variable)
           start = rtf.GetFirstCharIndexOfCurrentLine()
           ' establecemos el limite para buscar la palabra clave
           final = rtf.Lines(nLine).Length

           ' Para saber si se tiene que escribir la palabra clave por separado
           If spaceAntes Then clave = " " & clave
           If spaceDespues Then clave = clave & " "

           ' Buscamos la palabra clave, si no esta, no hacemos nada
           If Not rtf.Text.IndexOf(clave, start, final) = -1 Then
               rtf.SelectionStart = rtf.Text.IndexOf(clave, start, final)
               rtf.SelectionLength = clave.Length ' Para no colorear demas....
               rtf.SelectionColor = color
           End If

           ' Volvemos a donde se estaba escribiendo, y al color normal
           rtf.SelectionStart = lastPos
           rtf.SelectionLength = 0
           rtf.SelectionColor = rtf.ForeColor
       Catch ex As Exception

       End Try
   End Sub


Tuve cierto problemita con los espacion, ya que si pones "Mecho" coloreaba "echo" en azul ¬¬ asi que bueno, tuve que ponerle esos parametros opcionales. aunque igual se entiende.....espero que te sirva!!!

Eso si, mi RichTextBox se llama rtf por las dudas  :P

Eso si, quiero estar en los creditos!!!!  ;D ;D ;D

EDIT: agregado comentarios
EDIT 2: probe la solucion de striker pero me tiro error en "Reservadas.Contains" por que no era array o algo asi me dio el error, igual lo suplante por un ForEach y solo me colorea si la palabra esta en la primera linea, no en cualquier otra... u.u
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 17:37 PM
Si me fije en eso del que puso Xtriker solo marca la primera linea, raul el tuyo esta perfecto pero hay alguna forma para ponerlo Asi como el de Xtriker? que se ponian todos los Comandos de Batch en una linea? porque son bastantes y tener que escribir colorear...."del".... es como mucho no xDD.

Disculpen tanto fastidio  :-[ :xD
Título: Re: Ayuda con colores RichTextBox
Publicado por: raul338 en 4 Septiembre 2009, 17:42 PM
jajajaj no seas vago y usa un for each o algo para recorrer un bucle xD
mira, te escribo el codigo a la volada

Código (vbnet) [Seleccionar]

    Dim palabras as New HashTable()
Public Sub Form_Load(....)....
    palabras.add("@", Color.Red)
    palabras.add("echo", Color.Blue)
End Sub

'.....

Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
    For each s As String In palabras.Keys
        colorear(s, palabras(s))
    Next
End sub


no estoy seguro si funciona (dudo dentro del for each), pero bueno, lo acabo de inventar recien, fijate si te sirve
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 18:09 PM
mmm no me funka Raul, bueno de todas formas voy a seguir chequeando por mi cuenta creo que ya los moleste bastante :xD.


Posdata: Felicitaciones es tu mensaje 100!  :xD
Título: Re: Ayuda con colores RichTextBox
Publicado por: Atrum en 4 Septiembre 2009, 18:25 PM
Es curioso como se comporta el RichTextBox con el codigo que utilizé, por que al editar una parte intermedia del texto me selecciona hacia adelante algunos espacios, jeje, y a mi si me funciona en todas las lineas  :huh:  , realmente al leer el post por primera vez crei que seria mas simple, unas 4 lineas y ya, pero resulto interesante intentar, en fin, bueno aqui hay otra idea, aunque tambien tiene varios fallos

Código (vbnet) [Seleccionar]

Private ReservadasBlue As String() = _
    {"if", "then", "else"} 'En este arreglo pones todas las palabras que quieras que aparezcan en color Azul

    Private ReservadasRed As String() = _
    {"echo", "@"} 'En este arreglo pones todas las palabras que quieras que aparezcan en color Rojo

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged

        ' aqui obtiene un arreglo de palabras desde el inicio
        ' hasta donde esta la posicion del cursor
        Dim Palabras As String() = RichTextBox1.Text.Substring(0, RichTextBox1.SelectionStart).Split()

        'Aqui obtenemos el ultimo elemento del arreglo de palabras
        Dim UltimaEscrita As String = Palabras(Palabras.Length - 1)

        'Guardamos la posicion del cursor
        Dim PosCursor As Integer = RichTextBox1.SelectionStart

        'Verificamos si la palabra escrita esta en el el arreglo
        'en este caso declare un arreglo para cada color
        If ReservadasBlue.Contains(UltimaEscrita) Then
            RichTextBox1.Find(UltimaEscrita, RichTextBoxFinds.Reverse)
            RichTextBox1.SelectionColor = Color.Blue
            RichTextBox1.SelectionStart = PosCursor
        End If

        'aqui para el color rojo, en caso de añadir mas pues solo seria
        'cosa de agregar mas arreglos y mas condicionales
        If ReservadasRed.Contains(UltimaEscrita) Then
            RichTextBox1.Find(UltimaEscrita, RichTextBoxFinds.Reverse)
            RichTextBox1.SelectionColor = Color.Red
            RichTextBox1.SelectionStart = PosCursor
        End If

        'regresamos al color original
        RichTextBox1.SelectionColor = Color.Black
    End Sub


El codigo de Raul funciona muy bien, note que parpadea la linea al escribir, y al escribir entre texto no colorea, pero al parecer no nos da los mismos resultados el codigo, sera por aquello de los framework? bueno quien sabe.
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 18:45 PM
LISTOO sin mas problemas Xtriker ya funciona correctamente, gracias a todos por sus respuestas!!!

Saludos, a ambos los pondre en los Creditos  ;)
Título: Re: Ayuda con colores RichTextBox
Publicado por: raul338 en 4 Septiembre 2009, 18:49 PM
CitarPosdata: Felicitaciones es tu mensaje 100!

jajaja xD...sigamos x los mil!!! xD


Cita de: Xtriker en  4 Septiembre 2009, 18:25 PM
Es curioso como se comporta el RichTextBox con el codigo que utilizé, por que al editar una parte intermedia del texto me selecciona hacia adelante algunos espacios, jeje, y a mi si me funciona en todas las lineas  :huh:  , realmente al leer el post por primera vez crei que seria mas simple, unas 4 lineas y ya, pero resulto interesante intentar, en fin, bueno aqui hay otra idea, aunque tambien tiene varios fallos

-------------------------------

El codigo de Raul funciona muy bien, note que parpadea la linea al escribir, y al escribir entre texto no colorea, pero al parecer no nos da los mismos resultados el codigo, sera por aquello de los framework? bueno quien sabe.


no he probado el codigo todavia, aunque ahora no tengo tiempo ,a al tarde volvere  ;D

es verdad, parpadea, pero es por la forma que estamos utilzando (jamas pense q habia que seleccionar para colorear). Aunque la mejor forma (y mas dificil  ;D) de hacerlo es haciendo un control nuevo (tal vez que herede de richtextbox) y dibujar linea por linea con colores y todo ( sobrecargando el metodo OnPaint ). Pero como dije, es la forma mas dificil de hacer: dibujar lineas, dibujar el cursor, las barras de desplazamiento, un lio... xD




Edit: Funciona, aunque no he probado romperlo todavia :laugh: :xD

igual de todas formas, si dices que tiene errores, habra que perfeccionarlos y tal vez hacer una mezcla de codigo entre los 2 jejeje ...


bueno.....suerte entonces...  ;)
Título: Re: Ayuda con colores RichTextBox
Publicado por: raul338 en 4 Septiembre 2009, 22:34 PM
Cita de: raul338 en  4 Septiembre 2009, 17:42 PM
jajajaj no seas vago y usa un for each o algo para recorrer un bucle xD
mira, te escribo el codigo a la volada

Código (vbnet) [Seleccionar]

    Dim palabras as New HashTable()
Public Sub Form_Load(....)....
    palabras.add("@", Color.Red)
    palabras.add("echo", Color.Blue)
End Sub

'.....

Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
    For each s As String In palabras.Keys
        colorear(s, palabras(s))
    Next
End sub


no estoy seguro si funciona (dudo dentro del for each), pero bueno, lo acabo de inventar recien, fijate si te sirve


Ahora (que no me acuerdo porque no lo escribi  :huh:) estaria bueno hacer una especie de IDE simple para varios lenguajes, ej, cuantas veces hemos abierto el tremendo pero algo lento visual studio para probar unas simples lineas. Con "nuestro" pequeño IDE se podria hacer simple jejeje....x eso implemente la opcion de cualquier color. Es buena idea, alguien se prende??? (se une?)
Título: Re: Ayuda con colores RichTextBox
Publicado por: Braayhaan en 4 Septiembre 2009, 22:40 PM
Yo me apunto! al diseño y parte del codigo  :P
Título: Re: Ayuda con colores RichTextBox
Publicado por: seba123neo en 5 Septiembre 2009, 02:41 AM
Cita de: raul338 en  4 Septiembre 2009, 22:34 PM
Cita de: raul338 en  4 Septiembre 2009, 17:42 PM
jajajaj no seas vago y usa un for each o algo para recorrer un bucle xD
mira, te escribo el codigo a la volada

Código (vbnet) [Seleccionar]

    Dim palabras as New HashTable()
Public Sub Form_Load(....)....
    palabras.add("@", Color.Red)
    palabras.add("echo", Color.Blue)
End Sub

'.....

Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
    For each s As String In palabras.Keys
        colorear(s, palabras(s))
    Next
End sub


no estoy seguro si funciona (dudo dentro del for each), pero bueno, lo acabo de inventar recien, fijate si te sirve


Ahora (que no me acuerdo porque no lo escribi  :huh:) estaria bueno hacer una especie de IDE simple para varios lenguajes, ej, cuantas veces hemos abierto el tremendo pero algo lento visual studio para probar unas simples lineas. Con "nuestro" pequeño IDE se podria hacer simple jejeje....x eso implemente la opcion de cualquier color. Es buena idea, alguien se prende??? (se une?)

queres hacer un parser de los colores de cada lenguaje, hay un monton de ejemplos en internet de ese tipo de proyecto.
Título: Re: Ayuda con colores RichTextBox
Publicado por: raul338 en 5 Septiembre 2009, 17:23 PM
Cita de: seba123neo en  5 Septiembre 2009, 02:41 AM
Cita de: raul338 en  4 Septiembre 2009, 22:34 PM
Cita de: raul338 en  4 Septiembre 2009, 17:42 PM
jajajaj no seas vago y usa un for each o algo para recorrer un bucle xD
mira, te escribo el codigo a la volada

Código (vbnet) [Seleccionar]

    Dim palabras as New HashTable()
Public Sub Form_Load(....)....
    palabras.add("@", Color.Red)
    palabras.add("echo", Color.Blue)
End Sub

'.....

Private Sub rtf_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf.TextChanged
    For each s As String In palabras.Keys
        colorear(s, palabras(s))
    Next
End sub


no estoy seguro si funciona (dudo dentro del for each), pero bueno, lo acabo de inventar recien, fijate si te sirve


Ahora (que no me acuerdo porque no lo escribi  :huh:) estaria bueno hacer una especie de IDE simple para varios lenguajes, ej, cuantas veces hemos abierto el tremendo pero algo lento visual studio para probar unas simples lineas. Con "nuestro" pequeño IDE se podria hacer simple jejeje....x eso implemente la opcion de cualquier color. Es buena idea, alguien se prende??? (se une?)

queres hacer un parser de los colores de cada lenguaje, hay un monton de ejemplos en internet de ese tipo de proyecto.

puede ser, pero un coloreador de lenguajes no puede ser considerado IDE,  aparte de colorear se podria hacer una "simulacion" (copia xD) de Intellisense y compilar el codigo (solo en .net, ya que en otros lenguajes necesitamos un compilador jejej)
Título: Re: Ayuda con colores RichTextBox
Publicado por: jgzunigah en 25 Febrero 2010, 06:02 AM
hola vieras que estoy con un problema muy similar pero resulta que si le doy un enter la palabra que quiero que cambie de color no cambia alguien me podria decir como se puede resolver esto

(http://C:%5CUsers%5CJosu%C3%A9%5CPictures%5CDibujo.JPEG)