Documente Academic
Documente Profesional
Documente Cultură
Abril de 2017
Asuncin Paraguay
Walter R. Ojeda Valiente
INDICE
Introduccin -------------------------- 2
Repaso de clases ---------------------- 3
Creando controles --------------------- 5
Control MiLabel1 ---------------------- 6
Control MiLabel2 ---------------------- 11
Control MiLabel3 ---------------------- 13
Control MiText1 ----------------------- 15
Control MiText2 ----------------------- 17
Control MiText3 ----------------------- 24
Control MiCombo1 ---------------------- 33
Control MiGrid1 ----------------------- 37
Conclusin ---------------------------- 39
1
Walter R. Ojeda Valiente
INTRODUCCIN
Ya habamos visto en el primer documento que compone esta serie: CLASES EN
VISUAL FOXPRO 9 como crear y usar clases en Visual FoxPro 9, en este nuevo documento
nos enfocaremos a la creacin de controles, pero antes de ello, haremos un repaso de
conceptos para tenerlos bien claros antes de iniciar la tarea.
Espero que las siguientes pginas te sean tiles, con ese propsito fueron escritas,
si tienes algunas dudas o comentarios, puedes contactarte conmigo a travs del e-mail:
wrov@hotmail.com
2
Walter R. Ojeda Valiente
REPASO DE CLASES
Qu es una clase?
Es una porcin de cdigo fuente que se utiliza como un modelo del cual se
derivarn objetos que tendrn todas y cada una de las caractersticas de la clase.
Qu es un objeto?
Una clase es un concepto abstracto, es la determinacin de lo que se quiere hacer
con ella, para qu servir, cual ser su utilidad. Pero mientras no existan objetos de esa
clase de nada sirve, porque una clase sin objetos es como tener el plano de una casa pero
no la casa: no puedes vivir en el plano de una casa, debes construir la casa para vivir ah.
3
Walter R. Ojeda Valiente
4
Walter R. Ojeda Valiente
CREANDO CONTROLES
Como ya hemos visto, un control es una instancia de una clase que es visible
dentro de un formulario y que no puede contener a otros objetos dentro suyo.
5
Walter R. Ojeda Valiente
Control MiLabel1
CREATE CLASS MILABEL1 OF CONTROLES AS LABEL
Qu hicimos aqu?
1. Creamos una clase llamada MiLabel1 basada en la clase Label, o sea que
es una subclase de la clase Label. Podramos pensar en ella como una
hija de Label.
2. Colocamos a la clase MiLabel1 en una biblioteca de clases llamada
CONTROLES. Como no exista la biblioteca de clases CONTROLES.VCX la
hemos creado automticamente.
6
Walter R. Ojeda Valiente
Cmo lo conseguimos?
7
Walter R. Ojeda Valiente
Haciendo clic sobre el icono View Classes y luego haciendo clic en la opcin
Add del men contextual que aparece, tal como podemos ver en la
Captura 4.
8
Walter R. Ojeda Valiente
Al elegir una biblioteca de clases, todas las clases que contiene estarn a
nuestra disposicin para que las usemos.
9
Walter R. Ojeda Valiente
10
Walter R. Ojeda Valiente
Control MiLabel2
CREATE CLASS MILABEL2 OF CONTROLES AS LABEL
Qu hicimos aqu?
1. Creamos una clase llamada MiLabel2 basada en la clase Label, o sea que
es una subclase de la clase Label. Podramos pensar en ella como una
hija de Label.
2. Colocamos a la clase MiLabel2 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
11
Walter R. Ojeda Valiente
12
Walter R. Ojeda Valiente
Control MiLabel3
CREATE CLASS MILABEL3 OF CONTROLES AS LABEL
Qu hicimos aqu?
1. Creamos una clase llamada MiLabel3 basada en la clase Label, o sea que
es una subclase de la clase Label. Podramos pensar en ella como una
hija de Label.
2. Colocamos a la clase MiLabel3 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
13
Walter R. Ojeda Valiente
14
Walter R. Ojeda Valiente
Control MiText1
CREATE CLASS MITEXT1 OF CONTROLES AS TEXTBOX
Qu hicimos aqu?
1. Creamos una clase llamada MiText1 basada en la clase TextBox, o sea
que es una subclase de la clase TextBox. Podramos pensar en ella como
una hija de TextBox.
2. Colocamos a la clase MiText1 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
Como ya sabemos, la clase MiText1 posee todas las propiedades y todos los
mtodos de la clase TextBox.
15
Walter R. Ojeda Valiente
16
Walter R. Ojeda Valiente
Control MiText2
CREATE CLASS MITEXT2 OF CONTROLES AS MITEXT1 FROM CONTROLES
Qu hicimos aqu?
1. Creamos una clase llamada MiText2 basada en la clase MiText1 que
previamente habamos creado, o sea que es una subclase de la clase
MiText1. Podramos pensar en ella como una hija de MiText1. Como la
clase MiText1 no es una clase nativa de Visual FoxPro entonces
debemos decirle en cual archivo .VCX se encuentra la clase MiText1, por
eso al final de CREATE CLASS escribimos FROM CONTROLES. Si el archivo
CONTROLES.VCX no se encuentra en el path de bsqueda entonces
debemos escribir la ruta completa, ejemplo: FROM E:\VFP\CONTROLES
2. Colocamos a la clase MiText2 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
Como ya sabemos, la clase MiText2 posee todas las propiedades y todos los
mtodos de la clase MiText1.
InputMask = 99/99/9999
Value = {}
Width = 91
Para ello, le agregaremos dos propiedades: una para guardar la fecha inicial
aceptable y la otra para guardar la fecha final aceptable.
17
Walter R. Ojeda Valiente
18
Walter R. Ojeda Valiente
19
Walter R. Ojeda Valiente
20
Walter R. Ojeda Valiente
Lo que hemos conseguido es validar que todas las fechas ingresadas por el
usuario estn siempre entre el 01/01/2000 y el 31/12/2099.
Si las fechas que el usuario debe introducir siempre estarn en ese rango,
pues al insertar un control MiText2 ya nos aseguraremos de que nunca
introduzca una fecha incorrecta.
Como puedes ver en la Captura 21., cuando el usuario introduzco una fecha
no admitida, se mostr un mensaje de error.
21
Walter R. Ojeda Valiente
22
Walter R. Ojeda Valiente
Propiedades de MiText1
FontBold = .T.
23
Walter R. Ojeda Valiente
Control MiText3
CREATE CLASS MITEXT3 OF CONTROLES AS MITEXT1 FROM CONTROLES
Qu hicimos aqu?
1. Creamos una clase llamada MiText3 basada en la clase MiText1 que
previamente habamos creado, o sea que es una subclase de la clase
MiText1. Podramos pensar en ella como una hija de MiText1. Como la
clase MiText1 no es una clase nativa de Visual FoxPro entonces
debemos decirle en cual archivo .VCX se encuentra la clase MiText1, por
eso al final de CREATE CLASS escribimos FROM CONTROLES. Si el archivo
CONTROLES.VCX no se encuentra en el path de bsqueda entonces
debemos escribir la ruta completa, ejemplo: FROM E:\VFP\CONTROLES
2. Colocamos a la clase MiText3 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
Como ya sabemos, la clase MiText3 posee todas las propiedades y todos los
mtodos de la clase MiText1.
InputMask = 999,999,999,999
Value = 0
Width = 131
Al igual que hicimos con la clase MiText2 tambin aqu podemos tener
propiedades que marquen el rango de valores admitidos. En este caso a
esas propiedades las llamaremos NumeroIni y NumeroFin e inicialmente les
asignaremos los valores 0 y 999999999999.
24
Walter R. Ojeda Valiente
Para qu hicimos eso? Para que el ancho (el Width) de nuestro control
MiText3 sea colocado automticamente por el Visual FoxPro, de esa
manera no tendremos que estar preocupndonos por ese detalle y as
ahorraremos algo de tiempo. Esto funcionar siempre que el valor de la
propiedad InputMask sea colocado en tiempo de diseo.
25
Walter R. Ojeda Valiente
26
Walter R. Ojeda Valiente
Para qu?
27
Walter R. Ojeda Valiente
28
Walter R. Ojeda Valiente
Como puedes notar si miras la Captura 34. y la Captura 36., el ancho del
control MiText3 ha cambiado de forma automtica.
29
Walter R. Ojeda Valiente
Para qu?
Para que solamente se acepten nmeros que estn dentro del rango
admitido, cualquier nmero menor o mayor a los admitidos ser rechazado.
Para hacerlo:
30
Walter R. Ojeda Valiente
31
Walter R. Ojeda Valiente
32
Walter R. Ojeda Valiente
Control MiCombo1
CREATE CLASS MICOMBO1 OF CONTROLES AS COMBOBOX
Qu hicimos aqu?
1. Creamos una clase llamada MiCombo1 basada en la clase ComboBox, o
sea que es una subclase de la clase ComboBox. Podramos pensar en
ella como una hija de ComboBox.
2. Colocamos a la clase MiCombo1 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
FontBold = .T.
FontSize = 10
ForeColor = 255, 0, 0
ItemForeColor = 128, 0, 0
33
Walter R. Ojeda Valiente
34
Walter R. Ojeda Valiente
Donde como puedes observar, el tem ms largo (en este caso: Ciudad del
Este) es totalmente visible. En cambio, si los tems fueran los siguientes:
35
Walter R. Ojeda Valiente
36
Walter R. Ojeda Valiente
Control MiGrid1
CREATE CLASS MIGRID1 OF CONTROLES AS GRID
Qu hicimos aqu?
1. Creamos una clase llamada MiGrid1 basada en la clase Grid, o sea que
es una subclase de la clase Grid. Podramos pensar en ella como una
hija de Grid.
2. Colocamos a la clase MiGrid1 en una biblioteca de clases llamada
CONTROLES. Como ya exista la biblioteca de clases CONTROLES.VCX
entonces nuestra clase se insert all.
Como ya sabemos, la clase MiGrid1 posee todas las propiedades y todos los
mtodos de la clase Grid.
ColumnCount = 2
DeleteMark = .F.
ForeColor = 0, 0, 255
RecordMark = .F.
ScrollBars = 2 Vertical
37
Walter R. Ojeda Valiente
Y ya tenemos a nuestro grid, con todas las propiedades tales y cuales nos
gustan.
38
Walter R. Ojeda Valiente
CONCLUSIN
Crear nuestra propia biblioteca de clases es de una gran utilidad, porque nos
permite personalizar nuestras aplicaciones y adems ahorrar muchsimo tiempo. Si ya
tenemos controles preparados para realizar las tareas ms comunes, no tendremos que
volver a programar esas tareas.
En este documento hemos creado unos pocos controles, para que se entienda la
idea, en la vida real subclasearamos a todos y cada uno de los controles nativos del
Visual FoxPro: List, CheckBox, OptionGroup, Picture, Shape, etc.
Tambin, para que sea ms fcil de entender, a los controles los hemos llamado
MiLabel1, MiLabel2, MiLabel3, etc. En la vida real sera ms til llamarlos: MiLabelNormal,
MiLabelTitulo, MiLabelAsterisco, etc.
Podras preguntarte, para qu necesito clases, si todo esto puedo hacerlo sin
crear clases?
39
Walter R. Ojeda Valiente
En el siguiente documento de esta serie veremos algo muy interesante: como crear
controles que descienden no solamente de una clase sino de dos o ms clases. Con eso
conseguiremos que nuestros controles sean ms lindos visualmente y tambin que sean
ms poderosos porque tendrn ms prestaciones.
Las clases de Visual FoxPro son una maravilla, porque nos permiten hacer
cualquier cosa que se nos ocurra, es solamente cuestin de tener la idea y de dedicarle un
poco de tiempo para llevarla a cabo.
http://www.mediafire.com/file/yi41z0y7z1fnol6/CLASES_EN_VISUAL_FOXPRO_9.ZIP
wrov@hotmail.com
40