miércoles, julio 18, 2007

Browse VS Browse

El título de este post viene por aquellos comics que salían en la revista MAD (los que tienen mas de 35 saben a lo que me refiero) que se llamaban Spy VS Spy, una sátira muy divertida sobre la guerra fría, donde el espía blanco se enfrentaba al espía negro y viceversa, unas veces ganaba uno, otras ganaba el otro, pero lo interesante es que siempre había uno que ganaba.

Hoy voy a hablar de los Browses de FiveWin (si, si, Fivewin, ¡ por fin !), y a tratar de clarificar un poco cual es el "mejor" browse para usar con FW.

El browseo de datos es una parte muy importante para los desarrolladores de Xbase porque prácticamente entre el 70 al 90% de la interfaz de nuestros programas son browses.

Un browse se puede utilizar para visualizar muchas cosas, siendo las mas comunes tablas de base de datos y arrays, aunque también se puede utilizar para visualizar textos.

¿ Cual es el mejor browse para FiveWin ?, antes de entrar en esta "algida" pregunta, tendremos que mirar cuales son nuestras opciones, al final daré MI VEREDICTO PARTICULAR.

TWBrowse: Es el browse "nativo" de FiveWin en un principio fue diseñado para trabajar basado en renglones, se implementa en código mediante el comando LISTBOX ... FIELDS (importante tener la clausula FIELDS, sino se pone, se asume que se quiere un control listbox nativo de Windows y no es lo que realmente necesitamos). Este control es fácil de configurar e incluye la capacidad de mostrar datos calculados en las celdas, imágenes en las mismas, en general es una forma fácil y rápida de tener un browse de base de datos, de hecho FiveWin incluye una función BROWSE(), cuyo código fuente se encuentra en \fwxx\source\function\browse.prg, que puede ser una estupenda guía para aprender a utilizar todas las características del TWBrowse . Tiene algunas desventajas, como por ejemplo que la edición por celda requiere de un ENTER antes de entrar a editar, la misma programación de la edición de los datos es un poco complicada si no sabes utilizar objetos, y no soporta "footers" ó "pies de columna".

Este es un ejemplo de la función BROWSE() de FiveWin, si te quieres ahorrar un rato en programar browses, tu mismo puedes modificar la función ya sea enviando parámetros o bien toqueteando el código fuente, yo la utilizaba para hacer depuración del programa.



Hernán Diego Cecarelli hizo sin duda una de las mejores revisiones de este browse, de hecho el famoso "browse de Hernán" es el que solíamos usar para nuestros desarrollos internos. Hernán hizo mas de 60 cambios a la clase orginal incluyendo un sistema de pintado mas rápido, usando la técnica del doble buffer, le agregó la capacidad de manejar bitmaps en cabeceras y en pies de columna, la edición por celda es muy sencilla (repito, si sabes manejar objetos todo es mas sencillo), puedes además definir tamaños de las celdas así como de las cabeceras y de los pies de columna y las barras de desplazamiento funcionan perfectamente con la rueda del ratón. Entre sus ventajas, además de todas las nuevas capacidades, podemos mencionar que si tu programa está basado en TWBrowse, el cambio al browse de Hernán no tiene complicaciones, agrega la lib a tu programa antes de las de de FW, y listo, no tienes que tocar nada mas, eso si, si quieres tener acceso a todas las mejoras de la clase, tendrás que programar todo usando objetos, ya que no hay un comando que te de acceso a todas sus características, esta aunada a un "pequeño bug" de repintado de la última linea del browse cuando tiene footers (creo que ya lo solucionaron) son sus únicas desventajas.

A continuación un ejemplo doble del browse de Hernán, el browse superior tiene bitmaps en la cabecera para indicar cual es la columna del indice, las flechas apuntado hacia abajo indican que hay ordenación por esa columna, y se puede saber cual columna tiene el indice actualmente activado; el segundo browse muestra el famoso efecto "pijama" (alternancia de colores) y muestra un footer con la sumatoria de todos los elementos de la columna, todo hecho con el browse de Hernán.



TCBrowse: es uno de los browses menos usados de FiveWin, este se parece mas al objeto TBrowse de Clipper/(x)Harbour, porque incluye la definición por columnas, es decir, cada columna se configura mediante un objeto por separado, lo único que aporta nuevo es el cambio de comando, en vez de usar LISTBOX ... FIELDS utiliza directamente el comando BROWSE, requiere además que cada columna se configure individualmente y luego se añada al browse per se, mediante el comando ADD COLUMN TO BROWSE. A favor tengo que decir que es un browse bastante versatil en su configuración, te permite definir ordenes por columnas (basados en un índice, obviamente) y ordernar automáticamente las columnas haciendo doble click sobre la cabecera (en el TWBrowse hay que programar manualmente ese comportamiento), la cabecera cambia de color para indicar sobre que criterio esta ordenada, como punto en contra tenemos que decir, que al ser una clase heredada de TWBrowse, sufre de las mismas carencias en cuanto a versatilidad para edición de celdas y no tiene footers.

La mejor modificación de esta clase está hecha por Luis Krause, en su momento Luis escribió un par de mejoras muy importantes para la clase: La edición por celdas y el manejo de footers, sumamente útiles, estas mejoras fueron copiadas posteriormente por otros browses, incluyendo el TWBrowse original de FiveWin, al cual se le añadió la edición por celdas, en vez de por renglones.

Este es un ejemplo de TCBrowse con las modificaciones de Luis, la cabecera de las columnas "ordenables" es de un color distinto al las del resto del browse, y la columna que tiene el orden activo se pinta de un fondo distinto (verde en este caso), nota al final de la pantalla que hay un "footer" activo.



TSBrowse: Es un desarrollo de Manuel Mercado, a quien perdimos de vista del mundo de FiveWin hace mucho tiempo, creo recordar que tenemos mas de 5 años sin saber nada de él. Manuel aportó al mundo de FiveWin estupendas clases como la TSButton, pero sin duda su máxima creación fue TSBrowse, usada, sin exagerar por MILES de desarrolladores de FiveWin.

Manuel se eforzó en darle la máxima versatilidad al browse, y vaya si lo logró, logró lo que nunca nadie había logrado con un browse de FiveWin: fondos degradados, (personalmente no me gustan), multilíneas en las celdas de browse, cabeceras multilínea, footer, edición por celda, y todo reescribiendo la clase desde cero, es decir, sin heredarla de ningún otro browse.

Sin duda es el mas popular de los browses que existen para FiveWin, por 2 razones: es relativamente facil de configurar y es visualmente muy atractivo, no lo nombro mi favorito por una razón muy importante: los usuarios de TSBrowse no saben que están parados sobre una bomba de tiempo.

Internamente la programación del control es complicadisima, por no decir deficiente, vamos que hay pocos valientes que se metan a meterle mano a eso y que logren hacer que vuelva a funcionar sin haberse cargado nada en el intento, no hay estándares de programación, bueno, si eso fuera lo único, entendible, pero tratar de corregir algo dentro del código fuente de eso es .... uff, complicado, en nuestra experiencia particular, hemos tenido que hacer no menos de 10 correciones al código de la clase, ya sea porque pierde los alias cuando trabaja en ventanas MDI, porque tiene incluida la rutina de búsqueda incremental que hace lo que se la da la gana y tuvimos que "inteceptarla" desde fuera para hacer que hiciera lo que nosotros necesitabamos, tuvimos que adaptarla para que funcionara con Advantage y luego optimizarla porque hace uso de un montón de llamadas innecesarias a funciones de ADS que hacen ping al servidor y que ralentizan tanto el servidor como la aplicación, Israel, Vikthor y yo somos testigos de todo lo que por lo menos nosotros le hemos tenido que meter a esa clase para hacerla funcionar de acuerdo a nuestras necesidades. Tiene además algunas clases y funciones reescritas como el Preview (tiene su propio método REPORT) que si no eres cuidadoso puede darte algún dolor de cabeza con las versiones nuevas de FW que utilizan una TRebar y TToolBar vez de los controles nativos de FW o bien con los controles nativos de FiveWin.

TSBrowse es una estupenda alternativa si quieres algo espectacular visualmente hablando, un browse te sale bien y rápido, es muy atractivo y se puede utilizar muy fácilmente, pero hay de ti donde pretendas salirte un poco de lo que hace el browse, porque a menos que sepas POO no te garantizo que puedas meterle mano tan facilmente.

Este es un pequeño ejemplo de TSBrowse, como verás puedes poner fondos, cambiar de tamaño las letras de cada celda, tener multiíneas en las celdas, vamos, visualmente muy bien, internamente muy mal:



CanalFive Grid: Todo el mundo sabe que cuando se trata de hacer las cosas visualmente atractivas, no hay quien le gane a Francisco García Fernandez, alias "Paco CanalFive", si no me creen, preguntele a Grupo SP-Sage, la intefaz de sus productos es "colada" a la de cualquier producto .NET, pero programado a punta de PRGs, obra y gracia del amo de los "efectos especiales para FiveWin" el buen Paco. Hace algunos años, en la época del FiveWin de 16 bits, Paco hizo un productito muy intersante: CanalFive Grid, un estupendo browse, visualmente IMPRESIONANTE, y para muestra un recuerdito de aquellos tiempos, pero ahora a 32 bits:



No he logrado convencer a Paco de que se enrrolle un poco mas con el tema del browse, estoy seguro que si se pone a jugar un rato podría hacer un browse "alucinante" (el CanalFive Tab, lo hizo como en 3 horas mas o menos) como los que el sabe hacer, pero supongo que de momento está metido con los nuevos controles de CanalFive, esperemos que se enrrolle y nos sorprenda un día con un browse como los que el sabe, si si si Paco, ya sé que a mi me toca una parte que tengo que hacer, que ya esta hecha....

XBrowse: Sin duda y desde mi punto de vista, es el mejor browse que existe para FiveWin, es un trabajo original de Ignacio Ortiz de Zuñiga, igual que el motor de reportes, solo que este Browse está muy bien pensado. XBrowse su aparición por primera vez como parte del FTDN de la versión 2.3 de FiveWin y posteriormente se vendía con muchas mejoras como parte de un producto de Ignacio llamado Advice32 y ahora ha sido integrado a FiveWin y corregido por Antonio Linares, pero sin duda es un trabajo bastante bastante bien hecho.

La creación del XBrowse se realizó a partir de cero, es decir, olvidate de todo lo que sepas de browse, y vuelve a "reinventar la rueda", pero bien hecho.

Si bien la presentación inicial del xBrowse puede parecerte demasiado "espartana", es decir, muy poderosa, pero muy austera, se pueden hacer cosas muy interesantes, por ejemplo Browsear un RecordSet de ADO (esta parte supongo que no la hizo Ignacio, cuando se liberó la primera version de XBrowse aún estabamos a unos cuantos metros de llegar al OLE), mezclar un bitmap con texto tanto en cuerpo como en cabecera del browse, cada columna puede tener un font distinto, edición directa de los campos que son comboboxes, "record selector" (la marca que aparece siempre del lado izquierdo del browse y que indica en que renglón estás posicionado), las celdas de multiples líneas, etc etc etc.:



Ignacio y Jose utilizaron el mismo modelo de browse que fue llevado a Xailer, corregido y aumentado, de hecho muchos de los elementos del Xbrowse de FiveWin se llaman IGUAL en TDBBrowse de Xailer, y para que veamos un pequeño ejemplo del browse de Xailer:



Ahora sabemos quien es el padre de la criatura, de hecho, si utilizas el XBrowse de FiveWin, y luego quieres desarrollar algo en Xailer te costará menos trabajo entender como funcionan los browses de Xailer porque el modelo es similar en ambos controles.

Ya se que es mucha coincidencia, y no me había puesto yo a pensar en eso, hasta que estaba escribiendo el artículo, especualando un poco, ¿ no será que el XBrowse se llama así por Xailer-Browse ?. Especulaciones mías no me hagas mucho caso, es que tengo demasiado tiempo libre ultimamente.

Resumiendo: Mi opción de Browse para FiveWin sería sin lugar a dudas el XBrowse, seguido por Browse de Hernán y en tercer lugar el TSBrowse, ahora te toca a tí decidir cual de los 3 te conviene usar.

2 comentarios:

Anónimo dijo...

Hola, gracias por tus Observaciones e ilutraciones, mira te comento que estoy migrando mis programas del viejo summer'87 a FiveWin&Clipper 5.3, necesito de ayuda y apoyo para obtener las funciones y parametros acerca de los Browsers que manejan, para programar con macros y relaciones los Hojeadores de las BD.
Gracias y quedo en espera de tus comentarios.
Saludos Cordiales.
Angel A. Varela Soto
Veracruz, Ver. Mexico

Anónimo dijo...

Hola,
Cordial saludo.
necesito ayuda y/o apoyo para los parametros de los Browser´s y cual me recomiendas para manejar macros y/o relaciones en la base de datos.
Gracias