Archivo de Entornos xbase

grid de datos a la Windows 7

Con FWH se pueden hacer rejillas de datos que marcan la fila actual con un degradado al estilo de Windows 7. La manera de hacerlo está en este hilo de los foros de Fivetech y el resultado es este:

2010-01-21_193635

compilación condicional

La compilación condicional es una característica de los lenguajes que usan preprocesador y permite incluir un determinado trozo de código en la compilación en función de una directiva de compilación.  En xHarbour podemos definir una directiva de compilación usando el flag -d al invocar al compilador, de esta manera:xharbour miprograma.prg -d__directiva__Dentro de nuestro programa usaremos la sentencia #ifdef para indicar que acción ejecutaremos en caso de tener definida la directiva de compilación:#ifdef __directiva__Accion1()#elseAccion2()#endifSi al compilar el programa tendremos definida la __directiva__ en el ejecutable unicamente se incluirá la llamada a Accion1(), mientras si no la tenemos definida sólo se incluirá la llamada a Accion2().La pregunta del millón es: ¿ en que difiere esto de usar una variable de nuestra clase aplicación o una variable global ? Pues que si hacemos esto estamos dejando rastro de lo que hacemos, en el ejecutable se incluye la sentencia condicional y se ejecuta cada vez que corre la aplicación. Con la compilación condicional no introducimos la sentencia condicional en el ejecutable, sino unicamente la acción deseada en función de si la directiva está o no presenteal compilar.Usando la compilación condicional es muy sencillo crear versiones distintas de un mismo programa con un mínimo esfuerzo, con la particularidad de que no dejamos ningún rastro en nuestro programa de que tenemos distintas versiones del mismo.

autocompletado en FWH

Prologo: Quitando comboboxes - hace seis años.En el caso de campos que son claves ajenas sobre otras tablas, pienso que se debe combinar la facilidad de la introducción de los datos correctos con la capacidad para dar de alta valores nuevos en la tabla auxiliar de una manera directa, y esto último no se puede hacer con comboboxes. Para ello utilizo una combinación de cuadro de texto donde el usuario escribe el valor del campo, y un botón que muestra un formulario de selección de valores. Si el usuario quiere escribir el valor de la clave ajena lo puede hacer directamente y el programa lo valida sobre la tabla auxiliar. Si el valor no está dado de alta en la tabla auxiliar el programa pregunta si se quiere dar de alta, y en caso afirmativo presenta el formulario de alta de la tabla auxiliar. Si el usuario no quiere escribir el valor, puede usar el botón que muestra el formulario de selección y elegir un valor o darlo de alta.Esta manera de hacer las cosas está bien, pero no es perfecta. Como me han comentado varios usuarios de mis programas, lo correcto sería que funcionase un autocompletado del campo de texto sobre el campo que es clave ajena en el mismo. Teclear los valores cada vez es pesado y lleva a errores si no recuerdas como has dado de alta cada valor. Por otra parte el soltar el teclado para hacer click en el botón y seleccionar el valor es un engorro que te hace perder tiempo, sobre todo si tienes que dar de alta muchos registros.Fisgoneando por los foros de Fivetech encontré una clase TAutoGet que hace precisamente esto, un autocompletado sobre un array donde previamente se han introducido los valores. Incorporar esta clase a un programa es muy sencillo, basta con cargar los valores de los arrays de autocompletado antes de editar el campo correspondiente. Los resultados son espectaculares. Conforme tecleas las primeras letras del valor, te van apareciendo los valores que coinciden coon ellas. Una vez tienes el valor que quieres, con un tab validas el nombre y saltas al siguiente campo. Es mucho más cómodo que soltar el teclado, hacer click en el botón de al lado y ponerte a buscar el valor que quieres introducir.Pocas veces una clase tan pequeña me ha dado unos resultados tan espectaculares. Pura dinamita. Para los perezosos de visitar el foro de Fivetech dejo un fichero con la clase TAutoGet completa: código fuente, fichero de preprocesado y un pequeño ejemplo, todo sacado del foro.Tengo ya el autocompletado implementado en Findemes, y estará disponible en la próxima versión que vamos a publicar el breve. Ahora estoy pensando en si el autocompletado irá en la edición gratuita o unicamente en la registrada, pero eso es otra historia.

msgbox a la windows vista

En mis programas tengo los mensajes del sistema personalizados. De esta manera controlo que mis programas siempre muestren los típicos mensajes de confirmación, información, alerta y parada de la misma manera en todas las versiones de Windows. También uso mis propios iconos para los mensajes, sacados de las colecciones de iconexperience que uso también en mis programas. De esta manera consigo uniformidad en los programas.

En Windows Vista los mensajes del sistema presentan un aspecto distinto a las anteriores versiones de Windows. Además de los iconos característicos de la nueva versión de Windows, el formulario está visualmente dividido en dos zonas, la de arriba es blanca y contiene el icono y el texto del mensaje, mientras que la parte de abajo es del color habitual del formulario y contiene el botón o botones del mismo.Con FWH es fácil hacer un formulario de estas características usando el control Pages. No hay más que definir el formulario con un control pages donde va la zona blanca y luego crear otro formulario que se solapará encima del anterior. La definición del formulario principal en el fichero RC es de la siguiente manera:UT_INFO DIALOG DISCARDABLE 29, 34, 206, 88STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_SYSMENUCAPTION "Cuaderno de Bitácora"FONT 8, "Ms Sans Serif"BEGINCONTROL "", 110, "Static", SS_WHITERECT, 0, 0, 206, 60CONTROL "&Aceptar", IDOK, "Button", BS_DEFPUSHBUTTON|WS_TABSTOP, 144, 66, 50, 16ENDEl control que va a contener el control page es el identificado con 110. La definición del formulario que va dentro del control Page del formulario principal es como sigue:UT_INFO_PAGE DIALOG DISCARDABLE 77, 112, 203, 60STYLE WS_CHILD|WS_CLIPCHILDRENFONT 8, "MS Sans Serif"BEGINCONTROL "", 10, "Static", WS_GROUP, 48, 8, 142, 44CONTROL "", 111, "TBitmap", 0x00000000, 8, 4, 36, 36ENDEl código de la función que muestra el formulario es el siguiente:function msginfo(cText, cCaption)local oDlgInfo, oPagelocal oBmpdefault cCaption := oApp():cAppName+oApp():cVersionDEFINE DIALOG oDlgInfo RESOURCE "UT_INFO" TITLE cCaptionoDlgInfo:oFont := oApp():oFontREDEFINE PAGES oPage ID 110 OF oDlgInfo ;DIALOGS "UT_INFO_PAGE"REDEFINE SAY PROMPT cText ID 10 OF oPage:aDialogs[1]REDEFINE BITMAP oBmp ID 111 OF oPage:aDialogs[1] RESOURCE “xpinfo” TRANSPARENTREDEFINE BUTTON ID IDOK OF oDlgInfo ;ACTION oDlgInfo:End()ACTIVATE DIALOG oDlgInfo ;ON INIT oDlgInfo:Center( oApp():oWndMain )return nilcon lo que conseguimos un formulario como el siguiente:

mi amigo invisible

Corren tiempos difíciles para los programadores que usamos FWH. Hace sólo un par de años, en mis contactos de messenger había una docena de FWH’ers. Ahora los contactos siguen estando ahi, pero ausentes.

Sin embargo, tengo un amigo invisible escondido por ahí. No suele postear en los foros, ni tiene página web, ni nada de nada. Está ahí, escondido en el messenger, sin hacer ruido y de pronto dice Hola José Luis y coimenzamos a chatear. Mi amigo invisible es un gran programador, conoce muy bien FWH y tiene un montón de clases modificadas, algunas de ellas realmente espectaculares. Hace poco publiqué un mensaje en el foro de FWH preguntando por las cebeceras de xbrowse con temas. A los pocos dias mi amigo invisible me abordó en el messenger y me dijo como tenía que modificar la clase para conseguir lo que quería. Después de varios intentos y varias noches más de messenger… voilà

xbrowsecontemas.jpg

Realmente espectacular.

Es curioso, sólo lo he visto una vez a mi amigo invisible. Fue en la reunión de Olivares2000 en el año 2005. La verdad es que no hablamos mucho, pero desde entonces poco a poco hemos tenido mayor relación, y me alegro mucho cada vez que lo veo por messenger. Si lo volviera a ver, no desperdiciaría la oportunidad de conocerlo un poco mejor.

canalfive vitaminado

Desde mis inicios programando con Fivewin y después con FivewinHarbour, uno de los componentes principales de mis programas han sido los controles de CanalFive. El primero que use fue su grid, luego sus folders y su calendario, todos en 16 bits. Con estos controles conseguía una usabilidad y potencia en mis programas que no conseguía con FW. Los controles de Canalfive llegaban donde no llegaba Fivewin. Rebuscando en el archivo de este blog he encontrado un post donde hablaba de los folders de Canalfive y la mejora de interfaz que supuso para mi tenerlos a mano.

Despues de unos años de hacer como el Guadiana, aparecer y desaparecer, Canafive retomó la realización de controles con sus taskboxes y poco a poco ha ido realizando más controles.

Hasta ahora Canalfive tenía un sólo desarrollador, que es mi amigo Paco. Conocí a Paco hace unos 12 años en el trabajo, de hecho conocerle es lo mejor que me ha pasado en mi trabajo, y enseguida hicimos una gran amistad. Es un tio fenomenal, de los que son mejor persona que programador y eso es tela pues programa que se las pela. Pero ahora ha unido fuerzas a dos de los mejores programadores Xbase que existen en el mundo mundial que son Oscar Lira y Victor Manuel Tomás - listo el pollo !! -. Están creando nuevos controles, pero ya no sólo para FivewinHabour, sino también para Xailer y VisualXharbour. ¿ Como hacen que un control funcione en los tres entornos ? Ni idea, pero aqui entra en juego una de las máximas de Paco: tan importante como saber, es saber quien sabe. Y estos tres saben mucho.

Pasen y vean la nueva web de Canalfive.

PD. Mientras escribía este post en el fin de semana, he visto que René ha escrito un post similar donde pone imágenes de los controles de Canalfive.

clipxnet

En mi trabajo de día se me ha planteado la necesidad de hacer una aplicación web como complemento a una aplicación de escritorio. Esta aplicación soporta acceso en red y está hecha con xHarbour + FWH, y los datos almacenados con en ficheros DBF con índices CDX. El caso es que necesitaba acceder a estos mismos datos a través de un navegador, y estuve viendo las distintas alternativas para ello. Entre las distintas alternativas, al final me quedé con clipxnet.

Clipxnet permite usar xHarbour como CGI que interpreta código xbase para generar páginas dinámicas. Permite acceder a ficheros DBF con índices CDX y tiene todas las funcionalidades para desarrollar aplicaciones web. Permite hacer muchísimas cosas, apenas estoy comenzando a usarlo y la verdad es que los resultados son espectaculares. Clipxnet cuenta con un foro de soporte desde el cual se puede descargar el paquete, que es totalmente gratuito. En la web se pueden encontrar sitios web completos cuyo soporte de acceso a datos está hecho con xlipxnet, como por ejemplo la web de Tecnimap 2006. No hay más que pasar el ratón por los enlaces y ver lo que aparece en la barra de estado para comprobar que son llamadas a clipxnet.

GO2005 y más

Este fin de semana toca reunión de Olivares2000. Nos vemos en Madrid un grupo de entusiastas del xbase para contarnos cosas, y como a cada uno de nosotros le tiran cosas distintas tenemos mucho que contar. Yo voy a contar en que consiste esto de ser un micro-isv y ya tengo preparada la charla con presentación - OOo - incluida. Probablemente publique la presentación aquí o en el sitio de GO2000 cuando pase el fin de semana. Este año vamos a ser bastantes asistentes, y un ingrediente para mi muy importante de cosas como esta es el contacto humano con amigos con los que habitualmente te relacionas via internet, bien por correo o por msn. Por cierto, que este año mi amigo Manuel pincha y no puede venir. ¡ Killo, te voy a echar de menos !

Al margen de esto estamos de lleno en periodo de betatest de las nuevas versiones de Cuaderno de Bitácora y el Puchero. Aparte de lo que son nuevas funcionalidades de los programas, lo que más nos ha costado decidir es el nuevo modelo de distribución basado en una edición gratuita y otra de pago con funcionalidades añadidas. Y es que muchas veces las deciones estratégicas son las más dificiles de tomar, mucho más que picar código. De todo esto hablaré el sábado a las 10 de la mañana. Para asistir a las conferencias hay que registrarse en la web de Olivares2000.

xHarbour Coding Guidelines

Una de las perlas que se puede encontrar en el sitio de xHarbour.com son estas Coding Guidelines. No es que sea una gran novedad, pero la verdad es que ayuda a poner un poco de orden en el código. Las lineas maestras son las siguientes:

  • los comandos y funciones del compilador en minúsculas

  • los nombres de alias y de campos en mayúsculas
  • reemplazar tabuladores por 3 espacios en blanco
  • cadenas que se vayan a i18n entre comillas dobles, el resto en comillas simples

Estoy comenzando a usar estas guidelines y el código queda bastante claro, además escribo con mayúsculas las sentencias de FWH referidas a la GUI lo que me permite diferenciar claramente lo que hago en cada momento.

la camiseta del XAAC

Esta semana me ha llegado la camiseta del XAAC, el concurso de programación xHarbour que ganamos. Y nada más llegar la camiseta, van los fenómenos estos y les da por cambiar la web de xHarbour … y el logo. Pero vamos por partes.

La camiseta es muy bonita. Yo ya tenía 2 que compré en Cafepress, pero de mi talla. La que han mandado ahora - o al menos la que me ha llegado a mi - es de talla XXL y me viene un pelín grande. Así que si alguien tiene una de talla L que me lo diga para cambiarlas.

20050923.jpg

La nueva web de xHarbour está muy bien. Realmente han hecho un trabajo estupendo y se nota el buen hacer y el sentido empresarial de Patrick Mast. Es una web superprofesional, con perlas como el xHDN o el impresionante archiv de Guias Norton.

Pero lo del cambio de logotipo la verdad es que no me ha gustado. Me recuerda mucho al logo de los x-men que leía de joven, cuando el guionista era Claremont y los dibujaba John Byrne. Pero sobre todo es que para mi el logo de xHarbour es verde y azul, como las latas de CocaCola son rojas y las de Pepsi azules. ¿ Alguien se imagina una lata de CocaCola azul ? Pues yo no me hago a la idea del logo de xHarbour amarillo y negro, pero será cosa de acostumbrarse.