Título: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys 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. Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa 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 Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys 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. Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa 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 (http://www.geocities.com/cero780814/rtb.JPG) ahora no se si eso es lo que quieres hacer. Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys 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 :) Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa 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) ... Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys 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ó... Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys en 26 Octubre 2006, 17:45 pm Hola otra vez...
Nadie puede ayudarme con esto por favor, lo necesito. Gracias. Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa 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 .
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys 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 :) Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa en 26 Octubre 2006, 22:54 pm pues ya me ropi cabeza y no encuentro forma de hacerlo, creo que la unica solución es la que comentabas
Citar 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... porque otra forma no se me ocurre, solo que le pongas Visible = False luego coloreas y otra vez Visible = True Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: CeLaYa en 26 Octubre 2006, 23:11 pm Despues de haberme partido la cabeza con eso del RichTextBox se me prendio el "foco" y que crees eso que quieres hacer se puede hacer con un PictureBox, ahora solo hay que agregarle sus scrolBars
Private Sub Form_Load() Dim i As Integer Show For i = 1 To 10 If Picture1.ForeColor = vbRed Then Picture1.ForeColor = vbBlue Picture1.Font = "Courier New" Picture1.FontBold = True Picture1.FontSize = i + 8 Else Picture1.ForeColor = vbRed Picture1.Font = "Arial Black" Picture1.FontBold = False Picture1.FontSize = i + 8 End If Picture1.Print "hola" Next i End Sub Título: Re: Pregunta: Sobre RichTextBox, como colorearlo. Publicado por: NemeSys en 28 Octubre 2006, 01:08 am CeLaYa..... TE ADORO :D:D:D:D
Muchas gracias :D |