28 de abril de 2018

Incluir una imagen centrada en la pantalla (revisado)

Me vi en la necesidad de incluir una imagen en el escritorio (pantalla) de VFP, para ello Luis María nos ofrece una solución.

_SCREEN.ADDOBJECT("oImg", "Image") 
_SCREEN.oImg.PICTURE = "miImagen.png" 
_SCREEN.oImg.TOP = (_SCREEN.HEIGHT- _SCREEN.oImg.HEIGHT)/2 
_SCREEN.oImg.LEFT = (_SCREEN.WIDTH - _SCREEN.oImg.WIDTH)/2 
_SCREEN.oImg.VISIBLE = .T. 

La imagen debe estar en un directorio donde VFP pueda encontrarla, mejor aún si se incluye en el ejecutable.

Esta solución me presentó algunos problemas.

El primer problema es que tarda en cargarse la imagen, entonces recurrí a un comado del viejo FoxPro que muestra la imagen de inmediato.

CLEAR
@0,0 SAY 'miImagen.png' BITMAP CENTER

Este comando en VFP9 muestra una imagen de los formatos más utilizados, no sólo BMP; pero tiene el inconveniente que si se redimensiona la pantalla a un tamño menor de la imagen, esta quedará permanentemente recortada, por cual se hace necesario utilizar el objeto Image, que se sobrepone a la imagen cargada con el comando SAY.

El segundo problema es que al redimensionar la pantalla, la imagen no se redimensiona, pero VFP ofrece una solución muy sencilla que es la propiedad ANCHOR. Anclando relativamente todos los bordes de la imagen a la Pantalla se obtiene un buen resultado. Para esto se incluye la siguiente línea:

_SCREEN.oImg.anchor = 240

Anclar de forma fija los bordes de la Imagen a la Pantalla (ANCHOR = 15), crea problemas con el siguiente punto de mantener el aspecto de la imagen.

Finalmente deseaba que la imagen conservara su aspecto sin importar el tamaño, para lo cual el objeto Image tiene la propiedad STRETCH, agregamos la siguiente línea:

_SCREEN.oImg.stretch = 1

El código completo queda así:

CLEAR
@0,0 SAY 'miImagen.png' BITMAP CENTER
_SCREEN.ADDOBJECT("oImg", "Image") 
_SCREEN.oImg.PICTURE = "miImagen.png" 
_SCREEN.oImg.TOP = (_SCREEN.HEIGHT- _SCREEN.oImg.HEIGHT)/2 
_SCREEN.oImg.LEFT = (_SCREEN.WIDTH - _SCREEN.oImg.WIDTH)/2 
_SCREEN.oImg.anchor = 240
_SCREEN.oImg.stretch = 1
_SCREEN.oImg.VISIBLE = .T. 

Este código se debe colocar en el programa Principal.

Espero que les sea de utilidad.

Germán Giraldo

2 comentarios :

  1. El tema de las imágenes en la Pantalla Principal de Visual Fox pro parece que no deja de ser vigente aunque pasen los años... Muchas gracias por compartir tu solución

    ResponderEliminar
  2. Para sacar un registro de un gril el campo se llama restante, lo que pasa es que estoy desarrollando un proyecto para llevar un inventario pero quiero que cuando me aparezca el item de algo me mande en el campo restante el último numero a restar

    ResponderEliminar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.