Revista Compus21 - Foxpro-Jose de La Rosa Vidal-Http://jose-De-La-Rosa - Blogspot.com
Revista Compus21 - Foxpro-Jose de La Rosa Vidal-Http://jose-De-La-Rosa - Blogspot.com
Revista Compus21 - Foxpro-Jose de La Rosa Vidal-Http://jose-De-La-Rosa - Blogspot.com
Prácticas FoxPro
INTRODUCCION
Visual Fox Pro pertenece a la familia Xbase lo que hace que su programación sea
sencilla, estructurada y más fácil de entender tanto para programadores principiantes como
programadores expertos.
VISUAL FOXPRO
CONCEPTOS BÁSICOS:
Base de Datos: Una base de datos o banco de datos es un conjunto de datos pertenecientes
a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este
sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por
documentos y textos impresos en papel e indexados para su consulta.
Campo: Corresponde al nombre de la columna. Debe ser único y además de tener un tipo
de dato asociado.
Registro: Corresponde a cada fila que compone la tabla. Allí se componen los datos y los
registros. Eventualmente pueden ser nulos en su almacenamientos.
En la definición de cada campo, debe existir un nombre único, con su tipo de dato
correspondiente. Esto es útil a la hora de manejar varios campos en la tabla, ya que cada
nombre de campo debe ser distinto entre sí.
A los campos se les puede asignar, además, propiedades especiales que afectan a los
registros insertados. El campo puede ser definido como índice o autoincrementable, lo cual
permite que los datos de ese campo cambien solos o sean el principal indicar a la hora de
ordenar los datos contenidos.
Cada tabla creada debe tener un nombre único en la cada Base de Datos, haciéndola
accesible mediante su nombre o su sinónimo (dependiendo del tipo de base de datos
elegida).
Ingreso al programa:
− Haga clic en el botón de Inicio.
− Elija Programas.
− Luego Microsoft Visual FoxPro.
− Luego el icono de Microsoft Visual FoxPro 6.0
Barra de Título
Barra de Menús
Barra de
Herramientas
Ventana de
Comandos
Barra de Estado
EL ADMINISTRADOR DE PROYECTOS:
Una recomendación, cree un directorio para su aplicación y dentro de el, uno para
las tablas, otro para los informes, formularios y recursos (archivos BMP, librerías, etc.), es
importante mantener un orden, le ahorrara dolores de cabeza para ubicar un archivo, o
diferenciar cuales son externos (que deben acompañar al ejecutable, como son las tablas,
librerías, archivos BMP, etc.)
SET DATE
SET SYSMENU
En un proyecto, una base de datos se crea colocando la información en tablas con sus
respectivas relaciones utilizando de ventana de diseño.
Contendedor de
la Base de Datos
Barra de herramientas
para BD
CREACIÓN DE TABLAS:
Las tablas pueden agregarse a una base de datos utilizando dos herramientas : El Asistente
de Tablas o el Generador de Tablas. Para realizarlo seguirm los pasos siguientes:
− Click en el botón de Nueva tabla, aparecerá la ventana Nueva Tabla.
Tipos de Campos
Los campos no deben de contener caracteres especiales, fuera del carácter "Guión bajo", y
tampoco puede empezar con un número. Pueden ser cuales quiera de varios tipos:
General Permite guardar datos tipo OLE, por Hoja de cálculo de Excel, un control
ejemplo imágenes, sonidos u otros ActiveX
creados por una aplicación diferente.
Carácter Igual que Character, pero los valores Las contraseñas de usuario
(binario) no se traducen cuando cambia la almacenadas en una tabla y usadas
tabla de códigos en distintos países
Memo Igual que Memo, pero los valores no Un archivo de comandos de inicio
(binario) se traducen cuando cambia la tabla de sesión empleado en distintos
de códigos países
Proceso de Indexación:
Cuando haya creado una tabla, puede ordenar los datos para acelerar la obtención de datos
mediante índices. Con los índices, puede procesar rápidamente los registros para
mostrarlos, consultarlos o imprimir. También puede seleccionar registros, controlar si se
introducen valores duplicados en un campo y admitir relaciones entre tablas.
VFP ofrece cuatro tipos de índice diferentes, cada uno con características predeterminadas:
− Principal
− Candidato
− Normal
− Único
Los índices principales, aseguran que sólo se introducen valores únicos en un campo y
determinan el orden en el que se procesan los registros. Puede crear un índice principal
para cada tabla si la tabla está incluida en la base de datos. Si la tabla ya tiene un índice
principal, agregue un índice candidato. Este índice es el que define el campo clave
Los índices candidatos, también imponen valores únicos y determinan en qué orden se
procesan los registros, como un índice primario. Puede tener varios índices candidatos por
tabla en bases de datos y en tablas libres.
Los índices normales, determinan el orden en que se procesan los registros pero permite
que se introduzcan valores duplicados en un campo. Puede agregar más de un índice
normal a una tabla.
Por compatibilidad con versiones anteriores, también puede crear un índice único que
selecciona y ordena un subconjunto de registros según la primera aparición de un valor en
el campo que especifique. Si quiere seleccionar registros de esta manera, es posible que
quiera crear una consulta o una vista en lugar de ello.
Por ejemplo si en este momento necesitáramos una lista de precios probablemente la
querríamos en orden alfabético y en otras ocasiones según el código, solucionaremos
ambos casos creando dos índices:
SINTAXIS
Si presionamos que SI nos aparecerá una nueva ventana en la cuál vamos a empezar a
rellenar los registros para dicha tabla.
Otro tipo de comandos útiles para la manipulación de tablas y registros son las
FUNCIONES, las cuales se dividen en:
) Cadenas o manejo de caracteres: este grupo de funciones gestiona el manejo de
caracteres.
) Matemáticas: permiten efectauar operaciones con valores numéricos.
) Manejo de fechas y hora: se encarga de gesstionar las variables de tipo fecha.
) Lógicas: Se encargan de efectuar operaciones de tipo lógico.
) Funciones de converción de tipos: conviertes variables de un tipo a otro.
Funciones:
Son procesos internos programadores que pueden ser llamados desde cualquier punta de
Visual Fox lo que diferencia de los mandatos de las funciones es que estas devuelven un
valor. Aceptan una serie de parámetros, y se reconocen por el uso de paréntesis para
encerrar los argumentos, por ejemplo DATE( ) y TIME ( ).
Las funciones se dividen de la siguiente forma:
• Tipos de datos
• Funciones de manejo de cadenas de caracteres.
• Funciones de conversión de tipos
• Funciones de fecha y hora
• Funciones de manejo de valores numéricos
• Funciones definidas por los usuarios (FDU)
Operadores relacionales:
Los operadores se utilizan en tiempo de ejecuciòn para unir dos o màs elementos del
lenguaje.
Operadores aritméticos
( ) Agrupa subexpresiones
**, ^ Exponenciación
*, / Multiplicaciòn y división
% Módulo (resto de la división)
+, - Suma y resta
Operadores relacionales:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
= igual a
<>, #, ¡=Distinto de
$ Contenido en
cuenta = 0
* Asignación de datos
cadena1 = “abcd efgh ijkl”
* utilizando la función LEN para contar el número de la cadena
? LEN(Cadena1) && imprime en pantalla 14
? Cadena2= SUSBTR(cadena1,1,4) && imprime en pantalla abad
? DTOC(DATE())
? SIN (0)
Índices:
Cuando se insertan registros en una tabla estos no se encuentran ordenados, para ello es
necesario utilizar comandos que nos permitan ordenar los registros de acorde a la
información que necesitamos.
Comando SORT
Clasifica un archivo de base de datos
SINTAXIS
SORT TO <archivo> ON <campo> [/A] [/D] [/C]
[,<campo2> [/A] [/D] [/C]..]
[ASCENDING | DESCENDING]
[<alcances>]
[FOR <expresión lógica1>] [WHILE <expresión lógica2>]
[FIELDS <lista de campos>]
EJEMPLO:
USE persona
SORT TO persona_ordenada ON nombre
USE persona_ordenada
Persona persona_ordenada
Juan Martínez Eduardo Garay
Roxana Cuellar Juan Martínez
Margarita Rosales Margarita Rosales
Pedro López Pedro López
Eduardo Garay Roxana Cuellar
Comando INDEX ON
Consultas:
Las consultas son pedidos de información a Base de Datos. Se utilizan las consultas
cuando queremos realizar pedidos de datos a una base de datos.
Creando una consulta: Para crear una nueva consulta se puede de ingresar al menú
Archivo, luego seleccionar el submenú Nuevo, y de la ventana que nos muestra seleccionar
la opción Consulta, seguidamente de Nuevo Archivo.
En este caso como las tablas ya están relacionadas, según las estructuras de los índices
indicados, el paso siguiente es el Paso 3 de filtro de registro. En Valor Vamos a Poner un dato de
la tabla que corresponde al Código.
Paso 4 - Ordenar registros
Opciones de la ventana
Bandas
De forma predeterminada, el Diseñador de informes muestra tres bandas: Encabezado de
página, Detalle y Pie de página. En la parte inferior de cada banda hay una barra
separadora. El nombre de la banda aparece en la barra gris junto a una flecha azul, que
indica que la banda está encima, no debajo, de la barra gris.
Puede agregar las siguientes bandas a su informe.
Banda Se imprime Contenido típico
Encabezado de Una vez por columna Título de columna
columna
Pie de columna Una vez por columna Resumen, totales
Encabezado de Una vez por grupo Precede los datos siguientes
grupo
Pie de grupo Una vez por grupo Valores calculados para grupos de datos
Título Una vez por informe Título
Fecha o número de página
Logotipo de la compañía
Cuadro alrededor del título
Resumen Una vez por informe Totales
Texto como Suma total
Regla:
El Diseñador de informes tiene una regla vertical y otra horizontal que puede utilizar para
colocar de forma más precisa los objetos en las bandas. Utilice las reglas junto con el
comando Ver del menú Mostrar posición para ayudarle en la colocación de los objetos.
La escala de la regla viene determinada por las configuraciones de medidas de su sistema.
Puede cambiar de la escala predeterminada del sistema (pulgadas o centímetros) a píxeles
desde dentro de Visual FoxPro. Si desea cambiar al valor predeterminado del sistema,
cambie la configuración de medidas de su sistema operativo.
3. PROGRAMACIÓN:
Conceptos:
Usualmente se agrupa el código fuente en archivos de programa. Un archivo de programa
esta compuesto de varias sentencias, que incluyen comandos, funciones y estructuras de
control de flujo.
El compilador traduce el contenido de estos archivos de texto ASCII a código interpretado.
En cuanto el compilador ha traducido el código fuente crea un archivo con extensión .FXP
que es el que va a utilizar a partir de ese momento. Cada vez que el programador
introduce algún cambio en el archivo .PRG el compilador compara la fecha de ambos
archivos y crea una nueva versión compilada del programa.
Una de las técnicas más útiles en la programación son los encabezados de programa, por
ejemplo:
* Nombre del programa : nombre
* Autor : Héctor Hernández
* Propósito : Dibujar cuadros en la pantalla
* Fecha : 12/12/2001
Comandos de Asignación:
Para crear variables de memoria y darles valores al mismo tiempo, escriba lo siguiente:
Input: Imprime por pantalla un mensaje y me da la opción para capturar un valor en una
variable.
X=3
STORE “lunes” TO día
Operadores:
Los operadores + y – son, por supuesto, usados para añadir y substraer números, pero
también se pueden usar en campos de caracteres. El operador más eslabona dos
expresiones de caracteres, campos o variables de memoria, de forma que Fred + Smith;
producirá: FredSmith. El operador menos quita espacio rezagado.
ENNDO
Puede salir de estas construcciones cíclicas en cualquier momento mediante el comando:
EXIT.
La ramificación en VF es controlada con la construcción IF.. ENDIF, por ejemplo:
IF I >10
? [El contador excedió 10]
ENDIF
Los contadores se utilizan a menudo para salir de operaciones cíclicas:
L=1
DO WHILE L=LEN(nombrelista)
IF [CRUZ]$ nombrelista(L)
SEEK nombrelista(L)
IF nombre= [John]
DO prgnombre
LOOP
ENDIF
ENDIF
ENDDO
Se recomienda que cuando se utiliza un operador cíclico, un operador condicional, o
cualquier otro operador que abra y cierre una estructura se escriba el comando primero y
luego se realice el proceso, esto para no perderse en la programación.
Tipos de comandos
Vamos a dividir los comandos según su funcionalidad en los siguientes tipos:
1. Base de datos: Todos los que sirven para manipular bases de datos, tablas y
campos.
2. Entorno: Entorno del sistema operativo y de Visual Fox Pro.
3. Acceso compartido a datos: Acceso multiusuario a tablas y base de datos.
4. Entrada y salida: Los que permiten la interfaz entre la computadora y el usuario.
5. Programación: Los que tienen relación con el entorno de desarrollo de aplicaciones.
4. FORMULARIOS:
Creando un Formulario:
Click en: Archivo > Nuevo > ( ) Formulario > Nuevo archivo
Diseñador de formulario
Conceptos básicos:
Objeto: Una instancia de una clase que combina datos y procedimientos. Por ejemplo, un
control de un formulario en ejecución es un objeto.
Formulario: Se utilizan para visualizar e introducir cualquier tipo de información y son el
medio de comunicación entre el usuario y los datos.
Propiedades: Un atributo de un control, campo u objeto de base de datos que se establece
para definir una de las características del objeto o un aspecto de su comportamiento. Por
ejemplo, la propiedad Visible afecta a la visibilidad en tiempo de ejecución de un control.
Puede cambiar los valores de las propiedades de objeto mediante la ventana Propiedades.
Evento: Una acción, reconocida por un objeto, para la cual puede escribir código de
respuesta. Los eventos pueden estar generados por una acción del usuario, como hacer clic
con el mouse o presionar una tecla, por código de programa o por el sistema, como ocurre
con los cronómetros.
Método: Una acción que un objeto es capaz de realizar. Por ejemplo, los cuadros de lista
tienen métodos llamados AddItem, RemoveItem y Clear para mantener el contenido de las
listas.
Barra de herramientas: Una serie de botones en los que se hace clic para realizar tareas
frecuentes. Las barras de herramientas pueden flotar en su propia ventana o bien puede
acopladas en los extremos superior, inferior o laterales de la ventana principal de Visual
FoxPro. Puede personalizar las barras de herramientas suministradas con Visual FoxPro,
así como crear barras de herramientas propias mediante la clase de base ToolBar incluida
con Visual FoxPro.
BARRAS DE HERRAMIENTAS:
Nos muestra los controles básicos y disponibles del Visual FoxPro,
estos son llamados clases bases.
Tipos de Controles: Los controles son aquellos objetos que se
colocan en un formulario.
Propiedad Uso
Caption Título de la ventana o forma
Autocenter Centra el formulario
ShowTips Para que se muestren los Tooltips
Closable Visualiza el botón cerrar de la ventana
MaxButton Visualiza el botón maximizar
MinButton Visualiza el botón minimizar
ControlBox Visualiza el menú de control de la ventana
Eventos o Métodos Uso
Init Se dispara a la hora que se inicializan todos los objetos del
formulario
Load Se dispara antes que se inicialicen los objetos del formularios
(antes que el init)
Destroy Se dispara al cerrar el formulario
Unload Se dispara después de Destroy
Propiedad Uso
Caption Título de la ventana o forma
Alignment Especifica la alinación del texto
Name Nombre del objeto
BackColor Color de fondo
ForeColor Color de la letra
Los cuadros de texto sirven para capturar los datos de los campos.
Propiedades Uso
ControlSource Es la variable o nombre del campo al cual se hace referencia
Value Contenido de la variable o campo referenciado al ControlSource
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no
Evento o Método Uso
Click Se dispara al dar clic en el objeto
GotFocus Cuando el control toma el enfoque
Botones de comando
Un control que está asociado a un comando. Cuando hace clic en el botón de comando en
tiempo de ejecución, el comando asociado al botón se ejecuta.
Propiedades Uso
Captio Etiqueta del comando
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado
Propiedades Uso
ControlSource Es la variable o nombre del campo al cual hace referencia
Value Contenido de la variable o campo referenciado en ControlSource
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no
Propiedades Uso
ControlSource Variable a que hace referencia (campo donde se almacena el
valor de la lista)
RowSource Tabla o query de los elementos de la lista
rowSourceType Tipo de la fuente (si es tabla o query)
Visible Si el control es visible al usuario
Enabled Si el control esta habilitado o no
BoundColumn Valor que retorna la lisa (número de la columna de Rowsource)
BoundTo Especifica si el valor de la lista esta determinado por los valores
o por la propiedad ListIndex
Cuadrícula:
Un control que crea una cuadrícula y que le permite presentar los datos en un formato
tabular. Los controles de tipo cuadrícula contienen encabezados de columna, columnas y
controles de columna.
Propiedades Uso
RecordSource Nombre de la tabla
Visible Si el control es viisible al usuario
Enabled Si el control esta habilitado o no
ColumnCount Número de columnas del Gris
DeleteMark Permite registro para borrar (Aparece en la parte izquierda del
Gris
Los diseñadores ActiveX pueden proporcionar interfaces visuales para tareas que, de otro
modo, requerirían una gran cantidad de código. Por ejemplo, el diseñador UserConnection
incluido en la Edición Empresarial de Visual Basic proporciona herramientas visuales para
definir consultas de bases de datos complejas. En tiempo de ejecución, dichas consultas se
pueden invocar con muy poco código.
Similitudes entre los diseñadores ActiveX y los diseñadores integrados
Los diseñadores ActiveX son como los diseñadores de formularios en los siguientes
aspectos:
• Los diseñadores ActiveX producen clases a partir de las cuales puede crear objetos.
Estas clases aparecen en la ventana Proyecto, igual que las clases de formulario.
• Las clases creadas con un diseñador ActiveX tienen sus propios módulos de
código, en los que puede escribir código para los procedimientos de evento
proporcionados por el diseñador.
• Puede personalizar una clase si agrega propiedades, métodos y eventos a los
proporcionados por el diseñador ActiveX.
• Los objetos creados a partir de las clases diseñadas pueden tener características
diferentes en tiempo de diseño y en tiempo de ejecución.
• La ventana de diseño del diseñador ActiveX está totalmente integrada en el entorno
de desarrollo. Puede modificar su tamaño y configurarla de la misma forma que las
ventanas de diseño incorporadas.
• Puede agregar al proyecto tantas instancias de un diseñador ActiveX como
considere necesario, de la misma forma que puede agregar tantos diseñadores de
formularios como quiera.
En la Ficha
Índices,
selecciona
Clave_pizza
como principal.
5. Ahora deberás crear otra tabla nueva con los siguientes campos.
En la Ficha
Índices, selecciona
Clave_tamaño
como principal
7. Ahora deberás crear una tercera tabla con los datos siguientes:
11. Crea las relaciones entre las tablas de tal form que te queden de la siguiente
manera:
12. Ahora debemos introducir los datos a las tablas, comenzaremos por la tabla Pizza
y la llenaremos como sigue:
Clave_Pizza Nombre
an Anchoas
pe Peperoni
ha Hawaiana
sa salami
Clave_tamaño Tamaño
ch Chica
me Mediana
gr Grande
15. ahora crearemos una tabla a partir de una consulta, en la ventana explorador de
proyectos en la pestaña datos selecciona consulta y después nuevo
16. Visual Fox te preguntara que tablas quieres agregar para la realización de tu
consulta, para eso tu debes agregar las siguientes tablas: Tamaña, Venta y Pizza.
17. Una vez con las tablas agregadas, en la ventana diseñador de consultas en la ficha
campos, debemos escoger cuales son los campos que nosotros queremos que nos
muestre la consulta, pues bien vamos a seleccionar los siguientes: Pizza.nombre,
tamaño.tamaño, Venta.Precio, por ultimo agregaremos una expresión como
campo para esto en la misma ventana busca la opción funciones y expresiones y
aparecerá la ventana siguiente:
18. Cuando esta ventana aparezca lo primero que debemos de hacer es seleccionar de
la parte funciones Cadena, la opción “texto”, Luego en la parte de abajo donde
dice Desde tabla Selecciona la tabla Pizza, en el cuadro campos aparecerán los
campos de la tabla pizza de ese cuadro da doble clic al campo clave_pizza, una
vez esto hecho en el cuadro expresión deberá de aparecer el siguiente texto:
“Pizza.cleve.pizza”, una ves con esto ve otra vez a la lista Cadena y ahora
selecciona el símbolo +, el símbolo aparecerá dentro de las comillas, salte de las
comillas y pon un guion(-), la expresión deberá quedar: “Pizza.cleve.pizza+”-,
ahora con lo que ya vimos has que la expresión final quede de la siguiente forma,
recuerda que para sacar los campo de Tamaño primero debes seleccionar la tabla
tamaño de Desde tabla.
19. Una vez que tengas la Expresión da un clic al botón aceptar y después un clic en
Agregar. Te deberá quedar como en la pantalla siguiente:
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá crear una carpeta
D:\P_VFP\PROGRAMA, para guardar sus trabajos correspondientes a este laboratorio.
Aplicación Nº 1
En este primer ejercicio vamos a escribir un programa que lea tres números enteros
y determine el número mayor, el número central y el número menor. Debemos asumir que
los tres números son siempre distintos.
Close All
Clear
Input “Ingrese el valor de A?” To nA
Input “Ingrese el valor de B?” To nB
Input “Ingrese el valor de C?” To nC
If nA > nB Then
nMay = nA
nMen = nB
Else
nMay = nB
nMen = nA
EndIf
If nC > nMay Then
nCen = nMay
nMay = nC
Else
If nC > nMen Then
nCen = nC
Else
nCen = nMen
nMen = nC
EndIf
EndIf
? “Mayor =” + Str(nMay)
? “Central =” + Str(nCen)
? “Menor =” + Str(nMen)
Do Aplicaion01
Aplicación Nº 2
Un restaurante ofrece un descuento del 10% para consumos entre S/. 30.00 y S/.
50.00; un descuento del 20% para consumos mayores a S/. 50.00 nuevos soles; para todos
los demás casos no se aplica ningún tipo de descuento. El ejercicio consiste en elaborar una
programa que permita determinar el importe a pagar por el consumidor.
Close All
Clear
Do While .T.
Input “Consumo S/.” To nConsumo
If Type (“nConsumo”) = “N”
Exit
EndIf
EndDo
Do Case
Case nConsumo >= 30 And nConsumo <= 50
nImporte = nConsumo * 0.9
Case nConsumo > 50
nImporte = nConsumo * 0.8
Otherwise
nImporte = nConsumo
EndCase
? “Importe a pagar S/.” + Str(nImporte)
Aplicación Nº 3
El ejercicio consiste en escribir un programa que lea “ n ” enteros y calcule la suma
total, la media aritmética, el máximo y el mínimo de los datos.
Para el desarrollo de la presente aplicación, de manera análoga que para los casos
anteriores abrir una nueva ventana de edición e ingresar el siguiente código:
Close All
Clear
Input “Ingrese cantidad de números?” To nN
Declare aVector(nN)
For nI = 1 To nN
Input “Número [” + Str(nI) + “]?” To aVector(nI)
Next
nMax = aVector[1]
nMin = aVector[1]
nSuma = 0
For nI = 1 To nN
nSuma = nSuma + aVector[nI]
If aVector[nI] > nMax Then
nMax = aVector[nI]
EndIf
If aVector[nI] < nMin Then
nMin = aVector[nI]
EndIf
Next
nMedia = nSuma / nN
? “Suma =” + Str(nSuma)
? “Media =” + Str(nMedia, 10, 2)
? “Máximo=” + Str(nMax)
? “Mínimo=” + Str(nMin)
Aplicación Nº 4
A continuación vamos a escribir una función que reciba como argumento de
entrada una cadena de caracteres y la devuelva en forma inversa, por ejemplo si se ingresa
la cadena CORAZON deberá retornar NOZAROC.
Close All
Clear
Accept “Ingrese una cadena?” To cCadena
? “Cadena invertida =” + CadInv(cCadena)
Function CadInv
Parameters cCadena
nN = Len(Alltrim(cCadena))
Declare cTemporal(nN)
For nI = 1 To nN
cTemporal(nI) = SubStr(cCadena, nI, 1)
Next
cInvertida = “”
For nJ = nN To 1 Step -1
cInvertida = cInvertida + cTemporal(nJ)
Next J
Return cInvertida
Consideraciones
Para el desarrollo del presente laboratorio Ud. deberá crear una carpeta
D:\P_VFP\FORMULARIO, para guardar sus trabajos correspondientes a este laboratorio.
Aplicación Nº 1
Este ejercicio consiste en elaborar un formulario que permita leer un número entero
y visualice su tabla de multiplicar. Para construir la tabla de multiplicar vamos a utilizar un
control cuadro de edición, el cual tiene propiedades similares a un cuadro de texto, pero
permite escribir texto en líneas diferentes.
1 etiqueta
1 caja de texto
1 cuadro de edición
1 botón de comandos
Form1
Name FrmTabla
Caption Tabla de multiplicar
MaxButton .F.-Falso
MinButton .F.-Falso
Label1
Name LblNumero
Caption Ingrese un número:
Text1
Name TxtNumero
Alignment 2-Centro
Edit1
Name EdtTabla
ScrollBars 2-Vertical
Command1
Name CmdLimpiar
Caption \<Limpiar
Default .T.-Verdadero
nN = Val(Thisform.TxtNumero.Value)
cS = “”
For nI = 0 To 12
nP = nN * nI
cS = cS + Str(nN) + “ * ” + Str(nI) + “ = ” + Str(nP) ;
+ Chr(13)
Next
Thisform.EdtTabla.Value = cS
Thisform.Refresh
Thisform.TxtNumero.Value = “”
Thisform.EdtTabla.Value = “”
Thisform.Refresh
Aplicación Nº 2
Este ejercicio consiste en elaborar una aplicación que permita cambiar el aspecto de
una caja de texto. El usuario debe elegir el tipo de fuente a utilizar, el estilo, el color y el
tamaño. El diseño de la interfaz debe ser similar a:
5 etiquetas
1 caja de texto
1 cuadro combinado
1 lista
3 casillas de verificación
1 grupo de botones de opción
1 botón de comando
Form1
Name FrmEditor
AutoCenter .T.-Verdadero
Caption Editor
MaxButton .F.-Falso
MinButton .F.-Falso
Label1
Name LblTexto
Caption Texto
Label2
Name LblFuente
Caption Fuente
Label3
Name LblTamaño
Caption Tamaño
Label4
Name LblEstilo
Caption Estilo
Label5
Name LblColor
Caption Color
Combo1
Name CboFuente
List1
Name LstTamaño
Text1
Name TxtTexto
ForeColor 255, 0, 0
Check1
Name ChkNegrita
Caption Negrita
FontBold .T.-Verdadero
Check2
Name ChkCursiva
Caption Cursiva
FontItalic .T.-Verdadero
Check3
Name ChkSubrayado
Caption Subrayado
FontUnderline .T.-Verdadero
OptionGroup1
ButtonCount 3
Option1
Name OptRojo
ForeColor 255, 0, 0
Option2
Name OptVerde
ForeColor 0, 255, 0
Option3
Name OptAzul
ForeColor 0, 0, 255
Command1
Name CmdSalir
Caption \<Salir
Default .T.-Verdadero
Thisform.CboFuente.AddItem(“Arial”)
Thisform.CboFuente.AddItem(“Arial Black”)
Thisform.CboFuente.AddItem(“Courier New”)
Thisform.CboFuente.AddItem(“Garamond”)
Thisform.CboFuente.AddItem(“Impact”)
Thisform.CboFuente.AddItem(“MS Sans Serif”)
Thisform.CboFuente.AddItem(“Technical”)
Thisform.CboFuente.AddItem(“Times New Roman”)
For nI = 8 To 20 Step 2
Thisform.LstTamaño.AddItem(Alltrim(Str(nI)))
Next
#DEFINE vfpYesNo 4
#DEFINE vfpYes 6
#DEFINE vfpQuestion 32
If MessageBox(“¿Desea terminar la aplicación?”, ;
vfpQuestion + vfpYesNo, “Pregunta”) = vfpYes Then
Release Thisform
Else
NoDefault
EndIf
Thisform.TxtTexto.FontName = Thisform.CboFuente.Value
Thisform.Refresh
nTamaño = Val(Thisform.LstTamaño.Value)
Thisform.TxtTexto.FontSize = nTamaño
Thisform.Refresh
If Thisform.ChkNegrita.Value = 1 Then
Thisform.TxtTexto.FontBold = .T.
Else
Thisform.TxtTexto.FontBold = .F.
EndIf
Thisform.Refresh
Objeto: ChkCursiva Procedimiento: Click
If Thisform.ChkCursiva.Value = 1 Then
Thisform.TxtTexto.FontItalic = .T.
Else
Thisform.TxtTexto.FontItalic = .F.
EndIf
Thisform.Refresh
If Thisform.ChkSubrayado.Value = 1 Then
Thisform.TxtTexto.FontUnderline = .T.
Else
Thisform.TxtTexto.FontUnderline = .F.
EndIf
Thisform.Refresh
Thisform.TxtTexto.ForeColor = RGB(255, 0, 0)
Thisform.Refresh
Thisform.QueryUnload
Case mensaje=7
Thisform.refresh
EndCase
Thisform.refresh
Delete
Pack
EndCase
Thisform.refresh
Laboratorio Nº 02
Realizaremos el siguiente formulario de Facturación, para ello las indicaciones se
encuentran en la parte inferior:
Articulo.dbf Clientes.DBF
Artcod C 3 ClieCod C 3
ArtDet C 40 ClieNom C 40
ArtPre N 10 3 ClieRuc C 8
ArtStk N 4
GuiaEnc.DBF Guiadet.DBF
Nguia C 6 Nguia C 6
ClieCod C 3 ArtCod C 3
IGV N 7 2 ArtDet C 40
Total N 10 2 PreUni N 7 2
Cant N 5
SubTotal N 10 2
Temporal.DBF
Nguia C 6
ArtCod C 3
ArtDet C 40
PreUni N 7 2
Cant N 5
SubTotal N 10 2
Nota: Indexar la tabla GuiaEnc, campo Nguia con etiqueta Nguia
4. En tiempo de Diseño
Antes de continuar con más cambios, vamos a insertar objetos Combo y Spinner en la
columna1 y columna2 del Grid respectivamente, para ello prepare el control de
Formularios luego:
ControlSource Temporal.Cant
ControlSource Temporal.ArtDet KeyboardHighValue 99
Name CmbDescripcion KeyboardLowValue 1
Combo1 RowSourceType 6. Campos Spinner1 Name SpnCantidad
RowSource Articulo.ArtDet Style 2. Lista Desplegable
Style 2. Lista Desplegable SpinnerHighValue 99
Value 1 SpinnerLowValue 1
Value 1
Más propiedades
Nota: Caption de Labels ver el Grafico
SELECT GUIAENC
= cursorsetprop("buffering",3)
set order to tag Nguia
go bottom
thisform.txtnguia.value = right("00000"+alltrim(str(val(nguia)+1)),6)
append blank
replace nguia with thisform.txtnguia.value
Select temporal
dele all
set dele on
append blank
replace nguia with thisform.txtnguia.value
srec=recno()
thisform.grdDetalle.refresh
thisform.txttotal.value=0
Evento Destroy
SELECT GUIAENC =Tablerevert (.t.)
SELECT TEMPORAL
Evento: Interactivechange
SELECT temporal
go srec
replace artcod with articulo.artcod
replace preuni with articulo.artpre
replace subtotal with thisform.grddetalle.colcantidad.spncantidad.value*preuni
sum subtotal to ntotal
go srec
thisform.txttotal.value=ntotal
thisform.grddetalle.colcantidad.spncantidad.value=1
thisform.refresh
Evento: LostFocus
if len(allt(thisform.grddetalle.coldescripcion.cmbdescripcion.value))>0
thisform.grddetalle.colcantidad.spncantidad.setfocus
else
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
endif
thisform.refresh
Evento: LostFocus
thisform.grddetalle.coldescripcion.cmbdescripcion.setfocus
SELECT TEMPORAL
Scan
insert into guiadet(nguia,artcod,artdet,preuni,cant,subtotal);
values(temporal.nguia,temporal.artcod,temporal.artdet,;
temporal.preuni,temporal.cant,temporal.subtotal)
EndScan
SELECT GUIAENC
set order to tag Nguia
go bottom
thisform.txtnguia.value=right("00000"+alltrim(str(val(nguia)+1)),6)
Queda para el usuario hacer los últimos toques, para que resulte un buen diseño.