22 de febrero de 2018

Artículo original: Use version information to keep track of executables
http://www.ml-consult.co.uk/foxst-06.htm

Autor: Mike Lewis (http://www.ml-consult.co.uk)
Traducido por: Ana María Bisbé York


Un usuario está llamando para pedir ayuda. ¿Está seguro que habla de la misma versión?

Si tiene más de una versión compilada de su aplicación, necesita una vía para conocer cuál está utilizando una determinada persona. Visual FoxPro (5.0 y posterior) puede ayudar con esto marcando los ejecutables con el número de la versión e información relacionada.

Para ver cómo funciona esto, abra la aplicación con el Administrador de proyecto, haga clic en Generar, luego Versión. Verá el cuadro de diálogo en el puede introducir el número de la versión, nombre de la organización, descripción del archivo, nombre del producto y otros datos (Vea figura 1). El número de la versión consta de 3 partes: Principal, Secundario y revisión.


Figura 1: Utilice este cuadro de diálogo para especificar la información sobre la versión.

Al generar la aplicación, esta información permanece guardada dentro del archivo EXE. Desde el ejecutable se puede acceder a esa información tanto por el usuario como por el programador.

Lo más interesante es que si selecciona la opción Incrementar automáticamente que aparece en el cuadro de diálogo, el número de versión se incrementará cada vez que sea generado, lo que asegura que será único en su aplicación. (De hecho, es el número de revisión el que será incrementado, si desea cambiar el componente Principal o Secundario, puede hacerlo manualmente.)

De cara al usuario

Entonces, ¿cómo encontrará qué versión está utilizando un usuario determinado? Una opción será que mire en las propiedades del archivo ejecutable. Para ello, ha de localizarlo en el Windows Explorer o una ventana de carpetas, hacer clic derecho sobre el archivo, seleccionar Propiedades y luego seleccionar la ficha Versión. Toda la información que se introdujo desde el Administrador de Proyecto será mostrada. Vea figura 2.


Figura 2: La información de la versión puede obtenerse desde Windows.

Una buena estrategia pudiera ser que la aplicación misma devolviera esta información, y mostrarla en algún sitio que el usuario pueda tomarla fácilmente, algo así como una ventana Acerca de, en el menú Ayuda.

Para recuperar la información de la versión desde su programa, invoque la función AGETFILEVERSION(). Pásele dos parámetros: el nombre de un arreglo para guardar la información, y el nombre de un archivo ejecutable. Como en la mayoría de las funciones “A”, si el arreglo no existe, la función lo creará. Si existe, será re-dimensionado, en caso de necesidad.

Por ejemplo, este comando devuelve información de la versión de un archivo llamado MYAPP.EXE, y la guarda en un arreglo aVer

lnReply = AGETFILEVERSION(aVer,"MYAPP.EXE")

Hay que decir que la función retorna cero si el archivo no contiene información de versión.

Las tres partes del número de la versión se encuentran en el cuarto elemento del arreglo (ver la ayuda de VFP para ver el contenido del resto de los elementos). Este valor es devuelto en formato decimal, con puntos entre los componentes. Es decir, si introdujo 1,2 y 3 en los cuadros de texto mayor, menor y revisión respectivamente, el número que será devuelto será 1.2.3.0 Observe que los 3 componentes han de ser estrictamente numéricos, no podrá especificar 1.2ª, ni podrá hacer distinción entre 1.2 y 1.02

GETFILEVERSION() se introdujo como función nativa de VFP 6.0. En las versiones anteriores, la funcionalidad equivalente se proporcionaba con las FoxTools.

Mike Lewis Consultants Ltd. Abril 1999

18 de febrero de 2018

Clase Barra de desplazamiento con Visual FoxPro

Artículo original: Visual FoxPro ScrollBar Classes
http://www.sweetpotatosoftware.com/blog/index.php/2005/08/27/visual-foxpro-scrollbar-classes/
Autor: Craig Boyd
Traducido por: Ana María Bisbé York


Siento respeto por la creación de barras de desplazamiento (scrollbar).

Temprano en la noche decidí crear una clase scrollbar para utilizarla con Visual FoxPro. Mis necesidades eran: que fuera creada puramente con Visual FoxPro (sin que tuviera ninguna dependencia de controles ActiveX) y que fuera lo suficientemente profesional como para ser utilizada en aplicaciones del mundo real. Han pasado cinco horas ... la clase está completa y ahora siento mis respetos hacia cualquiera que haya sido capaz de crear clases scrollbars. Ha sido uno de los desafíos más difíciles a los que me he enfrentado.

Nueva librería de clases VFPScrollBar

He creado mis clases scrollbar en una librería de clases llamada vfpscrollbar.vcx. Hay que prestar atención a tres clases: scrollbarhorizontal, scrollbarvertical, y sbscrollablecontainer.  Sbscrollablecontainer es un ejemplo de los tipos de clases que se pueden generar utilizando las barras de desplazamiento.

Propiedades y eventos

A continuación, una lista de las propiedades y métodos importantes para scrollbars

Min - Especifica el valor mínimo para la barra (predeterminado es 0)
Max - Especifica el valor máximo para la barra (predeterminado es 100)
Value - Valor actual de la barra basado en la posición de la caja de desplazamiento.
LargeChange - Cantidad que se agrega o deduce del valor de la barra cuando presionamos el área entre la caja de desplazamiento y la flecha de desplazamiento.
SmallChange - Cantidad que se agrega o deduce del valor de la barra cuando se hace clic sobre una flecha de desplazamiento
Change() - Este método de evento se dispara cuando cambia el valor de la barra
Scroll() - Este método de evento se dispara cuando el usuario mueve la caja de desplazamiento.

Al colocar las clases en un contenedor (formulario o lo que sea), puede redimensionar la barra haciéndola más ancha y grande. El resultado en tiempo de diseño puede ser un poco raro (debido a que las flechas de desplazamiento y la caja no se redimensionan o se reponen por sí mismas en tiempo de diseño; pero todo va a tomar forma en tiempo de ejecución. La cuestión aquí es, no necesita perder tiempo en reconfigurar las barras en tiempo de diseño. Colóquelas, redimensiónelas y coloque el contenedor y ejecútelo.

Trabajo futuro y colores

Las barra de desplazamiento actuales son azules (lo que concuerda con los temas de Windows XP); pero mi intención es buscar otros colores de barras para cambiar una propiedad, o verificando el sistema de parámetros del usuario actual, para determinar el color a partir de aquí. He creado meticulosamente estas clases sin utilizar ninguna imagen de forma tal que los colores puedan cambiar fácilmente al vuelo sin recursos de imágenes adicionales.

He revisado además, el código y he arreglado algunas fallas. Lo dejo, tal y como está, estoy exhausto por esto (han sido cinco horas para hacer que esta cosa funcione y que se vea bien). Así que no espere un código clínico con esta clase... quiero decir, no es horrible; pero necesita otro pase para encontrarme a gusto del todo con el.

Son bienvenidas las sugerencias y reporte de errores

Deseo mencionar además que algunos miembros de la Comunidad de Visual FoxPro han comenzado a enviarme sus comentarios, errores corregidos y mejoras de algunos materiales que he publicado en SPS Weblog. Quiero que sepan que esa colaboración, ayuda, comentarios, y/o ideas no sólo son bienvenidas y apreciadas, sino que son exactamente la razón por la cual yo publico aquí estos materiales. No deseo fama ni dinero ... deseo solamente que la  Comunidad de Visual FoxPro mejore el nivel de Visual FoxPro y las otras experiencias de desarrolladores que han trabajado con el, o compañías que puedan considerarlo como una opción viable. Creo que una de las mejores herramientas de desarrollo centrada en datos no merece menos.

He aquí el enlace para descargar el proyecto de ejemplo y el código fuente de vfpscrollbar.vcx así como una imagen de la pantalla de ejemplos que muestra barras utilizadas en una clase contenedor.

Descarga del ejemplo de Scrollbars en VFP y código fuente (46 KB approx.)
http://www.sweetpotatosoftware.com/files/vfpscrollbar.zip

Nota de la traductora: Hasta aquí el escrito original. A continuación detallo las preguntas y observaciones realizadas por Mike y la respuesta de Craig Boyd en la que aclara un grupo de aspectos tenidos, o no, en cuenta.

Mike: Muy bueno como siempre Craig. Se que es un control no terminado, aquí le dejo algunos comentarios:

Mike: 1) La esquina inferior derecha (borde creado por las barras y los bordes del formulario) parecen como si sangraran, es decir, parece ser que son transparentes ¿Es por diseño?

Craig: Si y no. El contenedor desplazable era solo un ejemplo rápido de algo para lo que pudieran ser utilizadas las barras. Sí, Yo pude haber agregado un "gribber" o una forma gris al final derecho del contenedor desplazable; pero existe un aspecto con los colores y los dibujos para temas de Windows XP que el FoxTeam necesita arreglar para Visual FoxPro. Podría ver también a veces un ligero parpadeo en la forma.

Para ilustrar el problema con los controles y temas de Windows XP, desplaza el contenedor hasta que muestres el pageframe que está en el contendor hasta que las fichas queden por debajo de la región no desplazable (donde dice "Visual FoxPro Rocks!". Entonces, si te mueves sobre la mitad inferior de las fichas que son visibles y verás que se dibujan justo sobre el tope de todo y no respeta los bordes del contenedor.

He aquí otro ejemplo para esto ... los gifs animados también van a mostrar a veces este comportamiento.  Puedes posicionarte en el pageframe de tal forma que una ficha quede directamente detrás de las barras y mover el ratón nuevamente sobre la ficha ... o intentar colocando una flecha sobre un encabezado con tema en un grid cualquiera. Básicamente estos controles con temas pintan sobre cualquier cosa cuando se supone que están haciendo su seguimiento de temas. El FoxTeam va a solucionar este problema en el SP 1.

Mike: 2) La rueda del ratón no provoca deplazamiento del contenido.

Craig: Buen punto. Voy a trabajar en esto, a menos que usted tenga algún código que permita a la barra vertical responder a los eventos de la rueda del ratón.

Mike: 3) ¿Pueden desaparecer las barras en caso de no ser necesarias? Por ejemplo, si maximizo el formulario y todo el contenido cabe

Craig: Sí aun no he colocado código para que la barra sea proporcional. Esto, definitivamente será uno de los aspectos a mejorar para la siguiente versión.

Mike: Los desplazamientos parecen muy lentos.

Craig: No he visto eso, se desplazan tan rápido como yo muevo el ratón o hago Clic. ¿Alguien más ha visto esto? Además Mike, puede ejecutar el log de Analizador de trayecto mientras utiliza las barras de desplazamiento y se ven lentas, luego envíemelo o alérteme de dónde es que se atasca. Esto me ayudaría mucho a solucionar el problema. Gracias

Mike: Si pudiera retocar estos aspectos y darle los toques finales a este control, pienso que MS aprendería de el y lo incorporaría (o alguno como este) a Sedna. ¡ Esto es válido para su control separador también ! Continúe con sus grandes contribuciones al mundo VFP .

Craig: Son cuatro puntos muy buenos, y serán muy tenidos en cuenta Mike. Gracias.

14 de febrero de 2018

Gdiplus.vcx y SavetoFile

Artículo original: Gdiplus.vcx and SavetoFile
http://weblogs.foxite.com/vfpimaging/archive/2006/03/24/1338.aspx
Autor: Cesar Ch.
Traducido por: Ana María Bisbé York


¿Ve algo mal en el siguiente código?

LOCAL lcSource, lcDest
lcSource = GETPICT()
lcDest = JUSTPATH(lcSource) + "\_" + JUSTSTEM(lcSource)
LOCAL loImage AS GpImage OF HOME() + ffc\_gdiplus.vcx
loImage = NEWOBJECT("GpImage",HOME()+"ffc\_gdiplus.vcx")
loImage.CreateFromFile(lcSource)
loImage.SaveToFile(lcDest + ".png","Image/png")

Es un código muy sencillo, que se supone que cargue una imagen y la guarde en un PNG. ¡Pero no ocurre nada ! ¿Puede adivinar por qué?

El método SaveToFile de la clase GpImage de _gdiplus.vcx debe recibir un segundo parámetro, tal y como es requerido, el "tvCLSIDEncoder", que puede ser el CLSID del código a emplear, o un tipo MIME, por ejemplo "image/jpeg" o "image/png". Si se especifica un tipo MIME, entonces, el método se muestra dinámicamente el CLSID del código apropiado.

El 99% de nosotros pasa el tipo MIME, debido a que es fácil de recordar; pero  ¡ TENGA CUIDADO ! Porque el parámetro tipo MIME  distingue entre mayúsculas y minúsculas.

¡ Tiene que pasar este parámetro siempre en letras minúsculas !

El código mostrado antes, no funcionaba porque había escrito "Image/png" en lugar de "image/png"

Vaya, ¡ he perdido tanto tiempo en eso !

*()&)(*)%@&$(@&!)@*(_*(&!_()&*_)(&*+_*()

A propósito, los tipo MIME ( Multipurpose Internet Mail Extensions) de los códigos generados dentro de Microsoft Windows GDI+ son los siguientes:

image/bmp 
image/jpeg 
image/gif 
image/tiff 
image/png