OnApp_class.prg - Clase para el manejo de ventanas Visual FoxPro sin barra de títulos

26/04/2020

 

Autor: Camf

En estos artículos ya hemos hablado de aplicaciones sin barra de títulos y como trabajan las ventanas en Visual FoxPro:

Cuando utilizamos las ventanas de Visual Foxpro con la propiedad Titlebar = 0 (Sin barra de títulos) nos encontramos con una serie de anomalías al efectuar el maximizado.

Está clase se ocupa en exclusiva de eliminar todos los problemas, conocidos por mi parte, de las ventanas sin barra de títulos de Visual Foxpro. Se corrigen utilizando la técnica de simulación de maximizado.

Lo siguiente esta repetido en Ventanas sin barra de títulos en Visual FoxPro - ¿Cómo funcionan?, pero es esencial conocerlo.

 

Objetos Form en Vfp

  • Screen es la ventana principal de Vfp y actúa de la misma manera que un formulario de nivel superior
  • En los formularios tenemos tres tipos de ventanas dependiendo del valor de la propiedad ShowWindow:
    Form.ShowWindow[ = nExpr]                

    Propiedad ShowWindow

    Descripción

    0

    En pantalla (valor predeterminado). Se trata de un formulario secundario que está colocado en la ventana principal de Visual FoxPro.

    1

    En formulario de nivel superior. Se trata de un formulario secundario del formulario de nivel superior activo, que puede ser la ventana principal de Visual FoxPro u otro formulario de nivel superior. Use esta opción si desea colocar el formulario secundario dentro del formulario de nivel superior activo.

    Si nExpr está establecido en 1 cuando el formulario de nivel superior es la ventana principal de Visual FoxPro, Visual FoxPro restablecerá automáticamente nExpr en 0.

    2

    Como un formulario de nivel superior. Se trata de un formulario de nivel superior en el que se pueden colocar formularios secundarios. Observe que un formulario de nivel superior es siempre no modal, independientemente de lo establecido en la propiedad WindowTypeNo hace caso al valor de la propiedad Desktop y entiende siempre un valor de .T.. El formulario puede estar en cualquier parte del escritorio de Windows.

Observaciones:

Un formulario secundario es un formulario que se encuentra dentro de otro. Los formularios secundarios no se pueden mover fuera de los límites de su formulario primario; cuando se minimizan, aparecen en la parte inferior del formulario primario. Si se minimiza un formulario primario, también se modificarán los secundarios.

Un formulario de nivel superior es un formulario independiente no modal, que sirve para crear una aplicación SDI (interfaz de un solo documento, single document interface) o para utilizarse como el primario de otros formularios secundarios. Los formularios de nivel superior funcionan al mismo nivel que otras aplicaciones de Windows y pueden aparecer por delante o por detrás de ellas. Los formularios de nivel superior aparecen en la barra de tareas de Windows.

La propiedad Desktop determina el comportamiento de un formulario secundario. Si la propiedad Desktop está establecida en el valor verdadero (.T.), el formulario secundario no estará limitado a los bordes de su formulario primario y podrá desplazarse a cualquier sitio dentro del escritorio de Windows. El formulario secundario no aparece en la barra de tareas de Windows.

 

¿Como utilizamos una ventana sin barra de títulos?

Dependiendo del valor de la propiedad TitleBar:

  • TitleBar = 0 -> Sin barra de títulos
  • TitleBar = 1 -> Con barra de títulos

 

¿Como maximizamos nuestras ventanas si no tenemos una barra de títulos?

Todo depende del valor de la propiedad WindowState.

Especifica si una ventana de formulario se muestra maximizada, minimizada o normal en tiempo de ejecución. Está disponible en tiempo de diseño y en tiempo de ejecución.

0 - Normal

1 - Minimizada (reducida a un icono). Si se minimiza la ventana principal de Visual FoxPro al salir de Visual FoxPro, no se mostrará esta ventana antes de salir de la aplicación. Si su aplicación muestra un cuadro de diálogo antes de salir, no olvide establecer _SCREEN.WindowState en 0 antes de mostrar el diálogo en pantalla.

2 - Maximizada (aumentada hasta llenar la pantalla).

Ejemplo:

Suponga que en una ventana sin barra de títulos tenemos un botón para esta función. Cada vez que lo pulsamos maximiza o restaura la ventana a su estado inicial.

El siguiente código es totalmente válido:

     With This
       .WindowState = IIF(.WindowState = 0, 2, 0)
     EndWith

 

Configuraciones de la propiedad BorderStyle para un objeto Form

Valor

Descripción

Ancho en píxeles

0

Sin borde

0

1

Borde de línea sencilla

2

2

Borde de línea doble

4

3

(Valor predeterminado) De tamaño ajustable

8

Cuando utilizamos la propiedad TitleBar = 1 en Windows 10 no se aprecian diferencias visuales utilizando los diferentes valores de BorderStyle.

No ocurre lo mismo cuando lo utilizamos con TitleBar = 0 (sin barra de títulos) donde si diferenciamos claramente el borde según el valor asignado.

 

¿Qué es simular un maximizado?

Es redimensionar una ventana con un valor de su propiedad WindowState = 0 al mismo tamaño que cuanto su propiedad WindowState = 2

El estado real de WindowState siempre es 0 - Normal ó 1 - Minimizado. Cuando vemos la ventana maximizada su WindowState = 0

 

¿Que tipo de ventanas hemos tenido en cuenta en OnApp?

Se han tenido en cuenta todo tipo de ventanas.

También se ha tenido en cuenta el que se puedan utilizar varios monitores y la resolución de los mismos.

Todos los tipos de borde que conseguimos con la propiedad BorderStyle.

 

La clase OnApp

Tiene un método WindowState_assing.

Cuenta con tres modos de funcionamiento y la posibilidad de utilizar modos diferentes según el tipo de ventana a tratar:

  • Modo 1: Simulación de maximizado
  • Modo 2: Simulación de maximizado
  • Modo 3: Maximizado Real pero se encuentra en fase de experimentación. Tenemos problemas al minimizar - restaurar pendientes de solucionar.

Los modos 1 y 2, utilizan un código diferente a la hora de maximizar por simulación, pero obtienen idénticos resultados.

Funciona en múltiples pantallas y calcula la resolución de las mismas para un correcto redimensionado.

Cuando utilizamos la ventana principal _Screen tiene en cuenta lo siguiente:

  • Si usamos los menús de Vfp
  • Si tenemos activado STATUS BAR en la ventana principal

 

Propiedades de OnApp

Propiedades para el sistema de memoria de funcionamiento interno

Version = "1.0 Beta"
WindowState = 0
*Solo cuando utilizamos simulación
OldBorderStyle = 0
OldLeft = 0
OldTop = 0
OldHeight = 0
OldWidth = 0

 

Propiedades que si podemos manipular

lnMode = 1 - 2 - 3 Podemos elegir un determinado comportamiento (1 y 2 -> Con) (3 - Sin) simulación. Ejemplo _Screen sin simulación y forms con simulación. Valor por defecto 1
FullScreen = .F. ó .T.. - .T.-> No respeta la barra de Windows. Si lnMode = .F. no funciona
BorderStyleYes = .F. ó .T.. - .T. Indica que queremos visualizar el BorderStyle que utilizamos en la ventana al maximizar
BorderStyleValue = 0 - 1 - 2 - 3. Indicamos con que borde se maximiza la ventana 0 - 1 - 2 - 3. No se tiene en cuenta si BorderStyleYes = .T.. El valor por defecto es 0. Cualquier valor que exceda el rango (0 - 1 - 2 - 3) se considera 0

 

¿Cómo añadir la clase?

Si trabaja en la ventana principal añada el siguiente código a su Main.prg:

SET PROCEDURE TO LOCFILE("Prog\onapp_class.prg") ADDITIVE
_SCREEN.AddObject("OnApp", "OnApp")

Si trabaja en un formulario añada lo siguiente en su evento Load:

SET PROCEDURE TO LOCFILE("Prog\onapp_class.prg") ADDITIVE &&, LOCFILE("gpImage2.prg")
thisform.AddObject("OnApp", "OnApp")

 

Vea también

 


 

Referencias

Autor: Camf

 

 

 



error: Contenido protegido