MIDAS Generador de reportes para Xailer y algo más

Por fin puedo presentar la Beta 1 de la primera parte de MIDAS, esto es, el generador de informes y el generador de formularios.

Aún estoy puliendo algunas cosillas pero ya es totalmente operativo.

Por las limitaciones que me impone este Blog me he visto obligado a hacer rápidamente una Web de la que podréis descargar todo lo necesario para probarlo.

www.binarygeneration.com

Espero que os guste el invento.

Salu2.

FormWizard una pequeña utilidad para Xailer.

Una de las mejores cosas que tenemos a nuestra disposición en Xailer, es poder diseñar nuestros Form con acceso a una base de datos usando DataControls de una forma muy sencilla.

Pero comentando el otro día, en la taberna entre dos vinos como hacemos los de Bilbao, el amigo David Marina me comentaba que le parecía curioso que no hubiera, como en otros IDEs de programación, algunos Wizard para hacer cosas elementales como un form con todos los campos de una tabla y tenía razón, así que le animé a que lo hiciera como ejercicio práctico y así comenzó esta pequeña historia que entre ambos hemos montado.

FormWizard es una utilidad que permite tomar un DBF (lo siento de momento no sabemos de SQL) y con todos sus campos o los indicados y en el orden deseado, mas otras florituras, genera un formulario con su PRG y XFM que guardaremos en la carpeta Source del proyecto en el que estamos y listo. Asigna los DataControl al control más lógico, los autoajusta al tamaño necesario, etc.

A continuación simplemente añadimos el recién creado PRG al proyecto (Proyecto – Añadir fichero al proyecto o el Icono correspondiente) y listo. Pulsando F12 podremos ver el formulario y modificarlo al gusto si nos apetece, ya que es lo mismo que si lo hubiéramos hecho a mano desde cero con el IDE.

Si además queremos usarlo con mas facilidad lo mejor es meter el ejecutable en la carpeta que queramos (yo lo he puesto en C:XailerBin) añadirlo al menú herramientas mediante la opción “Configurar herramientas” con los siguientes datos:

Herramienta FormWizard

Aunque no es una ayuda bárbara, esperamos que os guste y le saquéis provecho a nuestro regalo navideño. Proyecto FormWizard

Graficación en un formulario de Xailer con controles de terceros.

Continuando con el uso de controles OCX vamos ahora a ver como utilizar un control de terceros no presente directamente en el sistema operativo (como los vistos hasta ahora), esto quiere decir que habremos de instalarlo en cada PC del cliente donde queramos utilizarlo, aunque esto se puede automatizar como se verá mas adelante.

Este control es un generador de gráficos estadísticos de muy fácil manejo, pero de excelentes prestaciones, que además tiene la gran ventaja de ser gratuito ya que su autor lo ha donado de forma altruista al dominio público, es el control OCX llamado RMChart.

Ejemplo de RMChart

Sigue leyendo

Usando FTP

Hace algún tiempo, Carlos Ortiz preguntaba si había un modo sencillo de descargar y/o subir archivos a un FTP.

Coincidiendo con Carlos en que el uso de los métodos :OpenFile(), :ReadFile() y :WriteFile() del componente TFtp de Xailer no es el mejor camino para un usuario nuevo con la herramienta, me dispuse a escribir un componente que lo haga de un modo un poco más amigable, donde sólamente sea necesario especificar los datos de la conexión, el nombre del archivo y poco más.

Las propiedades de este componente son:

    PROPERTY cRemoteFile: el nombre del archivo en el servidor FTP.

    PROPERTY cLocalFile: el nombre del archivo local.

    PROPERTY cUser: el nombre de usuario para acceder al FTP.

    PROPERTY cPassword: la contraseña.

    PROPERTY cServer: el servidor FTP. Puede indicarse tanto con su nombre (ftp.myserver.com) como con una dirección IP (127.0.0.0).

    PROPERTY nTransferType: especifica si vamos a hacer una transferencia binaria o ASCII. Los valores que puede tomar esta propiedad son ftpBINARY o ftpASCII.

    PROPERTY nBuffer: el tamaño del buffer de lectura y/o escritura que se va a utilizar durante la subida o bajada del archivo. Su valor por defecto es de 16 Kb.

Los eventos:

    EVENT OnError( oSender, nError, cError )
    Este evento nos notificará cuando alguna operación falle del código del error y su descripción.

    En caso de que el error sea un error remoto, el valor de nError será mayor o igual que 12.000 y cError nos informará en casi todos los casos de la descripción, pero si el error se debe a un fallo local nError tendrá el último valor devuelto por FError() y cError estará vacío.

    EVENT OnStart( oSender, nFileSize )
    Se lanza cuando se va a empezar a subir o bajar un archivo y nos informa de su tamaño total en bytes. Es útil si se quiere actualizar una barra de progreso o informar al usuario del tamaño del archivo.

    EVENT OnComplete( oSender )
    Se lanza cuando la subida o descarga del archivo termina.

    EVENT OnProgress( oSender, nBytes )
    Cada vez que se envía o recibe un bloque de datos se lanza este evento y se informa en nBytes de la cantidad de datos leídos. Al igual que en OnStart(), sirve para actualizar una barra de progreso y/o informar al usuario de cuántos bytes se han leído/enviado.

Los métodos:

    METHOD Upload()
    METHOD Download()
    Sirven para subir y descargar un archivo respectivamente.

Un pequeño ejemplo de cómo descargar un archivo.

  • Creamos un formulario con dos TLabel y un TButton.
  • Añadimos una DATA a la declaración de TForm.
    1. DATA nRead  INIT 0
  • Y ponemos el siguiente código en el evento OnClick del botón:
  • 
       oSender:lEnabled := .F.
    
       WITH OBJECT TFTPFile():Create( Self )
          :cRemoteFile := "tests/test.zip"
          :cLocalFile := "c:test.zip"
          :cServer := "ftp.myserver.com"
          :cUser   := "User"
          :cPassword := "Password"
          :OnStart := {|oSender, nSize| ::oLabel2:cText := ToString( nSize ) + " bytes" }
          :OnProgress := {|oSender, nBytes| ::nRead += nBytes, ::oLabel1:cText := ToString( ::nRead ) }
          :OnComplete := {|oSender| ::oLabel2:cText := "¡ Descargado !" }
          :Download()
          //:Upload()
          :Destroy()
       END
    
       oSender:lEnabled := .T.
    

    Para proba el test, sólo hay que configurar los datos de la conexión con unos reales y tras compilar/ejecutar ya podemos empezar a subir o descargar archivos desde nuestro FTP favorito.

    En el ZIP está el fuente del componente y la librería lista para usar.

    Saludos,
    José Lalín

    Situémonos, usando GoogleMaps en nuestras aplicaciones.

    En la línea de los anteriores ejemplos usando ActiveX, ahora presento un ejemplo más elaborado pero muy sencillo de utilizar al mismo tiempo, como integrar los mapas de localización de GoogleMaps en nuestras aplicaciones.

    Para ello he construído la clase TGoogleMaps con la cuál he simplificado la integración del sistema en cualquier aplicación, basta con enlazar GoogleMaps.PRG con su XFM, además de WebBrowser.Prg y su CH (como se ha visto en capítulos anteriores) en la lista de ficheros del proyecto y con solo 5 líneas podemos presentar mapas de lo más vistoso en un formulario de Xailer.

    De esta manera dotamos a nuestros programas de la posibilidad de poder localizar la dirección de un cliente, desde un botón en el formulario de clientes o la de crear un mapa con la ruta desde nuestras instalaciones hasta la dirección de entrega de un producto, calcular la distancia, etc.

    Sigue leyendo

    Siguiendo con OCX, nuevos ejemplos usando WebBrowser.

    Como hemos visto en el ejemplo anterior podemos utilizar un control OCX que resulta ser un navegador Web incluido en un control de nuestro form y con esto podemos navegar por Internet.

    Pero este control nos permite hacer bastantes más cosas, como todos sabemos desde una ventana de Internet también podemos abrir un HTML que se encuentra en el disco duro local del PC, pero no sólo esto sino que podemos usarlo para abrir otros tipos de archivos como puede ser un archivo Adobe Acrobat Reader, es decir un PDF ya que existe un ActiveX que se instala en el PC al instalar este programa y ni tan siquiera tenemos que preocuparnos de usar este ActiveX sino que el explorador de Internet se encarga de ello.

    Veamos con detalle los ejemplos que incluye el de Xailer que aquí dejo a vuestra disposición. Proyecto

    Sigue leyendo

    Usando controles ActiveX u OCX

    Me ha sorprendido gratamente que después de mi primer artículo en Xailer.info me hayan enviado varios mensajes privados agradeciendo el código fuente y el manual, sobre todo por parte de usuarios que vienen directamente de Clipper y necesitan leer código antes de empezar a tomar conciencia de trabajar con Programación Orientada a Objetos.

    Es por eso que en esa línea más práctica que teórica voy a escribir una breve serie de pequeños artículos para ilustrar con ejemplos, código y manual o explicación detallada, algunos de los agradables descubrimientos que he ido haciendo en estos últimos meses de uso de Xailer.

    Sigue leyendo

    Messages Un conjunto de utilidades para Xailer

    Agradezco a Xailer.info la posibilidad de colaborar aportando mi primer granito de arena: Messages

    Este fue mi primer ejercicio práctico en Xailer a principios del 2006 y en realidad consta de un único PRG que podemos enlazar con nuestras aplicaciones con un conjunto de pequeñas utilidades/trucos pero que nos resuelven algunas cosillas del día a día en nuestros programas.

    Consta de un completo manual en castellano y ejemplo práctico de cada una de las funciones, asi que probarlo y ver lo que hace no os costará nada.

    Que lo disfrutéis.