Manejo avanzado de múltiples interfaces en Visual FoxPro
Trabajar con varias interfaces de usuario es una necesidad común en la creación de aplicaciones robustas. Sin embargo, manejar múltiples formularios o interfaces de usuario en Visual FoxPro puede ser un desafío si no conocemos las herramientas y comandos adecuados para implementar esta funcionalidad de manera eficiente.
A continuación, exploraremos cómo se pueden desplegar y manejar efectivamente dos o más formularios al mismo tiempo dentro de una aplicación Visual FoxPro, sin que esto suponga un conflicto o un mal rendimiento del programa.
Creación de Formularios en Visual FoxPro
Antes de hablar sobre la sincronización de dos formularios, es importante saber cómo crear un formulario básico en Visual FoxPro. Para ello usualmente se utiliza el siguiente código:
DEFINE WINDOW MiPrimerFormulario FROM 1,1 TO 10,20 TITLE 'Mi Primer Form' ACTIVATE WINDOW MiPrimerFormulario
Este código sencillo permite abrir una pequeña ventana que puede servir como base para formularios más complejos.
Apertura de dos formularios simultáneamente
Para trabajar con dos formularios simultáneamente, se debe tener en cuenta que cada formulario debe tener su propia instancia y este enfoque puede manejar n-formularios. Veamos el siguiente ejemplo:
DO FORM Formulario1 DO FORM Formulario2 IN WINDOW (Formulario1)
Con este código, podemos abrir dos formularios: uno será el Formulario1 y el otro el Formulario2, ejecutándose en la ventana principal de Formulario1. Cada formulario se desarrolla de forma independiente pero con la posibilidad de estar activos simultáneamente.
Comunicación entre formularios
Una vez que hemos abierto múltiples formularios, muchas veces necesitamos que estos interfieran entre sí, compartiendo datos o eventos. Para ello, Visual FoxPro ofrece diversas maneras de comunicar formularios activos al mismo tiempo. Por ejemplo, podemos manipular propiedades de uno mediante referencias del otro:
PUBLIC oForm1, oForm2 oForm1 = CREATEOBJECT("Form") oForm1.CAPTION = "Formulario 1" oForm1.SHOW() oForm2 = CREATEOBJECT("Form") oForm2.CAPTION = "Formulario 2" oForm2.SHOW() * Ejemplo de referencia y modificación oForm1.cmdButton1.Caption = "Presiona aquí" oForm2.Height = oForm1.Height
En este trozo de código, mediante referencias públicas, es posible acceder a métodos y propiedades del primer formulario desde el segundo, y viceversa, para sincronizar comportamientos o compartir datos.
Utilización de Modalidad en Formularios
Es común que uno de los formularios se comporte como modal, es decir, tomando el foco absoluto de la aplicación hasta que se cierre. En FoxPro, establecer este comportamiento es posible activando la propiedad WindowType a Modal. Veamos a continuación:
DEFINE WINDOW MiFormularioModal FROM 1,1 TO 10,20 ; TITLE 'Formulario Modal' WINDOWTYPE Modal ACTIVATE WINDOW MiFormularioModal
Con este código, una vez que se activa el form modal, cualquier interactuación con otros formularios queda restringida hasta que se cierre el actual.
Solucionando posibles problemas de enfoque
Una de las complicaciones al trabajar con múltiples ventanas es mantener el control sobre qué formulario tiene el enfoque. Es deseable que el usuario tenga una experiencia fluida, pasando de un formulario a otro sin inconvenientes.
Para manejar el enfoque de los formularios, se pueden usar comandos o manipular eventos para asignar dinámicamente el enfoque al formulario deseado:
* Asumiendo que oForm1 y oForm2 han sido inicializados previamente * Establecer el enfoque a oForm1 oForm1.SetFocus() * En algún evento de oForm1 que necesite cambiar el foco a oForm2 oForm2.SetFocus()
El método SetFocus es un recurso valioso para mantener bajo control el flujo de trabajo.