Etiqueta

11 enero 2011

Ajuste de la resolución de pantalla

Descripción del problema:

A menudo nos encontramos con diferentes monitores y diferentes configuraciones de resolución, además algunos usuarios prefieren una resolución menor de pantalla a fin de aumentar el tamaño de los objetos representados (no sólo el texto), especialmente aquellos que tengan alguna dificultad de visión.

Para resolver esta cuestión las aplicaciones desarrolladas con Omnis Studio deberían ser capaces de permitir al usuario elegir la resolución que deseen. Afortunadamente Omnis Studo incorpora los elementos necesarios para realizar este proceso, tan sólo se debe tener en cuenta que cuando se asignen estas preferencias se debe cerrar y reabrir la biblioteca para que surtan efecto.

A continuación describo en detalle un procedimiento que podría incorporarse a las opciones de preferencias de nuestra aplicación Omnis Studio, el ejemplo muestra un objeto visual que permitirá al usuario hacerse una idea del tamaño que tendrán sus ventanas tras aumentar o disminuir la resolución:


La ventana de preferencias podría ser de un estilo similar a este, mostrando (por ejemplo) un cuadro he indicadores de grado (Slider Control) para que el usuario modifique la resolución ha obtener según lo desee, no obstante tendremos que prefijar las resoluciones máximas y mínimas posibles, en nuestro caso las resoluciones posibles estarán entre 1.680x1.050 y 1.360x850. Para la resolución máxima (1.680x1.050) el rectángulo guía tendrá un tamaño de 130x220 ($height=130, $width=220).

Usaremos dos variables numéricas definidas para la clase "ventana de preferencias", las llamaremos “ZoomHori” y “ZoomVert”.

A continuación añadiremos al procedimiento $construct las siguientes líneas de código:

; Recoge el valor actual de resolución en pantalla
Do $cwind.$objs.ZoomHorizontal.$val.$assign($clib.$prefs.$hscale)
Calculate ZoomHori as $clib.$prefs.$hscale
Do $cwind.$objs.ZoomVertical.$val.$assign($clib.$prefs.$vscale)
Calculate ZoomVert as $clib.$prefs.$vscale
Do $cwind.$objs.NaviElement.$val.$assign($clib.$userinfo)
Calculate $cwind.$objs.ZoomHorizontal.$::min as 1360
Calculate $cwind.$objs.ZoomVertical.$::min as 850
Do $cwind.$bobjs.1053.$height.$assign(int((1680-$clib.$prefs.$hscale)/'6,40')+130)
Do $cwind.$bobjs.1053.$width.$assign(int((1050-$clib.$prefs.$vscale)/'3,33')+220)

Esto fijará la escala (o resolución) a los valores actuales y ajustará el tamaño del cuadro (ID=1053), lo que permitirá al usuario hacerse una idea aproximada de como se verán las ventanas en su pantalla.

Ahora debemos fijar los procedimientos asociados a las barras "Slider Control"

Para ZoomHorizontal:

On evNewValue
Calculate ZoomHori as pNewVal
Do $cwind.$bobjs.1053.$height.$assign(int((1680-ZoomHori)/'6,40')+130)

Para ZoomVertical:

On evNewValue
Calculate ZoomVert as pNewVal
Do $cwind.$bobjs.1053.$width.$assign(int((1050-ZoomVert)/'3,33')+220)

Finalmente debemos dejar ajustada la resolución que el usuario ha seleccionado, esto lo haremos al abandonar la clase "ventana de preferencias", (procedimiento $destruct) tal y como sigue:

; Establece nuevos valores de resolución en pantalla
Do $clib.$prefs.$hscale.$assign(ZoomHori)
Do $clib.$prefs.$vscale.$assign(ZoomVert)

Suelo incorporar este procedimiento en todas las aplicaciones que realizo, los usuarios agradecen disponer de un ajuste personalizado para cada aplicación.

Si encontráis útil la idea o tenéis otra mejor, os animo a que dejéis vuestros comentarios en el "blog", por mi parte seguiré incorporando alguna otra idea de interés general.

Un cordial saludo a todos los desarrolladores de Omnis Studio y en especial a los participantes del grupo programomnis.

No hay comentarios: