Bibliotecas de clases de Comercial Tasmania
Se han creado seis bibliotecas de clases para Comercial Tasmania. Algunas de las decisiones clave en la programación de Comercial Tasmania tienen que ver con el nivel al que se debería incorporar cierta funcionalidad:
- El nivel de la aplicación
- El nivel del formulario
- El nivel del control
Ejemplo Tastrade: funcionalidad de la clase Application
Se ha creado una clase aplicación genérica, Application, en Tsgen.vcx con una funcionalidad común a la mayoría de las aplicaciones. Esta clase proporciona la siguiente funcionalidad:
- Guarda el entorno de Visual FoxPro.
- Configura el entorno.
- Restaura el entorno original de Visual FoxPro.
- Ejecuta el menú principal.
- Administra barras de herramientas de la aplicación.
- Administra el procedimiento de inicio de sesión del usuario.
- Administra formularios.
Hay una subclase de la clase Application, Tastrade, en Main.vcx que proporciona funcionalidad adicional específica para Comercial Tasmania:
- Muestra la pantalla de inicio.
- Ejecuta el componente inicial.
Se ha creado un objeto, oApp, en Main.prg a partir de la clase Tastrade.
En las siguientes secciones se describe y resume la funcionalidad de la clase Application.
Guardar el entorno de Visual FoxPro
La clase Application guarda el entorno de Visual FoxPro cuando se ejecuta la aplicación. El entorno de Visual FoxPro incluye los valores de comando SET tales como PATH, TALK, CARRY, etc. En el evento Init de la clase Application, el código agrega un nuevo objeto a Application basado en la clase Environment de Tsgen.vcx. En el evento Init de la clase Environment, el código almacena la configuración del entorno de Visual FoxPro existente en propiedades de la clase para poder recuperarla más adelante.
El código asociado al evento Init también almacena el título de la ventana principal de Visual FoxPro en la propiedad cOldWindCaption de la clase Application. Estos valores almacenados se restauran siempre que se libere un objeto basado en la clase Application.
Otro factor del entorno de Visual FoxPro son las barras de herramientas estándar que están activas cuando se ejecuta una aplicación. El método ReleaseToolbars( ) de Application almacena los nombres de las barras de herramientas del sistema, así como la información acerca de si estaban abiertas o cerradas cuando se ejecutaba la aplicación.
El código asociado al evento Init de la clase Application también empuja al menú del sistema en uso hacia la pila de menús para permitir que pueda restaurarse más adelante.
Configurar el entorno
Hay otro código en el evento Init de la clase Application que establece el entorno de tiempo ejecución. Este código:
- Llama al método Set( ) de la clase Environment, el cual establece las bibliotecas de clases y de procedimientos, si se muestran registros eliminados (CLASSLIB, PROCEDURE, DELETED) y otros valores de configuración del entorno específicos de la aplicación.
- Abre la base de datos para la aplicación.
- Llama al método ReleaseToolbars( ) para liberar todas las barras de herramientas del sistema que estaban activas durante la ejecución de la aplicación.
- Establece el título de la ventana principal de Visual FoxPro en el valor almacenado en la propiedad cMainWindCaption de la clase Application.
Restaurar el entorno original de Visual FoxPro
Cuando se cierra la aplicación, el código del método Cleanup( ) de la clase Application restaura el título original de la ventana principal de Visual FoxPro, cierra la base de datos, limpia las ventanas, ejecuta CLEAR EVENTS, restaura el menú inicial y llama al método ShowToolbars( ) para volver a abrir las barras del sistema de Visual FoxPro que aparecían en pantalla antes de que se ejecutara Tastrade.app.
Cuando se ejecuta CLEAR EVENTS, continúa la ejecución del programa más allá del comando READ EVENTS y el código de Main.prg libera oApp. Cuando se libera el objeto Application, tiene lugar el evento Destroy de la clase Environment porque es un miembro de la clase Application.
En el evento Destroy del objeto Environment, se llama al método Reset( ) del objeto Environment para restaurar la configuración del entorno de Visual FoxPro que estaba en uso cuando se creó el objeto Environment.
Ejecutar el menú principal y establecer el bucle de eventos
El código adicional del objeto Application ejecuta el menú principal asociado con la aplicación y establece el bucle de eventos. El método Do( ) de la clase Application recibe el nombre Main.prg en cuanto se crea el objeto Application. El método Do( ) ejecuta el programa de menú principal y emite READ EVENTS.
Administrar barras de herramientas de la aplicación
El objeto Application también realiza un seguimiento de las barras de herramientas de la aplicación. Hay una propiedad a nivel de formulario que indica qué barra de herramientas se debe asociar a cada formulario. Dado que sólo hay una barra de herramientas en esta aplicación, el valor de esta propiedad es el mismo para todos los formularios de la aplicación.
Los formularios de la aplicación llaman al método ShowNavToolbar( ) de la clase Application para mostrar la barra de herramientas. La aplicación sabe si la barra de herramientas ya existe y la muestra sólo cuando es necesario, lo que aumenta el valor de la propiedad nFormInstanceCount.
El método ReleaseNavToolbar( ) de la aplicación, llamado en el evento Destroy de los formularios, reduce el valor de la propiedad nFormInstanceCount y quita la barra de herramientas después de la liberación del último formulario.
Administrar el procedimiento de inicio de sesión del usuario
La mayoría de las aplicaciones que tienen en cuenta la seguridad proporcionan algún formulario de procedimiento de inicio de sesión. Para administrar dicho procedimiento, el método Login( ) de la clase Application llama al método DoFormRetVal( ) y pasa el nombre de la clase a la pantalla de inicio de sesión. Cuando el usuario inicia una sesión, una propiedad de la clase Application, cUserLevel, almacena el nivel de usuario para ese usuario.
Esta propiedad se utiliza en el código de postprograma de menú para eliminar elementos que no deberían estar visibles para un usuario determinado.
Administrar formularios
Excepto en el caso de formularios utilizados en informes para establecer intervalos de valores para los informes, los formularios de Comercial Tasmania se mostrarán mediante métodos de la clase Application. El método DoForm( ) acepta el nombre de un formulario y un parámetro que puede pasarse al formulario. El método DoFormRetVal( ) acepta el nombre de una clase de formularios y devuelve un valor especificado en el formulario.
Mostrar la pantalla de inicio
La subclase de la clase Application, Tastrade, en Main.vcx proporciona funcionalidad adicional específica para Comercial Tasmania. El evento Init llama al código de la clase primaria en la clase Application y, si debe aparecer la pantalla de inicio, llama a DoFormRetVal("introform").
Ejecutar el componente inicial cuando un usuario inicia una sesión
La subclase de la clase Application, Tastrade, en Main.vcx proporciona funcionalidad adicional especial para Comercial Tasmania. El código del método Do( ) sobrescribe el comportamiento predeterminado del método Do( ) de la clase Application. El código del método Do( ) llama al método GetStartupAction( ), que devuelve el componente de la aplicación que se va a ejecutar después de que un usuario inicie una sesión. Si hay un componente especificado para un usuario, el código del método Do( ) ejecuta este componente inicial.
Ejemplo Tastrade: funcionalidad de la clase Form
Comercial Tasmania incluye los siguientes tipos de formulario:
- Formularios modales que devuelven un valor (por ejemplo, el formulario Inicio de sesión).
- Formularios de entrada de datos (por ejemplo, los formularios Cliente y Entrada de pedidos).
- Formularios de búsqueda (FindCustomer y FindOrder).
- Formularios de propósito general (por ejemplo, los formularios Acerca de e Introductorio).
En la siguiente lista se enumeran las clases de formularios y sus jerarquías en Comercial Tasmania.
Clase Form | Biblioteca de clases |
---|---|
tsFormRetVal | Tsbase.vcx |
IntroForm |
Tsgen.vcx |
Login |
Login.vcx |
LoginPicture |
Login.vcx |
FindCustomer |
Tsgen.vcx |
FindOrder |
Tsgen.vcx |
tsBaseForm | Tsbase.vcx |
tsMaintForm |
Tsbase.vcx |
tsTextForm |
Tsbase.vcx |
OrderEntry |
Orders.vcx |
About |
About.vcx |
Formularios modales
Todos los formularios que devuelven un valor derivan, en algún nivel, de tsFormRetVal
en Tsbase.vcx. Todas las clases de formularios de entrada de datos se basan en tsBaseForm
en Tsbase.vcx.
tsFormRetVal
impide el acceso a otros componentes mientras está activo.
Valores de la propiedad
AutoCenter = | .T. |
BackColor = | Gris claro |
BorderStyle = | 2-Doble ancho |
FontSize = | 8 |
MaxButton = | .F. |
MinButton = | .F. |
WindowType = | 1-Modal |
Propiedades personalizadas
uRetVal: | Contiene el valor devuelto del formulario. Puede ser cualquier tipo de datos; el prefijo "u" significa "desconocido" (unknown). uRetVal es .T. de forma predeterminada. |
Para crear una instancia de una subclase, llame a Application.DoFormRetVal
.
Formularios de entrada de datos
Los formularios de entrada de datos se basan en la clase tsBaseForm y están estrechamente integrados en la clase tsToolbar. tsBaseForm es la clase primaria de la mayoría de los formularios de la aplicación Comercial Tasmania. Proporciona la siguiente funcionalidad:
- Exploración de tablas
- Administración del acceso del usuario a datos
- Coordinación de la interfaz
Valores de la propiedad
BufferMode = | 2-Optimista |
Propiedades personalizadas
aerrormsg[3] = | Una matriz de mensajes de error. Esto permite que se escriba código de tratamiento de errores genérico en la clase primaria y personalizar los mensajes de error para que se definan en cada subclase. Los siguientes valores predeterminados se definen en el código asociado con el evento Init de formularios específicos: |
aerrormsg[1] = | "Error del desencadenador Insert." |
aerrormsg[2] = | "Error del desencadenador Update." |
aerrormsg[3] = | "Error del desencadenador Delete." |
cToolBar: | Contiene el nombre de la barra de herramientas que se ejecutará cuando se ejecute el formulario. |
lAllowEdits: | Si se puede o no modificar el registro actual. |
lAllowDelete: | Si se puede o no eliminar el registro actual. |
lAllowNew: | Si el usuario puede o no agregar nuevos registros |
Funcionalidad asociada con eventos
Init: | 1. Restaura la posición de la ventana anterior.2. Agrega el título del formulario al menú.3. Muestra la barra de herramientas de exploración.4. Inicializa la matriz de mensajes de error personalizada, aerrormsg[ ]. |
Activate: | 1. Selecciona el alias especificado en la propiedad InitialSelectedAlias de entorno de datos del formulario.2. Actualiza la barra de herramientas de exploración.3. Actualiza el menú.4. Establece el mensaje de la barra de estado con la propiedad Caption del formulario. |
Error: | Define código genérico de tratamiento de errores para todos los formularios. |
Destroy: | 1. Quita el título del formulario del menú.2. Guarda la posición de la ventana en el archivo Tastrade.ini. |
QueryUnload: | Comprueba si se han modificado datos y solicita al usuario que guarde los cambios si es necesario. |
Unload: | Borra la barra de estado. |
Métodos personalizados
First: | Desplaza el puntero del registro al primer registro. |
Next: | Desplaza el puntero del registro al siguiente registro. |
Prior: | Desplaza el puntero del registro al registro anterior. |
Last: | Desplaza el puntero del registro al último registro. |
Estos cuatro métodos comparten el siguiente comportamiento:
- Llaman al método DataChanged( ) personalizado del formulario para que compruebe si hay cambios.
- Llaman al método AskToSave( ) personalizado del formulario para pedir al usuario que guarde los cambios.
Métodos personalizados
Save: | Guarda el registro actual. |
Delete: | Elimina el registro actual. |
AddNew: | Agrega un nuevo registro. |
Restore: | Restaura los valores originales de los campos (cancela los cambios). |
AddToMenu: | Agrega el título del formulario al menú Ventana. |
RemoveFromMenu: | Quita el título del formulario del menú Ventana. |
AskToSave: | Pregunta al usuario si desea guardar los cambios o si desea cancelar la última operación. |
DataChanged: | Devuelve .T. si se ha modificado algún dato del formulario actual. |
WriteBuffer: | Código para llevar el valor del control actual al búfer del registro. |
RefreshForm: | Rutina de actualización personalizada. |
SaveWindowPos: | Escribe las propiedades Top y Left del formulario en el archivo INI de la aplicación. |
RestoreWindowPos: | Lee las propiedades Top y Left del formulario desde el archivo INI de la aplicación y las establece. |
WaitMode: | Convierte el cursor del mouse en un reloj de arena para todos los controles de un formulario. |
Formularios de búsqueda
Los formularios FindCustomer y FindOrder muestran las tablas de clientes y de pedidos, respectivamente, en una cuadrícula y permiten al usuario que cambie la etiqueta de índice. Se devuelve al formulario que llama el valor clave para la fila seleccionada cuando el usuario cierra el formulario.
Formularios de propósito general
Hay dos formularios de este tipo:
- Formulario AboutBox
El formulario AboutBox en About.vcx acepta parámetros en su evento Init para textos de títulos y un mapa de bits de logotipo. Esta clase utiliza funciones de la API para recuperar información tanto del archivo WIN.INI para Windows 3.x, como del Registro del sistema, para mostrar información acerca del sistema del usuario. - IntroForm
El formulario IntroForm de Tsgen.vcx es la pantalla de inicio. En esta clase, el código asociado al evento Click de chkShowAtStartUp escribe un valor en el archivo Tastrade.ini para especificar si la pantalla de inicio se debería mostrar en adelante cuando se ejecute Comercial Tasmania.
Ejemplo Tastrade: funcionalidad de la clase Control
La mayoría de las clases de control de base de Visual FoxPro se han dividido en subclases para proporcionar una funcionalidad predeterminada adicional o una apariencia coherente. Siempre que se han necesitado grupos de controles en más de un sitio dentro de Comercial Tasmania, se ha creado una clase.
Debido a que la aplicación tenía que ejecutarse en una presentación de 640 x 480, la fuente predeterminada de estos controles se ha establecido en 8 puntos en lugar de 10, para ahorrar espacio en los formularios.
Las clases de controles se enumeran a continuación por bibliotecas.
Biblioteca de clases de Tsbase.vcx
Clase | Descripción |
---|---|
ts3dShape | La clase para controles Shape, que generalmente sirven para resaltar o enmarcar partes de un formulario |
TsComboBox | La clase para todos los cuadros combinados de la aplicación. |
TsCommandButton | La clase para todos los botones de comando de la aplicación. |
TsEditBox | La clase para todos los cuadros de edición de la aplicación. |
TsGrid | El método SumColumn sirve para sumar automáticamente un valor a una columna de cuadrícula. Esta clase se agrega a la página List del marco de página en la clase tsMaintForm. |
TsLabel | La clase para todas las etiquetas de la aplicación. |
TsListBox | La clase para todos los cuadros de lista de la aplicación. |
TsTextBox | La clase para todos los cuadros de texto de la aplicación. |
OrdTextbox | Una subclase de tsTextbox que se utiliza con los formularios Entrada de pedidos e Historia de pedidos. |
TsToolBarButton | La clase para todos los botones de comando que aparecen en barras de herramientas de la aplicación. |
Biblioteca de clases de Tsgen.vcx
Clase | Descripción |
---|---|
CustomerInfo | Incluye etiquetas y cuadros de texto para los siguientes campos en la tabla de clientes. |
DateRange | Un control personalizado basado en la clase de base de control de Visual FoxPro. |
Splitter | Se utiliza en Información técnica para cambiar el tamaño de la lista de características y del cuadro de edición de la descripción. |
TsMaintForm | La clase para todos los formularios de mantenimiento de la aplicación. |
TsToolBar | La clase para la barra de herramientas de la aplicación. |
Vea también
Ejemplos de soluciones | Ejemplo Comercial Tasmania | Diseño de la base de datos Tastrade | Diseño y creación de las clases de Comercial Tasmania | Escribir, comprobar y depurar Comercial Tasmania