Está en la página 1de 55

MICROSOFT VISUAL

FOXPRO

NIVEL I

INTRODUCCIN A LA
PROGRAMACIN

INTRODUCCIN

La presente Gua de Laboratorio, se elabor con la finalidad de complementar


la parte terica con la parte prctica del curso. Contiene una gran variedad de
ejemplos prcticos .
Desde ya les deseo la mejor de las suertes en el aprendizaje de Microsoft
Visual FoxPro.

Lima, Setiembre del 2002

Microsoft

Visual FoxPro

GUA DE LABORATORIO N 1
Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

Identificar los elementos del entorno integrado de desarrollo de


Microsoft Visual FoxPro 6.0.
Implementar soluciones mediante programacin clsica.
Declarar y asignar valores tanto a las variables de memoria como a los
arreglos.
Analizar como es el flujo de control de un programa.
Crear funciones y procedimientos definidos por el usuario.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una
carpeta C:\FundVFP\Lab1, para guardar sus trabajos correspondientes a este
laboratorio.
Aplicacin N 1
En este primer ejercicio vamos a escribir un programa que lea tres nmeros
enteros y determine el nmero mayor, el nmero central y el nmero menor.
Debemos asumir que los tres nmeros son siempre distintos.

Para el desarrollo de la presente aplicacin ingresar a Microsoft Visual


FoxPro. En la Ventana de Comandos digite la siguiente orden:
Modify Command Aplica01
A continuacin se debe presentar el Editor de programas. En dicha ventana
proceda a ingresar el cdigo que se indica:
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)
Para ejecutar su programa dar click en el botn Ejecutar (!) de la Barra de
herramientas Estndar.
Para volver a ejecutar su programa digitar la siguiente orden desde la Ventana
de Comandos:
Do Aplica01
Aplicacin 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 dems casos no se aplica ningn tipo de descuento. El
ejercicio consiste en elaborar una programa que permita determinar el importe
a pagar por el consumidor.
Para el desarrollo de la presente aplicacin abrir una nueva ventana de edicin
e ingresar el siguiente cdigo:
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)
Aplicacin N 3
El ejercicio consiste en escribir un programa que lea " " enteros y calcule la
suma total, la media aritmtica, el mximo y el mnimo de los datos.
Para el desarrollo de la presente aplicacin, de manera anloga que para los
casos anteriores abrir una nueva ventana de edicin e ingresar el siguiente
cdigo:
Close All
Clear
Input "Ingrese cantidad de nmeros?" To nN
Declare aVector(nN)
For nI = 1 To nN
Input "Nmero [" + 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)
? "Mximo=" + Str(nMax)
? "Mnimo=" + Str(nMin)
Aplicacin N 4
A continuacin vamos a escribir una funcin 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.
Para el desarrollo de esta aplicacin proceda de manera similar a los casos
anteriores e ingresar el cdigo que se muestra:
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
Aplicacin N 5
Este ejercicio consiste en escribir un programa que imprima el calendario
correspondiente a un mes si se conoce una fecha del mismo. Por ejemplo si se
ingresa la siguiente fecha MA 24 04 1973 (Martes 24 de Abril de 1973) se
debe obtener:

ABRIL
D

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Creo que a estas alturas Ud. ya entendi como funciona esto. Por ello, esta
aplicacin se deja como ejercicio para el estudiante.

Microsoft

Visual FoxPro

GUA DE LABORATORIO N 2
Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:
Implementar soluciones mediante programacin orientada a objetos.
Manejar las diferentes propiedades y eventos del formulario.
Aadir controles a un formulario.
Establecer las propiedades de los controles.
Trabajar con procedimientos de eventos.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una
carpeta C:\FundVFP\Lab2, para guardar sus trabajos correspondientes a este
laboratorio.
Aplicacin N 1
El ejercicio consiste en elaborar una aplicacin que permita leer un nmero
real de la forma "eee.ddd" e imprima el mayor valor entre la parte entera y la
parte decimal.

Para el desarrollo de esta aplicacin, en primer lugar debe crear un nuevo


formulario. Para ello digite lo siguiente en la Ventana de Comandos:
Create Form
A continuacin seleccione del Men Ver, la opcin Barra de herramientas
Controles de Formularios. Se presentar una ventana similar a la siguiente
figura:

En seguida de la barra de herramientas mostrada ubicar los siguientes


controles al formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
Para ubicar un control en el formulario, simplemente dar click en el control
deseado y luego dar click en el formulario en la posicin que se le desea
ubicar. Adicionalmente puede utilizar la barra de herramientas Diseo para
obtener una mejor presentacin.
A continuacin proceda a establecer las propiedades de los objetos segn se
indica, para ello dar click derecho sobre el control y del men emergente que
se presenta elegir la opcin Propiedades.
Form1

Name

FrmAplica01

Caption

Mayor valor de un nmero real

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblX

Caption

Ingrese un real de la forma eee.ddd?

Name

LblMay

Caption

Mayor:

Name

TxtX

InputMask

999.999

Value

Name

TxtMay

InputMask

999

Value

Label1

Label2

Text1

Text2

Command1
Name

CmdAceptar

Caption

\<Aceptar

Default

.T.-Verdadero

Command2
Name

CmdLimpiar

Caption

\<Limpiar

Command3
Name

CmdSalir

Cancel

.T.-Verdadero

Caption

\<Salir

A continuacin dar doble click sobre el control CmdAceptar y proceda a


ingresar el cdigo que se muestra:
Objeto: CmdAceptar

Procedimiento: Click

nX = Thisform.TxtX.Value
nA = Int(Thisform.TxtX.Value)
nX = nX - nA
nB = 1000 * nX
If nA > nB Then
nMay = nA
Else
nMay = nB
EndIf
Thisform.TxtMay.Value = nMay
Thisform.Refresh
De manera anloga ingresar el siguiente cdigo para el control CmdLimpiar:
Objeto: CmdLimpiar

Thisform.TxtX.Value = 0
Thisform.TxtMay.Value = 0

Procedimiento: Click

Thisform.TxtX.Setfocus
Thisform.Refresh
Finalmente proceder a ingresar el siguiente cdigo para el control CmdSalir:
Objeto: CmdSalir

Procedimiento: Click

Release Thisform
A continuacin guarde su aplicacin como FrmAplica01, luego proceda a
ejecutarla. Para ello ingrese lo siguiente en la Ventana de Comandos:
Do Form FrmAplica01
Debe funcionar sin problemas. Pruebe ingresando diferentes valores. En caso
que falle revise y corrija.
Aplicacin N 2
En este ejercicio vamos a crear un formulario para calcular la edad de una
persona a partir de su fecha de nacimiento.

Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles


en el formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
Luego, proceda a establecer las propiedades segn se indica a continuacin:
Form1

Name

FrmEdad

Caption
MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblFecNac

Caption

Fecha de nacimiento:

Name

LblEdad

Caption

Su edad es:

Name

TxtFecNac

Enabled

.T.-Verdadero

Name

TxtEdad

Enabled

.F.-Falso

Label1

Label2

Text1

Text2

Command1
Name

CmdAceptar

Caption

\<Aceptar

Command2
Name

CmdLimpiar

Caption

\<Limpiar

Command3

Name

CmdSalir

Caption

\<Salir

Luego de establecidas las propiedades de los controles, proceda a ingresar el


siguiente cdigo:
Objeto: FrmEdad

Procedimiento: Load

Set Date French


Set Century On
Objeto: FrmEdad

Procedimiento: Init

cNomDia = Cdow(Date())
cDia = Str(Day(Date()), 2)
cMes = Cmonth(Date())
cAnno = Str(Year(Date()), 4)
cFecha = cNomDia + " " + cDia + " de " + cMes + " del " + cAnno
Thisform.Caption = cFecha
Thisform.TxtFecNac.Setfocus
Thisform.Refresh
Objeto: CmdAceptar

Procedimiento: Click

dFecNac = Ctod(Thisform.TxtFecNac.Value)
nEdad = Int ((Date() - dFecNac) / 365)
Thisform.TxtEdad.Value = Str(nEdad) + " aos"
Thisform.Refresh
Objeto: CmdLimpiar

Thisform.TxtFecNac.Value = ""

Procedimiento: Click

Thisform.TxtEdad.Value = ""
Thisform.TxtFecNac.Setfocus
Thisform.Refresh
Objeto: CmdSalir

Procedimiento: Click

Release Thisform
Aplicacin N 3
Este ejercicio consiste en elaborar un formulario que simule el funcionamiento
de un reloj despertador digital. La aplicacin debe permitir al usuario ingresar
la hora a la que desea ser avisado. El diseo de la interfaz debe ser similar a la
figura siguiente:

Para el desarrollo de esta aplicacin proceder a ubicar los siguientes controles


en el formulario:
2 etiquetas
2 cajas de texto
1 cronmetro
2 botones de comandos
En seguida establezca las propiedades segn se indica a continuacin:
Form1

Name

FrmReloj

Caption

Reloj despertador digital

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblHora

Caption

Hora

Name

LblDespertador

Caption

Despertador

Name

TxtHora

FontBold

.T.-Verdadero

FontSize

24

Name

TxtDespertador

FontBold

.T.-Verdadero

FontSize

24

Label1

Label2

Text1

Text2

Timer1
Name

Timer1

Enabled

.T.-Verdadero

Interval

500

Command1
Name

CmdOnOff

Caption

\<Desactivar

Default

.T.-Verdadero

Command2
Name

CmdTerminar

Cancel

.T.-Verdadero

Caption

\<Terminar

Una vez establecidas las propiedades, proceda a ingresar el cdigo que se


muestra:
Objeto: FrmReloj

Procedimiento: Load

Public lOnOff
Objeto: FrmReloj

Procedimiento: Init

lOnOff = .F.
Thisform.TxtDespertador.Value = "00:00:00"
Thisform.Refresh
Objeto: Timer1

Procedimiento: Timer

If Thisform.TxtHora.Value != Time() Then


Thisform.TxtHora.Value = Time()
EndIf
If (Thisform.TxtDespertador.Value < Time()) And lOnOff Then
* Sonido acstico
?Chr(7)
EndIf
Thisform.Refresh

Objeto: CmdOnOff

Procedimiento: Click

If lOnOff Then
lOnOff = .F.
Thisform.CmdOnOff.Caption = "\<Activar"
Else
lOnOff = .T.
Thisform.CmdOnOff.Caption = "\<Desactivar"
EndIf
Thisform.Refresh
Objeto: CmdTerminar

Procedimiento: Click

Release Thisform
Aplicacin N 4
Se tiene un cajero automtico el cual permite manipular cierta cantidad de
dinero para lo cual dispone de los siguientes billetes: S/. 10.00, S/. 20.00, S/.
50.00, S/. 100.00 y S/. 200.00. Elaborar una aplicacin que permita la lectura
de la cantidad a retirar la cual debe ser mltiplo de 10 (caso contrario debe
solicitar al usuario que ingrese un valor correcto, no debe aceptar la lectura de
valores que no cumplan esta condicin). La aplicacin debe indicar el menor
nmero de billetes a utilizar. El diseo de la interfaz debe ser similar a la
siguiente figura:

Microsoft

Visual FoxPro

GUA DE LABORATORIO N 3
Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:

Manejar las diferentes propiedades y mtodos del conjunto de


formularios.
Identificar y utilizar los controles estndar adicionales.
Utilizar cajas de dilogo predefinidas para visualizar mensajes.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una
carpeta C:\FundVFP\Lab3, para guardar sus trabajos correspondientes a este
laboratorio.
Aplicacin N 1
El ejercicio consiste en crear una aplicacin que permita leer una fraccin y de
como resultado la fraccin simplificada. Esto es, que halle la fraccin
irreductible equivalente.

Para el desarrollo de esta aplicacin proceda a crear un nuevo formulario y


luego vaya al Men Formulario y elija la opcin Crear conjunto de

formularios (no se preocupe, pues no se apreciar nada en especial).


Nuevamente vaya al Men Formulario y elija la opcin Agregar nuevo
formulario. El Diseador de formularios debe presentar una apariencia similar
a la figura mostrada:

A continuacin proceda a ubicar los siguientes controles sobre el primer


formulario (Form1):
2 etiquetas
2 cajas de texto
2 botones de comando
Seguidamente debe establecer las propiedades de los objetos segn se indica:
Form1

Label1

Name

FrmIngreso

Caption

Ingreso de datos

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblNumerador

Caption

Numerador?

Name

LblDenominador

Caption

Denominador?

Name

TxtNumerador

Value

Name

TxtDenominador

Value

Label2

Text1

Text2

Command1
Name

CmdSimplificar

Caption

Simplificar

Default

.T.-Verdadero

Command2
Name

CmdSalir

Cancel

.T.-Verdadero

Caption

Salir

A continuacin proceda a ingresar el cdigo que se muestra:


Objeto: CmdSimplificar

Procedimiento: Click

nNumerador = Thisformset.FrmIngreso.TxtNumerador.Value
nDenominador = Thisformset.FrmIngreso.TxtDenominador.Value

If nNumerador < nDenominador Then


nC = nNumerador
Else
nC = nDenominador
EndIf
Do While (nNumerador % nC != 0) Or (nDenominador % nC != 0)
nC = nC - 1
EndDo
nNumerador = nNumerador / nC
nDenominador = nDenominador / nC
Thisformset.FrmIngreso.Hide
Thisformset.FrmSalida.Show
Thisformset.Refresh
Objeto: CmdSalir

Procedimiento: Click

Release Thisformset
Luego proceda a ubicar los siguientes controles sobre el segundo formulario
(Form2):
1 etiqueta
1 caja de texto
1 botn de comando
Seguidamente debe establecer las propiedades de los objetos segn se indica:
Form2
Name

FrmSalida

Caption

Salida

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblFraccion

Caption

Fraccin simplificada:

Name

TxtFraccion

Alignment

2-Centro

Label1

Text1

Command1
Name

CmdVolver

Caption

Volver

A continuacin proceda a ingresar el cdigo que se muestra:


Objeto: FrmSalida

Procedimiento: Activate

cNumerador = Str(nNumerador)
cDenominador = Str(nDenominador)
cFraccion = cNumerador + " / " + cDenominador
Thisformset.FrmSalida.TxtFraccion.Value = cFraccion
Thisformset.Refresh
Objeto: CmdVolver

Procedimiento: Click

Thisformset.FrmSalida.Hide
Thisformset.FrmIngreso.Show
Thisformset.Refresh
Finalmente proceda a ingresar el cdigo que se indica a continuacin:

Objeto: Formset1

Procedimiento: Load

Public nNumerador
Public nDenominador
Public nC
Objeto: Formset1

Procedimiento: Init

Thisformset.FrmSalida.Hide
Thisformset.Refresh
Aplicacin N 2
Este ejercicio consiste en elaborar una aplicacin que acepte fechas como tres
nmeros (dd, mm, aaaa) y las visualice del modo usual. A manera de ejemplo
considere lo siguiente:

Cuando el usuario haga click en el botn Salir o en el botn Cerrar de la barra


de ttulo del formulario, se debe confirmar si desea terminar la aplicacin, tal
como se observa en la figura siguiente:

En caso de que el usuario elija la opcin Si, la aplicacin debe terminar. Caso
contrario, es decir si el usuario elige la opcin No, se debe proseguir con la
aplicacin.
Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles
en el formulario:
4 etiquetas
3 controles numricos
1 caja de texto
3 botones de comando
En seguida proceda a establecer las propiedades segn se indica:
Form1
Name

FrmFecha

Caption

Fecha en letras

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblDia

AutoSize

.T.-Verdadero

Caption

Da:

Name

LblMes

AutoSize

.T.-Verdadero

Caption

Mes:

Name

LblAnno

AutoSize

.T.-Verdadero

Label1

Label2

Label3

Caption

Ao:

Name

LblEnLetras

AutoSize

.T.-Verdadero

Caption

En letras:

Label4

Spinner1
Name

SpnDia

SpinnerHighValue

31

SpinnerLowValue

Spinner2
Name

SpnMes

SpinnerHighValue

12

SpinnerLowValue

Spinner3
Name

SpnAnno

SpinnerHighValue

9999

SpinnerLowValue

Text1
Name

TxtEnLetras

Alignment

2-Centro

Command1
Name

CmdAceptar

Caption

\<Aceptar

Default

.T.-Verdadero

Command2
Name

CmdLimpiar

Caption

\<Limpiar

Command3
Name

CmdSalir

Cancel

.T.-Verdadero

Caption

\<Salir

Una vez establecidas las propiedades proceda a ingresar el cdigo que se


indica a continuacin:
Objeto: FrmFecha

Procedimiento: Load

Set Date French


Set Century On
Objeto: FrmFecha

Procedimiento: QueryUnload

#DEFINE vfpYesNo 4
#DEFINE vfpYes 6
#DEFINE vfpQuestion 32
If MessageBox("Desea terminar la aplicacin?", ;
vfpQuestion + vfpYesNo, "Pregunta") = vfpYes Then
Release Thisform
Else
NoDefault
EndIf
Objeto: CmdAceptar

Procedimiento: Click

cBarra = "/"
cFecha = Thisform.SpnDia.Text + cBarra + Thisform.SpnMes.Text ;
+ cBarra + Thisform.SpnAnno.Text
dFecha = Ctod(cFecha)
cNomDia = Cdow(dFecha)
cDia = Str(Day(dFecha), 2)
cMes = Cmonth(dFecha)
cAnno = Str(Year(dFecha), 4)
cFecha = cNomDia + " " + cDia + " de " + cMes + " de " + cAnno
Thisform.TxtEnLetras.Value = cFecha
Thisform.Refresh
Objeto: CmdLimpiar

Procedimiento: Click

Thisform.SpnDia.Value = 0
Thisform.SpnMes.Value = 0
Thisform.SpnAnno.Value = 0
Thisform.TxtEnLetras.Value = ""
Thisform.SpnDia.Setfocus
Thisform.Refresh
Objeto: CmdSalir

Procedimiento: Click

Thisform.QueryUnload
Aplicacin N 3
Este ejercicio consiste en elaborar un formulario que permita leer un nmero
entero y visualice su tabla se multiplicar. Para construir la tabla de multiplicar

vamos a utilizar un control cuadro de edicin, el cual tiene propiedades


similares a un cuadro de texto, pero permite escribir texto en lneas diferentes.

Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles


en el formulario:
1 etiqueta
1 caja de texto
1 cuadro de edicin
1 botn de comandos
En seguida proceda a establecer las propiedades segn se indica:
Form1
Name

FrmTabla

Caption

Tabla de multiplicar

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblNumero

Caption

Ingrese un nmero:

Label1

Text1
Name

TxtNumero

Alignment

2-Centro

Name

EdtTabla

ScrollBars

2-Vertical

Edit1

Command1
Name

CmdLimpiar

Caption

\<Limpiar

Default

.T.-Verdadero

Una vez diseada la interfaz, proceda a ingresar el cdigo que se indica a


continuacin:
Objeto: TxtNumero

Procedimiento: InteractiveChange

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
Objeto: CmdLimpiar

Procedimiento: Click

Thisform.TxtNumero.Value = ""
Thisform.EdtTabla.Value = ""
Thisform.Refresh
Aplicacin N 4
Elaborar una aplicacin que acepte como entrada la reserva de agua de un
depsito y los litros que se consumen a la semana. La aplicacin debe dar
como resultado las cantidades de agua que quedan al final de cada semana. El
proceso finalizar cuando no quede agua suficiente para una semana. Utilizar
otro formulario para mostrar la salida. El diseo de la interfaz debe ser similar
a la figura mostrada:

Microsoft

Visual FoxPro

GUA DE LABORATORIO N 4

Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:
Usar casillas de verificacin y botones de opcin para alternar entre
uno o ms valores.
Establecer las principales propiedades y mtodos de las listas
desplegables y cuadros combinados.
Consideraciones
Para el desarrollo del presente laboratorio Ud. deber crear una
carpeta C:\FundVFP\Lab4, para guardar sus trabajos correspondientes a este
laboratorio.
Aplicacin N 1
Este ejercicio consiste en elaborar una aplicacin 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 tamao. El diseo de la interfaz debe ser similar a:

Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles


en el formulario:
5 etiquetas
1 caja de texto
1 cuadro combinado
1 lista
3 casillas de verificacin

1 grupo de botones de opcin


1 botn de comando
En seguida proceda a establecer las propiedades segn se indica:
Form1
Name

FrmEditor

AutoCenter

.T.-Verdadero

Caption

Editor

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblTexto

Caption

Texto

Name

LblFuente

Caption

Fuente

Name

LblTamao

Caption

Tamao

Name

LblEstilo

Caption

Estilo

Name

LblColor

Caption

Color

Label1

Label2

Label3

Label4

Label5

Combo1
Name

CboFuente

Name

LstTamao

Name

TxtTexto

ForeColor

255, 0, 0

List1

Text1

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

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

Una vez establecidas las propiedades de la interfaz, proceda a ingresar el


cdigo que se muestra a continuacin:
Objeto: FrmEditor

Procedimiento: Init

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.LstTamao.AddItem(Alltrim(Str(nI)))
Next
Objeto: FrmEditor

Procedimiento: QueryUnload

#DEFINE vfpYesNo 4
#DEFINE vfpYes 6
#DEFINE vfpQuestion 32
If MessageBox("Desea terminar la aplicacin?", ;
vfpQuestion + vfpYesNo, "Pregunta") = vfpYes Then
Release Thisform
Else
NoDefault
EndIf
Objeto: CboFuente

Procedimiento: Click

Thisform.TxtTexto.FontName = Thisform.CboFuente.Value
Thisform.Refresh
Objeto: LstTamao

Procedimiento: Click

nTamao = Val(Thisform.LstTamao.Value)
Thisform.TxtTexto.FontSize = nTamao
Thisform.Refresh
Objeto: ChkNegrita

If Thisform.ChkNegrita.Value = 1 Then
Thisform.TxtTexto.FontBold = .T.

Procedimiento: Click

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
Objeto: ChkSubrayado

Procedimiento: Click

If Thisform.ChkSubrayado.Value = 1 Then
Thisform.TxtTexto.FontUnderline = .T.
Else
Thisform.TxtTexto.FontUnderline = .F.
EndIf
Thisform.Refresh
Objeto: OptRojo

Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(255, 0, 0)
Thisform.Refresh
Objeto: OptVerde

Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(0, 255, 0)


Thisform.Refresh
Objeto: OptAzul

Procedimiento: Click

Thisform.TxtTexto.ForeColor = RGB(0, 0, 255)


Thisform.Refresh
Objeto: CmdSalir

Procedimiento: Click

Thisform.QueryUnload
Aplicacin N 2
Este ejercicio consiste en desarrollar una aplicacin que permita ingresar el
nombre de un curso, el cual pasa a formar parte de una lista de espera antes de
ser programado para su dictado. Los cursos deben ser seleccionados de la lista
de espera y trasladados a la lista de cursos programados y viceversa. El diseo
de la interfaz debe ser similar a la figura mostrada:
Aplicacin N 2
Este ejercicio consiste en desarrollar una aplicacin que permita ingresar el
nombre de un curso, el cual pasa a formar parte de una lista de espera antes de
ser programado para su dictado. Los cursos deben ser seleccionados de la lista
de espera y trasladados a la lista de cursos programados y viceversa. El diseo
de la interfaz debe ser similar a la figura mostrada:

Para el desarrollo de esta aplicacin proceda a ubicar los siguientes controles


en el formulario:
3 etiquetas
1 cuadro de texto
2 listas
5 botones de comando
En seguida proceda a establecer las propiedades segn se indica:
Form1
Name

FrmCursos

Caption

Cursos

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblCurso

Caption

Ingrese nuevo curso:

Label1

Label2

Name

LblSeleccionar

Caption

Seleccione un curso:

Name

LblProgramado

Caption

Curso programado:

Name

TxtCurso

Name

LstSeleccionar

Name

LstProgramado

Label3

Text1

List1

List2

Command1
Name

CmdAgregar

Caption
Picture

C:\FundVFP\Bitmaps\AddItem.Bmp

Command2
Name

CmdAgregarTodo

Caption
Picture

C:\FundVFP\Bitmaps\AddAll.Bmp

Command3
Name
Caption

CmdQuitar

Picture

C:\FundVFP\Bitmaps\Remove.Bmp

Command4
Name

CmdQuitarTodo

Caption
Picture

C:\FundVFP\Bitmaps\RemoveAll.Bmp

Command5
Name

CmdAnnadir

Caption

\<Aadir

En seguida proceda a ingresar el cdigo que se indica:


Objeto: CmdAnnadir

Procedimiento: Click

Thisform.LstSeleccionar.Additem(Thisform.TxtCurso.Value)
Thisform.TxtCurso.Value = ""
Thisform.TxtCurso.SetFocus
Objeto: LstSeleccionar

Procedimiento: Click

If Thisform.LstSeleccionar.ListIndex != 0 Then
Thisform.CmdAgregar.Enabled = .T.
Thisform.CmdAgregarTodo.Enabled = .T.
EndIf
Thisform.Refresh
Objeto: LstProgramado

Procedimiento: Click

If Thisform.LstProgramado.ListIndex != 0 Then
Thisform.CmdQuitar.Enabled = .T.

Thisform.CmdQuitarTodo.Enabled = .T.
EndIf
Thisform.Refresh
Objeto: CmdAgregar

Procedimiento: Click

cCurso = Thisform.LstSeleccionar.Value
nCurso = Thisform.LstSeleccionar.ListIndex
If Thisform.LstSeleccionar.ListCount > 0 Then
Thisform.LstProgramado.AddItem(cCurso)
Thisform.LstSeleccionar.RemoveItem(nCurso)
Thisform.LstSeleccionar.ListIndex = 0
Thisform.CmdAgregar.Enabled = .F.
Thisform.CmdAgregarTodo.Enabled = .F.
EndIf
Thisform.Refresh
Objeto: CmdQuitar

Procedimiento: Click

cCurso = Thisform.LstProgramado.Value
nCurso = Thisform.LstProgramado.ListIndex
If Thisform.LstProgramado.ListCount > 0 Then
Thisform.LstSeleccionar.AddItem(cCurso)
Thisform.LstProgramado.RemoveItem(nCurso)
Thisform.LstProgramado.ListIndex = 0
Thisform.CmdQuitar.Enabled = .F.
Thisform.CmdQuitarTodo.Enabled = .F.

EndIf
Thisform.Refresh
Objeto: CmdAgregarTodo

Procedimiento: Click

For nI = 1 To Thisform.LstSeleccionar.ListCount
Thisform.LstProgramado.AddItem;
(Thisform.LstSeleccionar.List(nI))
Next
Thisform.LstSeleccionar.Clear
Thisform.CmdAgregar.Enabled = .F.
Thisform.CmdAgregarTodo.Enabled = .F.
Thisform.Refresh
Objeto: CmdQuitarTodo

Procedimiento: Click

For nI = 1 To Thisform.LstProgramado.ListCount
Thisform.LstSeleccionar.AddItem;
(Thisform.LstProgramado.List(nI))
Next
Thisform.LstProgramado.Clear
Thisform.CmdQuitar.Enabled = .F.
Thisform.CmdQuitarTodo.Enabled = .F.
Thisform.Refresh
Objeto: FrmCursos

#DEFINE vfpYesNo 4
#DEFINE vfpYes 6

Procedimiento: QueryUnload

#DEFINE vfpQuestion 32
If MessageBox("Desea terminar la aplicacin?", ;
vfpQuestion + vfpYesNo, "Pregunta") = vfpYes Then
Release Thisform
Else
NoDefault
EndIf
Aplicacin N 3
El ejercicio consiste en elaborar una aplicacin que permita leer nmeros de
tipo entero, y a continuacin los visualice ordenados en forma ascendente o
descendente. Utilice el mtodo de la burbuja para realizar la ordenacin.

Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles


en el formulario:
3 etiquetas
1 caja de texto
1 lista
1 grupo de botones de opcin
3 botones de comando
En seguida proceda a establecer las propiedades segn se indica:

Form1
Nombre

FrmBurbuja

Caption

Ordenacin por burbuja

MaxButton

.F.-Falso

MinButton

.F.-Falso

Name

LblNumero

Caption

Ingrese un nuevo nmero:

Name

LblOrden

Caption

Orden:

Name

LblLista

Caption

Lista de nmeros:

Name

TxtNumero

Value

Name

LstNumero

Label1

Label2

Label3

Text1

List1

Option1
Nombre

OptAscendente

Caption

Ascendente

Option2
Nombre

OptDescendente

Caption

Descendente

Command1
Nombre

CmdAnnadir

Caption

\<Aadir

Default

True

Command2
Nombre

CmdOrdenar

Caption

\<Ordenar

Command3
Nombre

CmdSalir

Cancel

.T.-Verdadero

Caption

\<Salir

Picture

C:\Archivos de programa\Microsoft Visual


Studio\Common\Graphics\Icons\Arrows\
Point04.ico

Una vez establecidas las propiedades proceda a ingresar el cdigo que se


indica a continuacin:
Objeto: FrmBurbuja

Procedimiento: QueryUnload

#DEFINE vfpYesNo 4
#DEFINE vfpYes 6
#DEFINE vfpQuestion 32
If MessageBox("Desea terminar la aplicacin?", ;

vfpQuestion + vfpYesNo, "Pregunta") = vfpYes Then


Release Thisform
Else
NoDefault
EndIf
Objeto: CmdAnnadir

Procedimiento: Click

Thisform.LstNumero.AddItem(Thisform.TxtNumero.Value)
Thisform.TxtNumero.Value = ""
Thisform.TxtNumero.SetFocus
Objeto: CmdOrdenar

Procedimiento: Click

nN = Thisform.LstNumero.ListCount
Dimension nA(nN) As Integer
For nI = 1 To nN
nA(nI) = Thisform.LstNumero.List(nI)
Next
If Thisform.OptionGroup1.OptAscendente.Value = 1 Then
For nI = 1 To nN - 1
For nJ = nI + 1 To nN
If nA(nI) > nA(nJ) Then
nT = nA(nI)
nA(nI) = nA(nJ)
nA(nJ) = nT
EndIf

Next
Next
EndIf
If Thisform.OptionGroup1.OptDescendente.Value = 1 Then
For nI = 1 To nN - 1
For nJ = nI + 1 To nN
If nA(nI) < nA(nJ) Then
nT = nA(nI)
nA(nI) = nA(nJ)
nA(nJ) = nT
EndIf
Next
Next
EndIf
Thisform.LstNumero.Clear
For nI = 1 To nN
Thisform.LstNumero.List(nI) = nA(nI)
Next
Objeto: CmdSalir

Procedimiento: Click

Thisform.QueryUnload
Aplicacin N 4
Desarrollar una aplicacin que permita realizar consultas acerca de un
determinado curso, los cuales se mostraran en una lista. El usuario debe
seleccionar un curso y en seguida se debe presentar el nombre del profesor
encargado del curso (teora), el nombre del jefe de prctica (laboratorio), as

como los horarios de teora y de laboratorio, respectivamente. El diseo de la


interfaz debe ser similar a la figura que se muestra:

Microsoft

Visual FoxPro

GUA DE LABORATORIO N 5
Objetivos
Luego de completar este laboratorio, el estudiante ser capaz de:
Crear mtodos definidos por el usuario.
Pasar correctamente los argumentos a un mtodo.
Ejecutar mtodos desde un formulario.
Implementar mtodos que devuelvan mltiples valores.
Consideraciones

Para el desarrollo del presente laboratorio Ud. deber crear una


carpeta C:\FundVFP\Lab5, para guardar sus trabajos correspondientes a este
laboratorio.
Aplicacin N 1
Este primer ejercicio consiste en escribir un mtodo que reciba como
argumento una cadena de caracteres y la devuelva en forma inversa. Por
ejemplo si se ingresa la cadena CORAZON deber retornar NOZAROC.

Para el desarrollo de esta aplicacin, proceda a ubicar los siguientes controles


en el formulario:
2 etiquetas
2 cajas de texto
3 botones de comando
En seguida proceda a establecer las propiedades segn se indica:
Form1
Nombre

FrmPrueba_Cadena

Caption

Cadena invertida

MaxButton

.F.-Falso

MinButton

.F.-Falso

Nombre

LblCadena

Caption

Ingrese una cadena:

Label1

Label2
Nombre

LblInvertida

Caption

Cadena invertida:

Nombre

TxtCadena

Enabled

.T.-Verdadero

Nombre

TxtInvertida

Enabled

.F.-Falso

Text1

Text2

Command1
Nombre

CmdAceptar

Caption

\<Aceptar

Default

.T.-Verdadero

Command2
Nombre

CmdLimpiar

Caption

\<Limpiar

Command3
Nombre

CmdSalir

Cancel

.T.-Verdadero

Caption

\<Salir

Una vez establecidas las propiedades de la interfaz, proceda a crear un nuevo


mtodo, denominado CadInvertida. Para ello vaya al Men Formulario y elija
la opcin Crear nuevo mtodo. Se debe presentar una ventana similar a la
figura siguiente:

Ingrese los datos que se muestran y a continuacin dar click en el botn


Agregar. Luego, dar doble click sobre el formulario y transcriba el siguiente
cdigo:
Objeto: FrmPrueba_Cadena

Procedimiento: CadInvertida

Parameters cCadena
nN = Len(Alltrim(cCadena))
Dimension cTemporal(nN)
For nI = 1 To nN
cTemporal(nI) = SubStr(cCadena, nI, 1)
Next
cCadena = ""
For nJ = nN To 1 Step -1
cInvertida = cInvertida + cTemporal(nJ)
Next
Return cInvertida
Objeto: CmdAceptar

Procedimiento: Click

cCadena = Thisform.TxtCadena.Value
Thisform.TxtInvertida.Value = Thisform.CadInvertida(cCadena)

Thisform.Refresh
Aplicacin N 2
Este ejercicio consiste en crear un mtodo que reciba como argumento los
apellidos y nombres de un cliente (en ese orden) y retorne los nombres y
apellidos del mismo.

Para el desarrollo de esta aplicacin proceda a crear un nuevo mtodo


denominado NomApe. Luego transcriba el siguiente cdigo:
Objeto: FrmPrueba_NomApe

Procedimiento: NomApe

Parameters cApeNom
nN = Len(Alltrim(cApeNom))
Dimension cNom(nN)
Dimension cApe(nN)
For nI = 1 To nN
If SubStr(cApeNom, nI, 1) = "," Then
Exit
EndIf
Next
cApe = SubStr(cApeNom, 1, nI-1)
cNom = SubStr(cApeNom, nI + 1, nN - nI)

cNomApe = cNom + " " + cApe


Return cNomApe
Aplicacin N 3
Para calcular el porcentaje de humedad de una muestra slida primero se pesa
la muestra ( ), luego se le lleva a la estufa de 120 a 150 C por un tiempo de
2 horas aproximadamente. A continuacin se deja enfriar la muestra y se pesa
nuevamente ( ). Finalmente se realiza el siguiente clculo:

Nuestro trabajo consiste en crear un mtodo que permita realizar el clculo


anterior.

Para el desarrollo de esta aplicacin proceder a cera un nuevo mtodo


denominado Humedad. Luego ingrese el siguiente cdigo:
Objeto: FrmPrueba_Humedad

Procedimiento: Humedad

Parameters nM1, nM2


nH = 100 * (nM1 - nM2) / nM1
Return nH
Objeto: CmdAceptar

nMasa1 = Val(Thisform.TxtMasa1.Value)

Procedimiento: Click

nMasa2 = Val(Thisform.TxtMasa2.Value)
nHumedad = Thisform.Humedad(nMasa1, nMasa2)
Thisform.TxtHumedad.Value = Str(nHumedad, 10, 4)
Thisform.Refresh
Aplicacin N 4
Escriba un mtodo que reciba como parmetro la fecha de nacimiento del
usuario. Debe retornar el signo zodiacal, el da de nacimiento y la cantidad de
das vividos hasta la fecha actual. Utilice un formulario de prueba para
verificar la funcionalidad del mtodo creado.

Sugerencia
Retorne un nico valor como una cadena de caracteres, en la cual estn
incluidos los valores que se piden. A manera de ejemplo considere lo
siguiente:
cRpta = cZodiaco + cDiaNacimiento + cDiasVividos + cFechaHoy
Return cRpta

Fin del Nivel I