Mejora el aspecto de tu proyecto, consejos para la UI de Windows

A continuación reproduzco, traducido al castellano, la entrada publicada originalmente en el blog de Xojo y en el que se indican una serie de consejos que te permitirán mejorar el aspecto de la interfaz de usuario de tus aplicaciones Windows, empleando para ello (o gracias a) las mejoras introducidas en la release Xojo 2018r1 que puedes descargar completamente gratis desde este enlace.

Con Xojo 2018 Release 1 ya disponible, las aplicaciones de Windows ofrecen ahora una interfaz de usuario (UI) más estable y libre de parpadeos. Para proporcionar estas mejoras tanto Xojo como tus apps piden un poco más de Windows. Estos son algunos consejos que te ayudarán a garantizar que tus aplicaciones Windows se verán y comportarán de la mejor forma posible.

Ajusta la propiedad Transparent de los controles a False

Los controles de UI tienen ahora una propiedad Transparent que determina si el control es transparente en Microsoft Windows. Por omisión está definido a False para los nuevos controles añadidos al diseño. En los proyectos y controles ya existentes, esta propiedad se define a True para proporcionar la máxima compatibilidad.

Sin embargo, los controles que tengan la propiedad Transparent definida a True precisarán de una mayor cantidad de dibujado, utilizarán más memoria y serán, por tanto, más lentas. Para obtener los mejores resultados deberías de ajustar la propiedad Transparent a False en tantos controles como sea posible.

Sobre la propiedad DoubleBuffer en los ContainerControl

Define esta propiedad a True para reducir el parpadeo en Microsoft Windows cuando se haga scroll sobre el ContainerControl. En otros casos, deja esta propiedad a False.

Evita solapar controles

La cosa más sencilla que puedes hacer para prevenir el parpadeo consiste en no solapar los controles. Los controles solapados resultan en una mayor cantidad de peticiones par redibujarlos lo que podría derivar en parpadeos indeseados y un menor rendimiento.

Usa un Canvas

Para obtener los mejores resultados, muestra cualquier gráfico usando el evento Paint del control Canvas. Evita usar la propiedad Backdrop del objeto Window, el evento Paint del objeto Window, la propiedad Canvas.Backdrop o el control ImageWell. Aunque estas técnicas funcionan bien en ciertas situaciones, a menudo derivan en molestos parpadeos y diseños de ventana más complejos.

Sobre el Canvas, lo primero que querrás hacer es desactivar la propiedad EraseBackground. Esta propiedad evita que se borre el Canvas (y se muestre un rectángulo de color blanco) antes de volver a dibujarlo, lo que es otra fuente habitual de parpadeo. También deberías de comprobar el uso de la propiedad DoubleBuffer. En muchos casos comprobarás que puedes dejarla desactivada (False) para obtener un mejor rendimiento.

Con estos ajustes puedes hacer todo el dibujado en el evento Paint usando el objeto gráfico proporcionado a través del parámetro: g.

Aviso: No dibujes directamente sobre la propiedad Canvas.Graphics. Esta capacidad se deprecó en 2011 y se desaconseja en especial. Dibujar de este modo puede aumentar muy probablemente el parpadeo y reducirá decididamente las actualizaciones gráficas.

Puedes tener métodos separados que actualicen los gráficos, pero estos han de ser invocados desde el evento Paint con el objeto gráfico proporcionado a los métodos como parámetro. Otra técnica consiste en tener una propiedad Picture que uses para dibujar tus gráficos y luego utilizar el manejador de evento Paint para dibujar el Picture de modo que el Canvas lo muestre.

Cuando quieras que el Canvas se actualice a sí mismo, redibujando los cambios en tus gráficos, llama al método Invalidate:

Canvas1.Invalidate(False)

También puedes llamar al método Refresh:

Canvas1.Refresh(False)

La diferencia es que Invalidate indica al Canvas que se actualice cuando obtenga una petición de redibujado por parte del sistema operativo. El método Refresh indica al Canvas que se actualice de inmediato. Por lo general querrás usar Invalidate, dado que resultará en menos peticiones de dibujado, mejorando el rendimiento y reduciendo el parpadeo.

Para reducir el parpadeo, ambos comandos pasan False para el parámetro EraseBackground (por defecto indicado como True) de modo que el Canvas no se borrará antes de que se dibujen sus contenidos actualizados.

Elimina o actualiza el código antiguo

Si venías utilizando código específico en tu app para reducir el parpadeo bajo Windows, deberías de contemplar su borrado dado que puede ser innecesario y empeorar el rendimiento.

Sobre las Máquinas Virtuales

Muchas personas ejecutan Windows sobre Máquinas Virtuales. Si es tu caso, asegúrate de tener el mejor rendimiento posible. Las apps de Xojo utilizan Direct2D para todo el dibujado de pantalla y no todo el software de VM contempla el uso de controladores gráficos adecuadamente acelerados para ello.

En particular, VMware Fusion ofrece un rendimiento pobre cuando está activada la capacidad de “Acelerar Gráficos 3D” en las preferencias de Pantalla. Para obtener el mejor rendimiento deberías asegurarte de desactivar esta opción.

Por otra parte, Parallels Desktop y VirtualBox parecen ofrecer un mejor rendimiento gráfico con Direct2D y las apps Xojo.

Puedes encontrar información adicional en Guías maestras de UI para Windows.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *