elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Pregunta: Sobre RichTextBox, como colorearlo.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Pregunta: Sobre RichTextBox, como colorearlo.  (Leído 6,066 veces)
NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Pregunta: Sobre RichTextBox, como colorearlo.
« en: 16 Octubre 2006, 12:20 pm »

Hola a tod@s!

Estoy haciendo una aplicacion que debe sacar un report a medida que van saliedo resultados de unos procesos en segundo plano.

Pa ello uso un richtextbox donde voy incluyendo a medida que se crean las lineas del informe.

Mi idea era ir escribiendo las diferentes notificaciones en diversos colores. Es decir El error que aparezca la linea en  rojo, las notificaciones en azul, etc.

Pues bien para ello usé el siguiente algoritmo:
Código:
do while not RsRecordset.EOF
     RichTextBox1.Text = Richtextbox1.text & RsRecordset!Link
     RichTextBox1.SelStart = Richtextbox1.text - len(RsRecordset!Link)
     RichTextBox1.SelLength = len(RsRecordset!Link)
     if RsRecordset!Status = "Error" then
          RichTextBox1.SelColor = vbred
     elseif RsRecordset!Status = "Info" then
          RichTextBox1.SelColor = vbBlue
     else
          RichTextBox1.SelColor = vbBlack
     end if
     RichTextBox1.SelStart = 0
loop
Código:

El problema (lo vi por debugger) que al insertar texto nuevo en la RTB, se pone del ultimo color seleccionado. Es decir lo que antes estaba de color rojo, si la linea siguiente debe ser verde, al insertar el texto se pone todo lo anterior de color rojo.

He buscado por google y lo que encuentro son rutinas que buscan el texto deseado y lo colorean una vez todo el texto a sido escrito. Mi idea era ir coloreando el texto deseado a medida que se escribe.

La solucion que aplico ahora es filtrar el texto una vez escrito y coloreo aquellas palabras clave con su color correspondiente pero el efecto cuando hay mucho texto en la RTB es bastante feo.

Alguien podria ayudarme?

Gracias.

 


En línea

CeLaYa


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #1 en: 16 Octubre 2006, 19:23 pm »

y porque no le pones el color antes de escribir


 RichTextBox1.selstar = len( RichTextBox1.text)
 RichTextBox1.selcolor = color que quieres


 prueba esto a ver si te respeta el color que acabas de poner, otra idea que se me ocurre es agregar un espacio en blanco y colorearlo, posteriormente agregas el texto


En línea

"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.
NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #2 en: 23 Octubre 2006, 18:06 pm »

Gracias por la respuesta,

Pero ya lo probé y no funciona. En teoria deberia escribir el texto nuevo del color elegido desde el punto de insercion (Len(Richtextbox1.text) pero lo que hace es en el paso de insertar el texto colorea todo el texto del ultimo color seleccionado. Asi pierdo el formato anterior.

Es curioso porque si me funciona cuando formateo el tipo de letra manteniendo los formatos (negrita y cursiva) allá donde los inserté. Pero el texto en cambio no. Cuando se inserta texto nuevo cambia todo el contenido de la RTB al color ultimo usado.

Probé muchas combinaciones y algoritmos que busqué por internet y ninguno me funciona. No sé si es algun bug de la RTB o algo que hago mal.

Si alguien tiene mas sugerencias...bienvenidas son.

Saludos.
En línea

CeLaYa


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #3 en: 23 Octubre 2006, 18:54 pm »

ya probe el código y si funciona, de hecho en un form puse un RichTextBox y 3 CommandButton, estoy escribiendo y le doy click a algun boton y sigo escribiendo en otro color:

Option Explicit

Private Sub cmdAzul_Click()
    RichTextBox1.SelStart = Len(RichTextBox1.Text)
    RichTextBox1.SelColor = vbBlue
    RichTextBox1.SetFocus
End Sub

Private Sub cmdRojo_Click()
    RichTextBox1.SelStart = Len(RichTextBox1.Text)
    RichTextBox1.SelColor = vbRed
    RichTextBox1.SetFocus
End Sub

Private Sub cmdverde_Click()
    RichTextBox1.SelStart = Len(RichTextBox1.Text)
    RichTextBox1.SelColor = vbGreen
    RichTextBox1.SetFocus
End Sub




ahora no se si eso es lo que quieres hacer.
En línea

"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.
NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #4 en: 23 Octubre 2006, 19:12 pm »

Gracias por la respuesta tan completa.

Leyendola he visto mi error. Verás, Al introducir texto lo hago de forma automatica (es decir desde un bucle) donde voy metiendo texto nuevo a medida que se generan unos eventos. Si el evento acabó ok la linea nueva debe ir en verde si acabó nook debe ir en rojo).

Para ello uso algo asi:
Código:
haz mientras Registros.existe = true
      RTB.SelStart = Len(RTB.text)
      if proceso = ok then
         RTB.SelColor = vbGreen
         RTB.Text = RTB.Text & "Accion OK"
     else
         RTB.SelColor = VbRed
         RTB.Text = RTB.Text & "Accion NOOK"
     end if
Código:

Per Debug observaba que al insertar el nuevo texto este se introducia todo del mismo color y es porque cada linea que inserto nueva, para conservar el contenido anterior vuelvo a insertarlo todo, de manera que todo el bloque de texto (Texto existente + Nueva Linea) se meten del color seleccionado.

Para solucionar esto debo encontrar la forma de conservar el texto de la RTB y formatear solo el texto introducido. Asi que a seguir estrujandose la cabeza...

Si alguien tiene mas sugerencias... se aceptan... y gracias por las ya dadas  :)
En línea

CeLaYa


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #5 en: 23 Octubre 2006, 19:43 pm »

creo que ya tienes la solución
Citar
... de manera que todo el bloque de texto (Texto existente + Nueva Linea) ...
En línea

"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.
NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #6 en: 23 Octubre 2006, 21:51 pm »

Hola...va a ser que no era esa la respuesta....

He probado de alojar el texto el el Clipboard para ver si mantenia su aspecto y luego insertarlo junto la linea a añadir... pero ni asi... me sale todo el texto en un color...
Código:
If Not (RsPeliculas.EOF = True And RsPeliculas.BOF = True) Then
    RsPeliculas.MoveFirst
    RichTextBox1.SelStart = 0
    Do While Not RsPeliculas.EOF
        If TestPath(RsPeliculas!Link) = False Then
            RsPeliculas!Actualizado = False
            Clipboard.Clear 'empty Clipboard
            Clipboard.SetText RichTextBox1.Text
            RichTextBox1.Text = Clipboard.GetText & "Link Roto: " & RsPeliculas!Link & vbCrLf
            RichTextBox1.SelStart = Len(RichTextBox1.Text) - Len("Link Roto: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelLength = Len("Link Roto: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelColor = RGB(150, 0, 20)
            NumeroLinksRotos = NumeroLinksRotos + 1
            RsPeliculas.Update
           
        Else
            RsPeliculas!Actualizado = True
            Clipboard.Clear 'empty Clipboard
            Clipboard.SetText RichTextBox1.Text
            RichTextBox1.Text = Clipboard.GetText & "Link Actualizado: " & RsPeliculas!Link & vbCrLf
            RichTextBox1.SelStart = Len(RichTextBox1.Text) - Len("Link Actualizado: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelLength = Len("Link Actualizado: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelColor = RGB(150, 0, 20)
            NumeroLinksActualizados = NumeroLinksActualizados + 1
            RsPeliculas.Update
        End If
        NumeroTotalPeliculas = NumeroTotalPeliculas + 1
        RsPeliculas.MoveNext
        ProgressBar1.Value = ProgressBar1.Value + 1
    Loop
End If
Código:

Con esto sale todo el texto de un color...

Y con esto tambien...
Código:
If Not (RsPeliculas.EOF = True And RsPeliculas.BOF = True) Then
    RsPeliculas.MoveFirst
    RichTextBox1.SelStart = 0
    Do While Not RsPeliculas.EOF
        If TestPath(RsPeliculas!Link) = False Then
            RsPeliculas!Actualizado = False
            RichTextBox1.Text = RichTextBox1.Text & "Link Roto: " & RsPeliculas!Link & vbCrLf
            RichTextBox1.SelStart = Len(RichTextBox1.Text) - Len("Link Roto: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelLength = Len("Link Roto: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelColor = RGB(150, 0, 20)
            NumeroLinksRotos = NumeroLinksRotos + 1
            RsPeliculas.Update
           
        Else
            RsPeliculas!Actualizado = True
            RichTextBox1.Text = RichTextBox1.Text & "Link Actualizado: " & RsPeliculas!Link & vbCrLf
            RichTextBox1.SelStart = Len(RichTextBox1.Text) - Len("Link Actualizado: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelLength = Len("Link Actualizado: " & RsPeliculas!Link & vbCrLf)
            RichTextBox1.SelColor = RGB(150, 0, 20)
            NumeroLinksActualizados = NumeroLinksActualizados + 1
            RsPeliculas.Update
        End If
        NumeroTotalPeliculas = NumeroTotalPeliculas + 1
        RsPeliculas.MoveNext
        ProgressBar1.Value = ProgressBar1.Value + 1
    Loop
End If
Código:

No se que hacer ya... lo maximo que he conseguido es que una vez escrito el texto del report en la RTB, pasar un filto buscando las palabras a colorear...pero el efecto es un poco cutre...

Asi queno se que hacer mas...estoy desesperao... Alguien sabe con que control hacen un chat que contiene muchos colorines y no se pierde el formato de color?
 :(

Ayuda po favó...
En línea

NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #7 en: 26 Octubre 2006, 17:45 pm »

Hola otra vez...

Nadie puede ayudarme con esto por favor, lo necesito.

Gracias.
En línea

CeLaYa


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #8 en: 26 Octubre 2006, 18:58 pm »

hice la prueba de meter texto con un for algo similar a lo que haces y me pasa lo mismo, la verdad no se porque .

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
En línea

"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.
NemeSys

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: Pregunta: Sobre RichTextBox, como colorearlo.
« Respuesta #9 en: 26 Octubre 2006, 21:33 pm »

Aleluya!!!!

Alguien que me entiende :D:D

Yo tampoco entendia porque pero es algo que parece no tener solucion.

Para actualizar el texto de una RTB se debe igualar la propiedad texto a si mismo mas el texto nuevo. Si debugas veras como es en el momento en el que se asigna la nueva cantidad de texto cuando se inserta todo del mismo color.

Creo que es porque o no se mantiene el formato de color del texto (porque el formato negrita si se mantiene) cuando se asigna a memoria para reasignarlo a la propiedad de texto.

o es porque al asignar la propiedad SelStart al final del texto, en el impas que hay cuando se ejecuta RichTextBox.Text = RichtextBox.text & "Texto_Nuevo" de: "borra texto existente del control *-> guardalo en memoria -> carga texto guardado + texto nuevo" la propiedad SelStart al ver que no hay texto en la textbox se asigna a cero*, cosa que hace que al asignar el texto nuevo la propiedad Color que esta a rojo, por ejemplo, se asigne a todo el texto insertad ?

No se porque pero es bastante fustrante esta situacion y mas cuando se que debe haber algun ActiveX donde esto se pueda hacer sin problemas. Nadie sabe de algun control que sirva como RTB?

Gracias CeLaYa por la ayuda :)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta escribir en Richtextbox
Programación Visual Basic
Cromatico 3 4,198 Último mensaje 12 Noviembre 2012, 20:09 pm
por NetFcruz
Duda sobre RichTextBox
.NET (C#, VB.NET, ASP)
CH4ØZ 2 2,369 Último mensaje 30 Octubre 2011, 04:07 am
por CH4ØZ
Pregunta sobre como instalar un rat
Hacking
UnaiiM 0 1,561 Último mensaje 29 Abril 2019, 13:58 pm
por UnaiiM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines