Está en la página 1de 7

Creacin de Proyectos en Visual FoxPro Parte 2

En el documento anterior vimos como se crea un proyecto, como se compone y un ejemplo de prg de inicio con varios seteos y una llamada a un formulario men, en este documentos veremos el prg nuevamente pero en lugar de llamar al form, generaremos un men de acceso a los distintos mdulos que iremos agregando de a poco. ****************Inicio.Prg****************
SET CONFIRM ON SET CENTURY TO 19 ROLLOVER 80 SET CENTURY ON SET DATE TO FRENCH SET DECIMALS TO 5 SET DELETED ON SET ECHO OFF SET ENGINEBEHAVIOR 70 SET ESCAPE OFF SET EXACT ON SET HELP OFF SET HEADING OFF SET MEMOWIDTH TO 256 SET PATH TO SET PRINTER TO PRN SET SAFETY OFF SET STATUS OFF SET TALK OFF SET STATUS BAR OFF SET SYSMENU TO SET EXCLUSIVE OFF SET PROCEDURE TO prg/funciones.prg (2) SET DEFAULT TO 'F:\LEO\CURSOFOXPRO' SET PATH TO 'F:\LEO\CURSOFOXPRO' _screen.Visible = .T. _screen.ForeColor = RGB(255,128,128) _screen.Picture = 'F:\LEO\CURSOFOXPRO\IMAGENES\FONDO.JPG' *Un fondo al screen _screen.WindowState = 2 *Que siempre se ejecute maximizado DO GenMenu READ EVENTS (1)

(1) Si nos acordamos en pseudocdigo cuando queramos ejecutar un procedimiento la sentencia se escriba hacer <nombre de procedimiento>, en vfp es parecido pero en ingles DO GenMenu si necesito pasarles parmetros van entre parntesis y separados por comas, Ej.: DO GenMenu(hola, VarCant). Si vemos arriba en la parte de seteos en el (2) vemos la definicin del prg a utilizar para guardar las funciones y procedimientos, que sern accesibles desde todos los mdulos del sistema.

Entonces tenemos dos prgs, uno llamado inicio.prg (el definido como default de arranque) y funciones.prg donde iremos guardando todos los procedimientos y funciones.

************Funciones.Prg************** PROCEDURE genmenu SET SYSMENU TO *Desactiva el men del vfp. DEFINE PAD sysuno OF _MSYSMENU PROMPT '\<Asistencias' KEY ALT+A *Define el primer men comenzando de la izquierda llamado sysuno y titulo *Asistencias. ON PAD sysuno OF _MSYSMENU ACTIVATE POPUP Asistencias *Define que pasa si se clickea en el men y dice que active un popup (como los del *botn derecho del Mouse) llamado asistencias. DEFINE POPUP Asistencias MARGIN RELATIVE FONT "MS Sans Serif, 12" *Crea el popup llamado asistencias diciendo que tome como margen el lugar donde esta *el mouse y con una determinada fuente. DEFINE BAR 1 OF Asistencias PROMPT "\<Registro de Asistencias" *Crea las opciones que tendr el popup asistencias, se llama 1 y titulo Registro *asistencias. ON SELECTION BAR 1 OF Asistencias DO form Forms/Asistencias *Define que pasa si se clickea en la opcin llamada 1, en este caso se ejecuta el form *Asistencias. DEFINE BAR 2 OF Asistencias PROMPT "Alumnos" *La segunda opcin. ON SELECTION BAR 2 OF Asistencias DO form forms/ActAlumnos *Lo que pasa si se elige la opcin 2. DEFINE PAD syssalir OF _MSYSMENU PROMPT '\<Salir' KEY ALT+S *Se define el segundo men llamado syssalir con el titulo Salir. ON SELECTION PAD syssalir OF _Msysmenu Do salir *Ac directamente dice que si se elige el men, llama al procedimiento salir (este se *encontrara en funciones .prg mas abajo). SET SYSMENU AUTOMATIC *Define que la barra de men siempre este accesible desde el programa. ENDPROC En muchas partes vimos que se utilice el \< antes de una letra, esto lo que hace es definir como atajo a la misma, le pone la marca del que vemos en los menes con el _ debajo de la tecla. PROCEDURE Salir *Utilizamos la herramienta messagebox que nos permite emitir un mensaje, definir que *botones queremos que aparezcan y nos dice cual de ellos presionamos. *El 32 es los botones que aparecen y 4 es el icono, estos datos se los suma. *Con el if estamos validando que se haya presionado el botn si = 6. IF MESSAGEBOX("Desea Salir de la aplicacion", 32 + 4, "Pregunta") = 6 *En el inicio.prg escribimos la funciones read events y dijimos que el prg *quedaba frenado ah escuchando los eventos del sistema, con esto lo que le *decimos que no escuche mas ninguno, el prg sigue su ejecucin y al no tener *mas nada el programa se cierra. CLEAR EVENTS ENDIF ENDPROC

Hasta ac lo que pueden es ir armando las carpetas, el proyecto los dos prg copiando y pegando todo el cdigo para ver como funciona.

Antes de comenzar con la creacin de formularios, clases, objetos, etc veamos de una forma rpida que son. Una Clase esta formada por mtodos, propiedades y eventos. Tomando un ejemplo de clase como un auto las propiedades pueden ser el color, ancho, alto, cantidad de ruedas, cantidad de puertas, tipo de motor, color de tapizado y todas las propiedades que nos parezca, entonces por lo que vemos cada clase puede tener su conjunto de propiedades diferentes. Pensemos en un reloj, que propiedades puede tener, color, tamao, tipo de numeracin, digital o analgico, formato, si tiene segundero y muchas mas. Ahora veamos una clase conocida por nosotros como un botn (esos que apretamos para aceptar) que propiedades podemos tener alto, ancho, imagen, la leyenda, nombre, posicin en la pantalla, si lo queremos ver o que este oculto y otras tantas mas. Como vemos las propiedades sirven para configurar la clase. Por otro lado tenemos los eventos que lo podemos definir como las acciones que es capaz de generar la clase, veamos el auto puede arrancar, acelerar, frenar, doblar, etc. pero cuando se ejecuta una accin pasa algo o debera pasar algo, ese algo es el mtodo relacionado, por ejemplo mtodo arrancar hace que vaya nafta a los inyectores y que las bujas hagan chispa. En el botn una accin podra ser click con un mtodo asociado, en el cual indicaremos que debe hacer al presionarlo. Los objetos es la representacin real de la clase, por ejemplo la clase auto y la representacin real es mi auto.

Ahora que ya sabemos que son las clases y los objetos, nuestro prximo paso es crear un objeto basado en la clase form, llamado ActAlumnos y hacer que interactue con la tabla
alumnos, los pasos a seguir son los siguientes: 1) Ir a la solapa Docs, clickear sobre forms/formularios y presionar nuevo, al hacer esto nos muestra dos opciones asistente y nuevo formulario, elegimos la ltima opcin y nos aparece en pantalla un formulario vaco.

2) En la tabla alumnos hay 4 campos, para mostrar los valores, crearlos o modificarlos necesitamos agregar 4 clases textbox (al agregarlas se transforman en objetos porque creamos una instancia), para indicar al usuario que dato vemos en cada uno utilizamos 4 etiquetas o clase label y por ultimo para movernos entre los registros, borrarlos, crearlos vamos a usar 8 botones o clase commandbutton. Para incorporar al formulario los objetos utilizamos la barra de herramientas llamada Controles de Formulario, en la captura siguiente la podemos ver:

Ac estn todas las clases nativas de vfp que podemos utilizar en nuestra aplicacin. Para agregarlas al formulario lo nico que debemos hacer es arrastrarla. 3) Al agregarlos quedan todos desordenados, hay una herramienta importante que ayuda a la hora de hacer el diseo del formulario, esa se llama Barra de Herramienta de Diseo, sirve para acomodar un solo objeto o mas de uno como grupo. Es algo as:

Los primeros nueve se utilizan con ms de un objeto a la vez. Los ltimos 4 son para un solo objeto, pero tambin sirven para ms de uno. Para seleccionar mas de un objeto lo podemos hacer con el mouse o sino presionando shift y clickeando sobre los mismos. 4) La propiedad ms importante a definir es Name, en ella indicaremos con que nombre nos referimos al objeto, vfp pone por defecto el nombre de la clase ms el nmero de objeto agregado. Para ir a la ventana propiedades se presiona el botn derecho del mouse y se clickea propiedades. Que se ven de la siguiente forma:

En la lista aparecen los objetos para poder ir a las propiedades, eventos y mtodos de cada uno, las solapas las dividen entre distintas categoras relacionadas con su funcin y una que agrupa a todas.

5) Al agregar todos los objetos, acomodarlos e indicarle el nombre debe quedar algo como esto:

Con la propiedad Caption podemos indicar las leyendas que queremos que se vean ( la del form, commandbutton y labels).

6) Ahora que ya tenemos todo nos falta definir los formatos de datos que tendrn cada textbox, como interactan con la tabla y que debe hacer cada botn. Antes de comenzar veamos en que orden se cargan los objetos en memoria y cuales eventos se accionan. Como vimos en el caso del formulario, a el le incorporamos una serie de objetos generando una relacin de padre/hijo, dado que hay objetos que tienen la caracterstica de poder contener uno o mas, a ellos se les dice padre y a los contenidos se les dice hijos. Entonces para poder tener los hijos necesitamos al padre, por lo tanto primero se carga el form y despus los dems objetos. Por otro lado los objetos tienen un evento init y el form adems tiene un load, el segundo se acciona apenas se carga el form antes de que se hayan cargado los otros objetos, luego el init de los objetos y por ultimo el init del form. Simplificando a) Load del Form, b) Init de los objetos y c) init del form. Entonces si desde el load del form queremos cambiar una propiedad de un objeto no vamos a poder hacerlo porque aun no esta creado, pero si desde el init. Como necesitamos que los objetos tengan acceso a los datos debemos abrir la tabla antes de que sean creados, para eso utilizamos la accion load del formulario agregando la lnea USE bd/alumnos ORDER id. En cada init de los objetos vamos a poner que valor por defecto debe tomar, ejemplo para fecha y texto: This.Value = {}, This.Value = "". Para vincular cada textbox con un campo de la tabla debemos utilizar la propiedad controlsource (origen de datos) completando con el nombre de la tabla y campo, ejemplo: alumnos.apellido, alumnos.nombre, etc. De esta forma los textbox arrojaran la informacin cargada en cada campo de la tabla. Para cerrar el formulario agregamos en el evento click del botn salir ThisForm.Release, eso quiere decir que me descargue de memoria el formulario y todos sus objetos, pero el men sigue estando activo. Veamos que hace cada botn: Anterior
IF NOT BOF() &&BOF me dice si estoy en el comienzo del archive (begin of file) ** si es as me dara error si trato de seguir yendo para atrs. SKIP -1 &&Me mueve un registro hacia atrs, es lo mismo que Go Recno()1. Thisform.Refresh &&Refresco el formulario para que los objetos tomen los ** nuevos valores

ENDIF

Primero
GO TOP &&Voy al primer registro Thisform.Refresh &&Siempre refresco los objetos.

Ultimo
GO BOTTOM Thisform.Refresh &&Voy al ultimo registro &&Refresco

Siguiente
IF NOT EOF() &&EOF funcin que valida si es el final del archivo **End of File. &&Si no le pongo valor toma por defecto +1, go recno() + 1

SKIP ENDIF *Para darse cuenta de porque esta puesto lo que sigue prueben sin ponerlo. IF EOF() GO BOTTOM ENDIF ThisForm.Refresh

Nuevo
SELECT Alumnos &&Selecciono la tabla CALCULATE MAX(Alumnos.id) TO UltId &&Calculo el id mas grande UltId = UltId + 1 &&Le sumo uno INSERT INTO Alumnos (Id) VALUES (UltId) &&Inserto el valor del id GO BOTTOM &&Voy al ultimo registro, el recin creado ThisForm.Refresh && Refresco los datos ThisForm.Nombre.SetFocus &&me posiciono en el nombre para comenzar la carga.

Borrar
SELECT Alumnos &&selecciono la tabla *El messagebox devuelve valores que son referidos a la tecla presionada, en este caso la *tecla yes = 6. IF MESSAGEBOX("Desea borrar este dato", 36, "Atencin") = 6 &valido si dijo si. DELETE &&borro el dato en el que estoy posicionado GO TOP &&como el dato ya no existe voy al primero Thisform.Refresh &&refresco ENDIF

Hojear
SELECT alumnos BROWSE NORMAL &&Selecciono la tabla &&Hago un brow

Salir
SELECT Alumnos USE ThisForm.Release &&Selecciono la tabla &&La cierro &&Descargo de memoria todos los objetos.

También podría gustarte