Crear un conjunto de botones de desplazamiento por tablas
Una característica común de muchas aplicaciones es una serie de botones de desplazamiento que permiten a los usuarios moverse por una tabla. Suelen incluir botones para mover el puntero de registro al registro siguiente o anterior de la tabla, así como al registro superior o inferior de la tabla.
Diseño de los botones de desplazamiento
Todos los botones tendrán algunas características y funciones comunes, por lo que es conveniente crear una clase de botones de desplazamiento. A continuación, los botones individuales pueden aprovechar fácilmente esta apariencia y funcionalidad comunes. Esta clase primaria es la clase Navbutton
que se definirá posteriormente en esta sección.
Una vez definida la clase primaria, las subclases siguientes definen la funcionalidad y apariencia específicas de cada uno de los cuatro botones de desplazamiento: navTop, navPrior, navNext, navBottom.
Por último se crea una clase de contenedor vcr
, a la que se agregan todos los botones de desplazamiento. El contenedor puede agregarse a un formulario o una barra de herramientas para proporcionar funcionalidad de desplazamiento por tablas.
Definición de la clase NAVBUTTON
Para crear Navbutton
, guarde las seis definiciones de clase siguientes (Navbutton, navTop, navBottom, navPrior, navNext
y vcr
) en un archivo de programa como Navclass.prg.
Definición de la clase genérica botón de comando de desplazamiento
Código | Comentarios |
---|---|
|
Define la clase primaria de los botones de desplazamiento. Asigna dimensiones a la clase. Incluye una propiedad personalizada, |
|
Si se ha establecido TableAlias , este procedimiento de clase primaria selecciona el alias antes de ejecutar el código real de desplazamiento en las subclases. De lo contrario, se supondrá que el usuario desea desplazarse por la tabla del área de trabajo seleccionada actualmente. |
|
Al emplear _SCREEN.ActiveForm.Refresh en lugar de THISFORM.Refresh puede agregar la clase a un formulario o una barra de herramientas y hacer que funcione perfectamente también. |
|
Finaliza la definición de clase. |
Los botones de desplazamiento específicos se basan en la clase Navbutton
. El código siguiente define el botón Superior para el conjunto de botones de desplazamiento. Los tres botones de desplazamiento restantes se definen en la tabla siguiente. Las cuatro definiciones de clase son similares. Por ello, sólo se ofrecen comentarios extensos para la primera definición.
Definición de la clase botón de desplazamiento Superior
Código | Comentarios |
---|---|
|
Define la clase botón de desplazamiento Superior y establece la propiedad Caption. |
|
Crea código de método que se ejecutará cuando se produzca el evento Click para el control. |
|
Llama al código de evento Click de la clase primaria, Navbutton , de modo que se pueda seleccionar el alias adecuado si se ha establecido la propiedad TableAlias.Incluye el código para establecer el puntero de registro en el primer registro de la tabla: GO TOP. Llama al método RefreshForm de la clase primaria. No es necesario utilizar el operador de resolución de alcance (::) en este caso porque no hay ningún método en la subclase que tenga el mismo nombre que el método de la clase primaria. Por otra parte, tanto la clase primaria como la subclase tienen código de método para el evento Click. |
|
Termina el procedimiento Click. |
|
Finaliza la definición de clase. |
Los restantes botones de desplazamiento tienen definiciones de clase similares.
Definición de las demás clases de botones de desplazamiento
Código | Comentarios |
---|---|
|
Define la clase de botón de desplazamiento Siguiente y establece la propiedad Caption. |
|
Incluye el código para establecer el puntero de registro en el siguiente registro de la tabla. Finaliza la definición de clase. |
|
Define la clase de botón de desplazamiento Anterior y establece la propiedad Caption. |
|
Incluye el código para establecer el puntero de registro en el registro anterior de la tabla. Finaliza la definición de clase. |
|
Define la clase de botón de desplazamiento Inferior y establece la propiedad Caption. |
|
Incluye el código para establecer el puntero de registro en el último registro de la tabla. Finaliza la definición de clase. |
La siguiente definición de clase contiene los cuatro botones de desplazamiento para poder agregarlos como una unidad a un formulario. La clase también incluye un método para establecer la propiedad TableAlias de los botones.
Definición de una clase de controles de desplazamiento por tabla
Código | Comentarios |
---|---|
|
Comienza la definición de clase. La propiedad Height se establece en el mismo alto que los botones de comando que contendrá. |
|
Agrega los botones de desplazamiento. |
|
Este método se utiliza para establecer la propiedad TableAlias de los botones. TableAlias se define en la clase primaria Navbutton .También podría utilizar el método SetAll para establecer esta propiedad: IF TYPE ("cTableAlias") = 'C' This.SetAll("TableAlias", "cTableAlias") ENDIF Sin embargo, esto produciría un error si se agregara a la clase un objeto que no tuviera la propiedad TableAlias. |
|
Termina la definición de clase. |
Una vez definida la clase, puede dividirla en subclases o agregarla a un formulario.
Crear una subclase basada en la nueva clase
También puede crear subclases basadas en vcr
que tengan botones adicionales como Buscar, Modificar, Guardar y Salir. Por ejemplo, vcr2
incluye un botón Salir:
Definición de una subclase de control de desplazamiento por tablas
Código | Comentarios |
---|---|
|
Define una clase basada en vcr y le agrega un botón de comando. |
|
Cuando el usuario haga clic en cmdQuit , este código liberará el formulario. |
|
Termina la definición de clase. |
Vcr2
tiene todo lo de vcr
más el nuevo botón de comando y no es necesario volver a escribir ninguna parte del código.
Cambios en VCR reflejados en la subclase
A causa de la herencia, los cambios realizados en la clase primaria se reflejan en todas las subclases que se basan en ella. Por ejemplo, puede informar al usuario de que se ha llegado al final de la tabla si cambia la instrucción IF EOF( )
de navNext.Click
por la siguiente:
IF EOF( )
GO BOTTOM
SET MESSAGE TO "Bottom of the table"
ELSE
SET MESSAGE TO
ENDIF
Puede indicar al usuario que ha llegado al principio de la tabla, cambiando la instrucción IF BOF( )
de navPrior.Click
por la siguiente:
IF BOF()
GO TOP
SET MESSAGE TO "Top of the table"
ELSE
SET MESSAGE TO
ENDIF
Si se realizan estos cambios en las clases navNext
y navPrior
, también se aplicarán automáticamente a los botones apropiados de vcr
y vcr2.
Agregar VCR a una clase de formulario
Una vez definido vcr
como un control, el control puede agregarse a la definición de un contenedor. Por ejemplo, el código siguiente agregado a Navclass.prg define un formulario al que se han agregado botones de desplazamiento:
DEFINE CLASS NavForm AS Form
ADD OBJECT oVCR AS vcr
ENDDEFINE
Ejecutar el formulario que contiene VCR
Una vez definida la subclase de formulario, podrá mostrarla fácilmente con los comandos apropiados.
Para mostrar el formulario
Cargue la definición de clase:
SET PROCEDURE TO navclass ADDITIVE
Cree un objeto basado en la clase
navform
:frmTest = CREATEOBJECT("navform")
Llame al método Show del formulario:
frmTest.Show
Si no llama al método SetTable de oVCR (
el objeto VCR de NavForm)
, cuando el usuario haga clic en los botones de desplazamiento el puntero de registro se moverá por la tabla del área de trabajo seleccionada actualmente. Puede llamar al método SetTable para especificar en qué tabla se va a desplazar.
frmTest.oVCR.SetTable("customer")
Nota Cuando el usuario cierre el formulario,
frmTest
se establecerá en un valor NULL (.NULL.). Para liberar de la memoria la variable de objeto, utilice el comando RELEASE. Las variables de objeto creadas en los archivos de programa se liberan de la memoria cuando se completa el programa.
Vea también
Escribir definiciones de clases mediante programación | Directrices para el código de métodos y eventos | Definir un control Grid | Propiedad Caption | Propiedad Height | Método SetAll | Programación orientada a objetos