Universidad de Colima Maestría en Ciencias Computacionales TUTORIAL DE VISUAL FOXPRO Tesis que para obtener el grado de Maestra en Ciencias Computacionales Presenta L. 1. Katiuzka Flores Guerrero Asesor: M.C. Ricardo Fuentes Covarrubias Coquimatlan, Col. 29 de Enero del 2000 Facultad de Ingeniería Mec6nicu ~7 Eléctrica EXPEDIENTE 266 NUM. 93-5 13 1 C. KATIUZKA FLORES GUERRERO LOPEZ COTILLA # 130 C.P. 49000 CIUDAD GUZMAN, JAL. Informo a usted que ha sido aprobado como tema de titulación para obtener el grado de MAESTRO EN CIENCIAS COMPUTACIONALES. El solicitado por usted bajo él título TUTORIAL DE VISUAL FOXPRO “ VERSION 6.0 “. Desarrollado bajo los siguientes puntos: 1 II III IV V VI VII VIII ........- ADMINISTRADOR DE PROYECTOS BASES DE DATOS PROGRAMACION ORIENTADA A OBJETOS CLASES BASE DE VISUAL FOXPRO PROGRAMACION ORIENTADA A FORMULARIOS INFORMES INTERNET & VISUAL FOXPRO CONCLUSIONES BIBLIOGRAFIA Al mismo tiempo informo a usted que ha sido designado como asesor de titulación al C. M.C. RICARDO FUENTES COVARRUBIAS. deber& En cada uno de los ejemplares de titulación que presente para examen, aparecer en primer término copia del c.c.p. EXPEDIENTE ALUMNA AGFC/merv* Km 9 Carretera Colima-Coqoimatlán, A.P. 299 / Ccdima. México / TelBfnnn Y F~Y ni 1V.7\ ? ni 7n H. CONSEJO TECNICO DEL POSGRADO DE LA FACULTAD DE INGENIERIA MECANICA Y ELECTRICA PRESENTE. Por medio de este conducto informo que la C. KATIUZKA FLORES GUERRERO terminó su período de revisión de tesis: TUTORIAL DE VISUAL FOXPRO “ VERSION 6.0 “ Cuyo contenido es el siguiente : 1 II III IV V VI VII VIII ........- ADMINISTRADOR DE PROYECTOS BASES DE DATOS PROGRAMACION ORIENTADA A OBJETOS CLASES BASE DE VISUAL FOXPRO PROGRAMACION ORIENTADA A FORMULARIOS INFORMES INTERNET & VISUAL FOXPRO CONCLUSIONES BIBLIOGRAFIA El cual cumple con los requisitos necesarios para su aprobación, por lo cual lo autorizo para su impresión. ATENTAME>TE Coquimatlán, Col., 12 $,e’Feb‘rero del 2000 HC M.C.ARfOlOi$+BI A c.c.p. EXPEDIENTE RFC/merv* S Exp.No.: 0038 Fecha: 12-02-00 Acta No.: 12 C. KATIUZKA FLORES GUERRERO Domicilio: LOPEZ COTILLA # 130 C.P.: 49000 Localidad: CIUDAD GUZMAN, JAL. En cumplimiento al artículo: 13 y 14 del reglamento de titulación, al artículo 40, Inciso A del reglamento de estudios de Posgrado vigente y al artículo: 46 de las normas complementarias al reglamento de Posgrado, correspondientes al Posgrado de la Facultad de Ingeniería Mecánica y Eléctrica. Informamos a usted que ha sido autorizado por este Consejo Técnico del Posgrado su tema de Tesis para obtener el grado de Maestro en Ciencias Computacionales titulado: TUTORIAL DE VISUAL FOXPRO “ VERSION 6.0 “. para ser desarrollado bajo los siguientes puntos: 1 II III IV V VI VII VIII la C. ........- ADMINISTRADOR DE PROYECTOS BASES DE DATOS PROGRAMACION ORIENTADA A OBJETOS CLASES BASE DE VISUAL FOXPRO PROGRAMACION ORIENTADA A FORMULARIOS INFORMES INTERNET & VISUAL FOXPRO CONCLUSIONES BIBLIOGRAFIA Así mismo hacemos de su conocimiento que de acuerdo con Ia línea de investigación en cual proyecto ha sido autorizado como asesor de tesis al M.C. R:CA&:%NT;: COVARRUBIAS A partir de la fecha de aprobación tendrá como plazo un ano para presentar su examen de grado, en caso contrario tendrá usted derecho a una prórroga única de seis meses so pena de perder el registro de su proyecto. Una vez concluidos 10s trámites de revision de su documento de tesis e integrado su expediente de titulación deberá recoger el oficio que acompahará a el visto bueno de su asesor de tesis, 10s cuales encabezarán cada uno de los ejemplares de su tesis. Atentamente de la Facultad de la Universidad de I NTES M.C. VICTOR HUGO CASTILLO TOPETE COVARRUBIAS M.C. RODOLFO GALLARDO ROSALES Resumen El presente trabajo abarca los aspectos más importantes de Visual FoxPro. Con el Administrador de proyectos desarrollamos rápidamente nuestra aplicación, por medio de un desarrollo libre o por medio de un asistente a Bases de Datos, Informes, Formularios, Etiquetas, Clases, Menús, etc. Por otra parte nos ofrece asistentes para la elaboración de discos de distribución de las aplicaciones. En el diseñador de’ Bases de Datos podemos agregar triggers a nivel registro, agregar relaciones permanentes, asociar campos a mascaras y a clases. Con el diseñador de clases, las clases base, la clase custom y el hecho de que Visual FoxPro es un lenguaje orientado a objetos, nos da la facilidad de hacer un código reutilizable. VFP posee asistentes que nos guiarán en el desarrollo de formularios, informes, etiquetas, etc. Una importante novedad es que incorpora la posibilidad de elaboración de aplicaciones para el WEB. Summary This work show us the most important topics of Visual FoxPro. With the Project Manager develops quickly our application , we can create with wizards or with out them Reports, Forms, Labe@ Classes, Menus, etc. Also we can use the wizards to do diskettes of installation. The designer of Data Base we can add triggers and relationship and associate fields with masks and classes. With de designer of classes, classes base, custom and the fact of Visual FoxPro is a language OOP we can do code recyclable. One notice important, we can create pages Web with our applications. INDICE I Administrador de Proyectos.. ........................................................................... 1 1.1. Componentes del Administrador de Proyectos.. ..................................... .3 1.2 Opciones del Proyecto.. .......................................................................... .3 1.2.1 Página de proyectos.. ...................................................................... .3 1.2.2 Pagina Ver.. ..................................................................................... .5 1.3 Generación de la aplicación final ............................................................. .7 1.4 Versión.. ................................................................................................... .9 1.5 Información del proyecto ........................................................................... 10 19 ll Bases de Datos .............................................................................................. . 2.1 Tablas ....................................................................................................... 21 2.2 Indices ....................................................................................................... 24 2.3 Validaciones a nivel registro ..................................................................... 26 2.4 Relaciones entre tablas ............................................................................ 27 2.4.1 Relaciones permanentes .................................................................. 27 2.4.2 Relaciones temporales ..................................................................... 28 2.5 Tablas Libres ............................................................................................ III Programación Orientada a Objetos .............................................................. 31 33 3.1 Elementos de la programación orientada a objetos.. ............................... .33 3.2 Generación De Clase Visuales ................................................................ .35 3.2.1 Diseñador de clases .......................................................................... 3.2.2 Propiedades ..................................................................................... a7 37 3.2.3 Métodos ........................................................................................... 39 3.2.4 Archivos .H ...................................................................................... .39 3.2.5 Documentación de la clase .............................................................. 40 3.2.6 Modificación de una clase ................................................................ 41 3.2.7 Instanciando objetos ......................................................................... 41 3.2.8 Operadores de referencia ................................................................. 42 3.2.9 Ejemplo de la creación de un clase con propiedades y métodos.. . ..4 2 42 3.2.9.1 Definir una clase .................................................................... 3.2.9.2 Crear un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.9.3 Ámbito de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.2.9.4 Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.2.9.5 Ocultación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.2.9.6 Poliformismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. .7. . . 3.2.9.7 Objetos como propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 8 3.2.9.8 Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.2.9.9 Sobreescribir métodos o propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.2.9.10 El operador :: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. 1. . . IV Clases Base De Visual Foxpro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 4.1 Propiedades comunes a varias clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2 Eventos comunes aavarias clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. .5. 4.2.1 Creación y destrucción de objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. .5 4.2.2 Carga y descarga de formularios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5 4.2.3 Control de teclado.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ., . . . . . . . . . . .6. .5 4.2.4 Control de ratón. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.2.5 Control del foco.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. .6 4.2.6 Modificaciones. . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.2.7Gestión de errores. . . . . . . . . . . . . . . . . . ., . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,. . . . . . . . . . . . . . . 6. 7.,. . . . . 4.3 Métodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 7 4.3.1 Manejo de objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 4.3.2 Métodos gráficos . . , . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.3.3 Manejo d e listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 :.. 4.3.4 Métodos de entorno de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6. 9 4.3.5 Métodos de cuadrículas.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.3.6 Mover y posicionar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.3.7 Objetos OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,. . . . . . . . . . . . . . . . . . . . . . . . ,. . . . 6 9 4.4 Clases Base de Visual FoxPro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 9 4.4.1 Conjunto de formularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 0 4.4.2 Formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.4.3 Contenedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7. 1 4.4.4 Marcos de páginas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.4.5 Grupo de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.4.6 Grupo de opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4.7 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4.8 Cuadro de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.4.9 Cuadro de edición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4.10 Botones de comando ,.......,.......,............,............................................. 81 4.4.11 Grupos de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.4.12 Casilla de verificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.4.13 Cuadro de lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.4.14 Cuadro combinado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.4.15 Grupo de opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.4.16 Control numérico . . . . . ...*..................................*...................................... 98 4.4.17 Cuadrículas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.4.18 Imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.4.19 Cronómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107 4.4.20 Marcos de página . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.4.21 Control contenedor OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.4.22 Control OLE independiente... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4.4.23 Líneas y formas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 V Programación orientada a formularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.1 Apariencia del diseñador de formularios... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...:. . . . .112 5.2 Opciones del formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.3 La ventana propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 5.4 Tipos de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.5 Controles de la barra de títulos ,............,................................,.................. 118 5.6 Almacenamiento en buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ll 9 5.7 Sesión de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Il9 5.8 Apariencia del formulario . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120 5.9 Otras propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10 Eventos.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120 .12 1 5.11 Entorno de datos.. .................................................................................. 123 5.11 .l Propiedades del entorno de datos.. ............................................... 124 5.1 1.2 Métodos ......................................................................................... 124 5.11.3 Cursores ........................................................................................ 124 5.12 Formulario rápido ................................................................................... 126 VI Informes ....................................................................................................... 129 6.1 Diseñador de informes.. ........................................................................... 129 6.2 Selección de datos ................................................................................... 131 6.3 Sección detalle ......................................................................................... 132 6.3.1 Propiedades de las sección detalle ................................................. 133 6.3.2 Controles insertables ....................................................................... 134 6.3.2.1 Etiquetas ................................................................................. 134 6.3.2.2 Campos.. ................................................................................. 135 6.3.2.3 Imágenes y controles OLE dependientes.. .............................. 140 6.4 Menú Formato .......................................................................................... 141 6.5 Secciones de encabezado y pie de página .............................................. 142 6.6 Secciones de título y resumen ................................................................. 142 6.7 Variables en los informes.. ....................................................................... 143 6.8 Impresión condicional .............................................................................. 144 6.9 Creación de grupos.. ................................................................................ 145 6.10 Columnas en informes ........................................................................... 147 6.11 Impresión de un informe ........................................................................ 147 6.12 Vista preliminar ...................................................................................... 147 VII Internet Wisual FoxPro.. ............................................................................ 148 7.1 Acceso a paginas Internet desde VisualFoxPro.. ..................................... 148 7.1.1 Propiedades.. ................................................................................... 148 7.1.2 Métodos.. ......................................................................................... 149 7.1.3 Eventos.. .......................................................................................... 149 7.2 Aplicaciones para Internet.. ...................................................................... 150 Conclusiones .................................................................................................... 159 Bibliografía.. ...................................................................................................... 161 I Administrador de Proyectos Dentro del diseño de aplicaciones se tienen que contemplar varios aspectos: l Creación de Bases de Datos (Tablas, Relaciones,Vistas), l Creación de Formas, l Creación de Reportes, Consultas,etc En algunas aplicaciones visuales no existe una herramienta que nos guíe en el diseño de nuestra aplicación, dentro de Visual Foxpro existe el Administrador de Proyectos (fig 1 .l).. 1 .l Componentes del administrador de proyectos Data a. Databases: Conjunto de tablas relacionadas por campos en común. Las bases de datos tienen extensión .DBC 1 b. Free Tables: Son aquellas que no pertenecen a ninguna base de datos y tienen extensión . DBF. Este tipo de tablas tienen una seria desventaja en comparación con las tablas dependientes . Por mencionar algunas, las tablas dependientes pueden tener: Nombres largos, Propiedades de campo, Propiedades de registro, Triggers, Indices principales y candidatos, Relaciones permanentes, Integridad referencia1 y Procedimientos almacenados. c. Queries: Estas son consultas sobre una o varias tablas, con el diseiiador de consulta es fácil recuperar los registros que cumplan con determinado criterio. Documents a. Forms: La formas son repositorios de objetos que sirven para recuperar información almacenada en las tablas o para capturar información que va a ser almacenada o procesada. b. Reports: Son formas especiales para desplegar en impresora o en pantalla informacibn almacenada en las tablas c. Labels: Diseilo de informes de etiquetas. Class Libraries Mediante el administrador de proyectos es fácil manipular las clases creadas por nosotros. Code Y Other Estos componentes son utilizados para crear código y menús para los programas. 1.2 Opciones del Proyecto Existen dos páginas en Options (opciones) del menú Tools (tools) relacionadas con la edición de proyectos. Son las páginas View y Projects (proyectos). 1.2.1 Página Projects (Proyectos Fig.l.2) Cuando se desarrolla un aplicación es muy común que esta sea hecha por un equipo de progrqmadores, la aplicación es dividida y cada uno de los programadores se encarga de un modulo. La forma de trabajar de Foxpro no hace esto posible a menos que cada uno de los programadores tuviera sus propias bibliotecas de clases. Sin embargo Foxpro nos provee de una herramienta que nos va a permitir desarrollar aplicaciones en grupo y mantener una única versión de cada archivo para todos los usuarios. Proiect double-click action (al hacer doble clic en el provecto) Indica la acción que se va a realizar al hacer doble clic en cualquier archivo del proyecto. l Run selected file (ejecutar el archivo seleccionado): Ejecuta el ‘archivo seleccionado en caso de ser un formulario, un informe, una etiqueta, un programa 0 un menú. l Modify selected file (Modificar el archivo seleccionado): Modifica el archivo seleccionado). Prompt for Wizards (pedir asistentes) Cuando se crea un nuevo archivo da opción a utilizar un asistente para generar el mismo. Source Control Options (Opciones de control de códino de origen) Hay aplicaciones como Visual Sourceface, que nos permiten llevar un control sobre las modificaciones que un grupo le hace a un proyecto. a. Active source control provider (proveedor de código activo). Indica el nombre de la aplicación que se va a utilizar como control (aquí se seleccionaría Microsoft Visual Sourface). b. Automatically add new projects to source control (Agregar automáticamente nuevos proyectos). ’ Especifica si los nuevos proyectos se van afiadir por defecto en la aplicación de control de código de origen. c. Check out files upon add (Desproteger los archivos al modificarlos) Los archivos sometidos al control de código de origen se protegen para evitar que dos usuarios puedan realizar modificaciones al mismo tiempo. Esta opcíbn indica que si un archivo esta siendo modificado por un usuario, cuando un segundo usuario intente modificarlo, verá un mensaje de error indicándole que no puede realizar modificaciones. d. Add files to source control upon add (Agregar archivos al control de código de origen al agregarlos al proyecto) Al habilitar esta opción cuando se ailada un nuevo archivo al proyecto, este quedara bajo el control de código de origen. e. Remove files from source control upon removal from project (Quitar archivos del control de código de origen al quitarlos del proyecto) Al seleccionar esta opción cuando se elimine un archivo del proyecto se quita automáticamente del control de código de origen. Si esta opción no se encuentra activa, el archivo permanecerá activo en el control de código, aun sin estar en el proyecto. f. Display dialog box for shortcut menu commands (Mostrar el cuadro de dialogo para comandos del meú contextual) Admite varios archivos cuando se selecciona un comando desde el menú de contexto. g. Text generation (Generación de texto) Indica el nombre del programa cuya misión es la de generar un archivo de texto representativo de los formularios, etiquetas, menús, informes, bibliotecas de clases cada vez que se protege el proyecto. Fig.l.2 Página Proyectos 1.2.2 Página View (Ver Fig. 1.3) Esta permite especificar los elementos que se van a visualizar. a. Status Bar (Barra de estado) El la ultima barra que posee al ventada de Foxpro, en ella se visualiza diversa información acerca de los objetos, el alias de la tabla activa, el registro actuan de la tabla, etc. Modifica el estado de SET STATUS. b. Clock (Reloj) Muestra el reloj en la barra de estado. Corresponde al comando SET CLOCK. c. Command Result (Resultado del comando) Muestra el resultado de la ejecución de un comando en la ventana principal. d. System Messages (Mensajes del sistema) Habilita los mensajes del sistema en la barra de estado. Corresponde al comando SET NOTIFY. e . Recently used project list (Lista de proyectos usados recientemente) Añade al menú archivo una lista de proyectos utilizados recientemente. f. Open last project on startup(Abrir el último proyecto al iniciar) Abre el último proyecto cada vez que arranca Visual Foxpro. Fig.l.3 Página Ver 1.3 Generación de la aplicación final (Fig.l.4) El objetivo final de un proyecto es la generación de una aplicación. El producto final puede ser de tres tipos: APP Este tipo de archivo solo se puede correr desde Visual Foxpro, es recomendable generar este tipo de archivos cuando el proyecto esta aun en pruebas. Exe Este tipo de archivo contiene todos los formularios, informes, programas, etiquetas y menús contenidos dentro del proyecto. Es recomendable generar ejecutables cuando la aplicación esta lista para ser distribuida. DII Ole Cuando se crea un archivo de este tipo es posible que sea usado por cualquier otra aplicación. Fig.l.4 Opciones de Generación Opciones de Generación (Build options) La generación y la compilacibn de los archivos relativos al proyecto se hace en forma incremental, es decir, que no vuelve a compilar aquellos archivos que no han sido modificados desde su ultima generación. a. Rebuild Project (Volver a general el proyecto) El Visual Foxpro cuando se genera una aplicación ejecutable le anexa un número de versión. Esta opción permite volver a regenerar una aplicación ejecutable sin necesidad de generar una nueva versión. b. Build Application (Generar una aplicación) Esta opción genera un archivo App, el cual se puede ejecutar dentro de Visual Foxpro. c. Build Executable (Generar ejecutable) Esta opción genera un archivo Exe, ejecutable desde el sistema operativo, mediante el asistente se puede generar los discos necesarios para instalar aplicación en otras PC. d. Build OLE DLL ( Generar DLL OLE) Esta opción genera una biblioteca de enlace dinámico (DLL) que se puede utilizar desde cualquier otra aplicación con soporte OLE. Las siguientes opciones afectan a la generación de la aplicación: e . Recompile all files (Volver a compilar todos los archivos) Al prender esta casilla se compilan todos los archivos de proyecto independientemente si han sido modificados desde la ultima generación del proyecto. f. Display errors (Mostrar errores) Al generar un proyecto los errores que se produces se almacenan en un archivo con el mismo nombre del proyecto y extensión Err, al activar esta casilla este archivo es presentado en pantalla. g. Run after build (Ejecutar después de generar) Esta opción hace que se corra la aplicación inmediatamente después de generarla. 1.4 Versión (Fíg.l.5) Cuando se genera una aplicación ejecutable, se anexa la información como los derechos de autor y numero de versión. Fig. 1.5 Control de Versiones a. Version Number (Número de versión) El número de versión se utiliza para llevar un control sobre las compilaciones y así poder comparar el número de versión con el de otras instalaciones. Maior (Principal): Aquí indicamos el número de versibn principal. Admite cuatro números. Minor (Secundaria): Número de versión secundaria. Admite cuatro números. Revision : Admite cuatro números y corresponde al número de revisión o compilación efectuados hasta el momento. Este número de auto incrementa cada vez que se compila si se activa la casilla Auto Increment (auto incremento) a. Versión Information (Información de la versión) Comments: Comentarios acerca del programa. Company Name: Nombre de la organización a la que pertenecen los derechos de autor. File description: Descripción de la aplicación. Legal Copyright: Datos de los derechos de la copia de aplicación. Legal Trademarks: Nombre de las marcas registradas propietarias de la aplicación. Product Name: Nombre del producto o marca. Para complementar la información acerca del proyecto Visual FoxPro nos ofrece la opción Project Info. 1.5 Project Info (Información del proyecto) Este cuadro de diálogo se divide en tres paginas, la primera de ellas es para documentar al proyecto con información adicional, la segunda para incluir o excluir archivos del proyecto y la tercera para determinar el contenido de la información relativa a aplicaciones OLE. a. Project (proyecto fig.l.6) Esta página complementa la información del autor, al directorio del proyecto, o si ha de guardar información para depuración. Campo Descripción Datos del autor Este contiene los campos de compaMa, ciudad, estado, país, Código postal. Local Ultima Directorio donde reside el proyecto. generación Archivos Informar Fecha y hora de la última generación Número de archivos incluidos en el proyecto de depuración Indica si ha de guardar información de depuración en la aplicación con el fin de visualizar el código fuente cuando se active la ventana Codificado de depuración. Crear una aplicación codificada en la que no se pueda visualizar ningún texto reconocible Adjuntar icono Especificar el icono que se va asociar a la aplicación Fig. 1.6 Informacibn del proyecto. b. Files (archivos fig. 1.7) Campo Descripción Tw Muestra un icono que identifica al tipo de archivo. Name Nombre físico del archivo Last Modified Fecha de la última modificación del archivo. Included Aquí se pueden incluir o excluir los archivos del proyecto. La aplicación ejecutable contiene todos los ficheros marcados como incluidos en el proyecto. De esta forma , se incluyen imágenes, programas, formularios, etc. Sin embargo, no hay que incluir archivos que sean modificables en tiempo de ejecución como son las tablas y archivos de inicialización (.iríi), pero tablas que son bases y no se han de modificar si las podemos incluir. Se incluye un archivo al activar esta casilla de verificación. Code Page Identifica la página de códigos con la que fue creado el archivo en cuestión. Para que la información de esta columna este actualizada, será necesario presionar el botón Update Native Code Pages. c. servers (Servidores OLE fig. 1.8) Si el objetivo es crear una aplicación servidora OLE, es imprescindible consultar el contenido de esta página. Fig. 1.8 Página Servidores OLE Campo Descripción Class Library Nombre de la biblioteca donde se ha definido la clase. Class Name Nombre de la clase. Instancing Indica si se va a permitir crear varias instancias de la clase o, si cuando se haga referencias a la clase va a ser la misma instancia siempre. Despription Comentario asociado a la clase. Help File Nombre del archivo HLP de ayuda. Help context ID Número del tópico de ayuda . . Una vez generada la aplicación, hay que generar el/los disco(s) de distribución siguiendo el Setup Wizard (Asistente para instalar), el cual encontramos en el menú Tools (herramientas): 1. Located Files (Encontrar archivos fig. 1.9). Copiar el archivo ejecutable y todos los archivos (bases de datos, tablas relacionadas, así como los archivos marcados como excluidos) que el proyecto necesite. Recordar que el archivo ejecutable contiene los formularios, informes o mapas de bits marcados como incluidos en la aplicación. Fig. 1.9 Paso localizar archivos 2. Specify Components (especificar componentes fig. 1.10). Fig. 1 .lO Especificar componentes Componete Descripción Visual Foxpro runtime Este componente es obligatorio Microsoft Graph 5.0 runtime Se debe instalar si la aplicación hace uso de este ODBC Drivers componente. Se deben instalar los controladores ODBC si se va a accesar fuentes de datos externas OLE Servers En caso de que la aplicación contenga servidores OLE, estos de deben agregar a la lista. 14 ODBC Drivers (fin. 1.11) Fig. 1.11 ODBC Drivers OLE Servers (fig 1 .12) ..- , . - Fig.l.12 OLE SERVERS 3. Create Disk Image Directory (Crear directorio imagen de disco fig. 1.13) En esta sección elegimos el soporte en el cual queremos distribuir nuestra aplicación, se pueden usar discos de 3 X y 5 ‘% pulgadas, si se quiere ‘usar el CD-ROM como soporte; entonces lo adecuado es seleccionar Red Setup. Fig. 1 .13 Crear directorio imagen 4. Specify Setup Options (Especificar opciones de instalación fig. 1.14) Durante la instalación se puede pedir cierta información (nombre de la empresa propietaria de los derechos), así como mostrar el nombre de la instalación que se esta instalando. En ciertas ocasiones puede ser necesario configurar algunas opciones de la aplicación para que esta funcione. Esto se soluciona mostrando al usuario un archivo de tipo leame.txt. El último cuadro de texto, llama un ejecutable inmediatamente después de finalizar la aplicación. Fig: 1.14 Especificar opciones de Instalación 5. Specify Default Destination (Especificar destino predeterminado fig. 1.15) Aquí se indica el directorio default donde se va a instalar la aplicación, así como si se le va a permitir al usuario modificar el grupo y el directorio de trabajo. Fig. 1.15 Especificar destino prederminado 6. Change File Settings (Cambiar configuraciones de archivos Fig.1.16) 16 Antes de finalizar q efinitivamente la generación de los directorios de instalación, vemos una lista de todos los archivos que se van a comprimir y distribuir. Fig.. 1.16 Cambiar configuraciones de del ‘echo Componente Descripción File Nombre del archivo TargetDir Ubicación final del archivo. Admite 3 directorios l Appdir: directorio de la aplicación. l Windir: l Directorio de Windows WinsysDir: Directorio System de Windows. PM Item Indica si el archivo creará un acceso directo . Active X Los controles Active X siempre se instalan en el directorio Winsys Dir. 7. Finish (Finalizar fig. 1.17) Fig. 1.17 Finalizar En el paso siete se por finalizado el asistente y a continuación presentará un informe de la instalación. II CREACION DE LA BASE DE DATOS 1. Ubiquese en el carpeta Data (datos fig. 2.1) y luego en Databases y presione el botón New Fig. 2.1 Pagina Datos La ventana del Database Designer (fig 2.2) aparecerá : ‘- Fig. 2.2 Diseñador de Bases de Datos Puede ocupar la barra de herramientas Database Designer para el conitrol de la Base de Datos. Descripción de los botones de la barra de herramientas: I , Crear una nueva tabla. Agregar una tabla existente Eliminar una tabla seleccionada Modificar una tabla seleccionada Creación de Vistas remotas Creación de Vistas locales Editar Procedimientos almacenados en la Base de Datos Creación de Conexiones con vistas remotas Examinar el contenido la tabla (BROWSE) Crear una nueva tabla: 2.1 TABLAS Tablas Dependientes El Visual Foxpro maneja dos tipos de tablas, las pertenecientes a una base de datos y las tablas libres, estas ultimas son independientes a cualquier base de datos. La ventajas de manejar las primeras son las siguientes: l Manejo de nombres largos tanto para las tablas como para los campos. l Manejo de títulos y clases asociadas a los campos. l Valores de Default, Mascaras de entradas y salida de datos. l Reglas a nivel regjstro. l Triggers. 1. Click en el boton de Nueva tabla (Fig. 2.3), aparecerá la ventana New Table Fig. 2.3 Nueva tabla Se selecciona New Table, luego aparece la ventana de guardar el archivo. La ventana de Table designer (diseñador de tablas fig. 2.4) aparecerá en pantalla: Esta es la parte mas importante de la tabla, es aquí donde se define la estructura de datos que contendrá dicha tabla. El primer paso es definir los campos, tipos, tamaño, Formato y Reglas de q lapidación en el carpeta de Fields. Fig. 2.4 Pagina Campos a. Definición de camDos: Igual que en las versiones anteriores, la definición de campos es igual. Se introduce el nombre del campo (name) el tipo de datos que soportará (Type) y el tamaño. b. Definición del Display Format : Es el formato de salida del campo, ejemplo si fuera numérico 9,999.99 si fuera carácter !!!!!!!!!!!!, para que solo acepte mayúsculas Input mask : Igual que el Format, lo único que es para la entrada de datos. o Caption : Descripción mas precisa del campo, es de utilidad al diseñar los Formularios, puesto que es un valor que aparecerá asociado al campo. c. Definición de reqlas de validación a nivel de campo La validación son triggers o eventos que se ejecutan a nivel de campo. Ejemplo: una validación de un campo que solo acepte números positivos. (id > 0) Rule : Es la regla de validación, ejemplo: id > 0, si queremos que acepte valores positivos. Message: Es el mensaje personalizado que queremos que aparezca en pantalla a la hora de violarse Ia- regla de validación del campo. Ejemplo : ‘Solo se aceptan números positivos’ (nota: el texto debe escribirse entre comillas). Default Value : Valor por defecto del campo. (nota: hay que respetar el tipo de dato del Campo) d. Mao Field Tvpe to classes (Asignar tipo de campo a clases) Cuando creamos un formulario, asociamos un objeto a un campo. Dentro de esta sección se puede asignar una clase de base o una clase personalizada. Display Library (Mostrar biblioteca): Nos permite seleccionar una clase personalizada de alguna librería, para asociarla al campo actual. Display Classes (Mostrar clases): Muestra las clases de base del Visual Foxpro para asociar alguna con el campo actual. 2.2 INDICES (fig. 2.5) Luego de hacer la definición de los campos, pasamos a la definición de Indices de la tabla, que será muy importante a la hora de crear \as re\ac\ones entre \as tablas. Foxpro agrupa los índices de una tabla creando un solo archivo (.CDX) por todos los indices que se quieran crear. Este archivo de indices se abre automáticamente con la tabla, además tiene el mismo nombre de esta. A este tipo de índices se le llama estructurales. El termino “Estructural” se refiere al hecho de que Visual Foxpro trata al archivo de índices como una parte intrínseca de la tabla y la abre automáticamente cuando usas la tabla, asimismo su mantenimiento es automático cuando se agrega, se borra o se modifica registros. Nombre del o los campos que componen el índice Fig. 2.5 Página lndices a. Nombre de\ lndice (name) Introducir el Nombre del índíce. Un índice es conocido también como TAG. b. TYP~ ( tipo de Indice) 24 Primary : Llave primaria. Este tipo de índices no permiten valores duplicados en el campo o en la expresión por la cual se esta indizando. Solo se puede crear un índice de este tipo por tabla y son utilizados para establecer reglas de integridad Candidate referencial. : Llave candidata. Este es un índice que no permite valores duplicados en el campo o en la expresión por la cual se esta indizando. El termino de candidato se aplica porque es índice candidato a ser llave primaria. Este tipo de índices no tienen restricción en cuanto al numero de estos por tabla, y también son utilizados para establecer reglas de integridad referencial. Unique : Llave finka. Un índice Unico solo almacena la primera ocurrencia del valor en el archivo de índices. El nombre de “Unico” se refiere a que el archivo de índices solo contiene valores únicos. Regular : Llave foránea o normal. Este tipo de índices son simples no son únicos, candidatos o primarios y son utilizados para ordenamiento y búsqueda de registros, no fuerza a datos únicos. Son utilizados para estableces relaciones de uno a muchos. c. Nombre de la Expresión Nombre de los campos que conforman la llave primaria: Ejemplo : id, o si son varios campos : id + linea Nota: si los campos no son del mismo hay que forzarlos al tipo de dato deseado, ejemplo: si id es carácter y linea, entoces el nombre de la expresión sería: Id + STR(linea) STR() convierte de número a carácter y VAL0 convierte de carácter a númerico. 25 2.3 VALIDACIONES A NIVEL REGISTRO (fig. 2.6) Después de detallar los indices, se define los eventos de La validación a nivel de registro y los eventos que se ejecuten a la hora de Insertar un registro, de actualizar o borrar. Fig. 2.6 Pagina Tabla a. Record Validation (validación de registros) Rule (regla): Es una condición que se comprueba cuando se agrega o modifica un registro. Message (mensaje): Mensaje que aparecerá cuando no se cumpla con la condición de la regla de validación. b. Triqclers (desencadenantes) Insert, Update, Delete (insertar, actualizar, borrar): Es código que se ejecuta automáticamente cuando se produce una alta, una actualización o un borrado de registro. Puesto que la mayoría de las veces deseamos que se ejecute un procedimiento almacenado, basta con especificarlo. 2.4 RELACIONES ENTRE TABLAS: Visual Foxpro maneja dos tipos de relaciones, las que se crean en el momento de diseño de la Base de datos (permanentes) y las que se crean en tiempo de ejecución (temporales) de la aplicación. Las relaciones mas comunes entre tablas se definen : De uno a uno : Ejemplo de una llave primaria a otra llave primaria De uno a muchos : Ejemplo de una llave primaria a una normal o Foránea. Relaciones Permanentes (fig. 2.7) Estas poseen las siguientes características: l Son creadas en la fase de diseño. l La relación es abierta cuando se abre la base de datos l Son entre índices: J Si la relación es de un índice primario a un índice normal la relación es de uno-a-muchos. J Si la relación es de un índice primario a un índice primario la relación es de uno-a-uno. l Permite utilizar la integridad referencial. Las relaciones entre tablas se crean arrastrando la llave de la tabla a la llave de otra tabla. Relación (de uno Fig. 2.7 Disenador de Bases de Datos La figura muestra una relación entre las tablas región y departamento, la relación se leería así : “Una región tiene muchos departamentos”. Relaciones Temporales (Fig. 2.8) Sus características principales son: l Son creadas por programaci6n y se activan al momento de la ejecución. l La relación se desactiva cuando cualquiera de las tablas es cerrada o por la instrucción Set Relation To. l No es necesario tener un índice primario en la tabla madre, se puede relacionar un campo a la tabla hija, la cual debe tener un índice (de cualquier tipo). l Se pueden utilizar las tablas libres. l No se puede utilizar la integridad referencial. Para crear las relaciones temporales se utiliza la ventana de sesión de datos. 1. Hacer clic en el menu Window, opción Data Session. Aparecerá la ventana de Data Session, si las tablas no aparecen dentro del recuadro de Aliases debes abrirlas con el botón Open Fig. 2.8 Sesión de datos 2. Seleccionar la tabl.a madre y hacer clic en Relaciones. 3. Seleccionar la tabla hija (fig. 2.9). Aparecerá la siguiente pantalla. Fig. 2.9 Establecer el orden de los indices Seleccionamos el índice con el cual deseamos relacionar ambas tablas (la expresión del indice debe coincidir con la expresión de la relación). 4. Construimos la expresión con la cual queremos relacionar ambas tablas, a partir de los campos de la tabla madre (fig. 2.10). Fig. 2.10 Diseiiador de Expresiones 5. Si deseamos establecer la relación de uno-a-muchos, solo hacemos clic en one-to-many. Tablas Libres. En comparación con las tablas dependientes, a las tablas libres las acompañan una serie de restricciones: l l l No es posible utilizar nombres largos. No te ofrece validaciones de campo, ni de registro. No puedes asociar los campos a ninguna clase. Para crear una tabla libre es necesario: 1. Cerrar los proyectos activos. 2 . Hacer clic en N& de barra de herramientas (fig. 2.11). <LIv...uII -s, Fig. 2.11 Barra de herramientas Ejercicio Práctico: Cree la siguiente base de datos: Wk.ids: id nombre tebfono diieccim cuidad credtpq empmd regionjd wdjd prcd&id precio cantidad III PROGRAMACIÓN ORIENTADA A OBJETOS El contenido de este tema toma a consideración que el usuario posee conocimientos de esta metodología de programación, por lo que a continuación se dará un breve repaso a los conceptos básicos de está metodología 3.1 Elementos de la programación orientada a objetos Obieto Definiremos un objeto como algo tangible que posee caraacterísitcas Y tiene un comportamiento. que Clase Las clases son la descripción de los elementos comunes de los objetos que generalizan. Así las clases se definen y pueden ser usadas para crear innumerables objetos de este tipo. A la creación de un objeto a partir de una clase le llamaremos instanciamiento. Propiedades. Las propiedades son los datos que manejan las clases, es decir las características del objeto. Estas propiedades se declaran en la definición de la clase y permanecen en todo momento asociados a los objetos creados bajo esa clase. Herencia. La herencia se da a partir de la creación de subclases y consiste en que las subclases heredan las propiedades y los métodos que se hayan definido en la clase base. La herencia es un mecanismo que nos va a permitir reutilizar nuestro código de forma fácil y ordenada. Encapsulación Aunque parece un termino extraiio, es muy habitual en POO. Hace referencia a la capacidad de los objetos para incluir dentro de si tanto datos como acciones. Las clases de distinguen unas de otras justamente por tener unos datos y acciones que las diferencian. Los objetos de una misma clase se diferencian entre si por tener datos diferentes. Polimorfismo. Trabajando en la programación estructurada se debe tener cuidado de no poner el mismo nombre a dos variables o a dos procedimientos, sin embargo en la PO0 podemos llamar a un método o a una propiedad de una clase de igual forma que un método o propiedad de otra. Esta característica es lo que se denomina polimorfismo. Sobrescritura En algunas ocasiones, en la clase hija, se desea modificar el comportamiento de algún método o el contenido de alguna propiedad de la clase base. Este hecho se denomina sobrescribir. Con él modificamos los miembros de una clase base sin afectar al código de la misma. Métodos Los métodos son la reacciones asociadas a cada evento, es decir, son funciones o procedimientos asociados a este tipo objeto, auque puede haber métodos que no respondan a un evento. Eventos Existe una serie de métodos especiales, que normalmente no se ejecutan por ser invocados de forma explícita, sino que son lanzados cuando ‘pasa algo’, es decir, cuando se produce un evento. Estos eventos pueden ser un clic, el movimiento del ratón, un pulsación de tecla, etc.. Ocultación Una de las mejoras que implementa la POO, es la posibilidad de limitar el acceso a determinadas propiedades o métodos. Con ello conseguimos que la utilización del la clase se haga de forma ordenada. Mensaies Cuando llamamos a un método de un objeto se dice que estamos enviando un mensaje al objeto para que realice una determinada acción. Así cuando enviamos un mensaje a un objeto estamos ejecutando el método correspondiente En Visual FoxPro se pueden generar 2 tipos de clases: Visuales y no Visuales. 3.2 Generación De Clase Visuales Las clases que pueden ser creadas son de 2 tipos: l Las clases creadas a partir de las clases bases y que no son contenedoras de otros objetos. l Las clases contenedoras. Existe una excepción, la clase custom. Esta clase no es visual, pero es posible disefiarla mediante el generador de clases visuales, así como en tiempo c-h f+iec~ rif5n Las clases de visuales se pueden generar de 3 formas: l Estando en el proyecto elegir nuevo en la página de Classes. Si existe la biblioteca en la que se quiere agregar la clase elegirla. l l Desde del menú principal, elegir File (Archivo) la opción New (Nuevo). En la ventana Command (Comandos), mediante la sentencia Create Class. Fig. 3.1 Nueva Clase Para crear una nueva clase es necesario proporcionar la información requerida en el cuadro de diálogo anterior. a. Class Name (Nombre de la clase) Nombre que se le dará a la nueva clase. Permite hasta 255 caracteres. b. Based On (Basada en) Nombre de una clase base en Visual Foxpro, o el nombre de una clase ya definida alguna biblioteca de clases visuales. Si selecciona el segundo de los casos, aun lado de la palabra From (desde) aparecerá el nombre de la biblioteca de clases visuales de la que se haya extraído la definición de la clase. c. Store In (Almacenar en) Contiene el nombre de la biblioteca de clases donde se va almacenar la nueva clase, si la biblioteca de clases no existe, esta se creara. Una vez proporcionados los datos anteriores, Visual FoxPro presentara el dìseAador nos de clases. 3.2.1 Classes Designer (Disenador de clases fig. 3.2) La apariencia del diseñador de clases visuales es idéntica a la del disenador de formularios. dA.- . . . --_-.-- ._.“....... - _.._..-. .._. - ^_.. . .__ - ..----..... --.. Fig, 3.2 Diseñador de Clases A la nueva clase se le pueden añadir: l l Propiedades Metodos 3.2.2 Propiedades A las propiedades ya existentes de la clase base se le pueden anadir nuevas. En este punto cabe recalcar que las nuevas propiedades corresponden a la clase que se esta creando, no a la clase base. Estas propiedades aparecerán a continuación de las propiedades ya existentes en la pagina Other (Otros) de la ventana de Propierties. Para agregar una nueva propiedad a la clase haga clic en la opción New Propierty (Nueva propiedad fig. 3.4) del menú Class (Clase fig. 3.3). Fig. 3.3 Menú Clase Fig. 3.4 Nueva propiedad La información requerida para definir una nueva propiedad es la siguiente: l Name (Nombre). Nombre de la nueva propiedad. l Visibility (Visibilidad). Indica el ámbito que va atener la nueva propiedad. Admite valores: Public (público), Procted (protegido) y Hidden (Oculto). l Description (Descripción). Una breve descripción de la propiedad. Esta descripción aparece en la parte inferior de la ventana Propierties Una propiedad puede ser de cualquier tipo de datos definidos: carácter, numérico, fecha, fecha-hora, lógico. Además una propiedad puede almacenar los datos en forma de matriz, la cual debemos declarar con sus dimensiones iniciales desde la ventana de New Propierty (nueva propiedad). Vector[l] 3.2.3 Métodos (fig.3.5) Se pueden crear métodos que en la clase base no existan. Fig. 3.5 Nuevo método l l Name (Nombre). Nombre del nuevo método. Visibility (Visibilidad). Indica el ámbito que va a tener el nuevo método. Admite valores: Public (público), Procted (protegido) y Hidden (Oculto). l Description ( Descripción). Una breve descripción del método. Los métodos definidos por el usuario se van aAadiendo a la lista que figura en la página Métodos por orden alfabético y en minúscula. 3.2.4 Archivos .H Los archivos de encabezado se utilizan para agrupar constantes predefinidas que utiliza el código fuente. Para incluir un archivo de definiciones en la clase que se está desarrollando, hay que elegir la opción Include File (incluir archivo) del menú Class. De esta forma, las constantes predefinidas en el archivo están disponibles para todo el código incluido en cualquiera de los métodos de la clase. 32.5 Documentación de la clase (fig. 3.6) Junto con la definición de la clase se puede adjuntar la siguiente información. Fig. 3.6-Información de la clase C LASS (clase) Toolbar icon (icono de barra de herramientas). Determina el icono o bitmap utilizado para representar esta clase cuando se utiliza la biblioteca de clases. Container icon (icono contenedor). Se utiliza este icono para representar esta clase cuando se visualiza desde el examinador de clases. Scale Units (Unidades de Escala). Fija la unidad de medida utilizada para diseiiar la clase, puede elegir entre píxeles y fóxeles. Descriotion (Descripción). Comentarios acerca de la clase. OLE Public (OLE Público). Indica si esta clase debe formar parte de un servidor OLE. MEMBERS (miembros) En esta segunda pagina se visualiza una lista de miembros componentes de la clase. En ella se incluyen todos los eventos, métodos y propiedades definidos. Cuando se elige un miembro, se puede modificar el mismo. 3.2.6 Modificación de una clase Se pueden modificar en la clases visuales de 3 formas: l Estando en el proyecto, elegir Modify (modificar) en la página Classes (clases), posicionados en la clase que se desea modificar. l Desde el menú principal, escoja del menú File (archivo) la opción Open (abrir) o escoja el icono Open (abrir) de la barra de herramientas estándar. l Desde la ventana de comandos, mediante la sentencia Modify Class. 3.2.7 Instanciando Objetos Para crear una instancia de una clase contenida en las bibliotecas de clases es necesario que ésta esté accesible. Esto se hace con el comando Set Classlib. Este comando requiere como argumento el nombre de la clase, incluyendo la ruta si no es la corriente. Set Classlib to c:\devstudio\vfp\clases\ejemplo.vcx Sub~campo=CreateObject(“campo”) 3.2.8 Operadores de Referencia. Cuando se instancian varios objetos con la misma clase hay que hacer referencia a las sus propiedades y eventos con los operadores de referencia. Uno de los objetivos de la programación orientada a objetos es la reutilización del código, por lo que conveniente utilizar referencias relativa, para no utilizar directamente su nombre. Visual FoxPro cuenta con los siguientes operadores: Operador Finalidad This Hace referencia al objeto que esta en el foco. Thisform Hace referencia a la forma desde un objeto de la misma. ThisFormSet Hace referencia al FormSet desde un objeto o forma contenida dentro del FormSet. Para cambiar una propiedad: This.caption=“hola” Para cambiar un evento: This.gotfocus 3.2.9 Ejemplo de la creación de una clase con propiedades y métodos: 3.2.9.1 Definir una clase. Para definir una clase utilizaremos la siguiente instrucción: Define Class . . . . . . . EndDefine Inicia una definición de clase definida por el usuario o una clase base. Incluye las definiciones de propiedades, eventos y métodos pertenecientes a la misma. DEFINE CLASS NombreClase AS ClaseBase [[PROTECTED NombrePropiedadl, NombrePropiedad NombrePropiedad2...] = Expresión...] ADD OBJECT [PROTECTED] NombreObjeto [WITH ListaPropiedades]].. as ClaseBase[NOINIT] . [[PROCTECTED] FUNCTION 1PROCEDURE nombre [NODEFAULT] Instrucciones [ENDFUNC 1ENDPROC]]... ENDEFINE Argumento Descripción NombreClase Nombre asignado a la clase ClaseBase Clase en la cual está basada PROTECTED Define como protegidas las propiedades que le siguen. Este mismo argumento se utiliza con funciones o procedimientos contenidos en la clase. Las propiedades, métodos y eventos protegidos sólo sin visibles desde la’ propia clase. NombrePropiedad = Expresión Asigna valores predeterminados a cualquier propiedad. ADD OBJECT AAade un objeto procedente de una clase base o de uno definido por el usuatio. NOINIT Evita que se ejecute el evento INIT al anadir el objeto mediante el comando ADDOBJECT. WITH ListaPropiedades Inicializa las propiedades del objeto que se está aAadiendo con valores Argumento Descripción FUNCTION 1PROCEDURE Inicia la definición de una función o procedimiento de usuario. Existen dos tipos de funciones o procedimientos: Eventos. Accionados de forma automática al recibir un mensaje del sistema. Métodos. Accionados por el usuario en respuesta a una llamada desde un programa. Eiemplo de una clase Custom DEFINE CLASS cliente AS CUSTOM cNombre = “” cApellidos = “” dFechaNacimiento = {} cEstadoCivil = “Soltero” nCredito=O PROCEDURE Alta LPARAMETERS cNombre, ; cApellidos, ; d Fecha This.cNombre = cNombre This.cApellidos = cApellidos This.dFechaAlta = dfecha ENDPROC ENDDEFINE Eiemplo de una clase base DEFINE CLASS BotonSalida Caption = “\cSalida” AS CommandButton && Titulo del Botón Left =175 && Lado izquierdo del botón =60 Top Height = 25 && Altura del botón Visible = .T. && Poner visible el botón en la forma Fontltalic = .T. && Texto Cursivo ForeColor && Posición superior del botón = RGB(0,0,255) && Cambiar el color del texto del botón PROCEDURE Click WAIT WINDOW “Ejecutando el procedimiento Click.” CLEAR EVENTS && Para y cierra la forma ENDPROC ENDDEFINE 3.2.9.2 Crear un objeto. Ya podemos crear objetos basado en esta clase, para ello utilizamos la siguiente expresión : oCliente = CREATEOBJECT( “cliente” ) oCliente2= CREATEOBJECT( “cliente” ) Una vez creado el objeto le podemos dar valores: oCliente = CREATEOBJECT( “persona“ ) oCliente .cNombre = “Angélica” oCliente .cApellidos oCliente = “Navarro Jacobo” .dFechaAlta = (12-05-99) 0 en su caso: oCliente = CREATEOBJECT( “persona” ) WITH oCliente .cNombre = “Sofía” .cApellidos = “Flores Guerrero ” .dFechaAlta = (19-I O-99) ENDWITH 3.2.9.3 Ámbito de un objeto. Los objetos pueden declararse como LOCAL, PRIVATE o PUBLIC. Por default, los objetos son de tipo PRIVATE y por lo tanto existirán mientras se ejecute el programa que los creó. Una vez salgamos de este programa el objeto se borrará automáticamente. El objeto puede ser usado en el programa que lo creó y en todos lo programas llamados desde él. Si declaramos el objeto como LOCAL el objeto persistirá hasta la salida del programa que lo creó, pero los programas que sean llamados desde el programa de creación no podrán hacer uso de este objeto, pues permanece oculto par a ellos, evitando así posibles problemas con los nombres de los objetos. La declaración de un objeto PUBLIC, hace que este permanezca hasta que lo borremos o salgamos de VFP. Este objeto puede ser usado por cualquier programa desde el momento que es creado hasta que sea borrado. PUBLIC oCliente OCliente = CREATEOBJECT( “Cliente” ) ... RELEASE oCliente 3.2.9.4 Mensajes Los mensajes los describimos en las primera sección de capítulo. Cuando enviamos un mensaje de alta a un objeto cliente en realidad estamos ejecutando el método correspondiente : oCliente = CREATEOBJECT( “cliente” ) oCliente .Alta( “Angélica”, ; “Navarro Jacobo”, ; (1 Z-05-99) ) 3.2.9.5 Ocultación. Retornemos el concepto de ocultación, las propiedades o métodos protegidos sólo son utilizables desde los métodos pertenecientes a esta clase y no pueden usarse directamente por otros programas. DEFINE CLASS deuda AS CUSTOM PROTECTED nMonto nMonto = 0 PROCEDURE Incremento LPARAMETERS ncantidad This.nMonto = This.nMonto+ ncantidad ENDPROC ENDDEFINE Si tratásemos de acceder directamente a la propiedad nMonto nos daría un error, pues esta propiedad está protegida. oSaldo = CREATEOBJECT( “Deuda” ) oSaldo. Incremento ( 1000 ) oSaldo.nMonto = 100 * Error 3.2.9.6 Polimorfismo. Es la característica de nombrar dos propiedades o métodos de diferentes clases de la misma forma. DEFINE CLASS Cliente AS CUSTOM cNombre = “” ENDDEFINE DEFINE CLASS Proveedor AS CUSTOM cNombre = “” ENDDEFINE OClientel = CREATEOBJECT( “Cliente” ) Oproveedorl = CREATEOBJECT( “Proveedor” ) ? OCliente .cNombre ? Oproveedorl .cNombre 3.2.9.7 Objetos como propiedades. Dentro de una clase podemos definir objetos como propiedades miembro. DEFINE CLASS persona AS CUSTOM cNombre = “” cApellidos = “” ENDDEFINE DEFINE CLASS Matrimonio AS CUSTOM dfecha = {} ADD OBJECT Conyugel AS Persona ADD OBJECT Conyuge2 AS Persona ENDDEFINE El uso del objeto seria como sigue: oPareja = CREATEOBJECT( “Matrimonio” ) oPareja .Conyugel .Nombre = “María” oPareja2.Conyuge2.Nombre = “José” S6lo las clases denominadas contenedoras miembros objetos y la clase CUSTOM es una de ellas. 3.2.9.8 Herencia. En los ejemplos anteriores siempre heredamos de la clase base CUSTOM (AS CUSTOM). Para heredar una clase de otra veamos el siguiente ejemplo: * Clase original DEFINE CLASS Persona AS CUSTOM cNombre = “” cApellidos = “” dFechaNacimiento = {} PROCEDURE Nacimiento LPARAMETERS cNombre, ; cApellidos, ; dfecha This.cNombre = cNombre This.cApellidos = cApellidos This.dFechalngreso = dfecha ENDPROC ENDDEFINE * Clase nueva DEFINE CLASS Alumno AS Persona cEscuela = “” cCarrera= “” ENDDEFINE Si instanciamos un objeto alumno, podemos hacer uso de las propiedades de su clase así como las propiedades de la clase persona, puesto que esta heredando estas. OAlumno = CREATEOBJECT( “Alumno” ) * Propiedades de la clase Persona oAlumno .cNombre = “Juan” oAlumno .cApellidos = “López Garrido” * Propiedad de la clase Alumno oAlumno .cEscuela = “FIME” oAlumno .cCarrera=“Computación” 3.2.9.9 Sobreescribir métodos o propiedades. En ciertas ocasiones no nos es útil algún método o propiedad de la clase padre, por lo que querremos modificarlo. DEFINE CLASS punto AS CUSTOM cx=o cY=O PROCEDURE Punto LPARAMETERS X,Y This.x=X This.y=Y ENDPROC FUNCTION Distancia LPARAMETERS X,Y dx=O dy=O dx=this.x - x dy= this.y - y RETURN SQRT(dx*dx+dy*dy) ENDFUNC ENDDEFINE *Clase Nueva DEFINE CLASS Punto3D AS Punto cz=o PROCEDURE Punto3D LPARAMETERS X,Y,Z This.x=X This.y=Y This.z=Z ENDPROC FUNCTION Distancia LPARAMETERS X,Y,Z dx= this,x-x dy= this,y-y dz= this,z-z RETURN SQRT(dx*dx+dy*dy+dz*dz) ENDFUNC ENDDEFINE En el ejemplo anterior el método Distancia de la clase padre, no nos servia para la clase hija, por lo se tuvo que rescribir. 3.2.9.10 El Operador ::. En el ejemplo anterior estamos duplicando parte del código del método Distancia de la clase Punto en el método Distancia la clase Punto3D, aunque solo son pocas líneas en ocasiones querremos aprovechar el código escrito en la clase padre. Para estos casos se ha creado el operador :: u operador de resolución de alcance. Con el podemos hacer referencia al método de una clase superior aun cuando este método se hubiera sobreescrito. Para hacer uso de este operador debemos indicar el nombre de la clase padre, el operador ::, y el nombre del método. Utilizando este operador la clase Punto3D puede quedar de la siguiente forma : DEFINE CLASS Punto3D AS Punto cz=o PROCEDURE Punto3D LPARAMETERS X,Y ,Z Punto::Punto This.z=Z ENDPROC FUNCTION Distancia LPARAMETERS X,Y,Z Punto::Distancia dz= this,z-z RETURN SQRT(dx*dx+dy*dy+dz*dz) ENDFUNC ENDDEFINE Con esta característica cualquier modificación en el método de la clase padre, se ve automáticamente reflejado en el método de la clase hija. IV CLASES BASE DE VISUAL FOXPRO Las Clases base de Visual FoxPro son las siguientes: Check Box Casilla de verificación Column Columna definida de una cuadrícula ComboBox Cuadro combinado CommandButton Botón de comandos CommandGroup Grupo de comandos Container Contenedor Control Control Cursor Cursos de tabla Custom Usuario DataEnvironment Entorno de datos EditBox Cuadro de edición Form Formulario FormSet Conjunto de formularios Grid Cuadrícula Header Cabecera contenida dentro de una cuadrícula Imane Imagen Label Etiqueta !& Línea ListBox Cuadro de Lista OLEControl Control contenedor OLE OLEBoundControl Control dependiente OLE OptionButton Botón de opción OptionGroup Grupo de opciones Pase Página PageFrame Marco de página Relation Relación Separator Separador en barra de herramientas Shaoe Forma Spinner Control numérico TextBox Cuadro de Texto Timer Temporizador ToolBar Barra de herramientas 4.1 Propiedades comunes a varias clases Alignment Permite alinear el texto respecto al tamaño del objeto. Sus valores varían dependiendo del tipo de objeto de que se trate. Para las casillas de verificación y para los botones de opción, las opciones son las siguientes: Valor Descripción 0 Es el default alinea el control a la izquierda con el texto a la derecha. 1 Alinea el control a la derecha con el texto a la izquierda. Para Cajas combinadas, cuadros de edición, encabezados, controles y numéricos; las opciones de configuración son las siguientes: Valor Descripción 0 Es el Default, alinea el texto a la izquierda 1 Alinea el texto a la derecha, es el Default para los controles numéricos. 2 Alinea el texto centrado 3 Automático, alinea el texto de acuerdo al control. Para las cajas de texto: Valor Descripción 0 Alinea el texto a la izquierda 1 Alinea el texto a la derecha. 2 Centra el texto. 3 Automático. Alinea el texto dependiendo del tipo de dato, numéricos a la derecha, texto a la izquierda. Para una columna: Descripción Valor 0 Alinea el iexto a la izquierda centrado verticalmente. 1 Alinea el texto a la derecha centrado verticalmente. 2 Centra el texto horizontal y verticalmente. 3 Automático, es el Default alinea el dato de acuerdo al tipo de datos, numéricos a la derecha y otros al derecha. 4 Alinea el texto arriba y a la izquierda. 5 Alinea el texto arriba y a la derecha 6 Alinea el texto arriba y centrado 7 Alinea el texto abajo y a la izquierda 8 Alinea el texto abajo y a la derecha 9 Alinea el texto abajo y centrado. AutoSize Valor booleano para ajustar el tamaño del objeto según sea el contenido del mismo. BackColor Color del fondo del objeto. BackStyle Especifica cuando el fondo de un objeto es transparente u opaco. Descripción 0 Transparenre 1 Opaco BaseClass Especifica el nombre de la clase base en la cual esta basada el objeto. BorderColor Especifica el color del borde de un objeto. BorderStyle Indica el estilo del borde. Para los grupos de comando, cajas de edición, Imágenes, Etiquetas, Grupos de opciones y cajas de texto, las opciones de configuración son: Descripción 0 Ninguno. Default para imágenes y etiquetas 1 Fijo Simple. Default para los grupos de comandos, grupos de opciones, cajas de edición y cajas de texto. Para las líneas y formas: Descripción 0 Transparente 1 Default Solido. 2 --- 3 ___--__--- (W 4 -_----- (Dash-Dot) 5 -m--w - - (Dash-Dot-Dot) - (Dash) Para un objeto forma; Valor Descripción 0 Sin borde. 1 Fijo simple. 2 Fijo tipo dialogo. 3 Modificable Caption Especifica el texto desplegado en la forma para un objeto. Class Clase de la que proviene el objeto. Puede ser la clase base o una subclase definida por el usuario. ClassLibrary Especifica el nombre del archivo dela biblioteca de clases que contiene la clase del objeto. ColorSource Determina un conjunto de colores para el control: Valor Descripción 0 Propiedades del color del objeto. 1 Esquema de colores del formulario. 2 Esquema de la propiedad ColorScheme 3 Esquema Predeterminado 4 Esquema de Windows Comment Permite describir brevemente el objeto. Controls Es un arreglo para acceder a los controles de un contenedor de objetos. Es usado acceder a las propiedades de dichos controles. La forma de utilizarlo es: ObjetoContenedor.Controls(lndice).Property[ = Expr] ControlSource Especifica la fuente de datos a la que va estar ligada un objeto: esta puede ser: l Campo l Variable Al crearse el objeto la propiedad Value siempre tendrá el mismo valor del campo o de la variable. DisabledBackColor y DisabledForeColor Especifica el color del fondo y el color del primer plano del control cuando el objeto esta deshabilitado. Dragicon Especifica el icon desplegado en una operación de arrastre. El archivo especificado debe termer la extensión .CUR y estar salvado en formato VGA-Mono 2-Color 32*32. DragMode Especifica el modo en que se producirá el arrastre: Valor Descripción 0 Manual 1 Automático Enabled Propiedad booleana, la cual nos permite inhabilitar (.F.) y habilitar (.T.) el objeto ante cualquier accón. Si el objeto es un contenedor, los objetos contenidos quedarán inhabilitados también. FontBold, Fonfltalic, W y FontUnderline Valor booleano para habilitar y deshabilitar los estilos: negrita, cursiva, subrayado y tachado. FontName Nos permite seleccionar la fuente. FontSize Determina el tamaño de las letras. ForeColor Determina el color del primer plano del objeto. Height Especifica la altura del un objeto. HelpContextld Es un numero de contexto que debe coincidir con el que le otorguemos en el archivo de ayuda. Left Especifica la distancia entre el lado izquierdo del objeto y el lado izquierdo de su contenedor. MousePointer Indica la forma del puntero del ratón cuando se sitúa encima de un objeto. Predeterminado 3 4 5 6 7 8 9 10 11 12 r-%-j i.. ............... I”““““.......: ;+[ ..................i ............... . 11 i i. .............j Icono :...................I &J+; i...................i ........... . gy i............ :.................I i 1 i i.. ...............i i”““““........ ;\; \ ................j :..................... +-. i. ................... I”‘t”‘i i........... I’.............I ** : /iij .............. ., I................ pJ i. ...............; Name Nombre del objeto, por el cual se va a referenciar en la programación. Visual FoxPro asigna a los objetos el nombre de su clase mas un numero consecutivo. ParentClass Clase primaria a partir de la cual se ha creado el objeto. Picture Representación gráfica del objeto. El archivo debe tener extensión .bmp o .ico. SpecialEffect Determina diferentes opciones de formato para un control. Para los marcos de pagina los valores posibles son: Valor Descripción 0 En relieve. 1 Bajo relieve 2 Plano Para que los anteriores valores, la propiedad Tabs debe estar en .F. Para los demás controles: Valor Descripción 0 3D 1 Normal StatusBarText Sirve para mostrar en la barra de estado una descripción del objeto que recibe el foco. Tablndex Contiene el número de orden del objeto según se fue añadiendo a la forma o al marco de página. TabStop Valor booleano que inhabilita o habilita a un objeto a obtener el foco mediante la tecla Tab, es decir, que si el usuario avanza con tabulador aun objeto con Tabstop en .F. , este objeto se ignorara y saltará al siguiente. Sirve para almacenar algún dato necesario para algún programa. TerminateRead Si el objeto tiene esta propiedad en .T. el Read activo se cerrará. ToolTipText Especifica el letrero que aparece cuando el puntero del ratón se sitúa sobre el objeto. Para que esto tenga efecto, la propiedad ShowTips del Formulario o Toolbar a .T. Top Es la distancia entre borde superior del objeto y el borde superior del contenedor. Value Especifica el estado de un control. Los siguientes son los tipos de datos que puede tomar esta propiedad dependiendo del control. Valor Descripción Casilla de verificación Entero, Lógico, Numérico Caja combinada Carácter, Entero, Numérico Grupo de comandos Carácter, Entero, Numérico Caja de edición Cuadricula Carácter, Memo Carácter, Numérico Cuadro de Lista Carácter. Entero, Numérico Botón de opción Entero, Lógico, Numérico Grupo de Opciones Control Numérico Caja de Texto Carácter, Entero, Numérico Entero, Moneda, Número Cualquiera Visible Valor booleano que especifica cuando un objeto esta visible u oculto. Width Especifica el tamaño de un objeto expresado en unidades de medida marcadas por ScaleMode del formulario. 4.2 Eventos comunes a varias clases. La siguiente es una relación de eventos básicos relacionados con la mayoría de las clases base. 4.2.1 Creación y destrucción de objetos. yJ Cuando se crea la instancia de un clase , se ejecuta automáticamente el código asociado a este evento. Se ejecuta cuando se destruye la variable que contiene al objeto. DESTROY * Lanzamiento automático del método INIT oCliente = CREATEOBJECT( “Cliente” ) * Lanzamiento automático del método DESTROY RELEASE oCliente 4.2.2 Carga y descarga de formularios. Load Este evento se ejecuta antes de que un formulario o un conjunto de formularios se haya creado en memoria. Unload Este evento ocurre cuando un formulario o un conjunto de estos se liberan de memoria. 4.2.3 Control de teclado. KevPress Detecta la pulsación de cualquier tecla. Averigua su valor y que teclas de control estaban pulsadas en ese momento 4.2.4 Control de ratón. g& Detecta la pulsación del botón izquierdo del ratón sobre un control. DblClick Detecta la doble pulsación del botón izquierdo del ratón sobre un control. RightClick Detecta la pulsación del botón derecho del ratón sobre un control. MouseDown Detecta la pulsación de cualquier tecla del ratón, pudiendo tener un mayor control; ya que además permite averiguar que tecla alternativa estaba presionada: nButtom 1 botón izquierdo, 2 botón derecho, 4 botón central nShift 1 Shift, 2 Ctrl, 4 Alr nXCoorä nYCoord Devuelve las coordenadas de la posición actual del puntero del ratón. MouseMove Controla el movimiento del puntero del ratón sobre un objeto MouseUp Ocurre cuando se pulsa cualquier botón del ratón sobre un objeto y después de que se libere la pulsación del botón 4.2.5 Control del foco. GotFocus Este evento ocurre cuando se pueden accionar eventos de ese objeto mediante el ratón o teclado, o sea, recibe el foco. LostFocus Ocurre este evento cuando un objeto pierde el foco 4.2.6 Modificaciones. InteractiveChange Este evento se dispara cuando el usuario modifica el contenido de un objeto mediante teclado o ratón. ProqrammaticChancle Este evento se acciona cuando el valor de un objeto se modifica desde el programa 4.2.7 Gestión de errores. Error Este evento se inicia cada vez que se produce un error en el objeto que lo contiene. 4.3 Métodos. La lista de métodos existentes en la siguiente: 4.3.1 Manejo de objetos. AddObject Agrega una instancia de una clase a un a clase contenedora. CloneObject Duplica un objeto completamente incluyendo todas las propiedades y métodos definidos en éste. RemoveObject Borra un objeto contenido en un objeto contenedor. Este método debe llamarse desde el objeto contenedor SetAll Modifica un grupo de propiedades asignando de una vez un valor a todas ellas ReadExpression Devuelve la expresión introducida en una propiedad. ReadMethod Devuelve el texto del método especificado como parámetro. Release Elimina de memoria un objeto . Reset Reinicializa el contador de un objeto temporizador WriteMethod Remplaza el código asociado con un método o evento con el que se pasa como parámetro. 4.3.2 Métodos gráficos & Dibuja un rectángulo en un formulario. Circle Dibuja una forma circular en un formulario. & Dibuja líneas en un formulario. cls Borra el texto y gráficos definidos en un formulario. Point Devuelve los parámetros de color de un punto definido en un formulario. Draw Repinta el contenido de un formulario. Hide Oculta un formulario, conjunto de formularios o barra de herramientas. Print Imprime una cadena de caracteres en un formulario. Pset Cambia el color de un punto definido en un formulario por el color de primer plano definido para ese formulario. Refres h Repinta el contenido de un formulario actualizando sus valores. TextHeiq ht Devuelve la altura de una cadena de texto presentada . 4.3.3 Manejo de listas Addltem Añade un nuevo elemento a un objeto cuadro combinado o cuadro de lista en una posición de índice determinada. AddListltem Añade un nuevo elemento a un objeto cuadro combinado o cuadro lista en una posición determinada por su identificador único. Removeltem Elimina un elemento de la lista de un cuadro combinado o cuadro de lista por su índice. RemoveListltem Elimina un elemento de las lista de un cuadro combinado o cuadro de lista por su identificador único. Clear Borra el contenido de la lista de un cuadro combinado o cuadro lista. IndexToltemld Devuelve la posición de índice de un elemento a partir de su identificador único. ItemlDtolndex Devuelve el identificador único de un elemento a partir de su posición de índice. Requerv Vuelve a consultar el origen de datos asociado a un cuadro combinado o un cuadro lista. 4.3.4 Métodos de entorno de datos OpenTables Abre todas las tablas especificadas en Entorno de datos. Close Tables Cierra todas las tablas especificadas en Entorno de datos. 4.3.5 Métodos de cuadrículas ActivateCell AddColumn DeleteColumn DoScroll Activa una celda determinada por los parámetros nFila y ncolumna. Añade un nuevo objeto columna a una cuadrícula. Elimina un objeto columna de un control cuadrícula Simula el movimiento de la parte visualizada en grid a raíz de la pulsación del ratón en alguna de las barras de desplazamiento. 4.3.6 Mover y posícionar objetos Dock Apila una barra de herramientas en alguno de los cuatro bordes de la ventana principal. Dracl Inicia o finaliza una secuencia de marcar, arrastrar y soltar. Move Mueve un objeto a una nueva posición. 4.3.7 Objetos OLE DoVerb Ejecuta un verbo de un objeto OLE 4.4 Clases Base de Visual Foxpro. Podemos dividir los objetos en dos categorías : Las clases contenedoras y los controles simples. Los objetos basados en clases contenedoras son usados para acoger otros objetos. 4.4.1 Conjuntos de formularios . Estos acogen a uno o más formularios o incluso barras de herramientas. A la hora de ejecutar un el conjunto de formularios, se activan todos los formularios definidos en el mismo. 4.4.2 Formulario. Los formularios, en orden siguen a los conjuntos de formularios. Dentro de un formulario es posible definir cualquier objeto. (fig. 4.1) Fig. 4.1 Formulario 4.4.3 Contenedor Este tipo de objeto de utiliza para agrupar objetos, siendo más fácil la manipulación de estos 4.4.4 Marcos de pagina Permiten visualizar varias páginas de información dentro de un mismo formulario. Cada marco de página esta compuesto de páginas. En cada un de las páginas es donde se van a definir los controles (fig.4.3) Fig 4.2 Marco de página 4.4.5 Grupo de comandos i Este tipo de control agrupa dentro de un contenedor varios botones de comando. Dentro de un grupo de comandos sólo se pueden definir objetos botón de comando (fig 4.4) Fig. 4.4 Grupo de comandos 4.4.6 Grupo de opciones Este control asocia varios botones de opción dentro de un mismo contenedor. Dentro de un grupo de botones de opción solo se pueden definir objetos botón de opción (fig.4.5) Fig. 4.5 Grupo de opciones 4.4.7 Etiquetas ! Se utiliza para visualizar una expresión en el formulario. Su uso más común es como títulos de campo o títulos de ventana. Establecer el contenido de una etiqueta Para establecer el contenido de una etiqueta bata con cambiar el contenido de la propiedad caption. Cualquier cadena es valida. Thisform.labell .Caption= “Etiqueta” Thisform.label2.Caption=Dtoc(Date()) Thisform.label3.Caption=str(2000,4) Siendo Labell ,..Label3 las propiedades Name de los objetos. Definiendo posición y tamaño de la etiqueta Estas propiedades ya la vimos en un tema anterior. (fig.4.6) Fig.4.6 Propiedades de ajuste de tamaño y posición. Modificando atributos de la fuente. Las propiedades para tales efectos son Fontname (seleccionar la fuente), FontBold ( N e g r i t a ) , F o n t i t a l i c ( C u r s i v a ) , FontStrikeThru ( T a c h a d o ) y FontUnderline (Subrayado). Modificando colores y estilo. Las propiedades BackColor (color de fondo) y ForeColor (color de primer plano). El color de fondo se ve afectado por la propiedad BackStyle (estilo del fondo), puesto que si el estilo del fondo es 0-Transparent (transparente), para nada va a afectar la propiedad de BackColor. Esta característica es aplicable el resto de objetos en los que exista la propiedad BackStyle. La propiedad WordWrap Además de la propiedad Autosize que ajusta el objeto al contenido de la propiedad Caption, existe la propiedad WordWrap la cual permite ajustar el contenido de la etiqueta en varias líneas, si el ancho definido para la etiqueta es menor que la longitud del texto que contiene. 4.4.8 Cuadro de texto Este es el control básico utilizado para editar información contenida en campos de tablas, propiedades o variables (fig 4.7) Fig. 4.7 Cuadro de texto Fuente de datos La propiedad ControlSource se utiliza para indicar al control cual es el origen de los datos. En caso de que el origen sea un campo, se aconseja que ésta esté presente en el objeto Entorno de datos para asegurar que la tabla este disponible en tiempo de ejecución. Textl .ControlSource =“Clientes.Nombre” Value La propiedad Value guarda el valor que se esta editando. Además puede utilizarse para inicializar el cuadro de texto con algún valor. Textl .value=“Hola” Formatos La propiedad Format permita modificar el aspecto de los datos visualizados e introducidos. Consiste en una cadena de caracteres, cada uno de los cuales tiene una función especifica. Lo que aquí se introduzca afecta a la edición de todo el cuadro de texto a diferencia de InputMask Formato Descripción A Solo admite caracteres alfabéticos. D Utiliza el formato de datos especificado con SET DATE Para datos de tipo fecha. E Utiliza el formato de datos especificado como SET DATE BRITISH (dd/mm/aa) para datos de tipo fecha. K Marca todo contenido del cuadro de texto cuando este toma el control. L Muestra ceros a la izquierda completando hasta el principio para datos de tipo numérico. M Permite utilizar el cuadro de texto para mostrar múltiples opciones. Las opciones que se van a visualizar en el cuadro de texto se almacenan en la propiedad InputMask, utilizando comas como separador de opciones. Para cambiar de opción debe pulsar la barra espaciadora y para aceptar los cambios, pulsar INTRO. Si la propiedad Value se inicializa con alguna de las opciones, ésta toma el primer lugar. R Determina que los caracteres utilizados como máscara de formato no sean almacenados con el contenido introducido. ! Convierte a mayúsculas los caracteres alfabéticos. $ Especifica si se visualiza el indicador de moneda definido por SET CURRENCY o la configuración que se haya especificado en la página Regional de la ventana Opciones. La propiedad InputMask determina cómo se introducen y muestran cada uno de los caracteres del cuadro de texto. Esta es la diferencia con respecto a la propiedad Format que afecta a la totalidad del cuadro de texto. Formato Descripción X Permite la introducción de cualquier carácter. 9 Permite introducir dígitos y signos numéricos (-,f) # * Permite introducir dígitos, espacios y signos numéricos (-,+) Muestra asteriscos a la izquierda del valor editado. Determina la posición del punto decimal. Utilizado para separación de miles. Format L InputMask 999,999 Si el valor introducido es 345, el cuadro de texto muestra 000345. Si se introduce 1487. el resultado visualizado seria 001,487. Format iA InputMasj XXXXXXXXXX En este caso solo se permiten 10 caracteres alfabéticos, que son automáticamente transformados a mayúsculas. Cifras Numéricas Separador decimal Es separador decimal predeterminado es el (.). De cualquier manera el comando SET POINT TO nos sirve para especificar cual carácter queremos utilizar como separador. SET POINT TO “.” Separador de miles El comando para especificar cual es el separador de miles que vamos a usar es: SET SEPARATOR TO “,” Indicador de Moneda El comando SET CURRENCY sirve para visualizar la el tipo de moneda que se esta visualizando. Ajusta dos parámetros: l l El símbolo o cadena de caracteres utilizado como indicador de moneda. La posición del indicador SET CURRENCY TO “$” SET CURRENCY RIGHT Introducción de contraseñas La propiedad PasswordChar Se utiliza para enmascarar la entrada de datos por parte del usuario. En esta propiedad se especifica el carácter que se va a mostrar. La propiedad Value contiene la información que se ha introducido realmente. 4.4.9 Cuadro de edición i Este tipo de control se usa para la edición de campos memo. Es un pequeño procesador de texto. Dentro de este es posible realizar las tareas más comunes de un procesador de texto como son: marcar texto, moverlo, eliminar el mismo. Como el texto puede ser grande, es posible activar la barra de desplazamiento vertical para acceder a la totalidad del mismo (fig. 4,8) Fig. 4.8 Cuadro de Edición Barra de desplazamiento. La barra de desplazamiento vertical permite ver todo el texto introducido en el cuadro de edición. El texto introducido se ajusta horizontalmente, por lo que no es necesaria I la barra de desplazamiento horizontal. La propiedad que controla la visualización de la barra de desplazamiento vertical es la propiedad ScrollBars. Determinar la longitud máxima del texto introducido A pesar de que los campos memo no tienen una limitación fija en su contenido, se pude establecer un contenido limitado por la propiedad MaxLength. De esta forma sólo se puede introducir el número de caracteres especificados por esta propiedad. Permitir el uso de TAB en un cuadro de edición La tecla TAB se utiliza para cambiar el foco de lectura de un control al siguiente. Sin embargo esto se puede alterar y permitir que se puedan introducir la tecla TAB, la propiedad encargada de controlar esta característica es AllowTabs. Cuando esta propiedad tiene .T. para pasar el foco de lectura al siguiente control se utiliza la combinación de teclas CTRL. + TAB. 4.4.10 Botones de comando Se utilizan los botones de comando para iniciar acciones tales como cerrar una ventana, salir de un programa imprimir un informe, etc. (fig. 4.9) i. . . . . . . . . . . Fig, 4.9 Botón de comandos Tipos de botones de comando Se pueden definir tres tipos de botones de botones de comandos. Por su aspecto. El primero solo contiene texto, definido por la propiedad Caption. El segundo tipo combina texto y gráficos (.BMP, .ICO). La propiedad Picture es en donde se carga el archivo imagen. El tercer tipo de botones solo muestra un gráfico . Existe una tercera propiedad asociada, DownPicture. Esta propiedad contiene el nombre del archivo de la imagen mostrado cuando se presiona el botón de comando. Existe una cuarta propiedad que reviste de importancia cuando el botón esta desactivado. Para cambiar la imagen cuando ocurre esta circunstancia se utiliza la propiedad DisabledPicture. Mostrar utilidad del comando Dado que es posible definir botones de comando con imágenes únicamente, puede que el usuario necesite mostrar acerca de la utilidad del botón. La propiedad ToolTipText contiene el texto que se muestra cuando el ratón se sitúa sobre el botón. Otras propiedades La propiedad Default definida en un botón de comando permite que, al pulsar ENTER en cualquier control del formulario, cambie el foco a éste. La propiedad Cancel permite realizar una acción similar a la anterior, solo que ocurre con la tecla ESC. Usualmente se utilizan estas dos propiedades definidas en botones de comando: Aceptar y Cancelar. 4.4.11 Grupo de comandos 1 El grupo de comandos se utilizan para relacionar dentro de un mismo contenedor varios botones de comando. De esta forma se pueden manejar globalmente desde el propio contenedor o individualmente desde cada botón de comando (fig.4.10) Fig. 4.10 Grupo de comandos En la propiedad ButtonCount se guarda el número de botones de comando definidos dentro de este grupo de comandos. Para acceder a cada uno de los botones de comando se puede utilizar la propiedad Buttons. Esta propiedad esta estructurada en forma de- arreglo, conteniendo cada índice una copia del objeto botón de comando. Edición de objetos contenedores Para acceder a modificar un objeto contenedor primero debemos estar en modo edición. Para entrar en modo de edición hay que marcar el objeto, y presionar el botón secundario del ratón , seleccionando la opción Edit (editar). También es posible acceder a los objetos desde la ventana Propiedades seleccionándolo desde lista de objetos definidos. 4.4.12 Casilla de verificación i Suele utilizarse las casillas de verificación para representar y modificar valores lógicos (fig. 4.11) Fig 4.11 Casilla de verificación Estados Posibles Una casilla de verificación admite dos estados básicos. Cuando está seleccionada, la propiedad Value es .T. ocurre lo contrario cuando es falso .F. Las casillas de verificación pueden tener un tercer estado NULL y es cuando la casilla toma la apariencia sombreada, indicando que no se puede tomar ninguno de los dos estados. Tipos de casillas de verificación Existen 3 tipos de casillas de verificación en cuanto a su aspecto visual. Son: texto, imagen y texto, y sólo gráficos .-~ 4.4.13 Cuadro de lista Se utiliza este tipo de controles para visualizar una serie de elementos (fig. 4.12) Fig 4.12 Cuadro de Lista Origen de los datos. Las propiedades RowSourceType y RowSource determinan entre las dos el tipo de datos mostrados y el origen de los mismos. Origen RowSourceType Descripción =0 No existe una relación directa entre el cuadro de lista y el origen de los datos. RowSource=“” cuadro de lista y el origen de los datos. Para manejar los elementos de la Isita se utilizan los métodos Addltem y Removeltem. RowSourceType =1 Despliega los elementos contenidos en una cadena de texto separados por RowSource=“Opciónl ,Opcion2,...” comas cada uno de ellos. RowSourceType =2 Despliega en cada columna el RowSource=“cAlias” contenido del campo de una tabla. El número de columnas presentado depende del valor contenido en ColumnCount. La presentación de campos se inicia a partir del primero de la tabla y siguientes hasta completar el número de columnas especificadas. Determina que los datos visualizados en cada columna provienen de un RowSourceType =3 cursos creado con una sentencia SQL. RowSource=” SELECT * FROM” La sentencia contenida en RowSource se evalúa en tiempo de ejecución. Como resultado de esta consulta se obtiene un cuadro de lista con tantas columnas como campos se han seleccionado mediante el comando Select. Este caso es similar al anterior, solo que RowSourceType = 4 el origen de la consulta se establece a partir de un archivo con RowSource=” consulta.QPR” Archivo de extensión .QPR. Por tanto, se definen tantas columnas como campos resultantes tenga la columna Muestra el contenido de una matriz. Se muestran RowSourceType =5 tantas columnas como dimensiones tenga la matriz. RowSource=“aMatriz” Despliega el contenido de cada uno de RowSourceType los campos =6 especificados por la propiedad RowSource. Debe indicarse RowSource=” cAlias.Campol, Campo2,..” el alias al cual pertenecen cada uno de los campos. Los cuadros de lista creados con esta característica RowSourceType =7 muestran los archivos contenidos en un directorio, de acuerdo RowSource=” ComodínArchivos” al patrón especificado en la propiedad RowSource El cuadro de lista muestra la estructura de la tabla especificada en la propiedad RowSourceType =8 RowSource. RowSource=” cArchivoDBF” Caso 0 ThkRowSourceType =0 This.AddItem(“Elementol”) This.Addltem(“Elemento 2”) This.AddItem(“Elemento3”) This.AddItem(“Elemento 4”) This.Addltem(“Elemento 5”) This.Addltem(“Elemento 6”) This.Addltem(“Elemento 7”) This.AddItem(“Elemento 8”) This.Addltem(“Elemento 9”) Caso 1 This.RowSourceType = 1 This.RowSource = .“ Elemento 1, Elemento 2, Elemento 3 , Elemento 4,“+; “Elemento 5 , Elemento 6, Elemento 7, Elemento 8,“+; “Elemento 9” Caso 2 This.RowSourceType=2 This. RowSource = “Clientes” Caso 3 This.RowSourceType=3 This.RowSource= “SELECT * FROM Clientes INTO CURSOR Curcli” Caso 4 This.RowSourceType=4 This.RowSource = “Selcli. QPR” Caso 5 Declare Thisform.aMatriz[lO] Thisform.aMatriz[l] = “Elemento 1” Thisform.aMatriz[2] = “Elemento 2” Thisform.aMatriz[3] = “Elemento 3” Thisform.aMatriz[4] = “Elemento 4” Thisform.aMatriz[S] = “Elemento 5” Thisform.aMatriz[G] = “Elemento 6” Thisform.aMatriz[7] = “Elemento 7” Thisform.aMatriz[8] = “Elemento 8” Thisform.aMatriz[S] = “Elemento 9” Caso 6 This.RowSourceType=6 This.RowSource=“Cliente.Nombre” Caso 7 This.RowSourceType= 7 This.RowSource = “*.*” Caso 8 This.RowSourceType=8 This.RowSource=“CJientes” Manejo de múltiples columnas Las tres propiedades relacionados con el manejo de múltiples columnas en listas son ColumnCount, ColumnWidths y ColumnLines. La propiedad ColumnCount determina el número de columnas desplegadas en un cuadro de lista. 0 ColumnCount >=l. Se visualizan tantas columnas como sean necesarias. l ColumnCount=O. Predeterminado, muestra siempre la primera columna del origen de los datos. La propiedad ColumnWidths contiene una cadena de texto que define el tamaño de cada una de las columnas desplegadas en la lista. This.ColumnWidths=“l20, 120” Por último la propiedad ColumnLines indica si se han de mostrar líneas que separen las columnas. This.ColumnCount=2 Th¡s.ColumnW¡dths=“120,120” This.ColumnLines=.T. This.RowSourceType=l This.RowSource = “Elemento 1, Elemento 2, Elemento 3 , Elemento 4,“+; “Elemento 5 , Elemento 6 , Elemento 7 , Elemento 8,“+; “Elemento 9“ (fig. 4.13) Fig, 4.13 Desplegando dos columnas Reordenar elementos en un cuadro de Lista Cuando la RowSourceType está establecida en algunos de los valores 0 o 1, es posible reordenar los elementos visualizados en el cuadro de lista. Para mover la posición de cualquier elemento hay que marcar en el botón de comando situado al inicio de cada línea y mover el elemento hasta su nueva . .I posiclon. La propiedad encargada de habilitar esta posibilidad se llama MoverBars (fig.4.14). This.MoveBars = .T. This.RowSourceType = 0 This.AddItem(“Elemento1”) This.Addltem(“Elemento 2”) This.AddItem(“Elemento3”) This.Addltem(“Elemento 4”) This.Addltem(“Elemento 5”) This.AddItem(“Elemento 6”) This.Addltem(“Elemento 7”) This.Addltem(“Elemento 8”) This.Addltem(“Elemento 9”) Fig. 4.14 Cuadro de Lista con MoveBars = .T. Multiselección de elementos Otra característica interesante es la posibilidad de marcar varios elementos en un cuadro de lista. La propiedad MultiSelect se encarga de estas de esta característica (fig. 4.15) This.MultiSelect = .T. This.RowSourceType = 0 This.Addltem(“Elementol”) This.Addltem(“Elemento 2”) This.Addltem(“Elem&to3”) This.Addltem(“Elemento 4”) This.Addltem(“Elemento 5”) This.AddItem(“Elemento 6”) This.AddItem(“Elemento 7”) This.AddItem(“Elemento 8”) This.AddItem(“Elemento 9”) Fig. 4.15 Cuadro de Lista con MultiSelect=.T. Elemento Elegido La propiedad Value contiene siempre el valor que se ha elegido en la primera columna del cuadro de lista, pero en un cuadro de lista puede haber varias columnas, como ya hemos visto. Las propiedades BoudColumn y Value en conjunto nos dan la solución. La propiedad BoudColumn indica cuál de las columnas definidas en un cuadro de lista se asocian con la propiedad Value. Cuando se elija un elemento del cuadro de lista, el contenido de la fila situada en la columna especificada por BoundColumn se almacena en Value (fig. 4.16) This.ColumnCount =2 This.ColumnWidthd = “120,120” This.ColumnLines=.T. This.RowSourceType=2 This.RowSource=“Ejem” This.BoundColumn=2 Fig. 4.16 Cuadro de lista con BoundColumn = 2 4.4.14 Cuadro Combinado Se utilizan los cuadros combinados para presentar una sola opción de las contenidas en una lista . Para elegir un elemento de la Isita contenida en un uadro combinado se debe presionar en el botón de comando situado en el mismo control a la derecha o bien introducir el elemento mediante el teclado. Si esta activa la búsqueda incremental, la lista se irá posicionando en el elemento deseado (fig 4.17) Fig. 4.17 Cuadro combinado Tipo de cuadros combinados Se pueden definir dos tipos de cuadros combinados principalmente, basándose en el contenido de la propiedad Style l El primer estilo 0 muestra un cuadro de texto desplegable, que permite teclear la opción 0 seleccionarla. l El segundo tipo no permite la edición en el cuadro de texto, sólo la selección de la opción. Caso 0 (fig 4.18) ThisForm.Combol .RowSourceType = 0 ThisForm.Combol .Addltem(“Elemento 1”) ThisForm.Combol .Addltem(“Elemento 2”) ThisForm.Combol .Addltem(“Elemento 3”) ThisForm.Combol .Addltem(“Elemento 4”) ThisForm.Combol .Addltem(“Elemento 5”) ThisForm.Combol .Addltem(“Elemento 6”) ThisForm.Combol .Addltem(“Elemento 7”) ThisForm.Combol .AddItem(“Elemento 8”) ThisForm.Combol .Addltem(“Elemento 9”) ThisForm.combol .Style = 0 Fig. 4.18 Caso 0 Caso 2 (fig. 4.19) ThisForm.Combol .RowSourceType = 0 ThisForm.Combol .Addltem(“Elemento 1”) ThisForm.Combol .AddItem(“Elemento 2”) ThisForm.Combol .Addltem(“Elemento 3”) ThisForm.Combol .AddItem(“Elemento 4”) ThisForm.Combol .Addltem(“Elemento 5”) ThisForm.Combol .Addltem(“Elemento 6”) ThisForm.Combol .Addltem(“Elemento 7”) ThisForm.Combol .AddItem(“Elemento 8”) ThisForm.Combol .Addltem(“Elemento 9”) ThisForm.combol .Style = 2 Fig 4.19 Caso 2 Búsqueda Incrementa1 La Búsqueda de elementos mediante el teclado sólo esta disponible cuando la propiedad Style=2 . Existen dos formas de establecer el funcionamiento de la búsqueda dentro de un cuadro combinado y un cuadro de lista. Esto depende de la propiedad IncrementalSearch. Cuando el valor de esta propiedad es .T., la búsqueda de elementos se hace cuando se ha dejado de pulsar la ultima tecla y ha pasado cierto tiempo sin que se haya pulsado alguna otra. Si la propiedad es .F. la búsqueda se hace después de cada pulsación de tecla. 4.4.15 Grupo de opciones Este control se utiliza para seleccionar una opción entre varias (fig. 4.20) f: . : : ,,,,.**..,,,.,, <,....n,..... .,....,en ; -: : $4 *i..,r.*..n.* . . ..rr& Fig. 4.20 Grupo de opciones Definir el número de opciones El número de opciones definidas depende de la propiedad ButonCount. Cuando modifica esta propiedad se añaden o quitan botones. 4.4.16 Control Numérico Se utilizan este tipo de objetos para elegir un valor dentro de un rango numérico (fig. 4.21). . : ! : f i:.,... ! : .: . . . : . . . : .. . .* ‘:. .. ‘: .: : .y . . . . . . 2.: : .: .. :’ Fig. 4.21 Control Numérico El valor se pede incrementar y decrementar pulsando los pequeños botones situados al lado derecho del control. I Incrementos y decrementos . El valor del decremento o incremento esta determinado por la propiedad Interval. Límites Se pueden especificar los límites entre los cuales se van a mover los valores. Dependiendo de que los valores se introduzcan por teclado o ratón son las propiedades que se usan. En cuanto a la introducción KeyboardHighValuey de datos por teclado, las propiedades KeyboardLowVaIue controlan los límites Superior e Inferior por teclado. Si utilizamos el ratón , SpinnerLowValue, las propiedades son SpinnerHighValue y Superior e Inferior respectivamente. Add Object spinner As spinner With; FontBold=.T., ; FontName=“Ms San serif’, ; FontSize = 9, ; Height = 25, ; Increment = 1000.00, ; lnputMask=“9,999,999”, ; KeyboardHighValue=l000000, ; KeyboardLowVaIue=lOOO, ; Left = 156, ; SpinnerHighValue=lOOOOO, ; SpinnerLowValue=lOOO, ; StatusBarText = “ Modifica el importe”, ; TooTipText = “Modifica el importe”, ; Top = 72, ; Width =85, ; Format=“k”; _ 4.4.17 Cuadrículas Maneja diversas filas y columnas de datos procedentes del contenido de una o mas tablas. Este objeto es un contenedor de objetos columnas. Cada objeto contiene una cabecera y un objeto control de edición. Este objeto control puede ser una casilla de verificación, cuadro combinado, botón de comando, cuadro de edición, cuadro de lista, grupo de opciones, control numérico, otra cuadrícula, cuadro de texto o contenedor (fig. 4.22) Fig 4.22 Cuadrícula Origen de los datos Las propiedades RecordSourceType y RecordSource determinan el tipo de datos mostrado y el origen de estos respectivamente. Cuando la propiedad ColumnCount esta con el calor a -1, la cuadrícula crea tantas columnas como campos definidos en la tabla, tomado los títulos de cada columna del título asociado al campo de la tabla. Origen Descripción RecordSourceType = 0 - Abre la tabla especificada en la propiedad RecordSource. RecordSourceType = 1 Especifica un alias de tabla. RecordSourceType = 2 Pide el origen asociado a la cuadrícula en tiempo de ejecución. RecordSourceType = 3 El origen proviene de una consulta . En la propiedad RecordSource debe especificarse el nombre del archivo .QPR Aspecto de la cuadrícula El aspecto de la cuadrícula depende de las siguientes propiedades: Propiedad Descripción DeleteMark Determina se va a mostrar la marca de borrado en cada fila. GridLineColor Color empleado en las líneas separadoras de celdas GridLínes Indica si se muestran las líneas horizontales o verticales separadoras de celdas GridLineWidth Ancho en puntos de las líneas separadoras de celdas. HeaderHeig ht Altura de la cabecera de la columna HighLight Determina que la celda que contiene el foco de lectura esté seleccionada. RecordMask Determina si la columna con el indicador de registro se visualizara en la cuadrícula. RowHeight Altura de las filas. ScrollBars Determina si las barras de desplazamiento aparecerán en la cuadrícula. Particiones Cuando se trata de mostrar mucha información en poco espacio, muchas veces limitado, se utilizan particiones para mostrar el mayor número de información posible. Propiedad Descripción Panel Número de panel activo en un objeto cuadrícula PanelLink Indica si los paneles derecho e izquierdo de un objeto cuadrícula estarán enlazados cuando se divida este. Partition Indica si un objeto cuadrícula está dividido en dos paneles. View Determina el tipo de vista para una cuadrícula. Si se han definido particiones, podemos definir el aspecto de cada una de ellas. Celda activa Para ver la posición de una celda activa, existe un serie de propiedades relacionadas. Pueden mostrar la posición de la fila y columna, o la posición de la celda activa. Propiedad Descripción ActiveRow Contiene el número de fila y columna activas en la ActiveColumn cuadrícula. RelativeRow Estas propiedades contiene el número de fila y columnas RelativeColumn relativas a la parte visible de la columna. Columnas Cuando se crea una nueva columna en una cuadrícula se crean automáticamente dos objetos dentro de misma: uno es la cabecera, que sirve para identificar la columna, y el otro, un cuadro de texto, utilizado como control de edición, o cualquier otro control valido. El campo que se va a editar depende de la propiedad ControlSource. La propiedad Bound asegura que esta situación se aplique a todos los controles contenidos en la columna. Si el contenido de la propiedad Bound es .T. no se permite modificar la propiedad ControlSource independientemente por cada control contenido. En caso contrario .F., el control contenido en el objeto columna puede adoptar un origen de datos distinto. También es posible impedir la edición de un control mediante la propiedad RadOnly. La dos propiedades que permiten que el usuario afecte el tamaño y la posición de cada columna son: Movable, determina que el usuario pueda mover la columna y Resizable, impide el cambio de tamaño en la anchura de la columna. Control de Lectura en una columna Además del cuadro de texto como control de lectura de una columna, también podemos tener: casilla de verificación, cuadro combinado, botón de comando, cuadro de edición, cuadro de lista, grupo de opciones, control numérico, otra cuadrícula, cuadro de texto o contenedor. Para insertar un control distinto al cuadro de texto incorporado por default, se hace lo siguiente: 1. Entrar al modo edición de objetos contenedores visto anteriormente. 2 . Elegir la columna donde se desea insertar el nuevo control de ediciórì. 3 . Elija el control de la barra de herramientas e insértelo en la columna. 4. Para activar el nuevo control de edición de datos cuando se ejecute la cuadrícula, es necesario cambiar la propiedad CurrentControl por el nombre del nuevo control. 5. Cambiar el valor de la propiedad Sparse , que indica que la columna mostrará como visualizador y editor, CurrentControl. el control establecido en Cabeceras Las cabeceras de columnas se comportan como cualquier objeto etiqueta y se utilizan para identificar los datos editados en la columna. Cuando se establece ColumnCount = -1 en la cuadrícula y se especifica una tabla perteneciente a una base de datos, el contenido de la propiedad Caption coincide con el contenido de la propiedad Encabezado de cada campo. Relaciones Cuando se establece una relación entre dos tablas, denominamos a la tabla padre como aquella que contiene la expresión con la que vamos a relacionar una segunda tabla, denominada tabla hija. De esta forma, cuando se desplace el puntero de registro en la primer tabla, en la segunda se mostraran aquellos registros que coincidan con la expresión relacional. Propiedad Descripción Link Master Nombre de la tabla hija ChilOrder Orden establecido en la tabla secundaria. Esta es al tabla de origen de datos de la cuadrícula. La expresión con la. que se ha construido este orden coincide con la expresión relacional. RelationalExpr Expresión relaciona1 que une a las dos tablas 4.4.18 Imagen i. . . . . . . . .._ Inserta una imagen con extensión .BMP o icono .ICO en el formulario. Definir el origen y el aspecto de la imagen El gráfico mostrado depende del valor de la propiedad Picture. Para delimitar los bordes de la imagen se puede dar valor a la propiedad BorderStyle para poder visualizar los límites de la imagen. La imagen se puede ajustar en el espacio asignado, con la propiedad Stretch. Valor Descripción 0 - Recortar Mantiene las dimensiones originales de la imagen 1 - Isométrico Acomoda la imagen al espacio asignado, manteniendo proporcionalmente sus dimensiones originales. 2 - Estirar Ignora las proporciones originales para acomodarse totalmente al espacio asignado ; 4.4.19 Cronómeto i Se utiliza el cronómetro para ejecutar procesos a intervalos regulares de tiempo. Tiene utilidad para actualizar formularios cada cierto tiempo, incorporar relojes o cronómetros de control de tiempo y otras aplicaciones. Determinar el funcionamiento de un crónometro La propiedad que determina el intervalo de tiempo entre cada control de tiempo se denomina Inthval. El cronometro mide el tiempo en milisegundos. Cada vez que se cumple el intervalo especificado en la propiedad Interval, se procede a la llamada del evento Timer() , que es el que realmente se va a encargar de realizar las acciones a intervalos fijos. Cuando se desea paralizar el cronómetro se pone la propiedad Enabled en .F. , cuando se restablece otra vez el cronómetro continua su cuenta. Por el contrario el método Reset() hace que la cuenta empiece desde cero. 4.4.20 Marco de página Cuando la información para capturar es mucha y no cabe en el formulario, se recurre a la inserción de objetos marco de página. Un marco de página esta compuesto de varias páginas; cada una de ellas puede contener distintos controles (fig. 4.23) Fig 4.23 Marco de página Funcionamiento de un marco de página Cuando se ejecuta un formulario conteniendo un marco de página, para cambiar de página activa, basta con pulsar en la pestaña superior que identifique la página. La página activa en un marco de página se guarda en la propiedad ActivePage. Del mismo modo, en tiempo de diseño, el número de páginas activas se determina con la propiedad PageCount. Determinado el aspecto gráfico de marco página Las pestañas, también denominadas Tabs, pueden estas visible o no, dependiendo del valor de la propiedad Tabs. Otra de las características de los marcos de páginas, es que cuando una página no puede mostrar la totalidad de los títulos de todas las páginas, recorta estos con el fin de mostrar todas las páginas. También es posible cambiar esta especificación haciendo que se visualice la totalidad del titulo. Entonces la páginas se apilan una de tras de otra. Esto se hace con la propiedad TabStretch. : Fig. 4.24 Propiedad TabStretch La propiedad TabStyle nos da la posibilidad de ponerle alineación a los títulos de las pestañas. TabStyle: O-Justificado. l=No Justificado. 4.4.21 Control contenedor OLE Este tipo de controles permiten incrustar o vincular cualquier tipo de objeto OLE en un formulario, desde un documento Word a un control Active X, pasando por archivos multimedia AVI o BMP. Determinar el tipo de objeto Como información básica, al insertar un nuevo control es necesario especificar que tipo de objeto es y su origen. Opción Descripción Crear nuevo Crea un nuevo objeto incrustado en formulario. Crear desde archivo Inserta el archivo especificado en el formulario. El archivo puede estar asociado al control de dos formas: Vincular: Cuando se activa la casilla de verificación vínculo, se crea un enlace entre el control OLE y el archivo origen. Las actualizaciones en ambos sentidos se realizan de forma automática Incrustar: Si se elige esta opción (default), el archivo queda incrustado creando una copia completa del mismo en el control. Insertar Control Ciando se elige esta opción visualizamos un cuadro de lista que contiene todos los controles Actives registrados en Visual Foxpro. 4.4.22 Control OLE dependiente La utilización de controles OLE dependientes se delimita para mostrar o editar el contenido de un campo de tipo general perteneciente a una tabla. 4.4.23 Líneas i. Este tipo de controles son utilizados para dibujar líneas de cualquier tipo y figuras geométricas cerradas (cuadradas o circulares). En cuanto a los objetos línea, existen dos parámetros importantes a tener en cuenta. La propiedad BorderWidth que determina el ancho de la línea, esta especificada en píxeles. La segunda propiedad es LíneSlant que determina la inclinación de la línea, de izquierda a derecha o viceversa. Los objetos de la clase Shape puede formar figuras rectangulares, así como circulares. Todo ello depende de la propiedad Curvature. Esta propiedad define la curvatura de los cuatro bordes de una figura rectangular, que va desde 0 hasta 99. Cuanto más se acerca al máximo, es más la definición circular. V PROGRAMACIÓN ORIENTADA A FORMULARIOS Los Formularios se utilizan para desplegar e introducir información y son el medio de comunicación entre el usuario y los datos. Un formulario está basado en la clase Form, esto quiere decir que tiene una serie de propiedades y métodos asociados de forma inmediata. Dentro de un formulario se puede insertar cualquier objeto basado en una clase base de Visual FoxPro o cualquier objeto OLE reconocido por Visual FoxPro. También los formularios llevan asociado un objeto entorno de datos. Este objeto guarda referencias a tablas que van a ser el origen de datos de los controles. De esta forma, cuando se ejecuta un formulario se abren las tablas especificadas en le entorno de datos y también se crean las relaciones que se definieron entre ellas. 5.1 Apariencia del diseñador de formularios Se van a distinguir cuatro ventanas: a)Ventana de diseño de formularios (fig. 5.1) Fig. 5.1 Ventana de Diseiio de Formularios b) Ventana de eventos, métodos v propiedades (fig. 5.2) Fig. 5.2 Ventana de eventos, métodos y propiedades c) Ventana de Códino (fig. 5.3) d) Entorno de datos (fig. 5.4) Fig. 5.4 Ventana de entorno de datos e) Ventana de C&troles (fig. 5.5) Fig 5.5 Ventana de controles 5.2 Opciones de formulario Mediante esta página se puede configurar el entorno de diseño de formularios. Se accede a ella desde la opción Options (opciones) situada en el menú Tools (herramientas). Si se realizan cambios en esta página y se establecen predeterminados, cada vez que se arranque Visual FoxPro se recuperará la configuración aquí descrita (Fig. 5.6) Fig 5.6 Opciones de Formulario a)m (cuadrícula). Este conjunto de opciones afecta a la disposición de la cuadrícula guía en la ventana de díseiio. l Grid lines ( Líneas de cuadrícula). Activa o desactiva la visualización de la cuadrícula. La cuadrícula consiste en las líneas punteadas horizontales y verticales que cubren al formulario. Snap to grid (Forzar a la cuadricula). Activa el ajuste automático de l los objetos a la cuadrícula. Cada vez que se redimensione o mueva un objeto lo hará en incrementos especificados en el espaciado horizontal y vertical. l Horizontal Spacing pixels (Espaciado horizontal pixeles): Espaciado horizontal de la cuadrícula. Vertical Spacing pixels (Espaciado Vertical pixeles): Espaciado l vertical de la cuadrícula. b) Show position (mostrar posición). Muestra en la barra de estado la posición del objeto y sus dimensiones. c) tab ordering (orden de tabulación). Especifica si es posible usar la combinación Shift + Clic para alterar el orden de objetos en un formulario. d) Scale units (unidades de escala). Indica la escala en la que se visualizara la cuadrícula. e) Maximum design area (área de diseno máxima). Este parámentro es muy útil para definir para qué tipo de resolución se va a desarrollar la aplicación f) Template classes (clases de plantilla.). Para agilizar la tarea de generar formularios, es posible especificar una clase perteneciente a una biblioteca de clase visuales como base para crear nuevos formularios. l Form Set (conjunto de formularios). Elige un conjunto de formularios procedente de una biblioteca de clases. l Form (formulario). Elige una clase basada en Form como plantilla para la creación de nuevos formularios. g) Builder lock. Mediante esta opción, cada vez que se anade un nuevo control al formulario, se llama al generador correspondiente a su clase. h) Prompt to save changes before running form (Avisar para guardar cambios antes de ejecutar el formulario. 5.3 La ventana propiedades La ventana propiedades permite modificar las propiedades de cada objeto. Esta ventana esta compuesta de cinco páginas. Para modificar el valor de cualquier propiedad, hay que seleccionar la propiedad , y a continuación se puede modificar directamente el dato o elegirlo de la lista de valores predeterminados. Opciones Cada vez que se pulsa el botón derecho sobre esta ventana, se muestra un menú con las siguientes opciones: Propierty descriptions (descripciones de las propiedades). Muestra o no, en la parte inferior de la ventana, la descripción correspondiente a la propiedad, evento o método que está seleccionado. Always on Top (siempre visible). Impiden que otras ventanas la oculten al situarse encima. Non-Default propierties only (~610 propiedades no predeterminadas). Opción muy interesante si se pretende descubrir que métodos tienen código o qtié propiedades han sido alteradas. Small font, Médium font, Large font (fuentes: pequenas, medianas, grandes). Elige el tamaño de la fuente utilizada en la lista de propiedades, eventos y métodos. Lista de objetos En la lista aparecen todos los objetos definidos dentro del formulario (fig.5.7). Fig. 5.7 Lista de objetos Páginas de propiedades y métodos Cada páginas esta compuesta por una línea de dos columnas. La primer columna muestra una lista de propiedades y métodos definidos par un control determinado. La segunda muestra el valor que tienen las propiedades. La paginas que componen esta ventana son las siguientes (fig. 5.8) : iAn _ l..c!dH Fig. 5.8 Páginas de la ventana de propiedades Página Descripción All (Todo) En esta página se encuentran todas las propiedades, eventos y métodos del objeto seleccionado. Data (Datos) Aquí están todas las propiedades relacionadas con el manejo de la dato. Methods (métodos) Lista de eventos y métodos pertenecientes a este objeto. La selección de cualquiera de éstos hace que se abra la ventana de código. Layout (distribución) Propiedades que afectan la visualización del .objeto como: color, estilo, tamaño, etc. Otros (other) En esta pagina se visualiza la clase en la que está basado el objeto, el nombre del mismo, o el orden que ocupa. Al final se muestran las propiedades definidas por el usuario. 5.4 Tipos de ventana Al nivel formulario existe una propiedad llamada BorderStyle que defibe el aspecto de la ventana de un formulario. l 0 - Sin borde. No muestra ningún tipo de borde por lo tanto no es posible mover ni cambiar el tamaAo de la ventana. 0 1 - Borde sencillo. Este borde no permite cambiar el tamafio de la ventana. l 2 - Borde doble ajustable. Este tipo de ventana permite cambiar el tamaño, maximizarla 0 minimizarla. 0 3 - Borde doble fijo. No permite modificar el tamaño de la ventana. En ocasiones es necesario que el usuario emita una respuesta y se le impida activar cualquier otra ventana o cualquier opción del menú. Este tipo de ventanas se llama de tipo Modal. La propiedad en cuestión es WindowType y permite los valores: l 0 - Sin modo. Permite acceder a cualquier otra ventana. l 1 - Modal. No permite activar otra ventana hasta que no se cierre ésta. La propiedad AlwaysOnTop, que, en caso de tener valor .T. impide que otros formularios lo oculten. 5.5. Controles de la barra de título Como estándar de Windows las ventanas de VisualFoxpro siguientes contienen las propiedades: Propiedad Descripción Closable Muestra el icono de cierre de ventana y la opción Cerrar del menú control. ControlBox Indica se ha de mostrar en la parte izquierda de la barra de título el menú control de ventana. HalfHeígtCaptíon Establece la altura de la barra de título a la mitad establecida en el entorno de Windows. Icon Archivo .ICO mostrado en la parte superior izquierda. MaxButton Indica si se ha demostrar el botón maximizar en la barra de título y en el menú control. MinButton Hace lo mismo que la propiedad anterior solo que con el botón de minimizar. Movable Impide el movimiento del formulario desde el menú control o la barra de título en caso de tener .F. WatsThisButton Indica si se ha de mostrar el botón ? en la barra de título. 5.6 Almacenamiento en Buffer. La propiedad BufferModeOverride del entorno de datos, establece con que sistema de almac.enamiento en buffer se abrirán las tablas utilizadas en el formulario. Valor Descripción 0 Ninguno 1 Pesimista 2 Optimista 5.7 Sesión de datos La propiedad de DataSession es fundamental en la manipulación de varios formularios en la pantalla. Cada formulario puede tener asociada una sesión de datos privada, de esta forma es poco probable que lo que ocurra entorno a un formulario modifique el resto de la aplicación. La propiedad puede tomar dos valores: 1 Sesión predeterminada de datos 2 Sesión privada de datos Cuando se abre una sesión privada de datos desaparece la mayoría de los SET, así como las variables públicas, por lo que barra de reinicializarlas. 5.8 Apariencia de un formulario La propiedades que a continuación mencionaremos las mismas que rigen la apariencia de la mayoría de los objetos como explicamos en un tema anterior: Propiedad Descripción FontName Determinamos el tipo de letra que se usara por defecto. De esta propiedad dependen propiedades como: TextHeight y TextWidth. ForeColor Determina el color de default del primer plano. Height Especifica la altura del formulario. Icon Archivo con extensión .ICO que aparecerá cuando se minimice el formulario. Coordenada de la columna de la esquina superior Left izquierda del formulario. Picture Llena el fondo del formulario con el gráfico de un archivo .BMP o .ICO. Coordenada de la fila de la esquina superior izquierda Top del formulario. Especifica el ancho del formulario Width 5.9 Otras propiedades ShowTips Esta propiedad deberá estar en .T. si deseamos que nos aparezca los mensajes que especificamos en la propiedad ToolTipText de los objetos ShowWindow Especifica cuando un formulario esta al máximo nivel o es un formulario hijo. Valor Descripción 0 Es el valor por default. Actúa como cualquier formulario, mostrándose en el escritorio de Visual Foxpro 1 Es un formulario que esta dentro de otro configurado como Top-level, esto significa que si esta activo un formulario Top-Level, 2 este le pertenecerá. Es un formulario independiente de la aplicación y puede incluir otros formularios. WindosState Con esta popiedad el formulario puede aparecer minimizado o maximizado. Valor Descripción 0 Normal 1 Minimizado 2 Maximizado 5.10 Eventos Como ya hemos dicho, los eventos son sucesos que ocurren siempre como respuesta a un mensaje del sistema o del usuario. Existen los siguientes eventos relacionados con un formulario: Evento Descripción Activate Ocurre cuando se activa un formulario. Deactivate La ventana pasa a estar en segundo plano. Destroy Ocurre cuando se elimina de memoria el formulario. GotFocus Ocurre cuando el formulario recibe el foco. Init Se ejecuta en el momento en que inicia un formulario. Load Ocurre antes de que el objeto formulario sea creado. LostFocus Ocurre cuando el objeto pierde el foco. moved Ocurre al mover una ventana. Paint Ocurre cuando se repinta el formulario. QueryUnload Ocurre antes de que el formulario sea liberado de memoria. Res ize Se ejecuta cuando un formulario cambia de tamaño. Unload Se ejecuta cuando el formulario es liberado de memoria. Secuencia de eventos l Eventos al ejecutar un formulario por primera vez: 1. Load 2 . INIT 3. Activate 4 . Paint 5. GotFocus 6 . Paint Eventos de control de una ventana: l Evento Resize 1. Resize 2. Paint Evento Moved 1. Moved 2. Paint 0 Eventos de control de una ventana activa Al entrar a un formulario 1. Activate 2. Paint 3 . GotFocus 4. Paint Al salir de un formulario 1. Lostfocus 2. Paint 3. Deactivate 4. Paint l Finalización del formulario 1. QueryUnload 2. Paint 3 . Destroy 4 . Paint 5. Unload 6 . Paint 5.11 Entorno de Datos Un formulario no pueda estar desligado de una tabla, por lo que debemos establecer una conexión entre los dos, esto se hace mediante el entorno de datos del formulario Dataenvironment. Para activar el entorno de datos debemos hacer clic en la opción Data Environment (entorno de datos) del menú View (ver) (fig. 5.4). Para incluir en el formulario las tablas o las vistas queremos utilizar es necesario hacer clic con el botón secundario del ratón dentro de la ventana de entorno de datos y seleccionar Add (agregar). 5.11 .l Propiedades del entorno de datos. Propiedad AutoCloseTables Descripción Si la propiedad es .T. las tablas se cerraran automáticamente al cerrar el formulario. AutoOpenTables Si la propiedad es .T. las tablas del entorno de datos se abrirán InitìalSelectedAlias automáticamente. Especifica cual va a ser la tabla seleccionada por defecto. OpenViews Determina se abre o no las vistas locales y remotas asociadas al formulario. O- Las vistas se abren automáticamente, siempre y cuando AutoOpenTables sea .T. 1 - Sólo se abren las vistas locales 2 - Sólo se abren las vistas remotas 3 - No abre ninguna vista 5.11.2 Métodos Método Descripción AfterCloseTables Es el evento que se produce después de cerrar las tablas. BeforeOpenTables Se ejecuta antes de abrir las tablas CloseTables Cierra por programa las tablas. OpenTables Abre por programa las tablas. 5.11.3 Cursores Los cursores son tablas creadas en la memoria, que vamos a utilizar en la asociación de tablas y formularios. Propiedades relacionadas con los cursores Para ver las propiedades relacionadas con los cursores, hacer clic en alguna de las tablas de formulario: Propiedad Descripción Alias Por default es el mismo nombre de la tabla. BufferModeOverride Establece el sistema de almacenamiento en buffer para el cursor. 0 - Ninguno l- Escoger el sistema de almacenamiento en buffer del formulario 2 - Bloqueo pesimista a nivel registro 3 - Bloqueo optimista a nivel registro 4 - Bloqueo pesimista a nivel tabla 5 - Bloqueo optimista a nivel tabla. CursorSource Propiedad solo lectura que muestra cual es la tabla o vista que ha creado el cursor. Data bastq Nombre de la Base de datos que contiene la tabla o vista Exclusive Por default es .F. , ponerlo en .T. cuando no utilicemos la tabla de manera compartida. Filter Establece un filtro para la tabla (equivale a la instrucción Set Filter To). Order Especificar alguno de las tag definidos en el archivo de índices de la tabla. Readonly Si deseamos que no haya modificaciones establecer en .T. 5.12 Formulario rápido Una forma de crear un formulario rápido es utilizando el asistente de Visual Foxpro: 1. Abra su proyecto 2. Ubíquese en la pestaña de Document (documento) y luego en Forms (formularios). 3. Presione el Botón New (nuevo). 4. Seleccione Wizard (asistente) (fig 5.9). Fig. 5.9 Asistente para Formularios. 5. Seleccione OK. 6. Luego aparece la ventana donde usted escoge la tabla a utilizar y los campos de esa tabla (fig 5.10). Fig. 5.10 Cuadro para la selección de tabla y campos 7. Se visualizará la siguiente ventana (fig.5.11) Fig.5.11 Cuadro para seleccionar el estilo de la formulario (Style) y el tipo de botones(Button Type) 10. Seleccione el estilo del formulario y el tipo de botones a utilizar en el formulario y luego presione Next (proximo). ll. Aparecerá la siguiente ventana (fig. 5.12) : 5.12 Cuadro para seleccionar los índices. 12. Seleccione el ordenamiento de la tabla (índice). 13. Introduzca el titulo del formulario y luego Finish (finalizar). VI INFORMES Los informes permiten mostrar e imprimir los datos contenidos en tablas, vistas o consultas en forma de listados. Dentro de los informes se pueden agrupar los datos, sacar calculos, definir variables para para contener resultados, contadores, subtotales y totales finales. Algunas de las funciones para cálculos que Visual FoxPro incluye son: media aritmética, mínimo, máximo, etc. 6.1 Diseñador de informes (fig. 6.1). : Fig. 6.1 Diseñador de Informes Diseñador de informes : Esta ventana esta dividida en siete secciones: l l Title (Título): Sólo se imprime al principio de la primera hoja del informe. l Page Header (Encabezado de página): Se imprime cada vez que se incia una hoja nueva. Group Header (encabezado de grupo): Suele utilizarse para identificar el l inicio de un grupo. Se puede cambiar el encabezado de página por el encabezado del grupo si se especifica salto de página por cada grupo. Detail (detalle): Este es el elemento fundamental de todos los informes, el l desglose. l l Group Footer (pie de grupo): Suele utilizarse siempre al fina del grupo. l Page Footer (Pie de página): Se imprime al final de cada página. 0 Summary (resumen): Se imprime una vez que finalizo el reporte. Entorno de datos: Asocia las tablas que se van a utilizar, las relaciones entre ellas y los órdenes establecidos. l Barra de controles: incluye todos los controles insertables en un informe. l l Etiqueta. Etiquetas de texto. Campo. Cuadros de texto. 0 Líneas l Formas rectangulares. l Formas rectangulares con bordes redondeados. l Objetos circulares 0 Imágenes Barra de herramientas de distribución (Layout): Permite alinear objetos, l ajustar su tamaño o enviar objetos al primer plano o al fondo. 6.2 Selección de los datos Esta es la parte más importante del informe, la selección de datos, hay que saber qué es lo que quiere el usuario o que el usuario muestre el diseño del informe que desea, para comenzar a trabajar. Los datos pueden ser simples (utilizando una sola tabla), como listados de regiones, listado de departamentos, entre otros; o pueden ser algo mas complejos (utilizando mas de una tabla) Ejemplo Reportes agrupados, reportes consolidados, etc. Los datos se pueden obtener directamente utilizando las tablas o utilizando SQL para crear cursores, esta última es la más recomendada para una aplicación multiusuario. Existen varios tipos de informes entre ellos : - Listados Muestra: id name 01 Region 1 02 Region 2 - Grupos con detalles Region Departamento Region 1 Departamento a Departamento b Region 2 Departamento x Departamento y - Matriciales o consolidados ------_---_---__--__------------------------ Rating Region Excellent Good Poor -------------------------------------------Region 1 1 2 0 Region 2 3 0 1 ------_---__--__---_-----------------------Totales 4 2 1 ----------------_--------------------------Una vez que definimos los como queremos nuestro informe y que datos va incluir hay que proceder a diseñarlo . 6.3 Sección Detalle Este es el elemento fundamental del informe, puesto que aquí se desglosa toda la información contenida en una o en varias tablas. Los objetos incluidos en esta sección se repiten tantas veces como registros haya en la tabla o en la vista principal sobre la que se este efectuando el informe. 6.3.1 Propiedades de la sección detalle Para acceder a las propiedades del detalle es necesario hacer doble clic sobre la barra Detail (fig. 6.2). Fig. 6.2 Propiedades del Detalle. (Heiqht a l t o ) : Tamaño de la sección de detalle, medido en las unidades establecidas para todo el informe. El tamaño se puede especificar de forma exacta en este cuadro de diálogo o directamente en el diseñador de informes. Para ello basta con poner el puntero del ratón sobre la barra del detalle y arrastrar. Constant band Heiqht (sección de alto constante): Es posible que la información contenida en un cuadro de texto tenga que ajustar su tamaño a varias líneas par poder visualizar el contenido, por lo tanto es posible que el alto de la sección aumente por ello, para evitar esta situación mediante esta opción impediremos que haya líneas de detalle con diferentes tamaños. On enttv , On exit (Ejecutar expresión al entrar y ejecutar expresión al salir): Estos dos cuadros de texto permiten especificar que expresión se evaluará antes y después de imprimir esta sección. Al igual que la sección detalle, las demás secciones presentan las mismas propiedades. 6.3.2 Controles insertables Existe una serie de objetos que van a poder ser insertados dentro del diseño de un informe. 6.3.2.1 Etiquetas Los controles de etiqueta consisten en textos introducidos directamente en la ventada del generador de informes. Para insertar un control de etiqueta dentro del informe: 1. Seleccione el control etiqueta. 2. Sitúese en el lugar donde desea la etiqueta. 3. Haga clic una vez con el botón izquierdo del ratón. 4. Aparece el cursor indicando que puede escribir. Cada etiqueta permite modificar su aspecto desde el menú Format (formato). Con opciónes como Align, Size, Horizontal Spacing, Vertical Spacing, Font, Text alignment y mode. Mediante el botón secundario podemos modificar las propiedades del objeto (fig. 6.3). Fig. 6.3 Propiedades de las etiquetas Print When (imprimir condiciones): Este objeto se imprimirá cuando la condición definida en este botón devuelva .T.. Obiect Position (posición del objeto): Float (Flotante): El control se ajunta a la posición de los elementos precedentes, es decir, si existe algún elemento anterior a éste que ocupe más especio del destinado, este objeto se imprimirá a continuación. Fix retative to top of band (borde superior de la sección) : Este objeto fija su posición con respecto al borde superior de la sección, independientemente si los objetos anteriores son variables. Fix relative to bottom of band (borde inferior de la sección): Igual que la opción anterior, sólo que fija su posición con el borde inferior. Comment (Comentario): Se utiliza para guardar el comentario del objeto. 6.3.2.2 Campos Los objetos de este tipo de utilizan para imprimir el contenido de los campos e tablas o vistas, expresiones o variables. Para insertar un control de campo: 1. Seleccione el control de campo. 2. Marque el inicio del control y arrastre el ratón sobre el diseñador de informes. 3. Defina las propiedades del control (fig. 6.4) 4. Pulse Aceptar. Si se desea posteriormente modificar las propiedades de un campo: 1. Haga doble clic sobre el objeto. 2. Pulse el botón secundario del ratón y elija del menú la opción properties Como los demás controles podemos modificar el aspecto de este control mediante el menú Format. Para cada objeto de campo se pueden especificar las siguientes propiedades: 6.4 Propiedades de campo Expresión (expresión): Este cuadro de texto permite introducir una expresión valida. Además haciendo clic en el botón de al lado (el de los puntos suspensivos) se puede acceder al generador de expresiones. Format (formato): Este cuadro de texto permite especificar las opciones de formateo para la salida impresa de la expresión que se haya introducido en el cuadro de texto Expresión (fig. 6.5). Fig. 6.5 Formato salida Format (formato): Este cuadro de texto se usa para introducir de forma directa la mascara del formato. Tipo de datos: Character, Numeric, Date (carácter, numérico y fecha): Especifica el tipo de datos que se va a mostrar. Editinq Options (opciones de edición): Según el tipo de datos escogido, muestra una serie de opciones de formato. l Cadena Carácter Descripción Opción Mayúsculas Ignorar @! de @R máscara Convierte la expresión a mayúsculas. Permite ignorar los caracteres de formato. entrada Formato SET DATE @D Muestra el dato como una fecha usando el formato actual establecido por Set Date. Formato de fecha @E Muestra la expresión como una fecha con el europea. formato dd/mm/aa. Alinear a la izquierda Alinea a la izquierda la cadena Alinear a la derecha @J Alinea a la derecha la cadena. Alinear al centro @I Centra la cadena. l Numérico Opción Carácter Descripción Alinear a la izquierda @B Alinea hacia la izquierda En blanco si es cero @Z No muestra nada en caso de que la expresión sea cero. (Negativo) @( Muestra los números negativos entre paréntesis CR si es positivo @C Muestra al final de la expresión numérica la cadena CR si el valor es positivo. DB si es Negativo @Ix Muestra al final de la expresión numérica la cadena DB si el calor es negativo. Cero iniciales @L Muestra ceros al inicio de la expresión numérica hasta completar el total de los dígitos. Moneda 63s Muestra el valor numérico con formato modeda. Notación científica @IA Muestra la expresión numérica en formato científico. l Fecha Opción Carácter Descripción Formato Set Date - @P Muestra la fecha en el formato establecido por Set Date Formato de fecha @E Muestra la fecha en formato dd/mm/aa. europea Field Position (posición del campo): Las opciones permitidas son las mismas que se ha descrito para las etiquetas. Stretch with overflow (Ajustar al contenido del texto): Esta opción es útil para expresiones de cadena sin longitud fija, como campos memo, permite que se expanda el campo para mostrar todo el texto contenido. Calculations (calculos fig.6.6): Permite especificar el tipo de cálculo que se va a realizar en este campo. Este cálculo se va realizando cada vez que se imprime el campo. Estos cálculos se inician al comienzo del informe y muestran su valor al final del mismo. Sin embargo esto se puede alterar escogiendo desde Reset (restablecer) el ámbito del cálculo. l End of Report (Fin del informe). Los cálculos abarcan todo el informe. Suele utilizarse para sumar globales. l End of page o End of column (final de página o final de columna): Se utiliza para calculare imprimir subtotales al final de cada página o columna. l Group of Report (Grupo de informe): Si escogemos esta opción, el cálculo volverá a iniciarse cuando inicie un nuevo grupo. Fig. 6.6 Cálculo Las opciones de cálculo posible son: Descripción Cálculo Count (recuento) Cuenta el número de veces que se imprime la expresión de este campo. Sum (Suma) Calcula la suma. Average Calcula la media aritmética. (promedio) Lowest (Mínimo) Muestra el calor mínimo del campo. Highest (Máximo) Muestra al valor máximo. Standard deviation Devuelve la desviación estándar de los valores. (Desviación Variance estándar) (varianza) Devuelve la varianza. Print When (imprimir condiciones): Permite entre otras cosas, evitar la impresión de valores repetidos si ya estaban en una línea, o evitar la impresión de un objeto en función a una expresión lógica. 6.3.2.3 Imágenes y Controles OLE dependientes. Se pueden incluir imágenes en un informe siempre que sean mapas de bits o un objeto OLE reconocido por Visual FoxPro (fig. 6.6) Fig. 6.6 Propiedades de la Imagen. Opción Clip Picture (recortar imagen) Descripción Si el marco es más pequeño que la imagen, mostrará sólo una parte de la misma- Si es mayor el marco que la imagen, se mostrara la misma al tamafio original y centrada en ‘el marco. Scale picture, retain shape Si el tamaño es más pequeño, mostrará la (Cambiar la escala de la imagen, imagen más pequeiia. conservar la forma) Lo mismo ocurre si el marco es mayor , amplia la imagen con las mismas proporciones. Scale picture, fil1 the frame Si el tamaño es menor que el de la imagen ésta (cambiar la escala de la imagen, se reduce, lo mismo que si el marco es mayor rellenar el marco) ampliándola, la diferencia es que la imagen se muestra rellenando totalmente el marco, la imagen pierde su proporción. 6.4 Menú Formato. Este menú como ya hemos dicho, contiene opciones para modificar el aspecto y posición de uno o más objetos seleccionados a la vez. Opción Descripción Align (alinear) Cambia la posición de uno o más objetos tomando como referencia los bordes del formulario o uno de los objetos. Size (tamaño) Modifica el tamaño de uno o más objetos en función de uno de ellos. Horizontal spacing Reduce, incrementa o iguala (espaciado horizontal existente entre dos o más objetos horizontal) el espacio seleccionados. Vertical spacing Reduce, incrementa o iguala el espacio vertical (Espacio existente Vertical) entre dos o más objetos seleccionados. Bring to front / send to back Muestra en primer lugar o envía al fondo el o (traer al primer plano / Enviar al los objetos seleccionados. fondo) GrouplUngroup Agrupa o desagrupa objetos. ( Agrupar / Desagrupar) Snap to grid / set grid scale Configura el aspecto de la cuadrícula. (Forzar a la cuadrícula / configurar cuadrícula Font (fuente) Modifica el tipo de fuente, tamaño y estilo. Text Alignment Cambia la alineación del texto para etiquetas y (alineación del texto) campos. Fil1 (relleno) Muestra ocho rellenos, sólo es útil en los rectángulos. Pen (borde) Selecciona el tamaño y estilo del borde de una línea o de los bordes de los rectángulos. Especifica el modo en que se va mostrar un Mode (Modo) objeto: Opaque (opaco) o Transparent (transparente). 6.5 Secciones de encabezado y pie de página. Se imprimen al inicio y al final de cada página. Se utilizan para imprimir los datos generales de la empresa, titulo del informe, la fecha, logotipo, etc. 6.6 Secciones de título y resumen. Estas dos secciones de un informe solo se imprimen al inicio y al final del informe. Se puede especificar o no su presencia mediante el menú Repott (informe) y la opción Title / Summary (título / resumen fig 6.7). Se pueden usar como portada de informes y totales. Si se indica New Page (nueva página) se imprimirán en solos en una hoja. Fig 6.7 Propiedades del Título / Resumen. 6.7 Variables en los informes. Dentro del diseño del informe se pueden crear variables (fig. 6.8). Funcionan exactamente igual que otra variable, sólo que tienen su ámbito restringido solo al informe. Una variable se calcula cada vez que se imprime una nueva línea de detalle. Fig. 6.8 Variables de informe Descripción Opción Esta lista contiene todas las variables definidas Variables hasta este momento. Cuando seleccionamos una variable , el cuadro de diálogo estará mostrando las propiedades de esta variable. Value to store Indica la expresión que se va a calcular cada vez. (almacenar Puede se un campo, el resultado a una llamada de valor) función, cualquier expresión valida. Initial Value Indica el valor inicial de la variable. (Valor inicial) Release after report Indica que ha de eliminar de memoria la variable (liberar después del informe) después de la impresión del informe. Calculate (calcular) Permite hacer cálculos en función a la variable. Reset at (reiniciar en) Se puede reiniciar una nuevo cálculo al: l End of report (fin del informe) l End of page (fin de la página) l End of column (Fin de la columna) l Group (Fin del grupo) La variable ese reinicializara con el valor inicial. 6.8 Impresión condicional. Hay ocasiones en las que no se deben imprimir ciertos objetos. Esto se puede evitar mediante el cuadro de diálogo Print When (fíg. 6.9). . Fig 6.9 Imprimir Condiciones Opción Descripción Print repeated values (imprimir valores Indica si se ha de imprimir el campo en la línea repetidos) siguiente si el mismo valor que tiene la línea actual. Also print Cuando se escoge no imprimir valores repetidos, se (imprimir puede forzar la impresión para que se inicie en una también) nueva pagina 0 un nuevo grupo. Remove line if blank Si debido a condiciones, no se imprime ningún (Quitar líneas en blanco) Print only when objeto en esta línea, son esta opción se omite. El objeto se imprimirá sólo cuando sea cierta la expresión is true expresión especificada en el cuadro de texto. (Imprimir sólo cuando la expresión sea verdadera) 6.9 Creación de grupos Los grupos se utilizan para establecer niveles en función a campos clave. Por ejemplo, un listado por zona de clientes. El hecho de crear grupos en un informe presupone que los registros están ordenados por la clave qu6 se pretende agrupar. De otro modo se podrían tener saltos indeseables. Si hacemos el listado propuesto en el primer párrafo, tendremos que crear una tabla de zona y una tabla de clientes. Posteriormente crearemos una relación entre las dos tablas por cve-zona y por último en la propiedad Order de Clientes, estableceremos como orden activo cve-zona (fig. 6.10) Fig. 6.10 Entorno de datos del informe El siguiente paso es crear el grupo. Para esto elija Data Grouping (agrupar datos) del menú Report (informe fig.6.11) ,.. 6.11 Agrupar datos Opción Descripción Group expressions Especificar en orden, los grupos que desea formar (expresiones en el informe. de agrupación) Start Group on new colum Debe elegir esta opción si se ha diseíiado el (comezar grupo en una nueva informe para más de una columna. columna) Start each group on a new Esta opción es parecida a la anterior, sólo en en page (comenzar cada grupo lugar de comenzar en una nueva columna, en una nueva página) comienza en una nueva página. Reset page number to 1 for Cada grupo empieza con el número de página 1. each Group (Empezar en página 1 por cada grupo) Reprìnt group header on Imprime en cada página el encabezado de grupo each page (imprimir el en lugar del encabezado de página. encabezado de grupo en cada página. Start group on new page Si el tamaño especificado aquí es menor que el when less than ( Comenzar que queda al final de la hoja cuando se acaba un grupo en nueva página grupo, en nuevo grupo comenzara en una nueva cuando sea menor que. página. 6.10 Columnas en infomes. Se utilizan las columnas par imprimir un mayor número de líneas de detalle en una pagina. El diseño de columnas, sólo afecta a la sección de detalle y a todas las que se relacionan con ella, como son encabezado y pies de grupo. Estas propiedades se cambian desde el cuadro de diálogo Page Setup. 6.11 Impresión de un informe. Para imprimir un informe: l Desde el proyecto: Entre al informe que desee imprimir. Una vez adentro haba clic sobre el botón imprimir de la barra estándar o sobre la opción Run report del menú Report. l Desde el menú archivo: Elija la opción imprimir. l Menú de botón derecho: Elija la opción imprimir de este menú. l Desde la ventana de comandos: Introduzca el comando Report Form. 6.12 Vista preliminar. Si se desea ve por pantalla una presentación preliminar del informe, necesita estar en el informe que desea ver y desde la barra estándar elegir el botón Print Preview o desde el menú archivo seleccionar la misma opción. VII INTERNET & VISUAL FOXPRO La red de redes se extiende cada día, hoy en día somos más de 70 millones de personas que nos interconectamos gracias a Internet. Visual FoxPro no se podía quedar atrás y ha agregado utilerías para que podamos consultar la información de las bases de datos de VisualFoxpro desde el Web. Además de poder incluir en nuestras aplicaciones un explorador para consulta del Web. 7.1 Acceso a páginas Internet desde Visual FoxPro. La forma más sencilla de incorporar soporte de páginas HTML desde Visual FoxPro puede ser la de utilizar el objeto Explorer aportado por el explorador Internet Explores 4. Se puede crear un formulario e insertar este objeto y, además tener un control total desde Visual FoxPro. 7.1 .l Propiedades Propiedad Descripción Application Devuelve el objeto contenedor. Busy Indica si el explorador esta ocupado recuperando una página HTML. Document Devuelve una referencia de objeto al documento actual. FullName Devuelve el nombre del ejecutable incluyendo la ruta que contiene al explorador. LocationName Devuelve una cadena conteniendo el nombre del recurso visualizado en ese momento. Si el recurso es una pagina HTML devuelve el título de la página. LocationURL Devuelve la cadena conteniendo el URL de la página MenuBar visualizada. Determina si se ha demostrar o no la barra de menús. Determina si se ha de mostrar o no la varra de StatusBar estado. Determina si se ha de mostrar o no la barra de ToolBar herramientas. Determina la distancia entre el borde superior del Top objeto contenedor y el borde superior del objeto explorer. Devuelve una cadena especificando el tipo de TYPe recurso 7.1.2 Métodos visualizado. - Método Descripción ClientToWindow Son las coordenadas X y Y del cliente explorador en la ventana contenedora. GetProperty Devuelve el valor de una propiedad el objeto explorador. GoBack Visualiza la página anterior. GoForward Visualiza la página siguiente GoHome Muestra en el explorador la página inicio. GoSearch Visualiza la página de búsqueda. Navigate Navega hacia el recurso especificado por un URL PutProperty Fija el valor de una propiedad. Quit Cierra el Internet Explorer Refresh Actualiza la página que se esta visualizando. stop Cancela la operación de búsqueda. 7.1.3 Eventos Evento Descripción BeforeNavigate Ocurre justo antes de que el explorador navege hacia una nueva página. CommandChangeState Ocurre cuando el estado de un comando cambia. DownloadBegin Ocurre cuando se inicia una operación de navegación, después del evento BeforeNavigate. DownloadComplete Ocurre cuando la navegación finaliza por cualquier motivo. NavigateComplete Ocurre cuando el explorador ha llegado a la nueva localización. NewWindow Ocurre cuando se crea una nueva ventana para el explorador. Property Change Ocurre cuando se ha ejecutado el método PutProperiy. Ocurre cuando el explorador esta listo para salir de Quit la aplicación. StatusTextChange Ocurre cuando cambia el texto de la barra de estado. TitleChange Ocurre cuando el titulo del documento mostrado esta listo o cambia su contenido. WindowActivate Ocurre cuando se activa la ventana principal del Internet. WindowMove Ocurre siempre que se mueve la ventana de Internet WindowResize explorer. Ocurre cuando cambia el tamaño de la ventana 7.2 Aplicaciones para Internet. Visual FoxPro ha incluido un poderoso asistente para crear paginas de consulta en Internet , para crear estas páginas es necesario: Abrir el asistente. Desde el menú Tools (herramientas), elija la opciones: Wizards (asistentes), All (Todos fig. 7.1) (asistente para páginas de búsqueda de WWW fig. 7.2) y Internet Search Wizard Fig. 7.1 Asistentes de Visual FoxPro Fig. 7.2 Asistente para páginas de búsqueda WWW Paso 1 Select table (selección de tabla fig 7.3) En este paso el asistente solicita la tabla que se va a publicar. Se tiene dos alternativas: Tablas libres y tablas dependientes. Si se tenia abierto un proyecto, al tratar de seleccionar la tabla este aparecerá, al elegirlo se mostrarán las tablas que contiene. Por el contrario si no se ha estado trabajando con ningún proyecto existe el botón Browse (mostrar) para seleccionarlo. Es importante hacer notar que la tabla o base de datos debe residir en el directorio Tools\inetWiz\Server del directorio de Visual FoxPro. Fig. 7.3 Paso 1 - Selección de tablas Paso 2 Choose Search Field (selección del campo de búsqueda fig. 7.4) Es recomendable tener al menos un índice en la tabla para hacer más eficiente la búsqueda. En este paso el asistente muestra un relación de los índices que contiene la tabla. Sólo podrá seleccionar uno para optimizar la búsqueda. S tep 2 - Choose Search Fleld Fig. 7.4 Seleccionar el campo de búsqueda. Paso 3 Set search page options (establecer opciones para la página de búsqueda fig. 7.5) Este paso nos permite poner el título de nuestra pagina en el cuadro de texto Search Page Title (título de la página de búsqueda), el cual se ubicara el la parte superior de la página. El cuadro de texto Search page description (descripción de la página de búsqueda) nos permite añadir una breve descripción de nuestra página, a la vez que puede ser utilizado para describir la forma de utilizar la página. Fig. 7.5 Establecer opciones de página de búsqueda Paso 4 Set up Search Page (configurar la página de búsqueda fig 7.6) Si se desea agregar imágenes a la página, en este paso se puede añadir una imagen de fondo ( Backgound Image) y de encabezado (Header Image). Al activar la casilla de verificación Provide the ability to download the result set as file (proporcionar la posibilidad de transferir el conjunto), el asistente agrega a la página una casilla de verificación para que el visitante pueda seleccionar y transferir datos. Fig. 7.6 Configurar la página de búsqueda. Paso 5 Select result fields (seleccione el campo de resultados fig. 7.7) En este cuadro de diálogo seleccionamos de la lista de campos mostrados los que queremos mostrar en la página. Fig. 7.7 Selección de campos que aparecerán en la página. Paso 6 Set up result page (Configurar pagina de resultados fig.7.8) Este paso nos permite configurar la página de resultados, que no es otra que la página con la consulta ejecutada, al igual que en la página de búsqueda nos deja añadir dos imágenes la de fondo y encabezado, además de especificar cuantos registros queremos que nos muestre por página (Maximum records) y cual es el nombre del origen de datos ODBC. S t e o 6. Set UD Result Paoe 1<none> FoxPro Server Fig. 7.8 Configurar página de resultados. Paso 7 Finalizar Al hacer clic en finalizar y al guardar el archivo. Visual FoxPro nos genera 3 archivos con este nombre: Archivo Descripción .HTM Archivo HTML el cual es nuestra página de búsqueda. .IDC Es el archivo de consulta y contiene una sentencia SQL. .HTX Archivo HTML que corresponde a la página de resultados. Si se conoce el HTML, estos archivos pueden ser editados para elaborar páginas mas sofisticadas. Ejemplo de Archivo .HTM <HTML> <HEAD> <TITLE>LISTADO DE CLIENTES POR ZONA4lITLE> 4HEADr <CENTER>chl>LISTADO DE CLIENTES POR ZONA</hl></CENTER> -=P> -4BODY> <P> <CENTER> <P></P> <FORM ACTION=“PRUEBA.IDC” METHOD=“POST”> 4NPUT NAME=“SearchParam” SIZE=lO VALUE=“” r 4NPUT TYPE=“SUBMIT” VALUE=“Search”> <br> </CENTER> <hr>ccenter> 4mg src=“IMG/FOXSM.GIF”>’ Generated by the Visual FoxPro WWW Search Page Wizard<br> </center> <hr> </FORM> 4BODY> </HTML> Ejemplo de un archivo .IDC Datasource: DatosFox Template: PRUEBA.HTX SQLStatement: +SELECT Cve cte, Nom-cte, Cve-zona + FROM ‘CLIEf?TES’ + WHERE Cvezona = ‘%SearchParam%’ Maxrecords: 10 Ejemplo de un archivo .HTX <HTML> <HEAD> <TITLE>Visual </HEAD> FoxPro Query Return Page</TITLE> cHEAD><TITLE>Visual FoxPro WWW Data Server</TITLE></HEAD> cBODY> cCENTER>cHl>Search Resultsc/Hl><H2zVFP WWW Data Serverc/H2><HR></CENTER> <PRE> <%BEGINDETAIL%> cNOBR><B>c%Cve-cte%x/B>: <%ENDDETAIL%> </PRE> cHR> <DL> <%BEGINDETAIL%> cDT><Bx%Cve-cte%x/B> <BR> <%ENDDETAIL%> -4DL> cHR> </BODY> </HTML> <%Nomcte%=-, <%Cvezona%x/NOBRz Conclusiones Las características más importantes que Visual FoxPro ha venido incorporando son: l Poderosos Asistentes para el desarrollo de menús, bases de datos, clases, paginas web, informes, etiquetas, etc. 0 Características avanzadas de bases de datos como: reglas a nivel registro, triggers (desencadenantes) de actualización, borrado e inserción, relaciones temporales 0 permanentes, etc. l El administrador de proyectos nos engloba todo lo que podemos crear en nuestras aplicaciones, sin necesidad de estar navegando entre menús. l Características avanzadas en el diseño de clases orientadas a objeto, incluyendo herencia, subclases, encapsulación y polimorfismo. Las librerías de clases visuales y no visuales (por código) reducen enormemente el tiempo de desarrollo. l Existen herramientas de diseño para todas las fases de desarrollo de la aplicación. Un motor de bases de datos altamente eficiente, un lenguaje centrado en los datos y la capacidad de creación de componentes hacen de Visual FoxPro una herramienta idónea para la generación de aplicaciones. . Visual FoxPro puede intercambiar datos con bases de datos SQL a través de OCBC. De esta forma, no es necesario un gran esfuerzo en la adaptación de aplicaciones basadas en servidor de ficheros a aplicaciones Cliente / servidor. Las características anteriormente descritas permiten que cada vez una mayor cantidad de usuarios que antaño programaban mediante Clipper encuentren una gran posibilidad de migrar sus aplicaciones desarrolladas para plataforma DOS a un ambiente de 32 bits o ambiente Windows sin grandes problemas de portabilidad, los cuales fueron superados en la versión 6.0 de Visual FoxPro. Bibliografía l Pedro J. Hernández Muñoz (1998). Visual FoxPro 5 Desarrollo de Aplicaciones (la. ed). España: Mc Graw Hill. l Rubén Iglesias (1997). Visual FoxPro 5 Fundamentos v Técnicas de Programación (la. ed). España: Computec Ra-ma. 0 Susan L. Reber, Robert Nichols Kulik, David Garza Marin (1998). Visual FoxPro 5.0 (la. ed). México: Prentice Hall l Microsoft, Manual de FoxPro 5.0 (1997).