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:
- 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.
- 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
- 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.
Luis María Guayán
Muy bien explicado, muchas gracias ��
ResponderBorrar