1 de agosto de 2015

Cuadrículas, imágenes y "cuelgues"

Artículo original: Grids, images and a crash
http://www.foxpert.com/knowlbits_200807_1.htm
Autor: Christof Wollenhaupt
Traducido por: Luis María Guayán


En mi sesion "Crashing VFP and preventing crashes" mostré que exibiendo una imagen corrupta en una cuadrícula, Visual FoxPro se "cuelga". Realmente hay mas, ya que estos "cuelgues" no se limitan solo a las imágenes corruptas.

Ahora mismo estoy trabajando en un control que muestra imágenes como miniaturas. Eche un vistazo a la galería de fotos de Windows Vista para tener una impresión de como es el control. Hubieron algunas lecciones que aprendí escribiendo este control.

El uso de BackStyle_Access es una "buena" tecnología. Desafortunadamente, "bueno" no siempre se traduce muy bien como "rápido". Esto podría estar relacionado con el hecho de que muestro muchas imágenes en cada celda de la cuadrícula. Por ello, BackStyle_Access es llamado varias veces por cada celda. La cosa más extraña que sucede, es cuando el formulario con la cuadrícula no tiene el enfoque. En este caso, el método Access se dispara permanentemente. Moverse por la cuadrícula es lento. Luego la cuadrícula muestra nuevamente todas las imágenes cada vez que se cambia de columna o fila.

Por lo tanto, cambié el enfoque del tradicional DynamicCurrentControl por un contenedor para cada fila. La tarea de mostrar las imágenes es mucho mas rápido ahora. Por desgracia, Visual FoxPro se "culga" también fácil.

El control cuadrícula es muy sensible para mostrarse mientras tiene el foco. Esto es un problema conocido. Por ejemplo, cuando tengo que llamar al método Refresh, por lo general muevo el foco a algún control no visible, ejecuto Refresh y luego vuelvo el foco hacia la cuadrícula. No hacerlo puede causar que la cuadrícula no muestre los registros. Estos sólo aparecerán si hace Click en la cuadrícula y pulsa la tecla de flecha arriba.

Estos problemas no solo lo hace el Refresh, sino las operaciones de dibujo en general. En mi control imagen, yo uso el evento MouseWheel para cambiar el tamaño de la imagen. Haciendo cambios en RowHeight, en el ancho de la columna, potencialmente en la propiedad ColumnCount y también tener que volver a dibujar todas las imágenes de la cuadrícula. Tarde o temprano el formulario se "cuelga". Hasta el momento, una norma parece ser que la cuadrícula se "cuelga" más rápido mientras más optimizado es mi código. Yo opino que esto está relacionado con la cantidad de operaciones de dibujo, o quizás algunas acciones superpuestas.

De manera extraña, los "cuelgues" sólo ocurren cuando la cuadricula comienza la serie de eventos. El uso de la rueda del ratón en la cuadrícula y moverse en la cuadrícula muy rápidamente, ambos "cuelgan" a VFP. Pero si hago la misma acción desde un botón de comando fuera de la cuadrícula, hasta el momento no tengo ningún "cuelgue".

No hay comentarios. :

Publicar un comentario