generando ficheros .rtf con harbour/fwh

Una de las opciones que trae el Puchero es la posibilidad de generar un fichero .rtf con la información almacenada de una receta. Hasta ahora el fichero .rtf que se generaba era algo como lo siguiente:

Fichero .rtf a partir de una receta… hasta ahora 😉

Para generar este fichero utilizo la clase TRtfFile de FWH que basicamente genera un fichero rtf a partir de una variable de tipo texto, pero sin permitir formateos ni muchas alegrías. Algo muy básico. La pregunta que te harás es ¿ por qué no generar un fichero docx directamente con la clase TWord o similar ? Pues porque la clase Tword para FWH requiere que el usuario tenga Word instalado, y eso es algo que evito a toda costa. La generación de ficheros XLS en mis programas la realizo utilizando la clase FileXls que Ramón Avendaño publicó en el foro de FWH hace muchos años, y que he subido a un repositorio de GitHub para evitar que desaparezca. Al generar el fichero desde cero, creando un fichero con el formato adecuado, se evita que el programa pierda funcionalidad si el usuario no tiene tal o cual programa instalado. En mi caso utilizo desde hace muchos años LibreOffice sin echar de menos ninguna funcionalidad del paquete Office de Microsoft, y los ficheros XLS los abro perfectamente con Calc.

Me puse a investigar sobre la generación de ficheros .rtf desde Harbour y FWH y encontré cosas interesantes hasta que llegué a un post en el grupo de Harbour Users en que había una clase para generar ficheros .rtf que me llamó la atención. Me puse a probarla y era lo que estaba buscando, la posibilidad de generar ficheros .rtf desde cero, creando el fichero con el formato adecuado. La clase está escrita por Thomas R. Marchione y la he publicado en Github sin tocar una coma. Espero que si el autor lee este post no haya ningún problema.

Utilizando esta clase, la exportación de receta a formato .rtf en el Puchero ahora mejora sustancialmente, puedo dar formato a los párrafos y crear tablas dentro del .rtf. Justo que lo quería.

A la hora de utilizar la clase con FWH hay que tener en cuenta lo siguiente:

  • En el fichero richtext.prg hay una instrucción #Command SET DEFAULT <x> TO <y> => <x> := IIF( HB_ISNIL( <x> ), <x> := <y>, <x> ) que genera un error debido a que FWH tiene una definición similar. Lo que he hecho ha sido cambiar esta instrucción por #Command SET RTFDEFAULT <x> TO <y> => <x> := IIF( HB_ISNIL( <x> ), <x> := <y>, <x> ) y modificar el fichero en consecuencia.
  • También hay una función FUNCTION cValToChar( xVal ) que hace reescribe otra de FWH y da problemas, en mi caso el los bitmaps de los browses aparecía NIL encima del bitmap en cuestión. En mi caso la comenté y listo.

A ver si alguien se anima a incluir posibilidad de añadir imágenes en el fichero .rtf

😉

clase TTagEver para FivewinHarbour

Una funcionalidad que quería implementar en el Puchero es la gestión de dietas y tolerancias de las recetas. Es decir que para cada receta se pueda poner si es adecuada para gente con colesterol, celíacos, o para dietas de puntos, Dunkan o lo que sea. Esto supone que cada receta podía llevar asociadas múltiples dietas y la verdad es que no tenía claro cómo hacerlo. Muchas veces lo principal no es la funcionalidad sino como se implementa esta funcionalidad lo que hace que esta sea aceptada por los usuarios o no.

El caso es que dándole vueltas a la cabeza recordé el sistema de etiquetado de documentos que usa Evernote. Algo así:

En FWH hay una clase llamada TTagCloud que podía servirme como base. Esta clase la hizo Francisco García Fernández, que creo que es un gran creador de controles para FWH y además un buen amigo mio. Estuve varias semanas dándole vueltas al control sin conseguir avances significativos, hasta que me puse en contacto con Paco para pedirle ayuda. Paco en un par de días hizo el control, y ahora en el Puchero tengo hecha la implementación de las dietas de esta manera.

Aspecto de la clase TTagEver

La clase desarrollada por Paco está disponible en el siguiente repositorio de GitHub: https://github.com/JoseluisSanchez/TTagEver

Mil gracias Paco.