Como Ajustar formularios a diversas resolusiones de pantalla

7,931 views
Skip to first unread message

cesar72

unread,
Jan 31, 2012, 6:59:30 PM1/31/12
to Comunidad de Visual Foxpro en Español
Buenas, el tema es el siguiente:como se hace para ajustar un
formulario y todo su contenido (obvio) a distintas resoluciones, no me
convence el hecho de que detecte una resolucion "x" y la cambie por la
cual hemos desarrollamos la aplicación mientras que el programa corra
y, despues de salir del mismo la restaure, ya que si el usuario abre
otra aplicacion en windows esta tomará la resolucion que corregimos.
Estuve tratando de desarrollar algo como que identifique la resolucion
del usuario, mediante sysmetric, y luego rediseñe los objetos en el
form usando la propiedad .Controls y un ciclo for..endfor, pero la
verdad que los objetos label y text no se redimensionan apropiadamente
ya que no cambian el tamaño de la fuente. Estuve utilizando .Anchor
pero no me resuelve el problema. Si alguien tiene algún comentario o
ganas de intentarlo lo agradeceria mucho.

Carlos Miguel FARIAS

unread,
Feb 1, 2012, 8:29:17 AM2/1/12
to publice...@googlegroups.com
Con VFP 9, fijate en la propiedad anchor, pero en mi caso, diseño para un minimo de resolución y luego, solo estiro si es simple estirar (anchor) lo otro no, antes habia algunas resoluciones mas o menos estandares entonces uno podia más o menos prever variantes, ahora vienen infinidad de estas, depende de la proporcion del monitor (que no veo que sea igual en distintos lcd led) y si la gui no lo hace solo, no lo tengo en cuenta (o relleno de areas sin nada). Tipo lo que hace html en la web.
Saludos: Miguel, La Pampa (RA)

cesar72

unread,
Feb 1, 2012, 9:46:12 AM2/1/12
to Comunidad de Visual Foxpro en Español
Gracias por contestar, tienes razón con el hecho de infinidad de
resoluciones y voy a intentar con .Anchor, de hecho ya lo estoy
haciendo hace rato, pero vamos a ver que sucede, si consigo un cambio
importante te lo hare saber.
Un abrazo.
César Barrionuevo
Venado Tuerto - Santa Fé

On 1 feb, 14:29, Carlos Miguel FARIAS <carlosmiguelfar...@gmail.com>
wrote:
> Con VFP 9, fijate en la propiedad anchor, pero en mi caso, diseño para un
> minimo de resolución y luego, solo estiro si es simple estirar (anchor) lo
> otro no, antes habia algunas resoluciones mas o menos estandares entonces
> uno podia más o menos prever variantes, ahora vienen infinidad de estas,
> depende de la proporcion del monitor (que no veo que sea igual en distintos
> lcd led) y si la gui no lo hace solo, no lo tengo en cuenta (o relleno de
> areas sin nada). Tipo lo que hace html en la web.
> Saludos: Miguel, La Pampa (RA)
>
> El 31 de enero de 2012 20:59, cesar72 <cesar_...@arnet.com.ar> escribió:
>
>
>
> > Buenas, el tema es el siguiente:como se hace para ajustar un
> > formulario y todo su contenido (obvio) a distintas resoluciones, no me
> > convence el hecho de que detecte una resolucion "x" y la cambie por la
> > cual hemos desarrollamos la aplicación mientras que el programa corra
> > y,  despues de salir del mismo la restaure, ya que si el usuario abre
> > otra aplicacion en windows esta tomará la resolucion que corregimos.
> > Estuve tratando de desarrollar algo como que identifique la resolucion
> > del usuario, mediante sysmetric, y luego rediseñe los objetos en el
> > form usando la propiedad .Controls y un ciclo for..endfor, pero la
> > verdad que los objetos label y text no se redimensionan apropiadamente
> > ya que no cambian el tamaño de la fuente. Estuve utilizando .Anchor
> > pero no me resuelve el problema. Si alguien tiene algún comentario o
> > ganas de intentarlo lo agradeceria mucho.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Walter R. Ojeda Valiente

unread,
Feb 1, 2012, 11:25:17 AM2/1/12
to publice...@googlegroups.com
Hay una clase llamada STRETCH.VCX que sirve para eso y era muy utilizada antes de que existiera la propiedad Anchor. ¿La has probado?

Saludos.

Walter.



> Date: Wed, 1 Feb 2012 06:46:12 -0800
> Subject: [vfp] Re: Como Ajustar formularios a diversas resolusiones de pantalla
> From: cesa...@arnet.com.ar
> To: publice...@googlegroups.com

Daniel Sánchez

unread,
Feb 1, 2012, 1:50:10 PM2/1/12
to publice...@googlegroups.com
La clase strecht me parece que agrandaba los botones y otros elementos conforme se ampliaba el form, en todo caso con el anchor se puede reubicar los controles y agrandar algunos textbox si fuera necesario, en todo caso lo que si debe modificarse mayormente su ancho y alto debería ser el grid ya que este si interesa que pueda mostrar más datos tanto en columnas como en filas.

Ejemplo el formulario normal al entrar

image.png

Ahora maximizado 

image.png

En este caso desplazo los demás controles hacia abajo mostrando más datos osea filas en el grid, en otros casos el grid crece para ambos lados igualmente desplazando los demás controles hacia abajo, todo esto haciendo uso de la propiedad Anchor de los objetos.


Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú
image.png
image.png

cesar

unread,
Feb 1, 2012, 11:41:38 AM2/1/12
to publice...@googlegroups.com

Esta clara la idea, pero que pasa si la resolución es menor? Muchas Gracias de todas formas. Te felicito por el diseño del formulario que capturaste,  me gusta tiene mucha personalidad.

Un abrazo.

César Barrionuevo

Analista de Sistemas

Venado Tuerto –Santa Fé

Argentina

Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 8.5.455 / Base de datos de virus: 271.1.1/4177 - Fecha de la versión: 01/30/12 19:34:00

image001.png
image002.png

Carlos Miguel FARIAS

unread,
Feb 1, 2012, 6:01:23 PM2/1/12
to publice...@googlegroups.com
El que usuario aumente la resolución del monitor. (Cambia configuración o cambia monitor).
Si le empezas a aceptar al cliente equipos viejos, van a pretender que funcionen con tarjeta Hercules (pa' los jovenes, tarjeta monocromo de fines de los 80).
En todo caso, la solución es usar pageframe, eso te permite ubicar reducir la cantidad de datos a mostrar simultaneamente.
Solo se justifica tener en cuenta esos detalles de diseño si el cliente pone la mosca.
Saludos: Miguel, Santa Rosa (LP)
image002.png
image001.png

cesar

unread,
Feb 1, 2012, 2:37:29 PM2/1/12
to publice...@googlegroups.com

Tenes razón con respecto de que es mucho trabajo  y que no vale la pena si el cliente no paga lo que corresponde, es simplemente que me gustaría hacerlo, se transformo en algo asi como un reto y no me voy a dar por vencido asi tan fácil.

Gracias.-

image001.png
image002.png

Daniel Sánchez

unread,
Feb 1, 2012, 8:35:24 PM2/1/12
to publice...@googlegroups.com
Normalmente si te das cuenta, las aplicaciones dan parámetros técnicos para que estos funcionen, como la versión de sistema operativo, la "Resolución de vídeo mínima recomendada", la cantidad de memoria y otras cosas más. Así que siempre hay parámetros mínimos para trabajar, pues nunca se podrá trabajar en una notebook de 10" mi aplicación, o mejor dicho si funciona pero no se podrá hacer gran cosa por problemas para mostrar los datos principales en una pantalla tan pequeña.

Ruben SEGOVIA RODRIGUEZ

unread,
Jun 29, 2013, 8:24:22 PM6/29/13
to publice...@googlegroups.com
Hola 
he logrado redimensionar un formulario, pero he notado un problema es cuando un objeto esta oculto y cuando lo hago visible toma la posición original y no cambia hasta variar la resolución del formulario. si tuvieras alguna solución te lo agradeceré

Francisco

unread,
Jul 2, 2013, 4:57:40 AM7/2/13
to publice...@googlegroups.com
Hola, yo utilizo está funcion a la que llamo desde el init del form para ajustar según resolución del monitor del cliente... también ajusta el tamaño de la fuente... a mi me va bien...

tienes variables como oapp.incremento_fuente,oapp.oapp.coeficiente,oapp.coeficiente1 que calculo al inicio de mi aplicación suponiendo que mis formularios fueron diseñados para 1024*768 pues hago algo asi:

OAPP.COEFICIENTE=(SYSMETRIC(1)/1024)
oapp.coeficiente1=(SYSMETRIC(2)/768)
IF SYSMETRIC(1)/SYSMETRIC(2) > 1.59 && es monitor 16:9 o 16:10
OAPP.COEFICIENTE=oapp.coeficiente1
endif 

DO case
CASE OAPP.coeficiente>=1.28 OR OAPP.coeficiente<1.44
OAPP.INCREMENTO_FUENTE=1
CASE OAPP.coeficiente>=1.44 OR OAPP.coeficiente<=1.60
OAPP.INCREMENTO_FUENTE=2
CASE OAPP.coeficiente>1.60 OR OAPP.coeficiente<2.0
OAPP.INCREMENTO_FUENTE=3
CASE OAPP.coeficiente>=2.0 OR OAPP.coeficiente<2.4
OAPP.INCREMENTO_FUENTE=4
CASE OAPP.coeficiente>2.4
OAPP.INCREMENTO_FUENTE=5
ENDCASE

Tambien puedes poner esos valores en el init y luego cambiarlos según la máquina... en fin espero te sirva... como te he dicho a mi me escala bien...

PROCEDURE cambiar_tamaño
LPARAMETERS oObject

local nOBJETOS,nT,cOBJETOS
LOCAL loCol AS Collection

IF oapp.cambiar_tamaño
 IF oapp.coeficiente!=1
 
  IF UPPER(oObject.Baseclass)="FORM"
oObject.LockScreen=.T.
IF oObject.WindowState!=2   && si no maximizada
  oObject.Width=INT(oObject.Width*oapp.coeficiente)
oObject.Height=INT(oObject.Height*oapp.coeficiente1)
ENDIF
ENDIF
IF VARTYPE(oObject.fontsize)="N"
oObject.FONTSIZE=oObject.FONTSIZE+oapp.incremento_fuente
  ENDIF
 
  loCol = CREATEOBJECT('collection')
nOBJETOS=0
  nOBJETOS=COBJECTS(loCol, oObject)
  cOBJETOS=""

FOR nT=1 TO nOBJETOS   
IF VARTYPE(loCol(nT)) = "O"
IF VARTYPE( loCol(nT).FONTSIZE ) = "N" AND UPPER(loCol(nT).baseclass)!="GRID"
loCol(nT).FONTSIZE=loCol(nT).FONTSIZE+oapp.incremento_fuente
ENDIF
IF VARTYPE(loCol(nT).WIDTH) = "N"
 loCol(nT).WIDTH=round(loCol(nT).WIDTH*oapp.coeficiente,8)
ENDIF
IF VARTYPE(loCol(nT).TOP) = "N"
loCol(nT).Top=round(loCol(nT).Top*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).LEFT) = "N"
  loCol(nT).left=round(loCol(nT).left*oapp.coeficiente,8)
  ENDIF
  IF VARTYPE(loCol(nT).HEIGHT) = "N"
loCol(nT).Height=round(loCol(nT).Height*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).ROWHEIGHT) = "N"
loCol(nT).RowHeight=round(loCol(nT).RowHeight*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).HEADERHEIGHT) = "N"
loCol(nT).HeaderHeight=round(loCol(nT).HeaderHeight*oapp.coeficiente1,8)
ENDIF
IF VARTYPE(loCol(nT).BORDERWIDTH) = "N" AND UPPER(loCol(nT).baseclass)!="PAGEFRAME"
loCol(nT).BorderWidth=round(loCol(nT).BorderWidth*oapp.coeficiente,8)
ENDIF
ENDIF
  ENDFOR

  IF UPPER(oObject.Baseclass)="FORM"
oObject.AutoCenter=.T.
oObject.LockScreen=.F.
ENDIF
 ENDIF
ENDIF

ENDPROC

Francisco

unread,
Jul 2, 2013, 5:00:23 AM7/2/13
to publice...@googlegroups.com
Perdona se me ha pasado como llamo desde el init a este procedimiento: 

cambiar_tamaño(thisform)

Ruben SEGOVIA RODRIGUEZ

unread,
Jul 6, 2013, 2:39:10 PM7/6/13
to publice...@googlegroups.com
he copiado el código pero sale este error, ¿faltará alguna clase? 
Imágenes integradas 1
image.png

MAC HOWARD

unread,
Jul 6, 2013, 4:03:41 PM7/6/13
to publicesvfoxpro
Puedes usar tambien, lo siguiente:


mnScreenW = SYSMETRIC(1) && Screen Width
mnScreenH = SYSMETRIC(2) && Screen Height
--
Gracias !

Hasta Pronto !
 
________________________________
MAC HOWARD OROZCO POLO
Analista Programador de Sistemas
Barranquilla - Colombia
https://sites.google.com/site/sistemasmachoward/
http://www.machowardop.blogspot.com/


image.png

Francisco

unread,
Jul 8, 2013, 6:56:52 AM7/8/13
to publice...@googlegroups.com
No lo que pasa que como te he comentado oapp es una instancia de una clase que tiene esas tres propiedades incremento_fuente,coeficiente y coheficiente1 asi que si no la tienes creada o tienes una clase global añade esas propiedades y sustituye oapp por el nombre de tu clase global. No se si me entiendes... si no lo tienes aún claro.

Este es el código para la clase, pero lo normal es que tu aplicación tenga ya una clase para guardar ese tipo de propiedades y métodos.

DEFINE CLASS entorno AS custom
coheficiente = 0
coheficiente1 = 0
        tamaño_fuente = 0
ENDDEFINE

oApp=CREATEOBJECT("entorno")
Message has been deleted

Francisco

unread,
Jul 8, 2013, 7:00:43 AM7/8/13
to publice...@googlegroups.com
Se me olvido otra propiedad de la clase...

DEFINE CLASS entorno AS custom
coheficiente = 0
coheficiente1 = 0
        tamaño_fuente = 0
        cambiar_tamaño= .T.
ENDDEFINE

Ruben SEGOVIA RODRIGUEZ

unread,
Jul 12, 2013, 10:52:31 PM7/12/13
to publice...@googlegroups.com
Hola:

que sabes del lenguaje LIANJA, supuestamente es el sucesor de VFP???

Alejandro Garcia G.

unread,
Mar 16, 2016, 1:26:20 PM3/16/16
to Comunidad de Visual Foxpro en Español

Saludos, encontré este post algo antiguo pero quisiera probar el código mencionado acá, el detalle es que tiene muchos errores en los nombres de variables, ya corregí casi todas, menos una que no se a que hace referencia,

¿Me puede ayudar quien respondió o coloco el código o quien lo haya logrado utilizar?


En esta linea me da el error:

nOBJETOS=COBJECTS(loCol, oObject)

Buscarlo en el código completo, ¿a que hace referencia COBJECTS(...) ?



Gracias.
Reply all
Reply to author
Forward
0 new messages