Archivo de la categoría: Noticias

Un sencillo y útil Plug-In

Estimados usuarios de Xailer,

Desgraciadamente sois pocos los que habéis sacado partido del sistema de Plug-In que incorpora Xailer y realmente se ha realizado un gran esfuerzo. Os animamos a probarlo. Este artículo pretende iniciaros en el uso y creación de los mismos.

Un Plug-In es sencillamente una DLL que se carga con el propio IDE de Xailer y que puede realizar diversas tareas, como por ejemplo:

  • Añadir nuevas opciones en el IDE bien a través de menus o atajos de teclado que permiten realizar cualquier tipo de tarea o para establecer configuraciones especificas: Este es el caso del Plug-In ‘MoreOptions.dll‘ que permite establecer configuraciones adicionales del editor.
  • Realizar operaciones adicionales cuando se producen determinados eventos dentro del IDE.

Es necesario indicar en el IDE que se pretende utilizar un determinado Plug-In y para ello se utiliza la opción de menú Componentes->Gestor de Plugins. Los Plugins deben de encontrarse en el directorio \xailer\plugins. Desde esta opción podrá habilitar o deshabilitar cualquiera de ellos.

Cualquier Plug-In tiene un acceso muy relevante de todo el IDE y es posible desde el mismo acceder al editor de código, al editor de formularios, al proyecto activo, etcétera. En el siguiente enlace tenéis información de como utilizarlos. Está en inglés, pero espero que eso no sea un problema.

En la última versión de Xailer introdujimos un nuevo Plug-In de nombre ICIP_Plugin que entendemos puede ser muy útil y que además sirve para que os adentréis en el uso de los mismos. Este Plug-In en cuestión tiene un cometido muy básico, que consiste en establecer propiedades iniciales a los controles cuando se depositan en el formulario. Por ejemplo: si cada vez que instanciamos un control del tipo TMaskEdit ponemos su propiedad lZeroFill a .T., sería muy útil que esa operación se realizase automáticamente. Esta es la labor que realiza el Plug-In.

Podríamos haber creado un Plug-In con una configuración extensa desde el propio IDE , por la cual se pudiese establecer el valor inicial de cada propiedad para cada tipo de control, pero sería muy poco usable. Hemos preferido que todo el trabajo se haga por código desde el propio Plug-In. De esta forma conseguimos mucha más potencia y flexibilidad.

La tarea de nuestro Plug-In consiste en estar atento a cualquier operación de deposito de un control en un formulario y en dicho momento comprobar si tiene que actualizar alguna de las propiedades del mismo. Para ello, deberá capturar el evento apropiado, que en nuestro caso es «FE_AddControl» que recibe como primer parámetro el objeto depositado en el formulario. En ese momento comprobamos según el tipo de objeto que es si hay que actualizar alguna propiedad. Y eso es todo.

El proyecto completo de este Plug-In se encuentra en el directorio \samples\Plugins\ControlsInitProps. Es necesario que modifiquéis el proyecto según vuestras propias necesidades, pero sólo es necesario que adaptéis el método Run() que es muy sencillo. Este sería el código para TEditMask:lZeroFill:

METHOD Run( oControl, aSelection )
 IF oControl:IsKindOf( "TMaskEdit" )
  oControl:lZeroFill := .T.
 ENDIF
RETURN nil

En el propio proyecto podéis ver como se controlan más de un tipo de control y lo fácil que es adaptarlo a vuestras necesidades.

Independientemente de que el Plug-In esté cargado en el IDE es posible desactivarlo o activarlo desde de la opción de menú que él mismo integra bajo la opción de menú de Herramientas del IDE.

Espero que os parezca de utilidad, empecéis a usarlo y sobre todo os animéis a desarrollar vuestros propios Plugins.

Un saludo

Mejoras en nuestro editor gratuito xEdit

Con la presentación de Xailer 7 hemos decidido incluir en el paquete de instalación nuestro editor gratuito xEdit que incorpora toda la funcionalidad a nivel de editor de código del IDE de Xailer, como puede ser el propio Intellisense.

xEdit es un editor de programación especialmente adaptado para ser utilizado con Harbour. Se puede usar con absolutamente cualquier entorno de desarrollo que utilice Harbour o xHarbour como compilador de lenguaje xBase. Incorpora un sistema de configuración de entornos que permite trabajar con distintos tipos de proyectos de forma muy sencilla.

Con esta nueva versión de xEdit incluimos algo muy demandado entre los usuarios que lo utilizan y que es una de las grandes estrellas de nuestro entorno de programación Xailer: Nos referimos al depurador de Xailer.

La nueva versión de xEdit incorpora la capacidad de depurar absolutamente cualquier tipo de proyecto. Junto con los binarios del programa, ahora se entregan dos librerías: libXailerDebug.a y XailerDebug.lib. La primera debe de usarse si se utiliza el compilador C de MinGW y la segunda si se utiliza Borland C++. Adicionalmente se entrega un documento PDF de nombre XailerDebug.pdf con información de como usarlo.

Podéis descargar la última versión de xEdit desde la siguiente dirección:

Área de descargas de Xailer

Espero que os guste.

Un cordial saludo

Nuevo Browser en Xailer 7

Xailer 7 incorpora un nuevo control tipo Browser, diseñado desde cero, en el que se han incorporado casi todas las funcionalidades del antiguo Browser, se han añadido nuevas y se ha incorporado el diseño moderno de Windows 10.

Estas son algunas de las importantes características que incorpora en el nuevo Browser:

  • Editores de celdas especializados para cada tipo de datos
  • Ordenación automática sobre cualquier columna
  • Filtrado automático por una o varias columnas
  • Cabeceras de columnas: Es posible introducir una cabecera que abarque a varias columnas
  • Agrupaciones por todas las columnas que se requiera, pudiendo mostrar en la cabecera o pie de cada agrupación cualquier datos de acumulación, máximos, mínimos, medias o contadores de cualquiera de las columnas de una forma tremendamente sencilla
  • Potente gestión de eventos que permite adaptar la visualización de las columnas completamente a sus necesidades
  • Fondo transparente. Lo cual le permite poner una imagen como fondo del control
  • Modificación del alto de la fila por el propio usuario
  • Barras de desplazamiento (Scroll) escamoteables al estilo de Windows 10

El nuevo Browser utiliza de forma más ortodoxa las barras de desplazamiento, tanto la vertical como la horizontal, a diferencia del clásico Browse.

A diferencia del Browser clásico, este nuevo control no tiene una versión específica para ser usada con tablas DBF. En dichos casos, deberá traspasar los datos de la tabla, bien a una matriz o un dataset en memoria (TMemDataset) y lógicamente, en ambos casos, será responsabilidad del programador la actualización de los datos del Browser con la tabla DBF subyacente.

Se ha realizado un gran esfuerzo con este nuevo Browse y esperamos que sea de vuestro agrado. Os animamos a que empecéis a usarlo en vuestros nuevos proyectos.

Un saludo

Nuevos controles visuales en Xailer: TreeView

Xailer 7 incorpora un nuevo control estilo TreeView pero con estilo Windows 10 y completamente configurable. El control TreeView existente en versiones anteriores de Xailer, que también se mantiene, está basado en un control estándar de Windows y desgraciadamente es poco configurable y no ha habido más remedio que crear un nuevo control desde cero. Ello nos ha permitido hacerlo altamente configurable y potente. Os dejo un pequeño de vídeo del mismo. Espero que os guste.

Un saludo

Nuevos controles visuales en Xailer: barras de progreso y deslizadores

En Xailer 7 hemos renovado también dos controles clásicos de Windows que son la barra de progreso (progress bar) y los deslizadores (sliders) , ofreciéndoles en ambos casos un aspecto más moderno, acorde con Windows 10. Al ser controles nativos de Xailer y no apoyarse en ningún control existente de Windows, conseguimos que sea completamente configurable por el usuario.

Es importante resaltar la existencia de un nuevo control tipo barra de progreso, pero circular, que puede mostrar o no el porcentaje de la misma y permite mostrar un texto en la parte inferior haciendo que el área inferior de la barra se abra para dar espacio a dicho texto.

Espero que os guste.

Un saludo

Nuevos controles visuales en Xailer 7: TCircularImage

Control sencillo, pero ampliamente demandado por su gran uso en plataformas móviles. Este control permite mostrar cualquier imagen dentro de un área circular. Permite establecer un marco y un efecto ‘hot’ cuando se coloca el ratón encima de él haciendo que la imagen se muestre más resaltada, pudiendo elegir el color para hacer dicho resaltado. Adjunto una muestra de lo que es capaz:

Espero que os guste. Un saludo.

Nuevos controles visuales en Xailer 7

En los próximos artículos vamos a repasar todos los nuevos controles que incluye el futuro Xailer 7. Existen nuevos controles que son simplemente versiones más vistosas de controles ya existentes, pero adaptados al estilo de Windows. Motivo por el cual todos estos nuevos controles se califican como ‘modernos’ y tiene una pestaña propia en el propio IDE. Sería el caso de los controles:

  • TButtonMod: Botón
  • TEditMod: Edit (Ya existente en Xailer 6, pero se ha adaptado para su funcionamiento en modo oscuro)
  • TMemoMod: Memo (Ya existente en Xailer 6, pero se ha adaptado para su funcionamiento en modo oscuro)
  • TCheckBoxMod: Checkbox o casilla de verificación
  • TRadioMod: Botón tipo Radio
  • TProgressBarMod: Barra de progreso
  • TTrackBarMod: Barra de seguimiento
  • TSwitch: Interruptor (Ya existente en Xailer 6, pero se ha adaptado para su funcionamiento en modo oscuro)
  • TGroupBoxMod: Cuadro de grupo
  • TDateEditMod: Edit especializado en la edición de fechas, utilizando el nuevo control de TCalendarMod
  • THeaderMod: Control para manejar cabeceras de browses o barras de botones

Además de estos controles se han incorporado algunos nuevos que o son completamente nuevos o por su gran mejora, merece la pena dedicarles un artículo a cada uno de ellos, como son:

  • TWebView: Control tipo browser basado en Microsoft Edge con integración total con sus aplicaciones.
  • TListBoxMod: Control tipo listbox con todo lo que pueda necesitar
  • TComboBoxMod: Control tipo ComboBox
  • TBtnPanelMod: Panel contenedor con efecto botón
  • TProgressCircle: Barra de progreso circular
  • TCalendarMod: Control tipo calendario
  • TTreeViewMod: Control tipo Treeview muy potente y completamente configurable
  • TCircularImage: Control tipo imagen con enmarcado circular
  • TBrowseMod: Control tipo browse que mejora sustancialmente el actual browse.

Todos estos nuevos controles que son susceptibles de tener su equivalente como DataControl, también han sido creados para el nuevo Xailer 7. Por lo tanto y como pueden imaginar, Xailer 7 es sin duda el mayor esfuerzo que se ha realizado en una actualización de Xailer desde Xailer 2.

Otra característica fundamental de los nuevos controles es que admiten el uso de etiquetas básicas tipo HTML en las propiedades de tipo cadena, como por ejemplo la propiedad cText del TButtonMod.

Comenzamos con el control TBtnPanelMod. Este nuevo control de Xailer 7 ofrece una gran funcionalidad que consiste en poder establecer que un contenedor de controles se comporte como un botón en su conjunto.

Esto nos permite crear botones con una mayor funcionalidad que la que teníamos hasta ahora. Seguro que ya habrá descubierto que son ampliamente utilizados en Windows 10.

Espero que les guste. Pronto más controles. Estén atentos. Gracias.

Visor e impresor de archivos PDF en Xailer 7

Xailer 7 incorpora controles para visualizar e imprimir cualquier archivo PDF de una forma muy sencilla, sin limitaciones, con una increíble velocidad y sin que nuestra aplicación vaya a crecer demasiado por ello. Para conseguirlo Xailer 7 se apoya en la utilidad Sumatra PDF.

Sumatra PDF reader es una estupenda herramienta para visualizar e imprimir archivos PDF. Es muy rápida, liviana y su integración con Xailer es total, ya que se comporta como un control más dentro de su aplicación, que puede fácilmente seleccionar desde la propia paleta de controles del IDE.

Para poder utilizar el control es necesario que su aplicación pueda acceder a un único fichero de nombre SUMATRAPDF.EXE. Con Xailer 7 ofrecemos dos versiones de dicho ejecutable. La versión 3.1 por tener un tamaño ridículo de 2.721 Kb que es posible que sea suficiente para los archivos que usted desea mostrar. Y la la versión 3.2 que tiene un tamaño de 14.017 Kb que tampoco es muy grande teniendo en cuenta todo lo que hace.

Sumatra PDF viewer soporta los siguientes tipos de archivos: PDF, EPUB, MOBI, CHM, XPS, DjVu, CBZ y CBR. Y las siguientes extensiones:

  • PDF (.pdf), unencrypted EPUB (.epub), MOBI (.mobi)
  • Fiction Wise (.fb2, .fb2z, .zfb2), Palm DOC format (.pdb)
  • comic book files: (.cbz, .cbr, .cbt, .cb7z)
  • DjVu (.djv, .djvu), Microsoft Compiled HTML Html (.chm)
  • XPS (.xps), images (.jpg, .png,.gif, .webp, .tiff, tga, .j2k)

Puede obtener más información sobre Sumatra en esta dirección: https://www.sumatrapdfreader.org

La licencia con la que se ofrece este producto es: GNU General Public License v3, que en principio es compatible con el uso comercial del producto siempre que sigan todas las restricciones que impone la licencia. No obstante, el equipo de Xailer se puso en contacto con el desarrollador Krzysztof Kowalczyk para confirmarlo. Puede seguir la pregunta y respuesta en el siguiente enlace en su foro.

Mejoras en los Data Controls de Xailer 7

Os sigo comentando las mejoras importantes que incluirá el futuro Xailer 7. Como muchos sabéis, cuando se utilizan DataControls, Xailer es capaz de acceder a los distintas campos de una tabla o cursor como si se trataran de miembros de la propia clase TDataset. Un ejemplo:

WITH OBJECT oDataset
  :Edit()
  :Codigo := 1 // campo
  :Nombre := "Ignacio" // campo
  :Update()
END WITH

Cuando el nombre del campo coincide con un miembro real del propio dataset, el acceso al campo no es posible, ya que tiene preferencia el miembro de la clase TDataset. Para resolver este problema, hasta ahora se podía utilizar el método TDataset:FieldPut() directamente o bien recuperar el objeto TDataField con el método oFieldByName() y luego asignarle el valor.

A partir de Xailer 7 tenemos una solución más elegante para acceder a cualquier campo del TDataset aunque coincida su nombre con algún miembro de la clase y consiste en utilizar la siguiente instrucción: TDataset:!Campo

Observe como la única diferencia existente es la admiración después de ‘:’. Además, de esta forma, usted mismo como programador, sabrá si está accediendo a un campo o a un miembro de la clase, lo que hará que su código sea mucho más legible.

Otra mejora importante: En Xailer 7 hemos hecho un pequeño guiño a las bases de datos NoSQL. En las bases de datos NOSQL los esquemas de datos son dinámicos, es decir, no existe una estructura fija de tabla y la consistencia de los datos es menos importante. En Xailer 7 hemos querido incluir alguna de sus cualidades y ahora cualquier dataset, incluso una tabla DBF puede tener la habilidad de guardar en su tabla cualquier campo, aunque éste no exista ni siquiera en la tabla. Sólo es necesario la existencia de un campo en la base de datos de nombre MoreData, que lógicamente deberá de ser tipo BLOB o MEMO.

Para acceder o establecer el valor de éste campo virtual tan sólo que hay que usar la sintaxis: oDataset:!Campo. Es decir, hay que incluir el carácter ‘!’ del que hemos hablado anteriormente. ¡Eso es todo! Internamente toda la información se guarda con formato JSON dentro de ese campo y por lo tanto se pueden realizar búsquedas en el campo ‘MoreData’ e incluso editarlo desde su editor de bases de datos preferido. Nuestro editor de tablas SQLite ya soporte el tipo de campo JSON, por lo que en dicho caso, lo preferible es definir el campo con ese tipo.

Las posibilidades de este nuevo sistema son múltiples. A modo de ejemplo:

  • Guardar en una tabla de clientes las direcciones completas de todas sus delegaciones (no es necesario crear una tabla clientes-delegaciones)
  • Guardar en una tabla de artículos una relación completa de todas las ofertas que tiene por periodo o cantidad
  • Evitar tener que modificar una tabla por la necesidad de incluir un nuevo campo

Una de las grandes ventajas de este nuevo sistema, es que puede guardar en la tabla cualquier tipo de dato, incluso matrices y objetos Hash.

No obstante, existen limitaciones, que son insalvables, como son:

  • Los campos virtuales no pueden ser asignados a la propiedad ‘oField‘ de un datacontrol
  • No se pueden realizar búsquedas directas sobre campos virtuales. Deberá buscar internamente en el campo ‘MoreData’