3 de mayo de 2007

Arreglar los bordes de los formularios en Windows Vista (Aero)

Calvin Hsia en su Blog nos explica que cuando se ejecuta un formulario de VFP, éste solicita a Windows crear una ventana, entonces configura el estilo del borde (BorderStyle) de la ventana. Al parecer, en Windows Vista con Aero (excepto como administrador), el estilo del borde no puede ser configurado después que la ventana se ha creado.

Para reproducir el problema, Calvin nos indica los siguientes pasos:

  1. Iniciar Visual FoxPro (Calvin ejecutó VFP7 lanzado a mediados de 2001)
  2. Crear un nuevo formulario
  3. En la ventana de propiedades, cambiar la propiedad BorderStyle a 1 ó 2
    • 0 = ningún borde (ningún problema, porque no hay bordes para dibujar)
    • 1 = fijo simple
    • 2 = fijo doble
    • 3 = ajustable (por omisión) (ningún problema, porque es por omisión)
  4. Guardar y ejecutar el formulario
  5. Mover el formulario por la pantalla de modo que los bordes y la barra de título deban ser repintadas

Resultado: La ventana se comporta como si no tuviera bordes, y no puede repintarlo.

Calvin continua diciendo que es bastante asombroso que funcionando bajo modo administrador, el problema desaparece. Quizás una aplicación ejecutada como no administrador, que cambia el estilo del borde puede ser un riesgo en la seguridad.

Cuando VFP ejecuta un formulario, lee las propiedades y las configura en el orden que se encuentran. Para un formulario, la pseudo propiedad DoCreate significa crear la ventana. La propiedad BorderStyle suele estar escrita después de DoCreate, así que no hace caso del ajuste de BorderStyle.

Calvin nos brinda las siguientes opciones para solucionar el problema:

  • Abrir el formulario como una tabla y manualmente colocar la propiedad BorderStyle antes de DoCreate.
  • Ejecutar el programa (ver artículo original) que corrige los archivos SCX colocando la propiedad BorderStyle antes de DoCreate.
  • Convertir los formularios de SCX a VCX (clases visuales), donde el BorderStyle se configura al momento de la creación de la ventana.
  • Esperar el lanzamiento del próximo SP de VFP.
  • Ejecutar Windows Vista sin la interface Aero.
  • Ejecutar la aplicación como Administrador.

El enlace al artículo original en el Blog de Calvin Hsia es: Fix your forms to paint borders correctly under Vista Aero. Allí se encuentra el procedimiento FixDir() que corrige todos los formularios SCX del directorio y subdirectorios pasado como parámetro.

NOTA: Esto también sucede en Visual Studio 2005 según comenta Calvin en la siguente entrada de su blog: Windows Vista Aero BorderStyle Paint problem as non Administrator

 

No hay comentarios. :

Publicar un comentario