19 de octubre de 2008

ActiveVFP Liberado

Home of ActiveVFP - Foxpro on the World Wide Web

Ya esta para descargar gratuitamente este excelente framework para desarrollar fácilmente aplicaciones Web con Visual FoxPro.

Pueden descargar libremente la última versión de:

http://activevfp.codeplex.com/releases/view/53030

ActiveVFP es un proyecto de código abierto completamente gratuito que permite crear fácilmente aplicaciones Web con Visual FoxPro, ya que provee un framework fácil de usar para crear DLL multihilos con código VFP puro.

La página de este proyecto es:

http://activevfp.codeplex.com

30 de septiembre de 2008

Parches de seguridad para VFP (GDI+)

La semana pasada Microsoft liberó unos parches de seguridad para VFP 8 SP1, VFP 9 SP1 y VFP9 SP2, esto consiste en problemas detectados en librerías de GDI+ (y por lo mismo afecta a muchos otros productos de la compañía de Redmon).

Pueden encontrar más información aquí:

--- Security Updates for GDIPlus for VFP 8.0 and 9.0 ---
http://msdn.microsoft.com/en-us/vfoxpro/bb264582.aspx

Y descargar los parches de los siguientes sitios:

Espero esta información les sea de utilidad.

Espartaco Palma

13 de septiembre de 2008

Mensaje de error cuando instala la actualización de seguridad GDI+ para VFP

Artículo # 957599 de la Base de Conocimiento de Microsoft sobre un problema conocido luego de instalar la actualización de seguridad de GDI+ para Visual FoxPro donde aparece el siguente mensaje de error: "La característica que intenta utilizar está en un recurso de red que no está disponible".

Artículo original: Error message when you try to install an update for Visual FoxPro 8.0 or for Visual FoxPro 9.0: "The feature you are trying to use is on a network resource that is unavailable"
http://support.microsoft.com/kb/957599

Cuando usted instala una actualización para Microsoft Visual FoxPro 8.0 o para Microsoft Visual FoxPro 9.0, puede recibir un mensaje de error similar al siguiente:

La característica que intenta utilizar está en un recurso de red que no está disponible. Haga clic en Aceptar para volver a intentar, o ingrese en el cuadro de texto una ruta alternativa de la carpeta que contiene el paquete de instalación nombre_archivo.msi.

Para mas información sobre "MS08-052: Description of the security update for GDI+ for Visual FoxPro 9.0 Service Pack 2: September 9, 2008" mire el siguente artículo: http://support.microsoft.com/kb/955370

SE APLICA A
  • Microsoft Visual FoxPro 9.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition

4 de agosto de 2008

Informes personalizados por el usuario

Estuve pensando como hacer para agrupar y mostrar los resultados de totales, etc, a pedido del usuario, sin necesidad de crear un informe por cada agrupación.

Entonces la solucion era mas facil de lo que imagine.

EL PROBLEMA:

Tengo una lista de datos en un Grid. Ahora el usuario hace click en los encabezados y este se ordena sobre esa columna.. necesito entonces que cada vez que el usuario hace ordena por una columna el reporte automáticamente agrupe sobre ese orden y totalice esa agrupación.

Este es el ejemplo:



Este es la acción del usuario, ordeno por chofer:



Ahora usando solo un reporte que este interprete la acción del usuario ordene y agrupe y tire los resultados:



LA SOLUCIÓN:

Es simple, crear una variable publica en mi caso frxhabilita... que se le pueda asignar un valor numérico cada vez que el usuario hace click en los encabezados para ordenar.. 1=en el encabezado fecha, 2=producto, 3 = vehículo, etc.

Una vez echo esto pasamos al reporte, en el datagrouping del reporte agrupar pero.. con esta expresión

iif(frxhabilita=4,alltrim(upper(Va_ventaarido.producto)),"")

Si frxhabilita=4, agrupe por producto sino no haga nada.

Les va a quedar algo asi:


Y en cada total indican en printwhen, frxhabilita = 4 ... o sea que solo muestre cuando frxhabilita = 4

Espero les sirva, a mi me solucionó un montón de problemas... sobre todo el estar haciendo un formulario por cada orden que pedía el usuario.

Saludos

Carlos Emilio

8 de julio de 2008

Estirar y mantener una imagen en la pantalla principal (_Screen)

Como vimos en artículos anteriores publicados en este Blog, la manera de poner una imagen de fondo en la pantalla principal de Visual FoxPro es agregar un objeto Image al objeto _Screen.
Esta imagen la podemos iniciar centrada con:

-- Centrar una imagen en la pantalla principal (_Screen) --
http://comunidadvfp.blogspot.com/2002/03/centrar-una-imagen-en-la-pantalla.html

Y mantenerla centrada, aun cuando cambiamos el tamaño de la ventana principal con:

-- Mantener centrada una imagen en la pantalla principal (_Screen) --
http://comunidadvfp.blogspot.com/2006/01/mantener-centrada-una-imagen-en-la.html

Ahora lo que deseamos es que la imagen de fondo, cubra toda la pantalla principal, y se ajuste automáticamente el tamaño cuando redimensionamos la ventana.

Para hacer esto tenemos al menos dos formas distintas obteniendo el mismo resultado buscado.
1. A partir de VFP 8.0, podemos utilizar la función BINDEVENT() para enlazar el método Resize del objeto _Screen, con un método personalizado en nuestro objeto Image.

_SCREEN.ADDOBJECT("oImagen","MiImagen")
WITH _Screen.oImagen
  lcPicture = GETPICT()
  .PICTURE = lcPicture
   .STRETCH = 2 && 1=Mantiene las proporciones, 2=Cubre todo
  *-- Solo si la imagen tiene transparencia
  * .BACKSTYLE = 0 && 0=Transparente, 1=Opaca
  .LEFT = 0
  .TOP = 0
  .WIDTH = _SCREEN.WIDTH
  .HEIGHT = _SCREEN.HEIGHT
  BINDEVENT(_SCREEN,"Resize",_SCREEN.oImagen,"MiResize")
  .VISIBLE = .T.
ENDWITH

DEFINE CLASS MiImagen AS IMAGE
  PROCEDURE MiResize
    WITH THIS
      .LEFT = 0
      .TOP = 0
      .WIDTH = _SCREEN.WIDTH
      .HEIGHT = _SCREEN.HEIGHT
    ENDWITH
  ENDPROC
  PROCEDURE DESTROY
    UNBINDEVENT(THIS)
  ENDPROC
ENDDEFINE

2. A partir de VFP 9.0 podemos utilizar solo la propiedad Anchor del objeto Image, sin utilizar la función BINDEVENT(), y sin la necesidad de tener una clase personalizada Image con un método que maneje su redimensionamiento.

_SCREEN.ADDOBJECT("oImagen","Image")
WITH _Screen.oImagen
  lcPicture = GETPICT()
  .PICTURE = lcPicture
   .STRETCH = 2 && 1=Mantiene las proporciones, 2=Cubre todo
  *-- Solo si la imagen tiene transparencia
  * .BACKSTYLE = 0 && 0=Transparente, 1=Opaca
  .LEFT = 0
  .TOP = 0
  .WIDTH = _SCREEN.WIDTH
  .HEIGHT = _SCREEN.HEIGHT
  .ANCHOR = 15
  .VISIBLE = .T.
ENDWITH

Hay tres cosas (solo dos si no se utiliza la propiedad Anchor) que debemos tener en cuenta para un mejor resultado visual:
  1. Según el tipo y proporciones de ancho/alto de la imagen original, hay que ver si es mejor mantener las poporciones de la imagen; o llenar toda la pantalla con la imagen sin mantener sus proporciones. Para ello debemos configurar la propiedad Stretch con el valor 1 si queremos mantener las proporciones de la imagen, o el valor 2 si queremos llenar toda la pantalla con la imagen.
  2. Si la imagen no posee transparencias, la propiedad BackStyle debe tener el valor 1, que es su valor por omisión. Solo si la imagen posee transparencias se debe configurar la propiedad BackStyle con el valor 0. De otra manera se obtienen resultados no deseados cuando se redimensiona la imagen
  3. En el caso de utilizar la propiedad Anchor, esta debe configurarse al final, luego de que se configuren las propiedades Left, Top, Height y Width de la imagen.
Hasta la próxima.

Luis María Guayán