COMPANY

BLOGS

  • user warning: Unknown column 'u.signature_format' in 'field list' query: SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data, c.thread, c.status FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.nid = 19292 AND c.status = 0 ORDER BY c.cid LIMIT 0, 50 in /var/www/www.4d.com/docs/modules/comment/comment.module on line 991.
  • warning: file_get_contents(http://www.telize.com/geoip/54.167.196.208) [function.file-get-contents]: failed to open stream: HTTP request failed! in /var/www/www.4d.com/docs/includes/common.inc(1762) : eval()'d code on line 4.

Texto con mucho estilo

29.07.2010
por Thibaud Arguillère

Cada nueva versión mayor de 4D trae nuevas funcionalidades. Menores o mayores dependiendo de las necesidades del desarrollador, lo que es muy interesante para un desarrollador no necesariamente lo es para otro y viceversa.

 

Admito que esta afirmación es obvia. Pero este es el lugar para escribir este tipo de cosas, incluso cuando son obvias.

 

Una de las nuevas funcionalidades de 4D v12 (lanzada en junio), calificada como mayor, es lo que comúnmente se llama texto Multiestilo, familiarmente llamado texto con estilos. Se trata de una implementación mayor por varias razones, entre ellas porque había sido solicitada desde hace mucho tiempo. Era necesario permitir a nuestros usuarios editar el estilo del texto, cambiar una parte a rojo, otra con un tamaño de fuente más grande y cursiva. No necesariamente todos, ni todas las aplicaciones (ver la introducción), pero con frecuencia hemos tenido esa necesidad. Tengo la osadía de ir más allá: no sólo queremos que nuestros usuarios puedan poner estilos en un área de texto, sino también que los cambios se guarden. Es decir que una tabla pueda almacenar un campo de texto con su estilo. Lo necesitábamos y 4D lo hizo en v12 (¿Quién acaba de decir "¡Por fin!"? ¿La misma persona que lo hizo en mi blog anterior?)

 

Sin profundizar demasiado en los detalles (la línea delgada entre un blog y una nota técnica es a veces difícil de encontrar), me gustaría centrarme en varios puntos sobre la gestión de texto con estilo en 4D.


Ponga la R en RAD

En primer lugar, su implementación es muy simple y justifica plenamente la "R" de "4D es una herramienta RAD." Sólo coloque una variable/un campo de tipo texto en un formulario, marque la casilla "Multiestilo", marque la casilla "Menú contextual" y eso es todo. El usuario puede aplicar estilos al texto y no escribí una sola línea de código.

 

No me malinterpreten: me encanta escribir código. Pero también me gusta trabajar rápido. Y cuando se trata de hacer dos casillas de selección, soy súper rápido.


Este es un ejemplo rápido de implementación:

 

 

Texto multiestilo = texto con etiquetas

El formato elegido para la gestión interna del texto con estilo es la etiqueta SPAN de HTML. Esto significa que cuando el usuario cambia una palabra a negrita, una etiqueta SPAN que contiene el atributo estilo con el atributo font-weight:bold, se inserta en el texto, en memoria. Así que...

 

"Este es un texto con estilo"

 

se convierte en:

 

"Este es un texto con <SPAN STYLE="font- weight:bold">estilo"</SPAN>

 

Es esta combinación de "propiedad multiestilo seleccionada" y "el texto contiene etiquetas SPAN" la que permite a 4D dibujar el texto en su estilo.

 

4D v12 contiene todas las herramientas necesarias para manejar áreas de texto multiestilo durante la ejecución: podemos definir el estilo, leer el estilo, etc. Lo invito a descargar y ver la Rich Text Area demostration, que utiliza un widget para dar formato al texto, reutilizable en sus propias aplicaciones.

 

Tomemos un momento en un punto: dado que el texto contiene etiquetas filtradas por 4D cuando dibuja el área, puede ser complicado detectar la existencia de una expresión en el texto. Si utilizo el ejemplo anterior, una llamada a Position ("is a styled";Mytext) devolverá 0. De hecho, después de "a" y antes de "text", se insertó la etiqueta. La nueva función OBJECT Get plain text es la solución: devuelve el texto sin etiquetas (tenga en cuenta que en este ejemplo, devuelve el valor de posición en el texto plano, no en el texto con estilo).

 

Si el objeto de formulario es un campo de tipo texto cuya propiedad "Multiestilo" está activa, el registro se guarda con sus etiquetas. Una vez más, tenga cuidado si necesita realizar una búsqueda en palabras o frases. Para facilitar la búsqueda (incluido con el editor estándar), debe seleccionar la casilla Búsquedas y ordenaciones en texto sin etiquetas en las propiedades del campo. De hecho, en este caso, QUERY([Invoice];[Invoices]StyledInfos="@invoice paid") encontrará los registros independientemente de su estilo. Importante: tenga en cuenta que la operación será entonces siempre secuencial porque 4D carga cada registro, borra las etiquetas del campo y luego realiza la comparación.

 

Como quedó demostrado durante el Tour Mundial de 4D 2009-2010, fuimos más allá de la visualización de estilos en un área de texto: También funciona en List boxes Seleccione el atributo multiestilo de una columna de tipo texto (array o campo) y su contenido se mostrará en varios estilos. Solo por decir, la impresión (Print object) de un área de texto con estilo o de un ListBox que contiene una columna de texto con estilo funciona de la misma forma. Pero eso es sólo por decirlo...

 

Una cosa más. El hecho de que el estilo se maneje a través de las etiquetas SPAN en la memoria nos permite cambiar el estilo por programación. Por ejemplo, habíamos colocado previamente una palabra en negrita en esta publicación. Para agregar cursiva al estilo, puedo escribir:

 

myText:=Replace string(myText;"font-weight:bold";"font-weight:bold;font-style:italic")

 

Una cosa más (una segunda). Tenga cuidado con las trampas. El área de texto se convierte, de hecho, en un área de SPAN, en donde los retornos de carro se convierten en la etiqueta <BR/>. Por lo tanto, cuando el usuario entra en...

 

“1
2
3”

 

... el campo se almacena como "1<BR/>2<BR/>3"

 

Un poco de trabajo para el equipo de Investigación y desarrollo

Con la visualización, la gestión de la ejecución, el almacenamiento en los campos, la visualización en los ListBox y la impresión, sería suficiente para escribir páginas y páginas de blogs, notas técnicas y trucos técnicos. Sin embargo, me gustaría señalar una funcionalidad que falta, sólo para darle algo de trabajo al equipo de investigación y desarrollo. El hecho es que no es posible darle estilo al texto estático. Por el momento, si se quiere mostrar una etiqueta con estilo, debe utilizar una variable. Sugerencia: utilice la nueva funcionalidad Variables de Formulario Dinámicas (otra implementación mayor).

 

Por último, ¿qué pasa si decimos que todas las nuevas funcionalidades de 4D v12 son mayores?

 

Es muy simple:

  1. Arrastre una variable al formulario
  2. Dele un nombre significativo (esto no es obligatorio, sólo una buena práctica)
  3. Borre el nombre de la variable. El objeto no debe tener nombre de variable.
  4. Asigne el tipo “Texto”
  5. Desactive la opción "Editable" y seleccione "Multiestilo"

Propiedades
Para llenar la etiqueta, coloque el puntero sobre el objeto utilizando su nombre y luego asígnele el valor del texto con estilo:

 

$toObject:=OBJECT Get pointer(Object named;"oStyledLabel")

// Must escape the quotes

$toObject->:="The <SPAN STYLE=\"font-style:bold;color:#FF0000\">tax value</SPAN> is missing"

 

Ejemplo

 

Y ahora los dejo para que consulten la documentación (actualización a 4D v12, documentación del lenguaje, ver la aplicación de demostración...) para instalar, manipular e imprimir texto con estilos.

RSS 0 comentario(s) a este mensaje