Solicitando una función sobre TextEdit y Richtext - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Controles/Librerías/Componentes (https://gambas-es.org/forum-7.html) +--- Tema: Solicitando una función sobre TextEdit y Richtext (/thread-1639.html) Páginas:
1
2
|
Solicitando una función sobre TextEdit y Richtext - Shordi - 19-03-2024 Necesito una función que me diga la posición del cursor a partir del RichText. Me explico: Un control TextEdit tiene una propiedad .Text que nos da el texto puro y duro que contenga y una propiedad .RichText que nos muestra el texto enriquecido que hay debajo. También dispone de una propiedad .Pos que establece/devuelve la posición del cursor dentro del texto, así como métodos para manejar esa posición. Bien, yo necesito algo que dada la ubicación de una etiqueta HTML me devuelva la ubicación del texto que hay dentro de esa etiqueta. Ejemplo: Supongamos que dentro de un Textedit tenemos un texto así: Este es un texto con una palabra en negrita. la propiedad .text será: Este es un texto con una palabra en negrita y la propiedad .RichText será: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'default'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:44px;">Este es un texto con una <span style=" font-weight:600;">palabra</span> en negrita..</p></body></html> Bien supongamos que buscamos la palabra que está en negrita, o sea: "palabra" a partir del Richtext, no del text. Dentro del .Richtext, "palabra" empieza en el carácter 550. Dentro del .text "palabra" empieza en el carácter 26 Necesito una función que me traduzca ese 550 a 26... y viceversa si es posible, claro. Llevo dos días comiéndome el coco con ello y no encuentro la manera correcta. Os diría lo que he intentado... pero eso podría llevaros a callejones sin salida, como a mí. Venga, se me animen. Saludos RE: Solicitando una función sobre TextEdit y Richtext - Grandamakulo - 19-03-2024 No sé si esto es lo que buscas. Digamos que de 550 a 26 lo clava, pero al revés no es del todo exacto. Además, hay cosas que quizá convenga detallar.
Ya me dices. RE: Solicitando una función sobre TextEdit y Richtext - Shordi - 19-03-2024 Por orden. Cita: Una ocurrencia o todas. Eso lo tengo como parámetro configurable. En principio todas. Cita:Realmente quieres buscar esa palabra o quieres etiquetar esa palabra y luego quitar esa etiqueta —me refiero a poner <span> para hacer un marcado provisional, que luego deje el texto tal cual; para eso ya tengo hecho un par de funciones—.Quiero buscar esa palabra, mejor dicho cadena, siempre y cuando esté etiquetada de una forma concreta. Digamos un color (en el ejemplo de más arriba era la negrita). No me interesan las que no lo estén. En realidad busco la etiqueta html y dentro de ella la cadena y entonces ubicar sobre ella el cursor. El caso concreto, es para Soprano. Ya tengo solucionada la cuestión de elegir una palabra, pulsar sobre el color elegido y marcar todas las ocurrencias con ese color. Lo que no consigo es, desde cualquier lugar del texto, pulsar sobre el color elegido y ubicarme en la siguiente palabra marcada. Cita: el Richtext, el código de color y la posición actual. Retorna la nueva posición. Si está dentro del formulario donde el Richtext está contenido en el textEdit y la posición también, con el código de color sería suficiente. Te adjunto el "Quijote I" de tu ejemplo con la cadena "de" marcada en amarillo. La idea sería ubicarse sobre una de las marcas amarillas, pulsar doble click (o lo que sea) y que el cursor se posicione sobre la marca siguiente (para sacar nota que se pudiese elegir entre la siguiente o la anterior). Gracias por tu interés. Saludos. RE: Solicitando una función sobre TextEdit y Richtext - Grandamakulo - 19-03-2024 Vale, ¿y generar una matriz de ocurrencias con RegExp.FindAll sobre "<(|/)span:" & sEtiqueta & "(.*?)>" (*) y avanzar o retroceder sobre esa matriz? Ahora sólo es cuestión de buscar el índice del elemento que se está pulsando, lo que es mucho más sencillo. Le doy una vuelta, si quieres. (*) [code] Sería añadir el elemento background-color:#ffffc0 en la cadena de búsqueda. Pero, ¿no has pensado en usar una etiqueta en particular para marcar esas ocurrencias, del tipo <span: DEMIURGIA aquírestodeatributos>? RE: Solicitando una función sobre TextEdit y Richtext - tincho - 19-03-2024 No creo que el enfoque adecuado sea la posición del carácter, en su lugar conviene trabajar con el html y sus nodos para acceder a sus atributos, si es que existen, para alterarlos o para quitarlos o agregarlos. Dejo un ejemplo. Código: '' Return a Html text with the color changed where the string match with the first prameter "s" RE: Solicitando una función sobre TextEdit y Richtext - Grandamakulo - 20-03-2024 Sí, peeeero, la gestión de XML/HTML de forma masiva por nodos suele ser muy lenta. De ahí el uso de RegExp para cambiar rápidamente los nodos <span>. Precisamente por eso le sugiero un marcado especial por función —que, además, para eso está—, porque es mucho más rápido de encontrar. cuanto menor es el número de ocurrencias —i.e., cuanto más específica sea la etiqueta— más rápido se pueden encontrar por el método que sea. RE: Solicitando una función sobre TextEdit y Richtext - Shordi - 20-03-2024 Probando estoy las sugerencias... pero esta noche vienen invitados a casa hasta el domingo, o sea, nada de ordenata y mucho de cocina. Ya os diré cómo va el tema. Saludos RE: Solicitando una función sobre TextEdit y Richtext - Grandamakulo - 20-03-2024 ¿Te refieres al tema de la cocina? No hay nada que un buen bellota —al precio que va es lo menos que se le puede pedir— y una tortilla de patatas no puedan hacer. Para lo demás, saca primero el vino bueno y, después de un par de copas, el «Don Simón» que ya nade se dará cuenta. ¿O te refieres al tema ordenador? RE: Solicitando una función sobre TextEdit y Richtext - Harpo - 20-03-2024 Me interesa el tema de RegExp, ¿se puede usar para ficheros SVG?. Estoy trasteando con ellos y no me convence XML, me he creado un parser propio pero es más lento, no me sirve para lo que quiero. Un saludo, Harpo. RE: Solicitando una función sobre TextEdit y Richtext - Grandamakulo - 21-03-2024 Ni caso en mis respuestas. Resulta que siempre trabajo con los HTML si pasarlos por TextEditor. Pero, claro, este componente tiene vida propia. Así es como le mando un texto: Código: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> Código: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> Pero no pasa nada, prometo una respuesta más prolija con soluciones. Más o menos. Así le doy tiempo a Shordi a preparar una fideguá de marisco, una porchetta o un potaje en condiciones para sus comensales —entre los que no me encuentro porque no quiera, porque soy superagradecido y me callo los defectos del cocinero siempre ;P—. (20-03-2024, 21:10)Harpo escribió: Me interesa el tema de RegExp, ¿se puede usar para ficheros SVG?. Estoy trasteando con ellos y no me convence XML, me he creado un parser propio pero es más lento, no me sirve para lo que quiero. Nunca lo he probado como tal, pero supongo que sí. si me dices qué buscas, podemos verlo. |