Vous êtes sur la page 1sur 143

Elas G.

Castillo
gabicas@montevideo.com.uy
Soy un aficionado a la programacin con Visual Basic y
espero que este manual sirva a todos de ayuda
Qu es Visual Basic. Elas G. Castillo
Qu es Visual Basic.
isual Basic es la versin del lenguaje de programacin BASC, orientado al
sistema operativo Windows con todas sus caractersticas (manejo de
ventanas y de controles, iconos, grficos, funciones de la AP, etc.). El
lenguaje de programacin BASC es uno de los ms sencillos de aprender y por
tanto, Visual Basic, es la mejor herramienta para aquellos que quieran iniciarse en
la programacin, ya que con unas pocas lneas de cdigo pueden observarse ya
los resultados.
V
Visual Basic es una forma de programacin basada en objetos u orientada
al evento. Por qu esto? Al ser Windows un entorno multitarea, varias
aplicaciones pueden ejecutarse a la vez (esta es una de las diferencias entre este
sistema operativo y otros como MS-DOS); entonces las aplicaciones permanecen
a la espera de acciones de parte del usuario, de parte de s mismas o del sistema
operativo para ejecutar una parte de su cdigo y volver al estado de espera. Estas
acciones se denominan eventos y el cdigo que se ejecuta son funciones y
mtodos, todos estos se encuentran dentro de unas entidades llamadas Objetos
(que se vern en el siguiente captulo).
Con Visual Basic se pueden crear aplicaciones (*.exe), libreras dinmicas
(*.dll), controles ActiveX (*.ocx) entre otras cosas. Contiene algunos complementos
para utilizar dentro del entorno de trabajo para gestionar bases de datos, crear
archivos de recursos (*.res), utilizar la AP de Windows, crear clases, etc. Posee
muy buenas herramientas de depuracin para encontrar errores (bugs) y
corregirlos, para ejecutar el programa de forma controlada y verificar los valores de
variables, detener el flujo en un momento dado y ms.
Si aparte se instala la ayuda en lnea, denominada MSDN (no viene en el
mismo CD que Visual Basic), proporciona mucha ayuda junto con ejemplos de
cdigo, explicaciones, etc.
Luego de creada toda la estructura de la aplicacin se complia sta para
crear el ejecutable, librera o control ActiveX que se haya creado, lo cual podr
funcionar en otros ordenadores, aunque en ellos no se encuentre instalado Visual
Basic. Para ello se necesitar que se encuentre en el directorio System del
directorio Windows (o donde se encuentre ste) la librera msvbvm60.dll para las
aplicaciones sencillas; si se utilizan otros componentes y referencias se
necesitarn adems de otros archivos en el ordenador.
NOTA:
Las palabras clave de Visual Basic aparecern de color azul y todo el cdigo
aparecer en fuente Courier New.
2
Los Objetos. Elas G. Castillo
Los Objetos.
os objetos son entidades que tienen ciertas caractersticas que les dan
forma, que ejecutan ciertas acciones y controlan su funcionamiento. Estas
caractersticas son: Propiedades, Mtodos, Funciones y Eventos. Ahora se
ver qu son cada una de estas caractersticas, comparndo a los objetos con un
elemento de la vida real. Todo objeto debe de tener un nombre con el que se har
referencia a l y ser de un determinado tipo (Clase); comparndolo con el objeto
de la vida real el objeto podra llamarse Fido y podra ser de tipo Perro (la clase).
Puede haber uno o ms objetos pertenecientes a la misma clase, estos objetos
comparten las mismas cuatro caractersticas pero sus valores son independientes
para cada objeto (encapsulacin), de la misma forma que varios perros distintos
tienen las mismas cualidades, como el color del pelo, pero de distinto valor, el
color de unos ser blanco, el de otros negro, etc.
L
Propiedades.
Las propiedades dan forma a los objetos; definen sus caractersticas. En el
caso del perro sus propiedades seran el Peso, la Edad, color de ojos, color del
pelo, etc. Las propiedades almacenan un valor que les da una medida, en el caso
del gato seran 10 Kg., 3 aos, negros, blanco, respectivamente. A las propiedades
se accede con el nombre del objeto seguido de un punto (.) y el nombre de la
propiedad.
En el caso de que se quisiera acceder a la propiedad Edad de Fido, la
sentencia ser:
Fido.Edad
Las propiedades pueden ser de lectura, escritura o ambas. Las propiedades
de lectura son aquellas que solo puede conocerse su valor pero no cambiarlo. Las
de escritura son aquellas que solamente puede cambiarse su valor pero no
consultarlo, aunque estas propiedades no son lo ms usual. Las propiedades de
lectura/escritura pueden tanto consultarse como cambiar su valor.
Mtodos.
Los mtodos son tareas que un objeto puede realizar. En el caso de Fido,
un mtodo podra ser Correr, Ladrar, Comer, etc. Algunos mtodos podrn llevar
argumentos (o parmetros), que hacen ms especfica aun su tarea. En el caso de
Fido, el mtodo correr podra llevar como argumento la velocidad a la que corre. A
estos mtodos tambin se accede con el nombre del objeto seguido de un punto y
el nombre del mtodo; en caso de llevar argumentos el valor del argumento ir
entre parntesis, por ejemplo:
Fido.Comer
Fido.Correr(18)
3
Los Objetos. Elas G. Castillo
En el mtodo Correr se le pas al argumento la velocidad de 18 (Km/h). El
mtodo Comer no lleva argumentos.
Funciones.
Las funciones son similares a los mtodos, con la diferencia de que las
funciones tienen un valor de retorno y los mtodos no. Este valor de retorno puede
ser un nmero, una cadena de texto, un valor de tipo Verdadero/Falso, e inclusive
otro objeto. Una funcin puede llevar o no argumentos y se accede de la misma
forma que a los mtodos.
Eventos.
Los eventos son acciones que el usuario o el mismo objeto o el sistema
operativo puede efectuar sobre l y que es reconocido por ste. En el caso de
Fido, puede ser un evento el hablarle, el llamarlo, etc. Un evento puede o no llevar
argumentos que especifiquen aun ms el suceso; por ejemplo, en el caso de Fido
puede ser un argumento del evento Hablarle una cadena de caracteres con lo que
se le dice.
Estos se utilizan para ejecutar sentencias ante el reconocimiento de una
determinada accin. Por ejemplo, si se desea que Fido ladre cuando se le llama:
se utiliza el evento Llamarlo de la siguiente manera:
Private Sub Fido_Llamarlo()
Fido.Ladrar
End Sub
Un evento tiene la siguiente forma general:
Private Sub NombreObjeto_NombreEvento(Arumento!)
Senten"ia!
End Sub
Sentencias son las sentencias que se ejecutarn cuando ocurra el evento.
Las palabras Private Sub y End Sub se explicarn en captulos posteriores.
Los eventos son, entonces, notificaciones que el objeto enva de que un
suceso de importancia ha ocurrido. Estos son muy utilizados sobre todo en los
controles.
4
Entorno de trabajo. Elas G. Castillo
Entorno de trabajo.
l entorno de trabajo de Microsoft Visual Basic 6.0 presenta dos modos de
trabajo segn si se est diseando una ventana o se est escribiendo el
cdigo con sus eventos, propiedades, mtodos y funciones. En el caso de
las aplicaciones, tener en cuenta que se desarrollan sobre ventanas que tienen
controles
como
cajas de
texto,
cuadros de
lista,
botones de
opcin,
etc. con
los que el
usuario
interacta. Las ventanas con su aspecto se crean en una interfaz grfica llamada
Formulario (Form) y se ve en la imagen de arriba. El formulario ser la ventana de
la aplicacin cuando sta se compile. El cuadro de la parte izquierda de la ventana
es el Cuadro de Herramientas, con los controles disponibles a colocar sobre el
formulario. El cuadro de la derecha es la ventana Propiedades, las que muestra las
propiedades del formulario o control seleccionado en el formulario, para
cambiarlas. Es en esta vista donde se disea en forma visual toda la parte grfica
de la ventana; este modo de trabajo se denomina modo Diseo.
E
Luego est el otro modo de trabajo, denominado modo Ejecucin es la
ventana donde se escribe el cdigo. En esta pantalla no hay objetos visuales sino
que se trabaja con solo texto. Como se observa en la segunda imagen, el cdigo
es exclusivamente texto, en el cual se observa texto con formato de color. Esto se
debe a que las palabras clave aparecen en un color, los errores de sintaxis en otro,
los comentarios en otro y el texto en otro color. Esto implica la utilizacin de un
cdigo de color por parte de Visual Basic.
Este cdigo de color se puede cambiar desde el men HERRAMENTAS,
OPCONES y la pestaa FORMATO DEL EDTOR.
Desde el mismo cuadro pero en la pestaa EDTOR se pueden agregar
algunas opciones que ayuden como !ista de miembros autom"tica, la cual
muestra todas las propiedades, mtodos y funciones de un objeto con solo escribir
5
Entorno de trabajo. Elas G. Castillo
el nombre del objeto y el punto, n#ormacin r"pida autom"tica y $ugerencias de
datos autom"tica muestran los argumentos de las distintas funciones y mtodos,
%e&uerir declaracin de variables coloca al principio una sentencia Option Explicit
que se ver su utilidad ms adelante, etc.
Al escribir
el cdigo puede
que se necesite
ingresar
comentarios
acerca de ste
para que uno
mismo u otros
programadores
entiendan el
cdigo.
Los
comentarios
comienzan con
el carcter '
seguido del
texto del
comentario.
Visual Basic no
tomar para
nada en cuenta este texto.
Obsrvese que en la parte superior, encima de la ventana con el cdigo
aparecen dos cuadros combinados: el de la izquierda contiene todos los objetos
presentes en el formulario (que admiten eventos) y en la derecha los eventos del
objeto seleccionado en el cuadro de la izquierda.
Tambin al escribir el cdigo, puede que se quieran poner varias sentencias
en una misma lnea. Para ello las sentencias se pueden separar con dos puntos
(:). Tambin pueden separarse escribiendo en otra lnea la siguiente sentencia.
Cuando una sentencia sea demasiado larga, puede escribirse una sentencia en
dos o ms lneas escribiendo un espacio y el carcter underscore (_), y luego
seguir escribiendo en la siguiente lnea. Una limitacin de los comentarios es que
no se pueden escribir en el caso de sentencias divididas de esta forma.
Todas las aplicaciones, libreras, o lo que sea que se cree en Visual Basic
se hace en un Pro'ecto. Un proyecto (depende del tipo) contendr Formularios,
Mdulos estndar, Mdulos de clase, Controles
de usuario, etc. Puede ver los que estn
presentes en el proyecto desde el E(plorador de
Pro'ectos en el men VER.
La siguiente imagen muestra la ventana con los
componentes del proyecto; desde el men
contextual de cada elemento pueden quitarse,
agregarse otros, guardarlos, etc. En el caso de los
6
Entorno de trabajo. Elas G. Castillo
formularios y controles de usuario, puede alternarse entre la vista cdigo y la vista
de diseo.
Tambin pueden guardarse los componentes desde el men ARCHVO; desde
donde tambin se compila el proyecto para generar el ejecutable (*.exe) o la
librera (*.dll), etc.
El Examinador de Objetos.
Esta herramienta proporciona mucha ayuda acerca de los diversos objetos
que tiene Visual Basic. En esta pantalla se muestran los objetos, sus datos
miembro
(Propiedades,
Mtodos,
Funciones,
Eventos,
Colecciones,
etc.) junto con
una descripcin
de cada una.
Tambin permite
acceder a la
ayuda.
En el
ejemplo de la
imagen se busc
palabras que
coincidieran con
"button, objetos que aparecieron en el pnel superior. Si se ha seleccionado el
segundo elemento (Biblioteca VB, Clase OptionButton), aparece en el pnel del
medio a la derecha todos los miembros de OptionButton, se seleccion el evento
Click y en el pnel inferior aparece una pequea descripcin de dicho evento. Hay
tambin un botn con un signo de interrogacin (encerrado en un crculo rojo); si
se encuentra instalada la ayuda en lnea (MSDN), aparecer una ventana de
ayuda con ejemplos, explicaciones y detalles sobre el elemento seleccionado.
Ficheros de un proyecto.
Un proyecto est compuesto bsicamente por dos ficheros: uno con la
informacin global del proyecto, de extensin *.vbp (Visual Basic Proyect) y uno de
extensin *.frm (Form). Sin embargo tambin puede contener otros ficheros
denominados mdulos estndar de extensiones *.bas (Basic), mdulos de clase de
extensin *.cls (Class), ficheros de recursos de extensin *.res (resource), etc., los
cuales se vern en el momento que corresponda.
7
Los Controles. Elas G. Castillo
Los Controles.
os controles son objetos con interfaz grfica. Si no se han ingresado
componentes desde el men PROYECTO, COMPONENTES (Ctrol+T), aparecern
los componentes estndar de Visual Basic en el Cuadro de Herramientas. La
forma de colocar controles en un formulario es seleccionandolos desde el Cuadro
de Herramientas y arrastrando sobre el formulario. Luego se puede cambiar el
valor de sus propiedades desde el Cuadro Propiedades. A continuacin los
controles estndar de Visual Basic.
L
Etiquetas (Label.
Estos controles sirven para presentar texto (o nmeros). La propiedad ms
importante de este objeto es la propiedad Caption, la cual es una cadena de
caracteres con el texto a presentar en el control.
Algunas propiedades importantes de este control:
)lignment* alinea el texto dentro del control (izquierda, derecha o
centrado).
)utosi+e* ajusta el tamao de la etiqueta al texto que contiene (True).
,ac-Color* establece el color de fondo del control.
,ac-$t'le* establece si la etiqueta tendr fondo o ser transparente.
,order$t'le* establece si la etiqueta ser plana o tendr borde.
Font* permite establecer las caractersticas de la fuente del control
(excepto el color).
ForeColor* establece el color de la fuente.
Heig.t* establece el ancho del control.
!e#t* establece la distancia del control del borde izquierdo de su
contenedor.
/ag* guarda datos adicionales.
/ool/ip/e(t* establece un texto que se muestra al situar el mouse
sobre el control.
/op* establece la distancia entre el control y el borde superior de su
contenedor.
0isible* hace visible o invisible el control.
1idt.* establece el largo del control.
1ord1rap* establece si puede haber texto en varias lneas en la
etiqueta.
Los eventos de este control son:
C.ange* ocurre al cambiar el texto de la etiqueta (propiedad Caption)
Clic-* ocurre al hacer clic con el mouse sobre el control.
DblClic-* ocurre al hacer doble clic sobre el control.
DragDrop*
MouseDo2n* ocurre al soltar un botn del mouse sobre el control.
8
Los Controles. Elas G. Castillo
MouseMove* ocurre cuando el usuario mueve el mouse sobre el
control.
Mouse3p* ocurre al presionar un botn del mouse sobre el control.
Los mtodos que este control admite son los siguientes:
Drag* este mtodo inicia, cancela o finaliza los mtodos de arrastre.
Move* permite cambiar la posicin y el tamao de un control.
%e#res.* obliga a volver a dibujar un control.
45rder* permite ordenar los controles, o sea, colocar unos delante o
detrs de otros.
!ajas de "exto ("ext#ox.
Las cajas de texto son controles tpicos de Windows y a travs de ellas se
ingresan la mayor parte de los datos a las aplicaciones.
Las cajas de texto permiten editar texto (o nmeros)
directamente. La propiedad ms importante de las
cajas de texto es la propiedad /e(t, que representa el
texto contenido en el control.
Algunas propiedades importantes de este control son:
)lignment6 ,ac-Color6 ,order$t'le6 Font6 ForeColor6 Heig.t6 !e#t6
/ag6 /ool/ip/e(t6 /op6 0isible ' 1idt..
)ppearance: establece si el control se ve con efecto 3D o plano.
Enabled* determina si un usuario puede generar eventos sobre el
control.
!oc-ed* determina si se puede modificar directamente el texto de la
caja de texto.
Ma(!eng.t* determina el mximo de caracteres que puede contener
la caja de texto.
Multi!ine* determina si puede haber texto en varias lneas en la caja
de texto.
Pass2ordC.ar* sustituye el texto escrito por un carcter, el cual no
permite hacer visible el texto real (como las cajas de claves de
seguridad).
$croll,ars* permite colocar barras de desplazamiento en los bordes
para desplazarse en caso de que el texto sea demasiado extenso.
/ab7nde(* devuelve el orden de la tabulacin de un control (se puede
desplazar a travs de los controles presionando la tecla TAB).
/ab$top* establece si este control recibe el enfoque (el foco) a travs
de la tecla TAB.
Los eventos de este control son:
Clic-6 C.ange6 DblClic-6 DragDrop6 Drag5ver6 MouseDo2n6
MouseMove6 Mouse3p
8otFocus* ocurre cuando el control recibe el foco (pasa a ser el
control activo).
9e'Do2n* ocurre al presionar una tecla del teclado mientras el
control tiene el foco.
9
Los Controles. Elas G. Castillo
9e'Press* ocurre cuando el presiona y libera una tecla.
9e'3p* ocurre al liberar una tecla del teclado mientras el control tiene
el foco.
!ostFocus* ocurre cuando el control pierde el foco (deja de ser el
control activo).
0alidate* ocurre cuando un control perde el foco a favor de un control
que produce una validacin.
Los mtodos de este control son los siguientes:
Drag6 Move6 %e#res. ' 4order.
$etFocus* hace que el control reciba el foco (pase a ser el control
activo).
!uadros de Lista (List#ox.
Este control permite ingresar texto en lneas, como una
autntica lista. Este control tambin es muy usual en el entorno
Windows. Pueden seleccionarse los elementos de este control
para realizar distintas tareas, segn las necesidades del
programa que se est creando. Este control tiene varias
propiedades y mtodos que manipulan los datos que contienen.
Cada lnea del cuadro de lista es un elemento de la lista,
y a cada elemento de la lista se lo identifica con un nmero de ndice; los ndices
comienzan a numerarse por cero (0). Esta explicacin permitir entender cmo
acceder y manipular los elementos de la lista.
Las propiedades de este control son:
)ppearance6 ,ac-Color6 Enabled6 Font6 ForeColor6 Heig.t6 !e#t6
/ab7nde(6 /ab$top6 /ag6 /ool/ip/e(t6 /op6 0isible ' 1idt..
Columns* establece si los elementos se sitan en una sola columna
(cuando vale 0) o en ms de una columna de estilo periodstico
(cuando vale ms de 0).
!ist* permite ingresar elementos en tiempo de diseo.
Multi$elect* permite seleccionar ms de un elemento.
$orted* indica si los elementos se van ingresando ordenados por
orden alfabtico o no.
$t'le* muestra la lista con o sin casillas de seleccin (Estndar o
Checkbox).
Los eventos de este control son:
C.ange6 Clic-6 DblClic-6 DragDrop6 Drag5ver6 8oFocus6 9e'Do2n6
9e'Press6 9e'3p6 !ostFocus6 MouseDo2n6 MouseMove6 Mouse3p '
0alidate.
7temC.ec-:7tem )s 7nteger;* ocurre al activar o desactivar un
elemento de la lista cuando la propiedad Style es Checkbox. El
argumento tem representa el ndice del elemento.
$croll* ocurre al mover la barra de desplazamiento del control.
Los mtodos de este control son:
Drag6 Move6 %e#res.6 $etFocus ' 45rder.
10
Los Controles. Elas G. Castillo
Existen otras propiedades y otros mtodos disponibles solamente desde el
cdigo y permiten ingresar y remover elementos, as tambin como recuperarlos,
seleccionarlos, contarlos y eliminarlos todos.
Mtodo )dditem* este mtodo ingresa elementos en el cuadro de lista. Su
forma general es la siguiente:
NLi!t#o$.Add%tem(%tem A! Strin&'%nde$()
Donde NListBox es el nombre del cuadro de lista; tem es una cadena de
caracteres que ser el elemento, ndex es un argumento opcional que especifica el
nmero de ndice que tendr.
Mtodo %emove7tem* este mtodo elimina elementos del control. Su forma
general es la siguiente:
NLi!t#o$.)emove%tem(%nde$ A! %nteer)
Donde NListBox es el nombre del cuadro de lista; ndex es el ndice del
elemento a eliminar.
Mtodo Clear* este mtodo elimina todos los elementos del control. Su
forma general es:
NLi!t#o$.Clear
Donde NListBox es el nombre del cuadro de lista.
Propiedad !istCount* devuelve la cantidad de elementos contenidos en el
control. Es de solo lectura.
Propiedad !ist:7nde( )s 7nteger;* devuelve un elemento de la lista,
especificado por el argumento ndex. Tener en cuenta que el primer elemento de la
lista tendr ndice 0 y el ltimo un valor igual a la cantidad de elementos menos 1
(ListCount-1).
Propiedad !ist7nde(* devuelve o establece el elemento que se encuentra
seleccionado de la lista, mediante su nmero de ndice. Tener en cuenta que el
primer elemento de la lista tendr ndice 0 y el ltimo un valor igual a la cantidad
de elementos menos 1 (ListCount-1). Cuando no hay ningn elemento
seleccionado o para eliminar cualquier seleccin, el valor de Listndex ser -1.
Propiedad $elCount* esta propiedad est disponible cuando la propiedad
Style tiene el valor Checkbox y devuelve la cantidad de elementos activados.
!uadros !ombinados (!ombo#ox.
Los cuadros combinados combinan las cualidades de
las cajas de texto con los cuadros de lista y son muy usuales
en el entorno Windows (por ejemplo, en la barra de
herramientas Formato de Microsoft Word, las fuentes estn
contenidos en un control de este tipo). Por tanto, dispondr de los mtodos
)dd7tem6 %emove7tem6 Clear6 !istCount6 !ist y !ist7nde( de los cuadros de lista.
11
Los Controles. Elas G. Castillo
Tambin posee la propiedad /e(t que indica el elemento actual seleccionado (el
elemento que tiene el ndice indicado por Listndex).
Una propiedad importante de este control es la propiedad $t'le, la cual tiene
tres valores que especifican el tipo de visualizacin que tendr el control Cuadro
Combinado. Adems tiene el evento DropDo2n, que ocurre cuando la parte de
lista del control se est por desplegar.
Marcos (Frame.
Los marcos sirven como contenedores de otros controles, con un ttulo en
su parte superior. Son de utilidad captial para los botones de opcin, ya que stos
debern estar contenidos dentro de un marco para funcionar correctamente. La
propiedad ms sobresaliente de este control es la propiedad Caption que es el
ttulo que aparecer la parte superior del control.
Otras propiedades importantes son:
,order$t'le* permite visualizar el borde del control con su ttulo, o no.
)ppearance6 ,ac-Color6 Enabled6 Font6 ForeColor6 Heig.t6 !e#t6
/ab7nde(6 /ag6 /ool/ip/e(t6 /op6 0isible ' 1idt..
Los eventos soportados por los marcos son:
Clic-6 DblClic-6 DragDrop6 Drag5ver6 MouseDo2n6 Mouse3p '
MouseMove.
Los mtodos de los marcos son:
Drag6 Move6 %e#res. ' 4order.
#otones de Opci$n (Option#utton.
Estos botones permiten decidir entre una serie de
opciones. Al estar contenido dentro de un marco (recuadro
con el ttulo Edad), solamente uno podr estar activo (en la
imagen el primer botn). Por ejemplo, una persona podr
estar en uno de los rangos de edades, por tanto, los dems
quedarn excludos al seleccionar uno.
La propiedad ms importante es la propiedad 0alue, que indica si est
activo el botn (True) o no (False).
Otras propiedades importantes son:
)ppearance6 ,ac-Color6 Enabled6 Font6 ForeColor6 !e#t6 /ab7nde(6
/ab$top6 /ag6 /ool/ip/e(t6 /ag6 /op6 0isible ' 1idt..
)lignment* es la alineacin del texto a la izquierda o derecha del
control.
Caption* es el texto del botn.
DisabledPicture* devuelve el grfico que se mostrar cuando el botn
est desactivado (cuando la propiedad Style es 1).
Do2nPicture* devuelve el grfico cuando el botn est presionado
(cuando la propiedad Style es 1).
Mas-Color* establece un color de la imagen del botn que se
mostrar transparente (cuando la propiedad Style es 1).
12
Los Controles. Elas G. Castillo
Picture* establece la imagen que contendr el control cuando su
propiedad style es 1.
$t'le* establece el estilo del control, ya sea el estndar de Windows
(Style 0) o con formato grfico (Style 1).
3seMas-Color* devuelve un valor que determina si el color
especificado por la propiedad MaskColor se muestra como
transparente (cuando Style es 1).
0alue* es un valor que indica si el control est activo o no.
Es tambin de destacar que la propiedad BackColor y ForeColor funcionan
cuando la propiedad Style vale 1; condicin vlida para las casillas de verificacin
y botones de comando.
Los mtodos de este control son los siguientes:
Drag6 Move6 %e#res.6 $etFocus ' 45der.
Los eventos que soporta el control son los siguientes:
Clic-6 DblClic-6 DragDrop6 Drag5ver6 8otFocus6 9e'Do2n6
9e'Press6 9e'3p6 !ostFocus6 MouseDo2n6 MouseMove6 Mouse3p '
0alidate.
!asillas de %eri&icaci$n (!hec'#ox.
Estas casillas cumplen una funcin similar a los
botones, pero con la diferencia de que no se excluyen entre
ellos, aunque estn dentro del mismo marco. Por lo tanto,
se pueden utilizar estas casillas para datos de un mismo
tipo no excluyentes (como los de la imagen de ejemplo),
por lo tanto no necesitan estar dentro de un marco.
En cuanto a sus propiedades, mtodos y eventos,
son similares a los de los botones de opcin (excepto que no posee el evento
DblClick).
Su propiedad 0alue presenta una variante con respecto a la propiedad
Value de los botones de opcin: mientras que en los botones de opcin la
propiedad Value puede tomar dos valores (True o False), en las casillas de
verificacin puede tomar tres: C.ec-ed (1)6 3nc.ec-ed (0) o 8ra'ed (2).
#otones de !omando (!ommand#utton.
La funcin de los botones de comando es iniciar
acciones y Windows est lleno de este tipo de control, por
ejemplo el botn nicio, los botones de Aceptar y Cancelar de
los cuadros de dilogo, etc.
Lo ms usual es usar el evento Clic- de este control para desencadenar
distintas operaciones, en virtud de lo que se desea realizar. No obstante se dan
algunas propiedades:
Caption* es el texto contenido en el botn. Si se aade el carcter &
delante de algn carcter, ese carcter aparecer subrayado con lo
cual tambin se podr desencadenar el evento Click con la tecla Alt
presionada y el carcter subrayado. En el ejemplo del botn de la
imagen, sera Alt + e.
13
Los Controles. Elas G. Castillo
Cancel* determina si el botn de comando funciona como el botn
Cancelar de un formulario.
Picture* establece el grfico que se mostrar en el botn cuando su
propiedad Style sea igual a 1.
$t'le* establece si el botn aparecer con el formato estndar de
Windows (0) o con formato grfico (1).
Las propiedades DisabledPicture6 Do2nPicture6 Mas-Color '
3seMas-Color tienen el mismo significado que en los botones de
opcin.
Los mtodos son los mismos que en los botones de opcin y tambin sus
eventos (Click, DblClick, KeyPress, etc.).
#arras de (espla)amiento (*croll#ars.
Hay dos tipos de barras de desplazamiento: las barras de
desplazamiento horizontales y las verticales, sin embargo, ambas tienen
las mismas propiedades, mtodos y eventos. Las barras tienen un valor
mnimo y un valor mximo, visualmente son los extremos de la barra y un
valor actual, visualizado por el marcador (un cuadrado que se mueve por
el control).
Estos extremos estn representados por dos propiedades: Min y
Ma(, que especifican el valor mnimo y mximo respectivamente. El valor actual
est determinado por la propiedad 0alue, es un valor que cambia al cambiar el
cursor de la barra y est entre el mnimo y mximo (o sea Min <= 0alue <= Ma().
Adems de las mencionadas anteriormente, otras propiedades a tener en
cuenta son:
!argeC.ange* es la magnitud del cambio de la propiedad Value
cuando el usuario hace clic en el rea de desplazamiento.
$mallC.ange* es la magnitud del cambio de la propiedad Value
cuando se hace clic en la flecha de desplazamiento.
Los mtodos de este control son:
Drag6 Move6 %e#res.6 $etFocus ' 45rder.
Las barras de desplazamiento tienen dos eventos que sern los ms
importantes de este control, ellos son:
C.ange* este evento ocurre cuando se cambi el valor de la barra y
no lleva argumentos.
$croll* ocurre mientras se desplaza la barra y no lleva argumentos.
DragDrop6 Drag5ver6 8otFocus6 9e'Do2n6 9e'Press6 9e'3p6
!ostFocus ' 0alidate.
!ontrol de "iempo ("imer.
Este control no tiene una interfaz grfica (no se ve nada en en
formulario), pero s sus efectos. La funcin de este control es repetir tareas
cada cierto intervalo de tiempo. La imagen es del icono que representa al
control en tiempo de diseo, ya que en tiempo de ejecucin no se ve.
Las propiedades ms importantes de este control son:
14
Los Controles. Elas G. Castillo
Enabled* activa o desactiva el control (el evento Timer).
7nterval* es el tiempo en milisegundos con que se repite el evento
Timer. Si vale cero no tiene lugar el evento Timer.
Este control no tiene mtodos y tiene un nico evento: el evento Timer, el
cual ocurre con la periodicidad indicada por la propiedad nterval mientras sea
mayor que 0 y la propiedad Enabled valga True.
!ombo de unidades de disco ((riveList#ox.
Este control es un cuadro combinado con las
unidades de disco que tiene el sistema (discos duros,
disqueteras, unidades CD-ROM, conexiones de red, etc) acompaado de una
imagen.
Por ser un cuadro combinado tiene las propiedades !ist, !istCount y
!ist7nde( de los cuadros combinados, pero no as los mtodos para agregar,
remover, borrar elementos.
La propiedad ms importante es la propiedad Drive, que slo est presente
en el cdigo y es una cadena de caracteres con la ruta de la unidad actual. En el
ejemplo de la imagen, la propiedad Drive tendr el valor c:
Los eventos son los mismos que para los cuadros combinados, pero con la
variante de que al cambiar el elemento en el control unidad de disco se produce su
evento C.ange.
Listas de (irectorios ((irList#ox.
Este es un cuadro de lista con los directorios presentes
en un determinado directorio o subdirectorio. Al hacer doble
clic sobre alguno de los directorios se accede a los
subdirectorios de ese directorio. Cada elemento de la lista es
un directorio.
Por ser un cuadro de lista, tiene sus propiedades !ist6
!istCount y !ist7nde(, pero no los mtodos para agregar,
remover y borrar elementos.
Su propiedad ms importante es la propiedad Pat.,
que es una cadena de caracteres con la ruta del directorio que se visualiza.
Cuando se cambia el directorio actual ocurre el evento C.ange6 pero se
carece del evento DblClic-.
Listas de +rchivos (FileList#ox.
Este control es un cuadro de lista con los archivos
contenidos en un directorio o subdirectorio. Al ser un
cuadro de lista tiene las propiedades !ist6 !istCount y
!ist7nde( de este control, pero no los mtodos para
agregar, remover y borrar elementos.
La propiedad ms importante es la propiedad Pat.,
que es una cadena de caracteres con la ruta del directorio
que contiene los archivos mostrados en el control. Otra
propiedad importante es la propiedad Pattern, una cadena
15
Los Controles. Elas G. Castillo
de caracteres la cual establece las extensiones de los archivos que se visualizarn
(por defecto *.*); si se le diera el valor *.doc solamente se mostrarn archivos de
extensin doc, si se le diera el valor *.txt; *.b! se mostrarn archivos con
extensin txt y bmp, y as sucesivamente.
Otras propiedades son:
)rc.ive* determina si el control muestra los archivos con el atributo
modificado.
Hidden* determina si el control muestra los archivos ocultos.
<ormal* determina si el control muestra los archivos con el atributo
Normal.
%ead5nl'* determina si el control muestra los archivos con el atributo
Slo Lectura.
$'stem* determina si el control muestra los archivos con el atributo
Sistema.
Los mtodos y eventos son los mismos que para los cuadros de lista.
L,neas (Line.
Este control tiene una finalidad puramente decorativa. No tiene
eventos, no puede recibir el foco y nicamente tiene los mtodos %e#res. y
45rder. Sin embargo, tiene propiedades que controlan su apariencia y ellas
son:
,orderColor* establece el color de la lnea.
,order$t'le* establece el tipo de lnea (contnua, punteadas, rayas,
etc.) slo cuando la propiedad BorderWidth vale 1.
,order1idt.* establece el grosor de la lnea.
Dra2Mode* establece la apariencia del este control.
=>* establece la coordenada x de un extremo de la lnea.
=?* establece la coordenada x del otro extremo de la lnea.
@>* establece la coordenada " de un extremo de la lnea.
@?* establece la coordenada " del otro extremo de la lnea.
/ag y 0isible.
Formas (*hape.
Al igual que las lneas, la utilidad de este control es de decoracin; no posee
eventos ni puede recibir el foco y posee solamente los
mtodos Move6 %e#res. ' 45rder.
Su propiedad ms importante es la propiedad $.ape,
que determina el tipo de forma que tendr el control: 0
Rectngulo, 1 Cuadrado, 2 Ovalo, 3 Crculo, 4
Rectngulo redondeado y 5 Cuadrado redondeado. Otras
propiedades importantes son las siguientes:
,ac-Color6 ,orderColor6 ,order$t'le6 ,order1idt.6 Dra2Mode6
Heig.t6 !e#t6 /ag6 /op y 0isible.
,ac-$t'le* determina si el color de fondo (BackColor) es transparente
(0) u opaco (1).
16
Los Controles. Elas G. Castillo
FillColor* establece el color de relleno de la forma.
Fill$t'le* establece el tipo de relleno que contendr la forma: 0
Slido, 1 Transparente, 2 Lneas horizontales, 3 Lneas
verticales, 4 Diagonales descendentes, 5 Diagonales
ascendentes, 6 Cuadriculado y 7 Rejillas.
!ajas de -ma.en (-ma.e.
Este control permite visualizar imgenes en su
interior: mapas de bits (*.bmp o *.dib), formato JPG (*.jpg),
formato de intercambio grfico (*.gif), metaarchivo de
Windows (*.wmf), metaarchivo enriquecido (*.emf) e
iconos y cursores (*.ico y *.cur).
Este control, sin ninguna imagen en su interior es
totalmente transparente y no puede recibir el enfoque. Las
propiedades de este control son las siguientes:
)ppearance6 ,order$t'le (similar a la
propiedad BorderStyle de las etiquetas),
Enabled6 Heig.t6 !e#t6 /ag6 /ool/ip/e(t6 /op6 0isible y 1idt..
Picture* es la imagen que contendr el control.
$tretc.* determina si la imagen contenida en la caja de imagen se
adapta al tamao de sta.
Los mtodos de este control son:
Drag6 Move6 %e#res. y 45rder.
Los eventos que este control soporta son los siguientes:
Clic-6 DblClic-6 DragDrop6 Drag5ver6 MouseDo2n6 MouseMove y
Mouse3p.
!ajas de (ibujo (Picture#ox.
Este control es de suma utilidad para
realizar grficos. Dispone de una serie de
mtodos gr"#icos (en la imagen se ven algunos)
que comparte con los formularios y el objeto
Printer y que se vern ms adelante en el captulo
correspondiente a grficos. Algunas de sus
propiedades tambin se vern en el respectivo
captulo.
Las propiedades de este control son las siguientes:
,ac-Color6 ,order$t'le6 Enabled6 Font6 ForeColor6 Heig.t6 !e#t6
/ab7nde(6 /ab$top6 /ag6 /ool/ip/e(t6 /op6 0isible y 1idt..
)uto%edra2* redibuja los mtodos grficos automticamente.
)lign* esta propiedad alinea el control en una parte del formulario que
lo contiene: 0 Ninguna, 1 Arriba, 2 Abajo, 3 zquierda y 4
Derecha.
)uto$i+e* determina si la caja de dibujo adapta su tamao al tamao
de la imagen ingresada.
17
Los Controles. Elas G. Castillo
Font/ransparent* establece si se muestran los resultados de los
mtodos grficos.
Picture* coloca una imagen en la caja de dibujo.
Los mtodos de este control son, adems de los mtodos grficos, los
siguientes:
Drag6 Move6 %e#res.6 45rder.
Tambin soporta los siguientes eventos:
Clic-6 C.ange6 DblClic-6 DragDrop6 Drag5ver6 8otFocus6 9e'Do2n6
9e'Press6 9e'3p6 !ostFocus6 MouseDo2n6 MouseMove6 Mouse3p6
Paint6 %esi+e y 0alidate.
El evento Paint y Resize, que comparte con los formularios, sern vistos en
los formularios.
!ontrol de (atos ((ata.
Este control permite visualizar datos contenidos en
una base de datos. Para ello, al ingresarlo, hace
referencia a una librera de objetos denominada DAO (Dao2535.tlb) que contiene
los objetos para trabajar con bases de datos.
Este control se puede apreciar en algunos programas como en el
Administrador Visual de Datos y permite enlazar controles con una base de datos.
Tiene propiedades que permiten establecer una conexin con una base de datos;
algunas propiedades de este control son las siguientes:
)ppearance6 ,ac-Color6 Enabled6 Font6 ForeColor6 Heig.t6 !e#t6 /ag6
/ool/ip/e(t6 /op6 0isible y 1idt..
)lign* alinea el control en alguno de los bordes del formulario
(ninguno, superior, inferior, izquierdo o derecho).
,5F)ction* establece la accin que tendr lugar al llegar al fin de la
tabla de la base de datos.
Caption* es un texto presente en el control (en la imagen es Data1).
Connect* establece el tipo de base de datos de la que se trata.
Database<ame* es una cadena de caracteres con la ruta de acceso
a la base de datos.
E5F)ction* establece la accin que tendr lugar al llegar al inico de
la tabla de la base de datos.
E(clusive* indica si otros usuarios podrn acceder a esta base de
datos.
5ptions* establece opciones necesarias para utilizar con el objeto
Recordset de el control de datos.
%ead5nl'* determina si es de slo lectura (a True).
%ecordset/'pe* establece el tipo de recordset que tendr el control
de datos.
%ecord$ource* establece la tabla contenida en la base de datos.
Este control funciona como un enlace entre los registros de la tabla de la
base de datos y los controles a l enlazados.
18
Los Controles. Elas G. Castillo
Para enlazar un control al control de datos (una caja de texto, por ejemplo),
en la propiedad Data$ource coloque el nombre del control de datos y en la
propiedad DataField seleccione el nombre del campo que representar el control.
Formularios (Form.
Los formularios son de vital importancia ya que representa la ventana de la
aplicacin que se crear y sobre el se colocarn los controles y se escribir el
cdigo en lo que se denomina Procedimiento de ventana. Tiene sus eventos,
propiedades y mtodos propios y aparte contendr los procedimientos,
propiedades y funciones que el programador construya. Tiene los mtodos
grficos ya mencionados en las cajas de dibujo y que se vern ms adelante.
Las propiedades del formulario son las siguientes:
)ppearance6 )uto%edra26 ,ac-Color6 Enabled6 Font6 ForeColor6
Font/ransparent6 Heig.t6 !e#t6 /ag6 /op6 0isible y 1idt..
,order$t'le* establece el tipo de borde que tendr el formulario, si se
podr cambiar de tamao o no, etc.
Caption* es el texto que aparecer en la barra de ttulo del formulario.
Control,o(* determina si aparecer en la barra de ttulo el icono con
el men de control.
7con* establece el cono que se mostrar en la barra de ttulo del
formulario (y tambin de la aplicacin en caso de ser la ventana
principal).
9e'Previe2* determina si los eventos de teclado (KeyUp, KeyDown y
KeyPress) del formulario tienen lugar antes que los eventos de
teclado de los controles.
Ma(,utton* determina si el botn maximizar estar habilitado.
MD7C.ild* determina si el formulario ser un formulario hijo en caso
de ser una aplicacin MD.
Min,utton* determina si el botn minimizar estar habilitado.
Moveable* determina si se puede mover el formulario por la pantalla.
Pallete* establece una imagen que contiene la paleta que se utiliza
cuando la propiedad PalleteMode es Custom.
PalleteMode* determina qu paleta se utiliza para los controles.
Picture* inserta una imagen en el formulario.
$.o27n/as-bar* determina si aparecer un botn con la aplicacin
en la barra de tareas de Windows.
$tart3pPosition* determina la posicin del formulario en la pantalla
cuando aparece por primera vez.
1indo2$tate* determina si la ventana aparecer maximizada,
minimizada o en tamao normal.
Los mtodos del formulario son los siguientes:
Move6 %e#res.6 $etFocus ' 45rder.
Hide* oculta el formulario, lo hace invisible; equivale a hacer su
propiedad Visible a False.
PopupMenu* muestra un men contextual.
19
Los Controles. Elas G. Castillo
PrintForm* imprime el formulario, excepto la barra de ttulo.
$.o2* muestra un formulario. Tiene un argumento opcional el cual, si
se le da el valor 1 (vbModal) no permite que se muestren otros
formularios hasta haber cerrado ste.
El formulario tiene eventos propios y eventos comunes a otros controles;
son los siguientes:
Clic-6 DblClic-6 DragDrop6 Drag5ver6 8otFocus6 9e'Do2n6
9e'Press6 9e'3p6 !ostFocus6 MouseDo2n6 MouseMove6 Mouse3p6
)ctivate* ocurre cuando un formulario pasa a ser la ventana activa.
Deactivate* ocurre cuando un formulario deja de ser la ventana
activa.
7nitiali+e* ocurre cuando se crea una instancia del formulario.
!oad* ocurre cuando se carga el formulario.
Paint* ocurre al pintarse el formulario, cuando se mueve, se ampla o
se expone cualquier parte.
Auer'3nload* ocurre antes de que se cierre un formulario o una
aplicacin. Tiene los argumentos Cancel y UnloadMode que
especifican de qu forma se ha pedido cerrar este objeto.
%esi+e* ocurre al cambiar el tamao del formulario.
/erminate* ocurre cuando se elimina de la memoria toda referencia a
un formulario.
3nload* ocurre cuando se va a quitar un formulario de la pantalla. el
argumento Cancel es un valor que determina si se cancela esta
operacin.
El orden en que ocurren los eventos propios del formulario son los
siguientes:
Al iniciarse #urante su $ida Al terinarse
nitialize, Load, Activate Resize, Paint, Click, . QueryUnload, Unload, Terminate
En virtud de lo que se desee hacer, puede utilizar estos eventos. Por
ejemplo, el evento Load suele utilizarse para dar valor a las propiedades de los
controles, a las variables, etc; el evento QueryUnload para confirmar operaciones
de cierre como guardar el trabajo que se est realizando en un archivo.
Explicaciones de al.unos eventos.
Algunos eventos llevan parmetros y es conveniente explicarlos. El primero
es el evento KeyPress, el cual tiene la siguiente forma general:
Private Sub nControl_*e+Pre!!(*e+A!"ii A! %nteer)
Este evento lleva un argumento numrico (KeyAscii) que indica el nmero
en cdigo ASC que representa la tecla presionada. Por ejemplo, si se hubiese
presionado la tecla Enter el valor del argumento KeyAscii es 13, si la tecla es
20
Los Controles. Elas G. Castillo
Escape, el valor de KeyAscii es 27, etc. Esto permite conocer en el cdigo la tecla
presionada.
Los eventos KeyDown y KeyUp tienen lugar cuando se presiona una tecla y
cuando se libera, respectivamente. La forma general es la siguiente:
Private Sub nControl_*e+,own(*e+Code A! %nteer& _
S-i.t A! %nteer)
Donde KeyCode es un argumento numrico que especifica la tecla
presionada y Shift es otro argumento numrico que especifica si alguna de las
teclas especiales (Control, Shift, Alt o Alt Gr). Exactamente igual es el evento
KeyUp.
El evento MouseDown y MouseUp tienen lugar al presionar y liberar un
botn del mouse. Ambos tienen los mismos argumentos, su forma general es la
que sigue:
Private Sub nControl_/ou!e,own(#utton A! %nteer& _
S-i.t A! %nteer& 0 A! Sinle& 1 A! Sinle)
Donde el argumento Button es numrico y refleja el botn del mouse que se
ha pulsado (o liberado), Shift indica si alguna de las teclas especiales est
presionada (Control, Shift, Alt o Alt Gr). X e Y son valores numricos que indican la
coordenada X e Y del cursor del ratn en el momento que se produce el evento.
El evento QueryUnload del formulario tiene la siguiente forma general:
Private Sub nFormulario_2uer+3nload(Can"el A! _
%nteer& 3nload/ode A! %nteer)
Donde el argumento Cancel es un nmero que indica si se cancela la
operacin de cierre y UnloadMode es un valor numrico que indica la forma con la
que se ha pedido descargar el formulario (haciendo clic en el botn cerrar de la
barra de ttulo, desde el men de control, desde el otn de la barra de tareas, etc.).
El evento Unload del formulario tiene la siguiente forma general:
Private Sub nFormulario_3nload(Can"el A! %nteer)
Donde Cancel es un argumento numrico que indicar si se cancelar la
operacin de descargar el formulario.
Operaciones de arrastre.
Arrastrar y colocar elementos en otros lados es una tarea habitual en el
entorno Widows; de este modo se copian ficheros, se cambian objetos de lugar
(iconos, la barra de tareas, etc.).
Para realizar esto, Visual Basic dispone de propiedades, mtodos y
eventos. Los controles tienen una propiedad llamada DragMode que puede tomar
dos valores: 0 Manual o 1 Automtico. Esta propiedad establece si el arrastre
se iniciar y finalizar a travs del cdigo (con el mtodo Drag) o en forma
21
Los Controles. Elas G. Castillo
automtica. Tambin posee la propiedad Drag7con que establece un cono
personalizado para las operaciones de arrastre de ese control.
El mtodo Drag que tienen los controles lleva un argumento numrico
llamado Action, el cual determina si se comienza (1), cancela (0) o finaliza (2) una
operacin de arrastre. Tiene la siguiente forma general:
nControl.,ra A"tion
Donde Action es el nmero que determina el tipo de accin que dar lugar
el mtodo Drag.
Con respecto a los eventos, hay dos eventos: DragDrop y Drag5ver. El
primero tiene lugar cuando se finaliza una operacin de arrastre y lo produce el
control que se arrastra. La forma general del evento es la siguiente:
Private Sub nControl_,ra,ro4(Sour"e A! Control& _
0 A! Sinle& 1 A! Sinle)
Donde Source es un argumento que devuelve un objeto Control, que
representa el control sobre el que es arrastrado este control. X e Y son las
coordenadas del cursor del mouse donde finaliz la operacin de arrastre.
El evento DragOver tiene lugar mientras se arrastra un objeto sobre otro, y
no es un evento del control que se arrastra, sino un evento del control sobre el que
se arrastra. Tiene la siguiente forma general:
Private Sub nControl_,raOver(Sour"e A! Control& _
0 A! Sinle& 1 A! Sinle& State A! %nteer)
Donde Source hace referencia al control que se arrastra sobre l; X e Y
indican la coordenada del cursor del mouse y State es un argumento numrico que
indica si el control arrastrado est entrando (0), saliendo (1) o permanece
movndose dentro de l (2).
22
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
%rocediientos& 'unciones " Variables.
omo en todo lenguaje de programacin, el cdigo se edita y ejecuta en un
conjunto de sentencias. Este conjunto de sentencias se inscribe dentro de
los procedimientos, de los cuales los cuales los eventos son procedimientos
denominados Procedimientos de evento. Las ventajas de utilizar procedimientos
para colocar bloques de sentencias son las siguientes:
C
Se puede reutili+ar el cdigo, lo cual ahorra tiempo de programacin
y, por tener que escribir menos cdigo se ahorra espacio y
disminuyen los errores de programacin.
Los procedimientos mantienen una gran independencia entre s, lo
que ocasiona que la revisin de un programa pueda realizarse por
partes, siendo ms fcil localizar los errores.
Se puede dividir al programa en partes (debido a la independencia de
los procedimientos) y esto permite que cada parte cumpla una
funcin muy especfica. Esto implica que varios programadores
pueden crear una parte de la aplicacin cada uno y luego ensamblar
todos los procedimientos para crear la aplicacin
En resumen, una aplicacin es un conjunto de procedimientos que se
ejecutan cuando son "llamados. Las funciones son otro tipo de procedimientos
con la particularidad que su utilidad es devolver un valor; por ello las funciones
tienen un valor de retorno.
Los Procedimientos.
Los procedimientos tienen un inicio y un final; la forma general de un
procedimiento es la siguiente:
Private5Publi" Sub nPro"edimiento('arumento!()
Senten"ia!
'E$it Sub(
End Sub
Donde las palabras Private y Public definen el mbito del procedimiento,
nProcedimiento es el nombre del procedimiento y argumentos son los posibles
argumentos que puede tener (como puede no llevar argumentos). Sentencias son
las sentencias (el cdigo) que ejecutarn la tarea deseada. E(it $ub es una
palabra clave que permite salir del procedimiento antes de llegar al final. End Sub
marca el final del procedimiento.
Cuando el programador quiere que se ejecuten las sentencias que estn
contenidas en el procedimiento, lo llama utilizando su nombre. Por ejemplo, se
crear un procedimiento que ingrese en un cuadro de lista (List1) el contenido de
una caja de texto (Text1) y luego lo ingrese en un cuadro combinado (Combo1). El
procedimiento ser el siguiente:
23
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
Private Sub Pro"edimiento1()
Li!t1.Add%tem 6e$t1.6e$t7Combo1.Add%tem 6e$t1.6e$t
End Sub
Ahora que el procedimiento fue creado, se debe llamar desde otro
procedimiento mediante su nombre. La forma general de hacerlo es la siguiente:
nPro"edimiento 'arumento!(
Call nPro"edimiento('arumento!()
Donde nProcedimiento es el nombre del procedimiento que se va a llamar y
argumentos son los posibles argumentos que se pasan al procedimiento. Si se
quisiera llamar al procedimiento anterior desde el evento Click de un botn de
comando llamado cmdProc, se llamara de la siguiente manera:
Private Sub "mdPro"_Cli"8()
Pro"edimiento1
End Sub
Tambin poda haberse antepuesto la palabra clave
1
Call antes del nombre
del procedimiento llamado. Tambin pueden llamarse de esta forma
procedimientos de evento, con o sin argumentos. Suponga que en el formulario
anterior se ha programado el evento KeyPress de la caja de texto Text1 y se
desea producir el evento KeyPress mediante cdigo, dndole al argumento
KeyAscii el valor 27 (equivalente a la tecla escape), esto en el procedimiento de
evento Click del botn cmdProc.
Private Sub "mdPro"_Cli"8()
Pro"edimiento1
6e$t1_*e+Pre!! 9: ;o !ino Call 6e$t1_*e+Pre!!(9:)
End Sub
Con el procedimiento de evento Click del botn de comando cmdProc
modificado, primero se llama al procedimiento Procedimiento1 y luego al
procedimiento Text1_KeyPress pasndole como argumento el valor 27 (cuando se
ejecute el procedimiento Text1_KeyPress el argumento KeyAscii valdr 27).
Un procedimiento es recursivo cuando se llama a sB mismo. Por ejemplo
examine el siguiente procedimiento:
Private Sub Pro"edimiento9()
l!tElem.Add%tem <Pro"edimiento re"ur!ivo=
%. l!tElem.Li!tCount > ? 6-en
1
Palabra Clave es Una palabra o un smbolo reconocido como parte del lenguaje de
programacin por ejemplo! una instruccin! un nombre de "uncin o un operador. #parece
con otro "ormato de color$
24
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
E$it Sub
El!e7Pro"edimiento9
End %.
End Sub
En este procedimiento debe tenerse un cuadro de lista de nombre lstElem;
se ha utilizado una sentencia condicional f (se ver ms adelante su utilizacin)
para escapar del procedimiento con la palabra clave Exit Sub en caso de que la
lista tenga seis elementos; si no el procedimiento se llama a s mismo. Al final del
procedimiento, del que se habr salido con Exit Sub; el cuadro de lista tendr seis
elementos con el texto Procedimiento recursivo.
Las Funciones.
Son similares a los procedimientos pero con la diferencia de que la finalidad
es devolver explcitamente un valor; sea ste numrico, una cadena de texto, un
objeto o lo que fuere. La forma general de una funcin es la siguiente:
Private5Publi" Fun"tion nFun"i@n('arumento!()A! _
6,ato
Senten"ia!
'E$it Fun"tion(
nFun"i@n>valor
End Fun"tion
Donde Private/Public define el mbito de la funcin; nFuncin es el nombre
de la funcin; argumentos son los posibles argumentos que pudiera llevar (o no) y
TDato es el tipo de dato que devolver la funcin: un nmero, caracteres, objetos,
etc.; sentencias son las sentencias que se ejecutarn; Exit Function es una palabra
clave que permite escapar de la funcin antes de llegar a End Function; dentro de
la funcin debe utilizarse su nombre para asignarle un valor, que ser el valor que
la funcin devolver. Por ejemplo, observe la siguiente funcin:
Private Fun"tion )e!to(,ividendo A! %nteer& _
,ivi!or A! %nteer) A! %nteer
)e!to>,ividendo /od ,ivi!or
End Fun"tion
Esta funcin devolver un valor numrico el resto de una divisin entre el
argumento Dividendo y el argumento Divisor. Supngase que se tiene en un
formulario una caja de texto llamada Text1. Asciese el siguiente cdigo con algn
evento:
6e$t1.6e$t>)e!to(:A:&9A)
25
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
Ver que en la caja de texto aparecer el valor 3, que es el resto de dividir
747 entre 24. Pruebe cambiando en la sentencia los argumentos y observe el
resultado.
Dado que las funciones tienen un valor de retorno, este valor debe
colocarse en algn lugar para que no se pierda, en el caso anterior se coloc el
valor devuelto en una caja de texto (se le asign ese valor a la propiedad Text).
Las funciones tambin pueden ser recursivas, o sea, se llaman a s mismas.
La siguiente funcin es recursiva y calcula el factorial de un nmero:
Private Fun"tion Fa"torial(Numero A! %nteer)A! _
%nteer
%. Numero>B 6-en
Fa"torial>17E$it Fun"tion
El!e7Fa"torial>Fa"torial(NumeroC1)DNumero
End %.
End Fun"tion
El factorial de un nmero es ese nmero multiplicado por todos los nmeros
que le anteceden; por ejemplo, el factorial de 7 es 5040 (7x6x5x4x3x2x1=5040).
En relacin a los argumentos, los argumentos estn pasados por re#erencia,
esto quiere decir que si se cambia el valor de estos dentro del procedimiento o
funcin, su valor cambia. Para evitar esto se pasan los argumentos por valor. Esto
se consigue anteponiendo al argumento la palabra clave ByVal. Cuando se pasa
un argumento por valor, lo que se pasa es una copia del valor del argumento, por
lo que el argumento original permanece incambiado.
Otro detalle importante son los argumentos opcionales, pueden utilizarse
tanto en procedimientos como en funciones. Estos argumentos son argumentos
que pueden omitirse ya que tienen un valor por defecto. Para crear argumentos
opcionales se utiliza la palabra clave Optional de la siguiente manera:
Private Fun"tion nFun"i@n(ar1 A! 6dato& O4tional _
ar9 A! 6dato>valorE) A! 6dato
Primero deben colocarse los argumentos obligatorios y luego los
opcionales, siempre precedido de la palabra optional y seguido del valor por
defecto; por ejemplo:
Private Fun"tion Poten"(#a!e A! %nteer& O4tional _
E$4onente A! %nteer>9) A! %nteer
Poten">#a!eFE$4onente
End Fun"tion
Esta funcin calcula la potencia resultante de elevar el argumento Base al
argumento Exponente. El argumento Exponente es un argumento opcional que
vale 2 por defecto. Ahora bien, estas dos llamadas a la funcin Potenc:
6e$t1.6e$t>Poten"(11) ;6e$t1.6e$t valdrG 191
26
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
6e$t9.6e$t>Poten"(11&A) ;6e$t9.6e$t valdrG 1HH1
Como en la primer llamada a funcin se omiti el argumento Exponente,
ste tom como valor 2.
"ipos de (atos.
Se ha visto que los argumentos y las funciones devuelven un determinado
tipo de dato; tambin que las propiedades contienen determinado tipo de
informacin. Esto es porque Visual Basic permite trabajar con datos de distintos
tipos: numricos, caracteres, de Verdadero o Falso y ms.
Un tipo de dato debe seleccionarse en virtud de la informacin que desea
almacenarse en l. Los tipos de datos son los siguientes:
,oolean* es un tipo de dato que almacena dos valores: Verdadero
(True) o Falso (False). Ocupa 2 bytes.
,'te* es un tipo de dato numrico. Almacena nmeros naturales del 0
al 255. Ocupa 1 byte. Signo:
7nteger* es otro tipo de dato numrico. Almacena nmeros enteros
del -32.768 al +32.767. Ocupa 2 bytes. Signo: (.
!ong* este tipo es otro tipo de dato numrico entero, cuyo rango va
del -2.147.483.648 al +2.147.483.647 y ocupa 4 bytes. Signo: ).
$ingle* dato de tipo numrico real de precisin simple, su rango va
del -1,401298x10
-45
al +1,401298x10
45
. Ocupa 4 bytes. Signo: *.
Double* dato de tipo numrico real de precisin doble, ocupan 8
bytes y su rango va desde el -4,94065645841247x10
-324
al
1,79769313486232x10
308
. Signo: +.
Currenc'* son otro tipo de dato numrico til para valores
monetarios. Su rango va del -922.337.203.685.477,5808 hasta el
922.337.203.685.477,5807. signo: ,.
Date* almacena fechas y horas. Este tipo ocupa 8 bytes y su rango
va del 1/1/100 al 31/12/9999 para las fechas y 0:00:00 a 23:59:59
para las horas.
$tring* almacena cadenas de caracteres (texto). Puede almacenar
hasta 2
31
caracteres para cadenas de longitud variable y hasta 2
16
caracteres en una cadena de longitud fija. Ocupa 1 byte por cada
carcter. Signo: -.
0ariant* es un tipo de dato que permite almacenar cualquier tipo de
datos en su interior, ya sean nmeros, valores boolean, fechas, etc.
Este tipo de dato ocupa 16 bytes y en caso de tratarse de caracteres
1 byte ms por cada carcter.
Estructuras* son tipos de datos creados por el usuario, a partir de los
datos bsicos vistos arriba. Su tamao depender de los datos que la
compongan.
5bjetos* ocupan 4 bytes y almacenan objetos de distintos tipos.
Es importante seleccionar bien el tipo de datos ms adecuado tanto para
que todos los datos estn dentro del rango como para utilizar el tipo de dato de
27
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
menor tamao. Si se quisiera almacenar en un tipo de dato la edad de una
persona podra utilizarse cualquier dato numrico (nteger, Long, Byte, etc.), sin
embargo talvez convenga utilizar el tipo de datos Byte, ya que la edad de una
persona no superar los 255 aos (recuerde que almacena nmeros de 0 a 255) y
el espacio que ocupa es de tan slo 1 byte.
Las %ariables.
Las variables son espacios en la memoria donde se guarda un tipo de dato.
A estos espacios de memoria se accede mediante un identi#icador que es el
nombre de la variable. Las variables pueden tener cualquier nombre, siempre y
cuando no sea una palabra clave (Keyword), que no contenga caracteres
comodines (", , \, /, *, etc.) y que no empiecen con un nmero. Visual Basic no
distingue entre maysculas y minsculas por lo que la variable Poblacin ser la
misma que poblacin y la misma que Po,laci<.
Las variables se declaran entonces con un nombre que identifica un lugar
en la memoria y que almacena un tipo particular de dato (los tipos de datos vistos
anteriormente). Las variables deben declararse con un alcance y de un tipo
determinado; la forma general de declararlas es la siguiente:
Publi"5Private5,im5Stati" nIariable A! 6dato
Donde Public, Private, Dim o Static representa el mbito de la variable;
nVariable es el nombre de la variable (identificador) y Tdato es el tipo de dato que
almacenar.
Ahora se definir qu es el mbito de una variable (vlido tambin para el
mbito de los procedimientos y funciones). El mbito de una variable es el alcance
que esta tiene, o sea, los lugares donde esta variable se puede utilizar.
Aqu es necesario que se defina lo que es un mdulo est"ndar (*.bas). Este
tipo de fichero sirve para almacenar cdigo, el cual ser accesible desde todo el
proyecto, no tiene interfaz grfica ya que solo almacena cdigo. Para agregar un
mdulo estndar debe ir al men PROYECTO, AGREGAR MDULO, y se agrega el mdulo
estndar. La siguiente tabla explica el alcance de una variable en funcin del lugar
y su forma de declaracin:
'orulario .'or/
'ora de declaraci0n Alcance
Private/Dim en la parte de
declaraciones.
Es visible desde cualquier procedimiento o funcin de
ese formulario.
Public en la parte de
declaraciones.
Es visible desde cualquier procedimiento o funcin de
ese formulario y desde otros como propiedad del
formulario.
Dim dentro de un
procedimiento o funcin.
Es visible solamente dentro del mismo procedimiento o
funcin.
10dulo est2ndar .Bas/
'ora de declaraci0n Alcance
Private/Dim en la parte de Es visible desde cualquier procedimiento o funcin de
28
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
declaraciones. ese mdulo.
Public en la parte de
declaraciones.
Es visible desde cualquier parte del proyecto.
Dim dentro de un
procedimiento o funcin.
Es visible solamente dentro del mismo procedimiento o
funcin.
Por ejemplo, se declarar una variable privada de tipo Long llamada
Poblacin:
Private Pobla"i@n A! Lon
o bien,
,im Pobla"i@n A! Lon
Tambin se puede utilizar un carcter especial (que aparece en los tipos de
datos con la palabra signo) para declarar la variable; de la siguiente forma:
,im Pobla"i@nJ
Siempre es conveniente declarar una variable para utilizarla y es una buena
prctica escribir en la parte de declaraciones del formulario la sentencia 5ption
E(plicit la que evita que se utilicen variables no declaradas. Esto es til para evitar
declaraciones implcitas de variables que produzcan errores; por ejemplo, si hay
declarada una variable llamada Banco y por error se escribe Banca, Visual Basic
tomar a Banca como una variable implcita de tipo Variant, a menos que se haya
utilizado la palabra clave Option Explicit que en caso de encontrar una variable no
declarada no permitir su utilizacin.
Esta variable almacenar valores de tipo Long. Para asignarle un valor, por
ejemplo 159840 se procede de la siguiente forma:
Pobla"i@n>1KL8AB
Si desea colocarse en una etiqueta llamada Label1 el valor de la variable
Poblacin se utiliza una sentencia como la siguiente:
Label1.Ca4tion>Pobla"i@n
Tambin puede asignar a una variable el valor resultante de una llamada a
una funcin. Se utilizar una funcin de Visual Basic llamada Len, que devuelve el
tamao en bytes de una variable o bien, los caracteres de una cadena de texto.
,im Letra! A! %nteer
Letra!>Len(</i"ro!o.t Ii!ual #a!i" ?.B=)
29
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
El valor de la variable de tipo nteger Letras ser 26. Las variables se
pueden pasar como argumentos en llamadas a funciones o procedimientos, operar
como si de valores se tratara, etc.
Cuando se entra a un procedimiento o funcin y hay en l una variable
local, esta se inicia a cero en caso de ser numrica, a cadena vaca en caso de ser
caracteres y a Empty (vaco) en caso de ser Variant. Cuando se sale de ese
procedimiento o funcin la variable se pierde y al volver a entrar su valor vuelve a
inicializarse como se explic. Para que esto no ocurra, puede declararse una
variable local como Static, de la siguiente forma:
Stati" nIariable A! 6dato
Cuando se salga del procedimiento o funcin y se vuelva a ingresar, el valor
que la variable tena no se perdi sino que se mantiene.
Las !onstantes.
Estas expresiones son similares a las variables pero su valor es dado
mediante cdigo y no puede cambiarse (por eso se llaman constantes). Tambin
son lugares en memoria que almacenan un tipo de dato y tienen un alcance que
sigue las mismas reglas que para las variables. La forma de declarar una
constante es la siguiente:
Publi"5Private Con!t nCon!tante A! 6dato>valor
Donde Public y Private definen el alcance de la constante, en caso de
omitirse esas palabras, la constante es privada por defecto; nConstante es el
nombre de la constante; Tdato es el tipo de dato que almacenar y valor es el
valor que tendr. Por ejemplo, la siguiente constante almacenar el valor de .
Con!t Pi A! ,ouble>H.1A1KL9?KA
La constante privada Pi almacena un dato de tipo Double cuyo valor es
3.141592654. Si intentara cambiarse el valor de la constante se producir un error.
Estructuras ("ipos de&inidos por el usuario.
Ocurre que algunas veces el tipo de dato que Visual Basic proporciona no
es suficiente para almacenar el dato que el usuario necesita. Por ejemplo,
supngase que se desea que una variable guarde datos angulares (grados,
minutos, segundos y dcimas de segundo). Sin embargo, no hay una variable de
este tipo (aunque se pudiese utilizar un tipo Double para almacenar un valor
angular como decimal). Para esto existen las estructuras.
Una estructura es una variable que es construida a partir de variables
escalares (las ya vistas) del mismo o distinto tipo, en un bloque de cdigo como el
siguiente:
6+4e n6i4o
30
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
nSubI1 A! 6dato
nSubI9 A! 6dato
E
End 6+4e
Donde nTipo es el nombre del nuevo tipo de Variable, nSubV1 es una
subvariable que lo compone, nSubV2 es otra subvariable que lo compone. puede
haber tantas subvariables como se necesiten. Una subvariable puede, inclusive,
ser de otro tipo de estructura.
Para trabajar con este nuevo tipo de variable se declara una variable de la
forma ya vista, como de este nuevo tipo:
Publi" nIariable A! n6i4o
Para acceder a cada miembro de esta variable se consigue a travs de su
nombre seguido de un punto (como si fuesen propiedades), tanto para recuperar
su valor como para asignarle un valor.
nIariable.nSubI1>valor
Label1.Ca4tion>nIariable.nSubI9
En el ejemplo de las medidas angulares, puede declararse una estructura
como la siguiente:
6+4e Anulo
Mrado! A! %nteer
/inuto! A! #+te
Seundo! A! #+te
,e"ima! A! #+te
End 6+4e
Si quisiera guardarse una variable de este tipo, se declara la variable y
luego se le asigna el valor, en el ejemplo, un ngulo de 48 57' 21.67.
Publi" Anulo1 A! Anulo
Anulo1.Mrado!>A87Anulo1./inuto!>K:
Anulo1.Seundo!>917Anulo1.,e"ima!>?:
Las Enumeraciones.
Son similares a las estructuras, pero sus miembros son una serie de
constantes (de tipo Long). Visual Basic tiene muchas enumeraciones para sus
propiedades, argumentos, mtodos, etc. (pueden verse en el Examinador de
Objetos). Algunas de ellas son (a modo de ejemplo):
Enumeracin ListBoxConstants
vbListBoxCheckbox
31
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
vbListBoxStandard
Enumeracin DragConstants
vbBeginDrag
vbCancel
vbEndDrag
Una enumeracin tiene miembros numricos (ya que son de tipo Long) y se
construye de la siguiente forma general:
Enum nEnumera"i@n
/iembro1>valor
/iembro9>valor
E
End Enum
Donde nEnumeracin es el nombre de la enumeracin; Miembro1 y
Miembro2. son los miembros que la componen y valor es el valor que tiene cada
miembro.
Una variable o funcin puede ser de tipo de una enumeracin, o sea, puede
declararse una variable de tipo nEnumeracin y su valor ser el valor de uno de
los miembros, por ejemplo:
Private Iariable A! nEnumera"i@n
Los +rrays.
Son grupos de variables del mismo tipo que se almacenan conjuntamente
en la memoria. Este grupo de variables lleva el mismo identificador (nombre), pero
se identifica a cada uno individualmente mediante un nmero de Bndice (de forma
similar a los elementos de un cuadro de lista).
Cuando se necesita acceder a uno de los elementos del array, se utiliza el
nombre y el nmero de ndice. Un array debe declararse al igual que una variable
y de un tipo determinado de dato, de la siguiente forma:
Private5Publi"5,im nArra+(elemento!)A! 6dato
Donde nArray es el nombre del array, elementos es la cantidad de
elementos que contendr el array y Tdato es el tipo de dato que contendr.
,im unArra+(K)A! #oolean
Este array almacena 6 elementos que almacena cada uno un valor Boolean
comenzando a numerarse por 0; representado grficamente, tiene la siguiente
forma:
0 1 2 3 4 5
32
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
Los ndices comienzan a numerarse por cero por defecto, pero tambin
pueden comenzarse a numerar por 1. Cuando se quiere que el primer elemento
sea 1, puede declararse de la siguiente forma:
,im otroArra+(1 6o K)A! #oolean
Este array entonces almacenar 5 elementos que almacena cada uno un
valor Boolean; representado grficamente, tiene la siguiente forma:
1 2 3 4 5
Predeterminadamente, los arrays comienzan a numerarse por 0 al
declararlos con el nmero de ndice del ltimo elemento, sin embargo, hay una
sentencia que se escribe en la parte de declaraciones del mdulo o formulario que
se est trabajando para indicar la base predeterminada de los arrays:
O4tion #a!e B ;"omienNan a numerar!e 4or B
O4tion #a!e 1 ;"omienNan a numerar!e 4or 1
En cuanto a la asignacin y recuperacin de valores en l almacenados, se
consigue de la misma forma que con las variables, pero poniendo entre parntesis
el nmero de ndice del elemento en cuestin:
,im nuevoArra+(H)A! %nteer
nuevoArra+(B)>H?AK7nuevoArra+(1)>CH??
nuevoArra+(9)>19KL:7nuevoArra+(H)>8
0 1 2 3
3645 -366 12597 8
En estas sentencias se declar un array de tipo nteger de cuatro elementos
(0 a 3) y se les dio un valor a cada uno de sus elementos. Si quisiera asignarse a
una etiqueta de nombre Label1 el valor del elemento de ndice 2, se utilizar la
siguiente sentencia:
Label1.Ca4tion>nuevoArra+(9)
Este tipo de array ejemplificado anteriormente se denominan arrays
unidimensionales o vectores. Sin embargo, hay otro tipo de arrays llamados
multidimensionales o matrices. Estos arrays tienen varias dimensiones, se
declaran de la siguiente manera:
Private5Publi"5,im nArra+(elem& dim1&E)A! 6dato
33
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
Donde nArray es el nombre del array, elem son los elementos que
contendr, dim1 es la magnitud de la primera dimensin, ., puede haber hasta
256 dimensiones. Ahora se declarar, se dar valor a algunos de sus elementos y
representar grficamente el siguiente array multidimensional:
Publi" 6abla,elH(8&9)A! #+te
6abla,elH(9&B)>K76abla,elH(9&1)>H76abla,elH(9&9)>1K
6abla,elH(?&B)>:76abla,elH(?&1)>H76abla,elH(?&9)>91
0 1 2 3 4 5 6 7 8
0 5 7
1 3 3
2 15 21
Obsrvese cmo se colocan los valores en una matrz, en este caso, la
matrz tiene dos dimensiones de tres elementos (0 a 2), donde cada elemento
almacena un dato de tipo Byte. Cuando se estudien los bucles, se ver cmo
sacar el mximo provecho de los arrays.
Estos arrays son denominados arra's est"ticos porque la cantidad de
elementos y dimensiones que tiene se define en la declaracin y no se puede
variar; esto hace que muchas veces estn sobredimensionados o sea qque tengan
ms o menos elementos de los que se necesitan.
Para este propsito existen los arra's din"micos. Estos arrays se declaran
como los estticos pero sin poner nada entre los parntesis, su forma general de
declaracin es la siguiente:
Private5Publi"5,im nArra+,inami"o()A! 6dato
Donde nArrayDinamico es el nombre del array dinmico que se declara.
Vase que no se ha colocado nada entre los parntesis; esto indica que es un
array dinmico.
En un procedimiento, luego de definirse la cantidad de elementos que ser
necesario que tenga, el array se redimensiona, o sea, se le da dimensiones. Esto
se realiza con la sentencia %edim de la siguiente forma general:
)edim 'Pre!erve( nArra+,inami"o(elemento!)
Donde Preserve es opcional e indica que se desea preservar los valores de
los elementos del array, de lo contrario se borrarn; nArrayDinamico es el nombre
del array dinmico y elementos ser los elementos que contendr al
redimensionarlo. La redimensin de un array se puede efectuar una sola vez por
procedimiento o funcin. Tambin es importante destacar que se puede modificar
la magnitud de cada dimensin, pero no la cantidad de dimensiones. Por ejemplo:
34
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
,im Nombre!()A! Strin
Con!t Cantidad A! %nteer>L
)edim Nombre!(Cantidad)
En este ejemplo se declara un array dinmico y una constante con el valor
9. Luego se redimensiona el array con 9 elementos (el valor de la constante
Cantidad).
Funciones que devuelven arrays.
Una funcin puede devolver un array de un tipo determinado de dato para
almacenarlo en un array dinmico de ese mismo tipo. La forma general de la
declaracin de una funcin que devuelva un array es la siguiente:
Publi"5Private Fun"tion nFun"i@n('arumento!()A! _
6dato()
O sea, su declaracin es idntica a la de una funcin de las ya vistas pero
seguido del tipo de dato un par de parntesis. Dentro de la funcin se debe
declarar un array dinmico del mismo tipo de dato devuelto por la funcin y luego
redimensionarlo, asignarle los valores pertinentes y darle al nombre de la funcin
este array como valor. Por ejemplo:
Private Fun"tion 6abla (/ult A! #+te)A! %nteer()
,im Arr()A! %nteer& i A! #+te
)edim Arr(B 6o L)
For i>B 6o L
Arr(i)>/ultDi
Ne$t i
6abla>Arr
End Fun"tion
Luego, este array se almacena en otro array dinmico del mismo tipo, por
ejemplo:
,im OtroArra+()A! %nteer
OtroArra+>6abla(11)
El array OtroArray es redimensionado automticamente por la funcin y
asignados sus valores.
+rrays de !ontroles.
Con los controles tambin se pueden formar arrays cuya utilidad es que un
mismo procedimiento de evento gestione los eventos de varios controles. Cada
35
%rocediientos& 'unciones "
Variables.
Elas G. Castillo
control tiene una propiedad llamada 7nde( que identificar cada control dentro del
array de controles.
Para crear un array de controles (en tiempo de diseo) se coloca un control
del tipo que se desea crear el array, luego se copia el control y se pega, se
preguntar si se desea crear una matrz de controles a lo cual se responder que
s; haciendo sucesivas copias y pegndolas se crean los elementos que componen
el array. Si se selecciona uno de ellos, se ver que en su propiedad ndex figura el
ndice que lo identifica. Cuando se produce un evento en este array se aade el
argumento ndex As nteger al evento, por ejemplo supngase un array de
controles ScrollBar llamados vsbArray con cuatro elementos (numerados de 0 a 3)
que se desea trabajar con el evento Change, y una etiqueta llamada Label1:
Private Sub v!bArra+_C-ane(%nde$ A! %nteer)
Label1.Ca4tion>=Se 4rodujo el evento C-ane en la _
barrade Ondi"e <J %nde$ J=. Su valor e! <J _
v!bArra+(%nde$).Ialue
End Sub
El argumento ndex es el nmero de ndice del control en que se produce el
evento. A cada control del array se accede con el nombre del control con el ndice
entre parntesis.
36
3entencias de Control. Elas G. Castillo
3entencias de Control.
as sentencias de control son vitales para la construccin de un programa
eficiente ya que permiten controlar el flujo del programa. Todas las
decisiones se toman a travs de este tipo de estructuras. Hay dos tipos de
sentencias de control: sentencias condicionales y bucles. Las sentencias
condicionales toman decisiones en base a o ms una comparaciones lgicas y los
bucles repiten una serie de sentencias mientras o hasta que se cumpla la condicn
lgica. Antes de continuar es necesario definir las comparaciones lgicas y los
nexos de comparaciones.
L
Los comparadores lgicos son los que se muestran en la tabla siguiente y
sirven de base para las sentencias codicionales y los bucles. Se debe tomar en
cuenta que las comparaciones devuelven
dos posibles resultados: True (Verdadero) o
False (Falso).
Entonces, como ejemplo, una serie
de comparaciones y el valor devuelto:
45 = 60 False
45 < 60 True
Not 45<>60 False
45 <= 60 True
Tambin hay nexos que unen comparaciones para devolver un resultado de
True o False en base a los resultados True o False de cada comparacin; son los
siguientes:
5r* este comparador devuelve True si alguna de las comparaciones
devuelve True.
)nd* devuelve True si todas las comparaciones devuelven True.
=or* devuelve True si una comparacin devuelve True y la otra False.
E&v* devuelve True si ambas comparaciones devuelven True o
False.
7mp* devuelve True en todos los casos, excepto en el caso de que la
primera comparacin sea True y la segunda False.
Estas sentencias se pueden anidar, o sea, que una de las evaluaciones o
bucles se puede incluir dentro de otra. Ahora se vern cada una de las sentencias
de control y bucles antes mencionados.
-& / "hen / Else / End i&
Esta es la ms comn de las sentencias condicionales y permite ejecutar
determinadas sentencias en virtud de una comparacin de las ya mencionadas. La
forma general es la siguiente:
%. "ondi"i@n 6-en
#e4inici0n Co!arador
gual
gual (para texto)
Distinto
Mayor
Menor
Mayor o igual
Menor o igual
Negacin
=
Like
<>
>
<
>=
<=
Not
37
3entencias de Control. Elas G. Castillo
!enten"ia! !i "ondi"i@n>6rue
'El!e(
!enten"ia! !i "ondi"i@n>Fal!e
End %.
Else es opcional, o sea, puede colocarse el End f luego de las sentencias si
la condicin=True. Una variante de esta sentencia es la siguiente:
%. "ondi"i@n1 6-en
!enten"ia! !i "ondi"i@n1>6rue
El!e%. "ondi"i@n9 6-en
!enten"ia! !i "ondi"i@n>Fal!e + "ondi"i@n9>6rue
'El!e(
!enten"ia! !i "ondi"i@n>Fal!e + "ondi"i@n9>Fal!e
End %.
Un ejemplo prctico de estos dos modos de la sentencia f es el siguiente:
Con!t Numero A! %nteer>A???
,im Iariable A! #+te
%. NumeroP>KBBB 6-en
Iariable>1BB
El!e7Iariable>9BB
End %.
Al salir de esta sentencia, Variable valdr 200; se ejecut la sentencia
despus de Else, ya que Numero (4666) es menor que 5000.
*entencia *elect !ase/ !ase / End *elect.
Esta sentencia condicional se utiliza para cuando haya que hacer mltiples
evaluaciones de una misma expresin; se da a la sentencia una expresin de base
y cada comparacin es un caso. La forma general de esta sentencia es la
siguiente:
Sele"t Ca!e e$4re!i@n
Ca!e "om4ara"i@n1
!enten"ia! !i "om4ara"i@n1 e! verdadera
Ca!e "om4ara"i@n9
!enten"ia! !i "om4ara"i@n1 e! verdadera
E
End Sele"t
Se evala la expresin en cada sentencia Case y cuando se encuentra una
comparacin que sea verdadera, se ejecuta ese grupo de sentencias y se sale de
este bloque. Por ejemplo:
Con!t Palabra A! Strin>=Ii!ual #a!i"=
38
3entencias de Control. Elas G. Castillo
,im )e!ultado A! #+te
Sele"t Ca!e Len(Palabra) ;Len>19
Ca!e 9&A
)e!ultado>1
Ca!e H 6o ?
)e!ultado>9
Ca!e %!P11
)e!ultado>H
Ca!e El!e
)e!ultado>A
End Sele"t
Se evala la expresin Len(Palabra), que devuelve un valor numrico con la
cantidad de letras que contiene la constante Palabra (12 caracteres). Si la
expresin Len(Palabra) vale 2 o 4, Resultado valdr 1; si es un valor entre 3 o 6
(inclusive) valdr 2; si es mayor que 11, Resultado valdr 3, si ninguno de los
anteriores llegara a ser cierto, Resultado valdr 4. Cuando se salga de este
bloque, Resultado valdr 3, ya que el Case s>11 es verdadero.
#ucle For/0ext.
Este es un bucle muy utilizado en la programacin. Permite repetir las
sentencias entre For y Next, mientras se incrementa o reduce el valor de una
variable, el cual tendr dos lmites. La forma general de este bucle es la siguiente:
For Iar>Ialor%ni"ial 6o IalorFinal
Senten"ia! 'E$it For(
Ne$t Iar
Var es una variable numrica que controla el bucle, Valornicial es el valor
inicial de la variable cuando entre en el bucle y ValorFinal ser el valor que
marcar el fin del bucle. Exit For es opcional y permite salir del bucle antes de que
Var sea mayor o igual que ValorFinal. Por ejemplo:
,im unArra+(A)A! %nteer& $ A! %nteer
For $>B 6o A
unArra+($)>KQ$
Ne$t $
Este bucle recorre los elementos de unArray y le asigna valores, 5 unidades
ms el valor del ndice del elemento. Al salir del bucle el array unArray tendr los
siguientes valores:
unArray(0)=5; unArray(1)=6; unArray(2)=7; unArray(3)=8; unArray(4)=9
Otra modalidad del bucle For es uno que permite recorrer un array o una
coleccin en que no se sabe la cantidad de elementos que contiene; su forma
general es la que sigue:
39
3entencias de Control. Elas G. Castillo
For Ea"- Iariable %n Arra+5Cole""i@n
Senten"ia! 'E$it For(
Ne$t
Donde Variable es una variable de tipo Variant en el caso de que
Array/Coleccin sea un array o un objeto en el caso de que Array/Coleccin sea
una coleccin de objetos. Tambin puede salirse en el momento que se desee con
Exit For.
*entencia 1oto *ub.
Esta sentencia sirve para pasar a una parte especfica de un procedimiento
o funcin. Algunos programadores ven a esta sentencia como una mala prctica
de programacin; personalmente creo que es una sentencia ms, que tiene una
utilidad y que mientras d resultado su utilizacin, la utilizo. Queda a criterio de
cada quin.
En una parte del cdigo se coloca una etiqueta y esta sentencia realiza un
salto hacia esa etiqueta; por ejemplo:
Private Fun"tion /Rlti4lode9_H_K_:(Numero A! _
Lon)A! #oolean
%. Numero /od 9PB 6-en
Mo6o Noe!mult
End %.
%. Numero /od HPB 6-en
Mo6o Noe!mult
End %.
%. Numero /od KPB 6-en
Mo6o Noe!mult
End %.
%. Numero /od :PB 6-en
Mo6o Noe!mult
End %.
/Rlti4lode9_H_K_:>6rue7E$it Fun"tion
Noe!mult7
/Rlti4lode9_H_K_:>Fal!e
End Fun"tion
Esta funcin examina si Numero es divisible entre 2, entre 3, entre 5 y por
ltimo entre 7. Si en algn momento se llega a verificar que Numero no es divisible
por los ya mencionados se salta hasta la etiqueta Noesmult, donde se le da a la
funcin el valor False, de lo contrario, luego de la ltima comparacin se le da a la
funcin el valor True y se sale de la funcin con Exit Function.
2hile/ 2end.
Este bucle se ejecuta entre las sentencias While y Wend, mientras la
condicin especificada en la clusula While sea verdadera, pero no tiene una
40
3entencias de Control. Elas G. Castillo
sentencia para salir antes de que se cumpla la condicin especificada. La forma
general de este bucle es la siguiente:
S-ile "ondi"i@n
!enten"ia!
Send
Este bucle tambin permitira controlar los valores de un array, incrementar
una variable, etc. Por ejemplo:
,im $ A! %nteer& Fa"t A! Lon
$>17Fa"t>$
S-ile $T>11
Fa"t>Fa"tD$
$>1Q$
Send
Cuando se salga del bucle While.Wend, cuando x=12 el valor de la
variable Fact ser 39916800, el factorial de 11.
(o/ Loop
Este es un bucle similar al bucle While, pero permite controlar mejor la
ejecucin del bucle y tiene sentencia Exit Do, para la salida antes del final. En este
bucle puede especificarse si se ejecutarn las sentencias mientras o hasta que se
cumpla la condicin especificada, con las palabras While y Until, tanto al entrar al
bucle como al salir. Las formas generales son las siguientes:
Forma 1, comprobacin al entrar al bucle:
,o S-ile53ntil "ondi"i@n
!enten"ia! 'E$it ,o(
Loo4
Forma 2, comprobacin al salir del bucle:
,o
Senten"ia! 'E$it ,o(
Loo4 S-ile53ntil "ondi"i@n
Por ejemplo, las siguientes sentencias Do son iguales pero con
comprobacin al inicio en la primera y al final en la segunda. Antes se tomarn
como declaradas las siguientes variables:
Private Cadena A! Strin& $ A! #+te
Primer sentencia:
$>?K
,o 3ntil $>:K
41
3entencias de Control. Elas G. Castillo
Cadena>Cadena Q C-r($)7$>1Q$
Loo4
Al final de esta sentencia la variable x valdr 75 y la variable Cadena tendr
el texto "ABCDEFGHJ.
Segunda sentencia:
$>?K
,o
Cadena>Cadena Q C-r($)7$>1Q$
Loo4 3ntil $>:K
Al final de esta sentencia la variable x valdr 75 y la variable Cadena tendr
el texto "ABCDEFGHJ.
El bloque 2ith.
La instruccin With permite realizar una serie de instrucciones sobre un
objeto especificado sin volver a calificar el nombre del objeto o de una estructura.
Por ejemplo, para cambiar un nmero de propiedades diferentes en un nico
objeto, es ms conveniente colocar las instrucciones de asignacin de las
propiedades en la estructura de control With, haciendo referencia al objeto una
vez, en lugar de hacerlo con cada asignacin de propiedad. Por ejemplo la
siguiente etiqueta (Label1):
Sit- Label1
.Alinment>17.Ca4tion>=/i etiUueta=
.#a"8Color>vb#la"87.ForeColor>vbS-ite
6e$t1.6e$t>.Name
End Sit-
!asos imposibles.
Hay ciertas observaciones que deben hacerse al construir bucles, y es la
contemplacin de los casos imposibles, que producen entradas en los bucles y
que, al no llegar nunca a cumplirse la condicin especificada para la salida, se
bloquea el sistema (sobre todo con los bucles While y Do), una sentencia de este
tipo sera la siguiente:
,im Iar A! #+te& Iar9 A! #oolean
Iar>?8
S-ile IarT:B
Iar9>Not Iar9
Send
42
3entencias de Control. Elas G. Castillo
Este bucle jams finalizara y estara siempre intercambindose el valor de
la Variable Var2 de True a False y de False a True, ya que la variable Var siempre
sera menor que 70.
43
O!eradores " 'unciones. Elas G. Castillo
O!eradores " 'unciones.
isual Basic permite efectuar operaciones aritmticas (suma, resta,
multiplicacin, divisin, etc.) y de concatenacin de caracteres. Concatenar
caracteres es unir dos cadenas de caracteres en una sola. Esto permite
crear, por ejemplo, una calculadora, un programa de estadsticas y todo lo que
pudiese necesitar clculos. Sin embargo, muchas de las operaciones tendran que
crearlas el programador si slo se dispusiera de estas operaciones bsicas; por
ello, Visual Basic trae un conjunto de funciones que ahorran este trabajo al
programador. Algunas de ellas se han visto en los ejemplos (Len, Fix e nt). El
cometido de este captulo es explicar los operadores y algunas de las funciones,
no todas, ya que son muchas y pueden consultarse en el Examinador de Objetos.
V
Operadores.
Los operadores estn
explicados en la tabla que se
muestra aqu. Estos
operadores se pueden
combinar con parntesis y
cumplen la regla general de
smbolos de las operaciones
combinadas.
Si se desea escribir un
nmero en notacin cientfica,
por ejemplo 1,54x10
32
se escritura 1.54E+32; si se quisiera trabajar con el nmero
8.45x10
-23
se escriturar 8.45E-23.
Funciones.
Otro aspecto importante es que esta versin (6.0) de Visual Basic incorpora
varias funciones. El nmero de funciones que ofrece es elevado y solamente se
enumerarn algunas.
Funciones matemticas.
)bs:<umber;* devuelve el valor absoluto del nmero pasado por
argumento.
)tn:<umber;* devuelve el arcotangente del ngulo pasado por
argumento.
Cos:<umber;* devuelve el coseno del ngulo pasado por argumento.
E(p:<umber;* devuelve el resultado de e (base de los logaritmos
neperianos) a una potencia especificada por el argumento Number.
Fi(:<umber;* devuelve la parte entera de un nmero.
7nt:<umber;* devuelve el argumento Number redondeado a un
entero.
!og:<umber;* devuelve el logaritmo natural de un nmero.
%andomi+e:C<umberD;* inicia el generador de nmeros aleatorios.
O!erador O!eraci0n
+
-
*
/
\
^
Mod
&
Adicin
Sustraccin, signo negativo
Multiplicacin
Divisin
Divisin entera
Potenciacin
Resto de divisin
Concatenacin de caracteres
44
O!eradores " 'unciones. Elas G. Castillo
%nd:C<umberD;* devuelve un nmero aleatorio.
%ound:<umber6C<umDigits)#terDecimalD;* devuelve el argumento
Number redondeado al nmero de lugares decimales especificado en
el segundo argumento.
$gn:<umber;* devuelve -1, 0 o 1 segn si el argumento Number es
menor, igual o mayor que cero, respectivamente.
$in:<umber;* devuelve el seno de un nmero.
$&r:<umber;* devuelve la raz cuadrada de un nmero.
/an:<umber;* devuelve la tangente de un nmero.
Funciones de Fecha y Hora.
Date* devuelve la fecha actual como un dato de tipo Variant.
DateE* devuelve la fecha actual como un dato de tipo String.
<o2* devuelve la fecha y hora actuales del sistema (Variant).
/ime* devuelve la hora actual como un dato de tipo Variant.
/imeE* devuelve la hora actual como un dato de tipo String.
/imer* devuelve el nmero de segundos transcurridos desde la
medianoche.
Da':Date;* devuelve el da de la fecha Date.
Mont.:Date;* devuelve el mes de la fecha Date.
@ear:Date;* devuelve el ao de la fecha Date.
Hour:/ime;* devuelve la hora de la hora Time.
Minute:/ime;* devuelve el minuto de la hora Time.
$econd:/ime;* devuelve el segundo de la hora Time.
1ee-Da':Date6CFirstDa'o#1ee-D;* devuelve un nmero que indica el
da de la semana, comenzando a contar por el da de comienzo
FirstDayofWeek (especifica el da de comienzo de la semana).
Funciones de conversin.
Cbool:e(pression;* convierte una expresin a un valor Boolean.
Cb'te:e(pression;* convierte una expresin a un valor Byte.
Ccur:e(pression;* convierte una expresin a un valor Currency.
Cdate:e(pression;* convierte una expresin a un valor Date.
Cdbl:e(pression;* convierte una expresin a un valor Double.
Cint:e(pression;* convierte una expresin a un valor nteger.
Clng:e(pression;* convierte una expresin a un valor Long.
Csng:e(pression;* convierte una expresin a un valor Single.
Cstr:e(pression;* convierte una expresin a un valor String.
Cvar:e(pression;* convierte una expresin a un valor Variant.
He(:<umber;* devuelve el valor hexadecimal de un nmero (Variant).
He(E:<umber;* devuelve el valor hexadecimal de un nmero (String).
5ct:<umber;* devuelve el valor octal de un nmero (Variant).
5ctE:<umber;* devuelve el valor octal de un nmero (String).
$tr:<umber;* devuelve la representacin de cadena de un nmero.
45
O!eradores " 'unciones. Elas G. Castillo
0al:$tring;* devuelve los nmeros contenidos en una cadena.
Funciones de cadena de texto.
)sc:$tring;* devuelve el cdigo ANS del primer carcter del string.
)sc,:$tring;* devuelve el valor del primer byte de una cadena.
C.r:C.arCode;* devuelve el carcter correspondiente al argumento
numrico CharCode en cdigo ANS.
Format:e(pression6CFormatD;* da formato a una expresin, donde
expresin es una expresin numrica, de fecha, etc. y el argumento
format establece el formato de salida.
7n$tr:C$tartD6C$tring>D6C$tring?D;* devuelve la posicin de la cadena
String2 dentro de String1, comenzando desde el caracter indicado
por Start (por defecto 1).
!case:$tring;* devuelve el texto String en minsculas.
!e#t:$tring6!engt.;* devuelve la cantidad de caracteres indicados por
Length de una cadena String, a partir del lado izquierdo.
!e#tE:$tring6!engt.;* devuelve la cantidad de caracteres indicados
por Length de una cadena String, a partir del lado izquierdo (String).
!en:e(pression;* devuelve la longitud de una cadena o el espacio
que ocupa una variable.
!trim:$tring;* devuelve una copia de la cadena sin los espacios
niciales a la izquierda.
Mid:$tring6$tart6C!engt.D;* extrae de la cadena String, la cantidad de
caracteres especificados por Length a partir del carcter especificado
por Start.
MidE:$tring6$tart6C!engt.D;* extrae de la cadena String, la cantidad de
caracteres especificados por Length a partir del carcter especificado
por Start (String).
%eplace:E(pression6 Find6 %eplace6 C$tartD;* busca en la cadena
Expression la cadena Find y la reemplaza con la cadena Replace,
comenzando por el caracter indicado en Start.
%ig.tE:$tring6!engt.;* devuelve la cantidad de caracteres indicados
por Length de una cadena String, a partir del lado derecho (String).
%trim:$tring;* devuelve una copia de la cadena sin los espacios
niciales a la derecha.
$pace:<umber;* devuelve una cadena con el nmero indicado de
espacios.
$plit:E(pression6 CDelimiterD;* almacena en un array dinmico de tipo
String, subcadenas separadas por el argumento Delimiter (que es
una cadena de texto).
$tring:<umber6C.aracter;* devuelve una cadena de caracteres
repetidos.
$tr%everse:E(pression;* devuelve una cadena invertida.
/rim:$tring;* elimina de la cadena String los espacios iniciales y
finales.
46
O!eradores " 'unciones. Elas G. Castillo
/rimE:$tring;* elimina de la cadena String los espacios iniciales y
finales (String).
3case:$tring;* devuelve una cadena convertida a maysculas.
47
Cajas de 1ensaje " de Entrada. Elas G. Castillo
Cajas de 1ensaje " de Entrada.
stos dos elementos son muy comunes en el entorno Windows y muy tiles
para pedir
confirmaciones y
datos al usuario. En
apariencia estas cajas son
ventanas que piden
datos al usuario;
internamente son
llamadas a funciones que devuelven un resultado. La primer imagen es una caja
de mensajes que pide la
confirmacin de
guardar, no guardar o
cancelar una operacin de
cierre en Microsoft
Word. La segunda
imagen es una caja de
mensaje donde se pide un
texto al usuario. A continuacin la explicacin de la utilizacin de ambas funciones.
E
!ajas de Mensaje.
La funcin que permite utilizar las cajas de mensaje es la funcin Msg,o(.
La forma general de esta funcin es la siguiente:
Ialor>/!#o$(Prom4t& '#utton! A! Ib/!#o$St+le > _
vbO*Onl+(& '6itle() A! Ib/!#o$)e!ult
En esta funcin el argumento Prompt es es el texto que aparecer en la
pantalla, en el caso de la imagen mostrada Desea guardar los cambios
efectuados en Vb6?. El argumento Buttons est compuesto por una serie de
valores extrados de una enumeracin llamada VbMsgBoxStyle que determina los
botones que tendr, el icono que mostrar y el botn predeterminado. El
argumento Title especifica el texto de ttulo de la pantalla. El valor devuelto por la
funcin se dar en base al botn pulsado en la pantalla, un valor de una
enumeracin llamada VbMsgBoxResult.
A continuacin los valores de las dos enumeraciones que intervienen en
esta funcin:
vbMsgBoxStyle
vbOKOnly=0: botn Aceptar.
vbOKCancel=1: botones Aceptar y Cancelar.
vbAbortRetrygnore=2: botones Abortar, Reintentar e gnorar.
vbYesNoCancel=3: botones Si, No y Cancelar.
vbYesNo=4: botones Si y No.
vbRetryCancel=4: botones Reintentar y Cancelar.
48
Cajas de 1ensaje " de Entrada. Elas G. Castillo
vbDefaultButton1=0: primer botn seleccionado por defecto.
vbDefaultButton2=256: segundo botn seleccionado por
defecto.
vbDefaultButton3=512: tercer botn seleccionado por defecto.
vbDefaultButton4=768: cuarto botn seleccionado por defecto.
vbCritical=16: icono de error.
vbQuestion=32: icono de interrogacin.
vbExclamation=48: icono de exclamacin.
vbnformation=64: icono de informacin.
vbMsgBoxResult
vbOK=1: se presion el botn Aceptar.
vbCancel=2: se presion el botn Cancelar.
vbAbort=3: se presion el botn Abortar.
vbRetry=4: se presion el botn Reintentar.
vbgnore=5: se presion el botn gnorar.
vbYes=6: se presion el botn S.
vbNo=7: se presion el botn No.
Entonces es en funcin del valor que devuelve la funcin que se decidir la
accin a realizar. Si mediante la funcin MsgBox quisiera reproducirse la caja de
mensaje de Microsoft Word (mostrada al inicio del captulo) escrbase la siguiente
sentencia:
,im )e!4 A! %nteer
)e!4 > /!#o$(<V,e!ea uardar lo! "ambio! _
e.e"tuado! en I#?W=&vb1e!NoCan"el Q _
vb,e.ault#utton1QvbE$"lamation&=/i"ro!o.t Sord=)
Como se observar, el argumento Buttons es una suma de las tres
constantes que determinan los botnes, el botn predeterminado y el icono que
llevar.
El valor del botn presionado en la pantalla es devuelto a la variable Resp y
luego podr utilizarse alguna sentencia condicional para analizar el valor retornado
y tomar una decisin al respecto.
!ajas de entrada.
El cometido de esta caja es el ingreso de texto. Entonces, esta funcin
devuelve una cadena de caracteres (dato de tipo String). La forma general de esta
funcin es la siguiente:
Ialor>%n4ut#o$(Prom4t&'6itle(&',e.ault()
Donde Prompt es una cadena de texto que aparecer en la pantalla, Title es
el texto que aparecer en la barra de ttulo de la pantalla y Default es el valor por
defecto que contendr su caja de texto.
49
Los 1en5s. Elas G. Castillo
Los 1en5s.
a barra de men es una barra localizada en la parte superior de las
ventanas, con distintos comandos para utilizar en la aplicacin. Observe
cualquier aplicacin de Windows, como Word, Excel, el Explorador de
Windows, Paint o cualquier otra aplicacin y ver que muchos de los comandos
utilizados por el software se encuentran en ella.
L
Visual Basic no es ajeno a este elemento y dispone de una herramienta
para crear mens de
manera muy fcil,
tanto una barra de
mens como mens
contextuales (Popup
Men).
Los mens
son tambin objetos
que tienen unas
determinadas
propiedades y un
evento. Aparecen en
la ventana de cdigo
del formulario que los
contiene con un nico
evento: el evento
Click que tiene lugar
cuando el usuario hace clic en el men; por tanto su programacin es sencilla.
El Editor de Men3s.
Es una herramienta de
Visual Basic para crear la barra de
mens, donde se especifica la
jerarqua de cada uno, se crean
arrays de mens y especifican sus
propiedades.
Esta herramienta se
encuentra en la barra estndar, en
el men HERRAMENTAS, EDTOR DE
MENS. o con el mtodo abreviado
Ctrol+E.
En el cuadro Caption se
escritura el texto que estar en el
men (propiedad Caption); en el
cuadro Name se escribir el
nombre del men con el cual se
acceder a l en el cdigo; ndex es un cuadro para escribir el ndice del men en
50
Los 1en5s. Elas G. Castillo
un array de mens; ShortCut establece el mtodo abreviado de teclado; Checked
establece si el men aparecer con un signo de al lado del men (propiedad
Checked); la propiedad Enabled y Visible permiten habilitar/deshabilitar el men y
hacerlo visible/invisible como a los otros controles.
Hay otros cuatro botones los cuales son flechas de direccin, su utilidad es
establecer el orden y la jerarqua de los mens. El botn con la flecha establece
submens disminuyendo su jerarqua, el botn con la flecha realiza el proceso
contrario; en la pantalla la jerarqua de cada men puede verse con signos de
puntos suspensivos (.), mediante esta forma puede saberse dentro de qu men
estar cada men o si es un men principal, y el orden de ellos. Los botones con
las flechas y reordenan los mens. Los botones Siguiente, nsertar y Eliminar
permiten desplazarse por los mens, nsertar nuevos mens y eliminar los mens
seleccionados.
En la imagen del editor de mens puede verse una estructura de mens ya
creada. El men Archivo con cuatros submens: Nuevo, Abrir, Guardar, una lnea
divisoria y el submen Salir. Luego el men principal Ayuda con un submen
Acerca de. Los submens Nuevo, Abrir, Guardar y Salir tienen mtodos
abreviados de teclado.
Men3s contextuales.
Tambin son habituales en Windows y generalmente se despliegan con el
botn secundario del mouse. Estos mens se crean con un mtodo llamado
PopupMenu asociado a algn evento (por ejemplo el evento MouseUp). La forma
general es la siguiente:
Po4u4/enu /enu&'Fla!(&'0(&'1(
Donde Menu es el nombre de algn men existente, Flags es una serie de
constantes que especifican la forma en que se desplegar el men (estas
constantes se encuentran en una enumeracin llamada MenuControlConstants), X
e Y establecen el punto a partir del que se desplegar el men. Es importante
destacar que este mtodo se basa en un men existente, aunque ste puede estar
invisible.
51
6r24icos en Visual Basic. Elas G. Castillo
6r24icos en Visual Basic.
l entorno Windows, a diferencia de otros anteriores, es un entorno grfico.
Dispone de iconos, diversos colores, distintos tipos de letras, programas de
grficos, mapas de bits y ms. Visual Basic dispone de mtodos grficos,
antes mencionados, para trazar formas como rectngulos, crculos, insercin de
imgenes y ms. Este captulo est dedicado a la gestin de los colores y a los
mtodos grficos, as como las dimensiones de los controles que admiten dichos
mtodos.
E
El color.
Los diversos colores son representados por nmeros. Visual Basic dispone
de una enumeracin con los ocho colores bsicos, esta enumeracin se llama
ColorConstants y tiene las siguientes constantes:
vb,lac-* color negro.
vb,lue* color azul.
vbC'an* color turquesa.
vb8reen* color verde.
vbMagenta* color fuxia.
vb%ed* color rojo.
vb1.ite* color blanco.
vb@ello2* color amarillo.
Los colores se guardan en una variable de tipo Long, por lo tanto, puede
asignarse a una propiedad como BackColor o ForeColor un valor de este tipo.
Tambin puede crearse una enumeracin personalizada por el programador con
algunos colores que considere importantes. Sin embargo, cmo saber qu color
representa un determinado valor de tipo Long?. Hay una forma de representacin
del color llamada RGB (siglas de Red, Green, Blue o Rojo, Verde, Azul) que son
tres componentes de 1 byte cada una; hay una funcin llamada RGB, cuya forma
general es la siguiente:
valor>)M#()ed&Mreen&#lue)
Donde valor es una variable donde se almacenar el valor devuelto (un
valor de tipo Long); Red, Green y Blue son argumentos que pueden tomar un valor
de 0 a 255 (1 byte) que representan la cantidad de ese color. De la combinacin
de estos tres surgen los diversos colores que van del negro (Red=0, Green=0 y
Blue=0, la funcin devuelve el valor Long 0) al blanco (Red=255, Green=255 y
Blue=255, la funcin devuelve 16777215).
Una sencilla aplicacin para conocer el nmero que representa un color
determinado es la siguiente:
Coloque en un formulario tres barras de desplazamiento (horizontal o
vertical, es indiferente), una etiqueta y una forma. Los nombres sern los
52
6r24icos en Visual Basic. Elas G. Castillo
siguientes: las barras de desplazamiento se llamarn hsbColor, formando un array
de controles (0, 1 y 2), la etiqueta se llamar lblLong y la forma Shape1.
Establezca sus propiedades como se indican en la tabla a continuacin:
Control %ro!iedad Valor Control %ro!iedad Valor
hsbColor(0) Min
Max
Value
0
255
0
hsbColor(1) Min
Max
Value
0
255
0
hsbColor(2) Min
Max
Value
0
255
0
lblLong Caption 0
shape1 FillStyle 0 - Solid Form1 --------------- ------------
Escriba el siguiente cdigo en el formulario Form1:
O4tion E$4li"it
Private Sub -!bColor_S"roll(%nde$ A! %nteer)
,im Color A! Lon
Color>)M#(-!bColor(B).Ialue&-!bColor(1).Ialue& _
-!bColor(9).Ialue)
lblLon.Ca4tion>Color7!-a4e1.FillColor>Color
End Sub
Mediante este cdigo se puede ver en la etiqueta el nmero del color y al
propio color rellenando la forma.
Sin embargo si se estudia bien la funcin RGB se ver que usa tres
componentes de 1 byte (igual 3 bytes), sin embargo una variable de tipo Long
ocupa 4 bytes. Hay 1 byte que se utiliza para el sistema. Este color es utilizado
para representar los diversos colores del sistema: la barra de ttulo activa, el color
de los bordes, el fondo del escritorio, etc. Para estos colores Visual Basic dispone
de una enumeracin llamada $'stemColorConstants que contiene las constantes
de todos los colores del sistema. A modo de ejemplo se enumeran los siguientes
(no todos):
vb)ctive,order* color del borde de la ventana activa.
vb)ctive/itle,ar* color de la barra de ttulo de la ventana activa.
vbDes-top* color del escritorio.
vb8ra'/e(t* texto deshabilitado.
vb7n#o,ac-ground* color de fondo de informacin sobre herramientas
vbMenu,ar* color de fondo del men.
Tambin se dispone de otro tipo de dato que almacena colores y se llama
OLE_COLOR. En los controles que se han visto (cajas de texto, cajas de lista y
dems) utilizan este tipo de dato para los formatos de color (BackColor, ForeColor
y otras); por ello despliegan una paleta de colores en la vista diseo.
53
6r24icos en Visual Basic. Elas G. Castillo
*istemas de coordenadas.
Para la orientacin de los controles, de las ventanas, resultados de los
mtodos grficos, la posicin del cursor del mouse, etc., Visual Basic utiliza un
sistema de coordenadas (X e Y) para este fin. Esto se ha visto en el evento
MouseMove cuando dos de los argumentos son precisamente X e Y, coordenadas
del cursor en la ventana (o control). Los controles que se disponen dentro se
basan en las coordenadas de su contenedor para devolver su propiedad Left, Top,
Height y Width.
Como todos los sistemas de coordenadas, stos utilizan una escala,
algunos en centmetros, otros en metros, otros en milmetros. Los objetos
grficos tienen tambin una escala y aqu se explicar algunas propiedades de
stos: ScaleLeft, ScaleTop, ScaleWidht y ScaleHeight.
Los objetos grficos Form y PictureBox tienen las propiedades Top, Left,
Height y Width; tambin tienen las cuatro propiedades ya mencionadas, entonces
cabe aclarar cul es la diferencia entre las propiedades Top y ScaleTop, Left y
ScaleLeft, Height y ScaleHeight, Width y ScaleWidth.
La diferencia es que las coordenadas que comienzan con Scale son las
coordenadas internas del objeto; tomadas en base a una escala que no tiene por
qu coincidir con sus magnitudes externas.
El grfico muestra las medidas externas representadas por Height y Width y
las internas representadas por ScaleHeight y ScaleWidth. Lo mismo ocurre con
Top, Left, ScaleTop y ScaleLeft.
Cabe destacar que las coordenadas ScaleLeft y ScaleTop valen, por
defecto, 0 y que las coordenadas ScaleWidth y ScaleHeight dependern de la
unidad de medida que se utilice en el control (propiedad ScaleMode).
Esta escala de medidas tienen una determinada magnitud, representada en
una propiedad llamada $caleMode. Esta propiedad extrae sus valores de una
enumeracin llamada ScaleModeConstants, y sus miembros son:
vb3ser=0: definida por el usuario.
vb/2ips=1: la unidad de medida es el twip.
vbPointsF2: la unidad de medida es el punto.
vbPi(elsF3: la unidad de medida es el pixel.
vbC.aractersF4: la unidad de medida es el carcter.
vb7nc.esF5: la unidad de medida es la pulgada.
vbMillimetersF6: la unidad de medida es el milmetro.
0bCentimetersF7: la unidad de medida es el centmetro.
%
e
g
&
t
'idt&
(cale%eig&t
(cale'idt&
54
6r24icos en Visual Basic. Elas G. Castillo
Las unidades de medida, al ser ajustadas en la vista diseo, modifican a la
nueva unidad las propiedades Scale..
Sin embargo, existe un mtodo para que el usuario pueda definir su propio
sistema de coordenadas, basado en las coordenadas del vrtice superior izquierdo
y del vrtice inferior derecho del objeto. Para esto existe un mtodo llamado Scale
que permite definir esto y la propiedad ScaleMode pasa a valer 0 (vbUser). Este
mtodo ajusta las cuatro propiedades Scale del control; su forma general es la
siguiente:
nObjeto.S"ale(01&11)C(09&19)
Donde X1,Y1 definen la coordenada del vrtice superior izquierdo y X2,Y2
definen la coordenada del vrtice inferior derecho. El siguiente diagrama muestra
grficamente el ajuste de la escala mediante este mtodo.
Las coordenadas X1 e Y1 establecen las
propiedades ScaleLeft y ScaleTop; las propiedades
ScaleWidth y ScaleHeight pueden determinarse como
la diferencia entre X2 - X1 e Y2 - Y1,
respectivamente.
La importancia de este sistema de
coordenadas es que las salidas de estos mtodos
grficos utilizan las coordenadas del plano en que se dibujan, o sea, estas
coordenadas. Por ejemplo, si en un objeto se establece el mtodo Scale de la
siguiente manera:
nObjeto.S"ale(C9B&1B)C(9B&C1B)
El origen del sistema de coordenadas (el punto
0,0) coincidir con el centro del objeto (Formulario,
Caja de Dibujo u objeto Printer). Las coordenadas
internas del objeto se muestran en el dibujo.
Mtodos .r4&icos.
A continuacin se detallan los mtodos grficos admitidos por estos objetos.
En forma general, sirven para dibujar formas simples: puntos, rectngulos,
crculos, elipses, etc., una funcin y un mtodo para agregar imgenes.
Para que un mtodo grfico sea visible, la propiedad )uto%edra2 debe
estar puesta a True y el mtodo no debe estar en el evento Paint del objeto, si
desea utilizarse el mtodo grfico en el evento Paint la propiedad AutoRedraw
debe estar a False (solo para las cajas de dibujo y los formularios).
Mtodo PSet.
Este mtodo permite dibujar puntos en el plano. El grosor del punto estar
determinado por la propiedad Dra21idt. del objeto. La forma general de este
mtodo es la siguiente:
nObjeto.PSet(0&1)&Color
X1,Y1
X2,Y2
-20,10
20,-10
55
6r24icos en Visual Basic. Elas G. Castillo
Donde X e Y son las coordenadas del punto y Color es el color del punto, si
se omite se utilizar el color especificado en la propiedad ForeColor.
Mtodo Line.
Este mtodo permite dibujar lneas y rectngulos, el grosor de la lnea est
determinado por la propiedad DrawWidth. La forma general es la siguiente:
nObjeto.Line(01&11)C(09&19)&Color&#F
Donde X1,Y1 y X2,Y2 son los puntos de los extremos de la lnea; Color es
el color de la lnea, si se omite se utiliza el de la propiedad ForeColor; B es un
argumento que indica si se traza un rectngulo donde X1,Y1 es el vrtice superior
izquierdo y X2,Y2 es el vrtice inferior derecho. Si se aade el argumento F se
rellena el rectngulo con el mismo color de la lnea, de lo contrario se rellenar con
el color y el estilo especificado en las propiedades FillColor y Fill$t'le.
Mtodo Circle.
Este mtodo dibuja crculos, elipses y arcos. Al igual que con los anteriores,
el grosor de la lnea estar determinado por la propiedad DrawWidth, el estilo y
color del relleno estar determinado por las propiedades FillStyle y FillColor. La
forma general es la que sigue:
nObjeto.Cir"le(01&11)&)adiu!&Color&Start&End&A!4e"t
Donde X1,Y1 son las coordenadas del centro de la circunferencia; Radius
es el radio de la circunferencia, Color es el color de la lnea (si se omite es la
propiedad ForeColor, Start es opcional y es el ngulo de comienzo en caso de
querer trazar arcos, End es opcional y es el ngulo de finalizacin en caso de
querer trazar arcos y Aspect es opcional y es un nmero que permite dibujar
elipses. Aspect es un nmero mayor que 0 (1 dibuja una circunferencia). Cabe
destacar que Visual Basic toma como sistema de medida angular los radianes, por
ello debern hacerse las conversiones necesarias en caso de trabajar con otro
sistema.
Mtodo Print.
Este mtodo permite escribir texto en el objeto. El color, tamao, tipo de
letra, etc. estarn dados por las propiedades Font y ForeColor del respectivo
objeto. Su forma general es la siguiente:
nObjeto.Print 6e$to
Donde Texto es el texto a imprimir. El texto comienza en el punto indicado
por las propiedades CurrentX y CurrentY del objeto, propiedades solamente
visibles desde el cdigo. Puede asignarse valor a estas propiedades antes de
utilizar el mtodo Print para controlar el lugar donde aparecer este mtodo.
Mtodo Cls.
56
6r24icos en Visual Basic. Elas G. Castillo
Este mtodo sirve para borrar de un objeto todos los mtodos grficos
utilizados. No lleva argumentos y su forma general es:
nObjeto.Cl!
Mtodo PaintPicture.
Este mtodo permite dibujar imgenes contenidas en objetos (pictureDisp).
La forma general de este mtodo es la siguiente:
nObjeto.PaintPi"ture(Pi"ture&01&11&Sidt-1&Xei-t1)
Donde Picture es el objeto pictureDisp cuya imagen desea colocarse en el
objeto; X1,Y1 son las coordenadas donde desea colocar el vrtice superior
izquierdo de la imagen; Width1 y Height1 son el largo y la altura que tendr la
imagen al insertarla en el objeto. De omitirse estos ltimos cuatro argumentos, la
imagen ser colocada a partir del punto especificado por las coordenadas
CurrentX y CurrentY y sus dimensiones sern las originales.
Funcin Point.
Esta funcin devuelve un entero de tipo Long con el valor RGB del color de
un punto que se pasa por argumento. La forma general es la siguiente:
nObjeto.Point(0&1)
Donde X e Y son las coordenadas del punto especificado. Esta funcin no
est presente en el objeto Printer.
57
Trabajo con 4ic7eros. Elas G. Castillo
Trabajo con 4ic7eros.
or dems importante es almacenar el trabajo realizado en alguna unidad de
disco para volver a utilizarlo. Muchas aplicaciones Windows almacenan en
algn tipo de soporte (disco duro, disquete, etc.) el trabajo realizado. Visual
Basic permite guardar en ficheros la informacin que el programador especifique
en tres tipos diferentes de archivos:
P
$ecuenciales.
)cceso )leatorio.
,inarios.
El trabajo con ficheros implica tres partes:
Apertura del fichero.
Lectura/Escritura de datos.
Cierre del fichero.
La etapa de apertura es muy importante ya que all se define el tipo de
fichero que se trata, adems se hace indica el nmero que identificar al archivo
abierto, mediante el cual se realizarn las operaciones de lecutra/escritura, de
cierre, etc. Ahora se ver cada uno de los tipos que se puede trabajar en Visual
Basic.
+rchivos *ecuenciales.
Estos archivos se encuentran escritos en caracteres ASC (legibles con
aplicaciones como el Block de Notas, por ejemplo). Los ficheros secuenciales
tienen tres formas de apertura; una para lectura y dos para escritura. La forma
general de apertura para lectura de este tipo de ficheros es la siguiente:
O4en nFi"-ero For %n4ut A! YnumF
Donde nFichero es una cadena de caracteres con la ruta y el nombre del
fichero y numF es el nmero del fichero abierto.
Si se intenta abrir para lectura un fichero que no existe se producir un error
en la ejecucin.
Una vez abierto el fichero puede leerse una cierta cantidad de caracteres
mediante la siguiente instruccin:
Iariable>%n4ut(Number&YnumF)
Donde Number es el nmero de caracteres que se leern y numF es el
nmero con el que se abri el fichero. Variable es la variable donde se
almacenarn los caracteres ledos.
Una sentencia para leer todo el contenido de un fichero puede ser la
siguiente:
58
Trabajo con 4ic7eros. Elas G. Castillo
Iariable>%n4ut(LOF(numF)&YnumF)
Porque la funcin LOF devuelve la longitud en bytes de un fichero abierto.
Otra funcin para leer caracteres de este modo de apertura es la funcin
Line nput. La forma general de esta funcin es la siguiente:
Line %n4ut YnumF&Iariable
Donde numF es el nmero del fichero y Variable es una variable donde se
almacenar la cadena leda. Esta funcin lee toda una lnea de caracteres hasta
llegar a un retorno de carro o un retorno de carro+avance de lnea (constantes de
Visual Basic vbCr y vbCrLf respectivamente).
Para abrir un archivo de escritura pueden utilizarse las siguientes
sentencias en virtud del modo de escritura que se desea:
O4en nFi"-ero For Out4ut A! YnumF
O4en nFi"-ero For A44end A! YnumF
La primer sentencia abre el fichero de escritura en la cual se sobreescritura
el contenido previo, en la segunda se aade al final del fichero las escrituras
realizadas. En ambos casos se utilizan los mismos medios de escritura. Si se
intenta abrir para escritura un fichero que no existe, se crear el fichero.
El primer mtodo de escritura es el mtodo Write y su forma general es la
siguiente:
Srite YnumF& Iar1ZIar9ZIarHE
Donde numF es el nmero del fichero; Var1, Var2, Var3. son los datos que
se escribirn en el fichero. Estos datos aparecern separados por coma. Por
ejemplo, imagine que en un procedimiento se escribe un fichero. El procedimiento
es el siguiente:
Private Sub E!"ribirFi"-ero()
Con!t Fe"-a A! ,ate>Y1?5B859BBKY
Con!t NRmero A! Sinle>LABB8.K81
Con!t SiNo A! #oolean>6rue
Con!t Cadena A! Strin>=Ii!ual #a!i" ?.B=
O4en <C7[Fi"-ero.t$t= For Out4ut A! Y1
Srite Y1&Fe"-aZNRmeroZSiNoZCadenaZ=Final .i"-ero=
Clo!e Y1 ;"ierra el .i"-ero
End Sub
Luego se intentara abrir el fichero en el block de notas de Microsoft, se ver
de la siguiente forma:
#2005-08-16#,94008.58,#TRUE#,"Visual Basic 6.0","Final fichero"
59
Trabajo con 4ic7eros. Elas G. Castillo
El otro mtodo de escritura es el mtodo Print que tiene la siguiente forma
general:
Print YnumF&'S4"(n)(Z'6ab(n)(Z6e$to7'S"ar(
Donde numF es el nmero que identifica al fichero; Spc(n) es opcional e
indica que se dejarn tantos espacios como los indicados por el argumento
numrico n; Tab(n) indica que se colocar el punto de insercin en una columna
indicado por n; Texto es el texto que se imprimir y Scar especifica el punto de
insercin del carcter siguiente. Se utiliza un punto y coma (;) para especificar que
el punto de insercin debe estar inmediatamente despus del ltimo carcter
mostrado. Utilice Tab(n) para colocar el punto de insercin en un nmero de
columna absoluta. Utilice Tab sin argumentos para colocar el punto de insercin al
comienzo de la siguiente zona de impresin. Si se omite Scar, el siguiente carcter
se imprime en la lnea siguiente.
Por ejemplo, supngase que se escribe en un procedimiento el siguiente
cdigo:
Private Sub /\todoPrint()
O4en ]C7[Fi"-ero.t$t] For Out4ut A! Y1
Print Y1& ]Print !im4le7 Print Y1]
Print Y1& S4"(K)Z ]Print "on S4"(K)7 Print Y1&
S4"(K)Z Print "on S4"(K)]
Print Y1& 6ab(1)Z ]Print "on 6ab(1)7 Print Y1&
6ab(1)Z Print "on 6ab(1)]
Print Y1& ]Se -a utiliNado SiuienteCara"ter7 _
Print Y1& Se -a utiliNadoZ SiuienteCara"ter]Z _
S4"(9)
Print Y1& ]Fin del m\todo Print]
Clo!e Y1
End Sub
Si se abriera el fichero con el block de notas de Microsoft el resultado
visualizado sera el siguiente:
Print !im4le7 Print Y1
Print "on S4"(K)7 Print Y1& S4"(K)Z Print "on
S4"(K)
Print "on 6ab(1)7 Print Y1& 6ab(1)Z Print "on 6ab(1)
Se -a utiliNado SiuienteCara"ter7 Print Y1& Se -a
utiliNadoZ SiuienteCara"ter
Fin del m\todo Print
Ficheros de +cceso +leatorio.
Estos ficheros almacenan la informacin tal como se encuentra en la
memoria por lo tanto no son legibles por el block de notas. Estos ficheros estn
formados por registros a los que se puede acceder directamente, sin embargo
60
Trabajo con 4ic7eros. Elas G. Castillo
tienen la desventaja de que los registros tienen que tener el mismo tamao. Tienen
una sola forma de apertura que sirve tanto para lectura como para escritura. La
forma general de apertura es la siguiente:
O4en nFi"-ero For )andom A! YnumF Len>tama^o
Donde nFichero es la ruta y nombre del fichero, numF es el nmero que
identificar al fichero y tamao es el tamao de cada registro. Con este tipo de
fichero se puede crear una pequea base de datos y es aqu donde se puede
sacar provecho a las estructuras. Puede asignarse al argumento tamao el tamao
de una estructura que se haya creado y guardar los datos de sta en un registro.
Los mtodos de lectura y de escritura son muy similares, y se usan las
palabras Get y Put para leer y para escribir un registro respectivamente.
La forma de leer un registro es con la siguiente sentencia:
Met YnumF&n)e&Iar
Donde numF es el nmero que hace referencia al fichero, nReg es el
nmero del registro a leer y Var es la variable donde se almacenar el valor ledo.
La forma general para escribir un registro es la siguiente:
Put YnumF&n)e&Iar
Donde numF es el nmero que hace referencia al fichero, nReg es el
nmero del registro a escribir y Var es la variable que contiene el valor que se
escribir. Si se da al valor nReg un nmero de registro ya existente, se
sobreescribir ese registro.
Si se desea determinar la cantidad de registros que hay en un fichero se
divide el tamao en bytes del fichero entre la longitud de cada registro.
Como ejemplo, abra un nuevo proyecto estndar y coloque en el formulario
un cuadro de lista (lstProd), dos cajas de texto (txtCodi y txtNomb) y tres botones
de comando (cmdBusc, cmdTodo y cmdAgre). Agregue un mdulo estndar y
escriba en l este cdigo:
O4tion E$4li"it
6+4e Produ"to
Codio A! %nteer ;9 b+te!
Nombre A! StrinD8 ;8 b+te!
End 6+4e ;total 1B b+te!
Publi" Con!t )uta A! Strin>=C7[,ato!Prorama.dat=
Publi" Fun"tion SoloNum!(Num A! %nteer) A! %nteer
%. (NumPA: And NumTK8) Or NumT98 6-en
SoloNum!>Num
El!e7SoloNum!>B
End %.
End Fun"tion
61
Trabajo con 4ic7eros. Elas G. Castillo
Ahora escriba en el formulario el siguiente cdigo:
O4tion E$4li"it
Private Prod A! Produ"to& )e A! %nteer
Private Sub Form_Load()
O4en )uta For )andom A! Y1 Len>1B
"mdAre.Ca4tion>=Arear=7"md#u!".Ca4tion>=#u!"ar=
"md6odo.Ca4tion>=Li!tar todo=
S-ile Not EOF(1)
)e>)eQ17Met Y1&)e&Prod
l!tProd.Add%tem Prod.Codio J= _ < J Prod.Nombre
Send
End Sub
Private Sub Form_3nload(Can"el A! %nteer)
Clo!e Y1 ;"ierra el .i"-ero
End Sub
Private Sub Form_)e!iNe()
,im X A! Sinle
X>/e.S"aleXei-tCt$tCodi.Xei-t
l!tProd./ove B& B& /e.S"aleSidt-& X
t$tCodi.6o4>l!tProd.Xei-t7t$tNomb.6o4>t$tCodi.6o4
"mdAre.6o4>t$tCodi.6o47"md6odo.6o4>t$tCodi.6o4
"md#u!".6o4>t$tCodi.6o47t$tCodi.Le.t>B
t$tNomb.Le.t>t$tCodi.Sidt-
"mdAre.Le.t>t$tNomb.Le.tQt$tNomb.Sidt-
"md6odo.Le.t>"mdAre.Le.tQ"mdAre.Sidt-
"md#u!".Le.t>"md6odo.Le.tQ"md6odo.Sidt-
End Sub
Private Sub t$tCodi_*e+Pre!!(*e+A!"ii A! %nteer)
;bloUuea el inre!o de "ara"tere! no num\ri"o!
*e+A!"ii>SoloNum!(*e+A!"ii)
;re"ono"e la te"la Enter
%. *e+A!"ii>1H 6-en
t$tNomb.SetFo"u!
End %.
End Sub
Private Sub t$tNomb_*e+Pre!!(*e+A!"ii A! %nteer)
%. *e+A!"ii>vb*e+)eturn 6-en
"mdAre.SetFo"u!
End %.
End Sub
62
Trabajo con 4ic7eros. Elas G. Castillo
Private Sub "md6odo_Cli"8()
l!tProd.Clear
For )e>1 6o LOF(1)[1B
Met Y1&)e&Prod
l!tProd.Add%tem Prod.Codio J= _ < J Prod.Nombre
Ne$t )e
End Sub
Private Sub "md#u!"_Cli"8()
,im Num A! %nteer
Con!t 6$ A! Strin>=E!"riba el "@dio del artO"ulo=
Num>C%nt(%n4ut#o$(6$&=#u!"ar=))7)e>B7l!tProd.Clear
,o
)e>)eQ17Met Y1&)e&Prod
%. Prod.Codio>Num 6-en
l!tProd.Add%tem Prod.Codio J= _ < J Prod.Nombre
End %.
Loo4 3ntil )e>LOF(1)51B
End Sub
Private Sub "mdAre_Cli"8()
%. Len(t$tCodi.6e$t)>B Or Len(t$tNomb.6e$t)>B 6-en
/!#o$ <Falta inre!ar dato!=&vbCriti"al&=E))O)=
E$it Sub
El!e7)e>LOF(1)[1BQ17Prod.Codio>C%nt(t$tCodi.6e$t)
Prod.Nombre>t$tNomb.6e$t7Put Y1&)e&Prod
t$tCodi.6e$t>B7t$tNomb.6e$t>==
End %.
End Sub
Ejecute la aplicacin pulsando F5 o desde el men EJECUTAR, NCAR. En este
ejemplo se ha utilizado una funcin, llamada EOF que devuelve un valor Boolean
que es True si se ha llegado al final del fichero.
!ierre de &icheros.
Los ficheros se cierran de la misma forma, tanto secuenciales como de
acceso aleatorio como binarios. La forma general de cerrar un fichero es la
siguiente:
Clo!e YnumF
Donde numF es el nmero del fichero a cerrar. Si se omite este parmetro
se cierran todos los ficheros. Tambin puede utilizarse el mtodo Reset, mtodo
que no lleva argumentos, y cierra todos los ficheros abiertos.
63
Trabajo con 4ic7eros. Elas G. Castillo
Funciones de &icheros.
Las siguientes funciones estn relacionadas con el trabajo con ficheros y se
enumeran a continuacin.
E5F:numF;* devuelve un valor Boolean que indica si se ha llegado al
final del fichero.
!5F:numF;* devuelve el tamao en bytes de un fichero abierto.
!oc:numF;* devuelve la posicin de lectura o escritura en un fichero.
$ee-:numF;* devuelve o establece la posicin de lectura o escritura
actual en un fichero.
%eset:;* cierra todos los ficheros abiertos.
FreeFile:%ango;* devuelve el siguiente nmero de archivo disponible
para usar con Open (parmetro numF) dentro del rango especificado
por Rango.
File!en:Pat.;* devuelve la longitud en bytes de un fichero.
Dir:Pat.;* devuelve una cadena vaca si no existe el fichero o
directorio especificado en el argumento Path.
9ill:Pat.;* elimina el fichero especificado en el argumento Path.
FileCop':$ource6Destination;* copia un fichero desde el argumento
Source hasta el argumento Destination.
M-Dir:Pat.;* crea un nuevo directorio.
%mDir:Pat.;* elimina un directorio existente.
Con respecto a la funcin Seek, para obtener la posicin de lectura o
escritura se procede como cualquier funcin:
Iariable>See8(numF)
Donde Variable almacena la posicin (devuelve un tipo Long). Para colocar
el cursor de lectura o escritura en una posicin se utiliza la siguiente forma:
See8(numF)&Po!i"i@n
Donde Posicin es un nmero de tipo Long con la posicin donde se pondr
el cursor.
64
La 8!resora. Elas G. Castillo
La 8!resora.
n Visual Basic la impresora est representada por un objeto llamado Printer.
Este objeto tiene su interfaz grfica en la impresora, pero no en la pantalla y
tiene los mtodos grficos ya vistos en el subcaptulo titulado Mtodos
grficos del captulo Grficos en Visual Basic.
E
Este objeto tiene propiedades que definen el tamao del papel, la calidad de
impresin, etc. y mtodos para gestionar los trabajos de impresin. Muy importante
es citar una enumeracin llamada Printer5bjectConstants que contiene las
constantes para dar valor a sus propiedades. Esta enumeracin tiene varias
constantes miembro y con cada propiedad se enumerarn algunas, el resto puede
visualizarlas en el Examinador de objetos.
A la impresora predeterminada se accede utilizando la palabra Printer y se
utilizan sus propiedades y mtodos como los de cualquier otro objeto.
Propiedades.
A continuacin se enumeran las propiedades de este objeto. Los valores se
toman de la enumeracin antes mencionada.
Device<ame* es una propiedad de solo lectura que devuelve una cadena de
caracteres con el nombre de la impresora.
Driver<ame* es una propiedad de solo lectura que devuelve una cadena de
caracteres con el nombre del controlador de la impresora.
Port* es una propiedad de solo lectura que devuelve una cadena de
caracteres con el nombre del puerto a travs del cual se enviar el
documento a la impresora.
ColorMode* devuelve o establece el color seleccionado.
o vbP%CMMonoc.rome F >* resultado en una impresora
monocromo.
o 0bP%CMColorF?* resultado en una impresora a color.
Copies* devuelve o establece el nmero de copias que se habrn de
imprimir (tipo nteger).
Duple(* determina si una pgina se va a imprimir por ambas caras (tipo
nteger).
o vbP%DP$imple( F >* mpresin a una cara.
o vbP%DPHori+ontal F ?* impresin a doble cara horizontal.
o vbP%DP0erticalFG* mpresin vertical a doble cara.
5rientation* determina si los documentos se imprimirn en forma vertical u
horizontal (tipo nteger).
o vbP%P5%PortraitF>* Los documentos se imprimen ajustando
el inicio al borde estrecho del papel.
o vbP%P5%!andscapeF?* Los documentos se imprimen
ajustando el inicio al borde ancho del papel.
Page* propiedad de solo lectura que devuelve el nmero de pgina actual.
65
La 8!resora. Elas G. Castillo
Paper,in* devuelve o establece la bandeja de papel predeterminada de la
impresora desde la que se tomar papel para imprimir (tipo nteger).
o vbP%,<)utoFH* utiliza el alimentador de papel
predeterminado.
o vbP%,<EnvelopeFI* utiliza el alimentador de sobres.
o vbP%,</ractorFJ* usa papel del alimentador por traccin.
Paper$i+e* devuelve o establece el tamao del papel de la impresora.
o vbP%P$)KFL* tamao de papel A4 (210 x 297 mm).
o vbP%P$!etterF>* papel tamao Carta (216 x 279 mm).
o vbP%P$!egalFI* papel tamao Oficio (216 x 356 mm).
PrintAualit'* devuelve o establece la calidad de la impresin (tipo nteger).
o vbP%PADra#tF M>*
/rac-De#ault* devuelve o establece un valor que determina si el objeto
Printer tiene en cuenta la configuracin de impresora predeterminada del
Panel de control (tipo Boolean).
4oom* devuelve o establece el porcentaje de aumento o disminucin que se
aplicar en la escala del resultado impreso (tipo Long).
Ahora, los mtodos que permiten enviar los trabajos de impresin,
finalizarlos y cambiar de pgina son los siguientes:
EndDoc* enva un trabajo de impresin a la impresora.
9illDoc* elimina un trabajo de impresin.
<e2Page* contina el trabajo de impresin en una nueva pgina.
Por ejemplo, en el siguiente procedimiento se imprimir el texto contenido
en un argumento, dndole formato al texto y luego el contenido de un fichero
grfico. Por ltimo se enva el trabajo de impresin a la impresora.
Private Sub %m4rimir(6e$to A! Strin)
Printer.Pa4erSiNe>vbP)PSAA7Printer.S"ale/ode>?
Printer.Current0>1B7Printer.Current1>1B
Printer.FontName>=Arial #la"8=7Printer.FontSiNe>1K
Printer.Print 6e$to
Printer.PaintPi"ture LoadPi"ture _
(<C7[Sindow![#urbuja!.bm4=)&Printer.S"aleSidt-59& _
Printer.S"aleXei-t59
Printer.Current0>1B7Printer.Current1>Printer. _
S"aleXei-tC:7Printer.Print <PGina <J Printer.Pae
Printer.End,o" ;"omienNa la im4re!i@n
End Sub
El procedimiento configura la impresora predeterminada con hojas tamao
A4, luego se utiliza como escala de medida los milmetros (dndole a la propiedad
ScaleMode el valor 6), se utiliza el mtodo Print para escribir texto y se da formato
a la fuente de la impresora. Se utiliza el mtodo grfico PaintPicture para colocar
66
La 8!resora. Elas G. Castillo
un grfico, se escribe el nmero de pgina en el objeto y se enva el trabajo a la
impresora.
Objeto Printers.
Ahora bien, puede darse el caso de que en el ordenador haya ms de una
impresora instalada; puede haber, por ejemplo, una impresora local y otra
impresora de red y se necesite utilizar una de ellas; si fuese la predeterminada
esto no traera ninguna dificultad, ya que el objeto Printer representa a la
impresora predeterminada pero si no tendra que utilizarse un objeto Printer que
represente a la otra u otras impresoras. Para ello Visual Basic dispone de otro
objeto, llamado Printers. Este objeto es como un array (en realidad es una
coleccin, se ver lo que es ms adelante) que contiene las impresoras presentes
en el sistema.
Si desea conocerse la cantidad de impresoras instaladas sese la
propiedad Count de este objeto:
Printer!.Count
Los elementos de este objeto comienzan a numerarse por cero, como lo
hacan los elementos de los cuadros de lista. Si quisiese obtenerse, por ejemplo,
en un cuadro de lista (List1) los nombres de las impresoras instaladas puede
utilizarse una sentencia como la siguiente:
Private Fun"tion %m4re!ora!()A! #oolean
,im $ A! %nteer
%. Printer!.Count>B 6-en
%m4re!ora!>Fal!e7E$it Fun"tion
El!e7
For $>B 6o Printer!.CountC1
Li!t1.Add%tem Printer!($).,evi"eName
Ne$t $
%m4re!ora!>6rue
End Fun"tion
Si no hay impresoras instaladas se da la funcin el valor False y se sale; si
hay impresoras se agregan sus nombres en el cuadro de lista y se da a la funcin
el valor True.
Para utilizar una impresora presente en este "array de impresoras debe
declararse una variable de tipo Printer y luego crear el objeto Printer en base a la
impresora presente en el objeto Printers. Por ejemplo, supngase que en el
sistema se hallan instaladas las siguientes impresoras:
ndice Nombre
0 Epson LX-300 (predeterminada)
1 Epson 440
2 Canon 1000
67
La 8!resora. Elas G. Castillo
Si se utiliza el objeto Printer, se utilizar sobre la impresora predeterminada,
en este caso la Epson LX-300, si se quisiera utilizar sobre la Canon 1000, puede
procederse de la siguiente forma:
Private Canon1BBB A! Printer
Set Canon1BBB>Printer!(9)
Primero se declara la variable de tipo Printer (primer lnea) y luego se crea
el objeto con la impresora que tiene ndice 2 (segunda lnea).
Luego puede utilizarse el objeto Printer representado por la variable
Canon1000 con todas las propiedades y los mtodos vistos para el objeto Printer.
Este proceso de creacin de objetos se entender ms a fondo en el
captulo donde se estudiarn las clases y los objetos.
68
Los %ro"ectos. Elas G. Castillo
Los %ro"ectos.
oda aplicacin en Visual Basic, ya sea un ejecutable, una librera, un control
ActiveX o lo que fuere, se desarrolla dentro de un proyecto; es por ello que
siempre, sea cual sea el tipo, siempre se genera un fichero de extensin
*.vbp (Visual Basic Project) con la informacin global del proyecto. Este proyecto
tiene sus propiedades, la mayora de slo lectura, que se escrituran desde el men
PROYECTO, PROPEDADES DEL PROYECTO. En este fichero se almacena la informacin
sobre las referencias
hechas sobre libreras
(*.dll), controles
adicionales (*.ocx), etc.
T
Al ejecutar este
comando aparece una
pantalla con varias
lengetas donde se
configuran diversas
propiedades. En la
lengeta General se
establece el /ipo de
pro'ecto del que se trata
(Ejecutable, Librera, etc.);
el 5bjeto inicial es el
formulario con que se
iniciar la aplicacin o en
su defecto el procedimiento Main; el <ombre del pro'ecto es el nombre del
proyecto y el nombre del fichero compilado (por defecto). En un proyecto puede
crearse un sistema de ayuda y en <ombre del arc.ivo de a'uda se especifica el
nombre del fichero con extensin *.hlp; en un sistema de ayuda cada tema
contiene un identificador, lo cual permite disponer de una ayuda sensible al
contexto, el 7d de conte(to de la a'uda del pro'ecto permite indicar este
identificador; en la Descripcin del pro'ecto se brinda una pequea descripcin del
mismo.
En la lengeta Generar
se establece el nmero de
versin (Principal, Secundario y
Revisin). Luego se define el
/Btulo de la aplicacin y el
7cono que la representar
(extrado de uno de los
formularios, seleccionable). En
7n#ormacin de versin se
establecen los comentarios,
Derechos de autor, nombre de
la compaa, etc.
69
Los %ro"ectos. Elas G. Castillo
Todas estas son propiedades del proyecto que luego podrn ser
consultadas desde el cdigo mediante un objeto llamado )pp.
El objeto +pp.
Este objeto representa a la aplicacin y las propiedades de que dispone son
de solo lectura y son las siguientes:
Comments* devuelve una cadena de caracteres con los comentarios.
Compan'<ame* devuelve una cadena de caracteres con el nombre
de la compaa.
E=E<ame* dvuelve el nombre del archivo ejecutable para el proyecto
actual. Si se ejecuta en el entorno de desarrollo, devuelve el nombre
del proyecto.
FileDescription* devuelve una descripcin de archivo de la aplicacin
que se ejecuta.
!egalCop'rig.t* devuelve los derechos de autor de la aplicacin.
Major6 Minor6 %evision* devuelven el nmero Principal, Secundario y
de Revisin del nmero de versin.
Pat.* especifica la ruta de acceso del archivo de proyecto *.VBP al
ejecutar la aplicacin desde el entorno de desarrollo o la ruta del
archivo ejecutable al ejecutar la aplicacin como un archivo
ejecutable.
Prev7nstance* devuelve un valor de tipo Boolean que indica si se est
ejecutando una instancia previa de la aplicacin.
Product<ame* dvuelve el nombre de producto de la aplicacin que se
ejecuta.
/itle* devuelve o establece el ttulo de la aplicacin mostrado en la
Lista de tareas de Microsoft Windows.
70
Elas G. Castillo
El %orta!a!eles de 9indo:s.
as operaciones de cortar, copiar y pegar tan comunes en el entorno
Windows se realizan a travs de una herramienta de Windows denominada
Portapapeles (en ingls Clipboard). Visual Basic dispone de un objeto
llamado Clipboard el cual representa al portapapeles de Windows. Este objeto es
muy sencillo de utilizar y se utiliza tanto para colocar informacin en el
portapapeles como para recuperar informacin de l. Los mtodos y funciones del
objeto Clipboard son las siguientes:
L
Clear* elimina todos los datos contenidos en el portapapeles.
8etData:CFormatD;* devuelve un grfico desde el portapapeles (objeto
PictureDisp).
8etFormat:Format;* devuelve un tipo Boolean que indica si un
elemento del objeto Clipboard se ajusta a un formato determinado.
8et/e(t:CFormatD;* devuelve una cadena de texto desde el objeto
Clipboard.
$etData:Picture6CFormatD;* coloca una imagen con el formato grfico
especificado en el portapapeles.
$et/e(t:$tr6CFormatD;* Ccoloca una cadena de texto en el objeto
Clipboard con el formato especificado por dicho objeto.
Este objeto tiene una enumeracin llamada Clip,oardConstants que
contiene las constantes para el argumento Format de las distintas funciones.
Vase en el Examinador de Objetos los distintos miembros de esta enumeracin.
71
Otros objetos de Visual Basic. Elas G. Castillo
Otros objetos de Visual Basic.
n este captulo se vern algunos objetos de Visual Basic que pueden
resultar tiles en la creacin de aplicaciones de cualquier tipo. El primero es
el objeto $creen que tiene algunas propiedades interesantes. Algunas de
estas propiedades son las siguientes:
E
)ctiveControl* devuelve un objeto de tipo Control con el control que
tiene el foco.
)ctiveForm* devuelve un objeto de tipo Form con el formulario activo.
FontCount* devuelve la cantidad de fuentes que se pueden utilizar.
Fonts:7ndice;* devuelve una cadena de caracteres con el nombre de
la fuente representado por el ndice.
Mouse7con* establece el cono personalizado para el mouse.
MousePointer* devuelve o establece el tipo de puntero del mouse
mostrado al pasar por encima de un objeto.
Con respecto a las dos ltimas propiedades estn disponibles para cada
uno de los controles que se coloquen en el formulario. Con respecto a la propiedad
MousePointer, vase la enumeracin MousePointerConstants6 con los posibles
conos del mouse. Con respecto a las propiedades Fonts y FontCount, el siguiente
cdigo coloca en un cuadro combinado (Combo1) los nombres de todas las
fuentes disponibles; es el siguiente:
Private Sub Fuente!()
,im i A! %nteer
For i > 1 6o S"reen.FontCount
Combo1.Add%tem S"reen.Font!(i)
Ne$t i
End Sub
Otro objeto es el objeto PictureDisp el cual almacena imgenes extradas
de los ficheros de grficos (*.bmp, *.gif, etc.). Este objeto es el tipo que contiene
las propiedades Picture de los controles, la propiedad Mousecon, el mtodo
grfico PaintPicture, etc.; hay una funcin que carga en este tipo de objetos las
imgenes de los ficheros y es la funcin LoadPicture que se encuentra en un
mdulo estndar del mismo; su forma general es la siguiente:
IObjeto>StdFun"tion!.LoadPi"ture('FileName(& _
'widt-,e!ired(&'-ei-t,e!ired(&'.la!()
Donde VObjeto es el nombre del objeto PictureDisp donde se almacenar
la imagen; FileName es la ruta y nombre del fichero que contiene la imagen, si se
omite se borra el contenido del objeto PictureDisp, widthDesired es el largo de la
imagen y heightDesired es el ancho de la imagen, si se omiten se tomarn los
72
Otros objetos de Visual Basic. Elas G. Castillo
valores almacenados en el fichero; flags son una serie de constantes que se
almacenan en la enumeracin !oadPictureConstants y que definen el modo de
color de la imagen.
Un mtodo de este mismo mdulo estndar es el mtodo $avePicture que
realiza el proceso contrario, guarda en un fichero grfico un objeto PictureDisp; la
forma general es la siguiente:
SavePi"ture(Pi"ture A! %Pi"ture,i!4& .ilename A! _
Strin)
Donde Picture es el objeto PictureDisp y filename es una cadena de
caracteres con la ruta y el nombre del fichero donde se almacenar el grfico.
El objeto Control es un objeto genrico que representa cualquier control de
Visual Basic y es utilizado en varios procedimientos, por ejemplo, es el resultado
devuelto por la propiedad ActiveControl del objeto Screen.
El objeto Err.
Este objeto representa los errores que acontecen en la aplicacin, su
definicin y permite manipularlos. Por ejemplo, si en una aplicacin se produce
una divisin por cero, se generar
un error y aparecer en pantalla
un mensaje indicndolo (ver la
imagen). El objeto Err tiene
algunas propiedades dentro de las
cuales, la ms importante es la
propiedad <umber, que identifica
el nmero del error, en el caso de
la divisin por cero es el error 11;
$ource devuelve el nombre del
objeto que produjo el error; Description devuelve una cadena con la descripcion
del error, en la imagen es Divisin por cero.
Este objeto tiene dos mtodos: uno llamado Clear el cual borra todos los
valores del objeto Err, este mtodo no lleva argumentos y el mtodo %aise el cual
produce errores en tiempo de ejecucin. La forma general de este mtodo es la
siguiente:
Err.)ai!e(Number&'Sour"e(&',e!"ri4tion()
Donde Number es obligatorio y representa el nmero del error que se
producir; Source y Description son opcionales y significan lo ya indicado arriba.
La manipulacin de errores se efecta mediante las siguientes sentencias:
On Error )e!ume Ne$t
On Error Mo6o EtiUueta
73
Otros objetos de Visual Basic. Elas G. Castillo
Ambas sentencias permiten la manipulacin de errores y se escriben al
principio del procedimiento o funcin a tratar; la primera de las sentencias contina
la ejecucin a partir de la sentencia que produjo el error; la segunda salta a la
etiqueta especificada, tal como lo hace la sentencia GoTo ya vista. Un ejemplo
servir para demostrarlo; en un formulario coloque dos cajas de texto y un botn
de comando (Text1, Text2 y cmdErr, respectivamente), luego copie en el
formulario las siguientes sentencias:
Private Sub "mdErr_Cli"8()
On Error Mo6o de.error
"mdErr.Ca4tion > Ial(6e$t1.6e$t) 5 Ial(6e$t9.6e$t)7
E$it Sub
de.error7
/!#o$ ]Error ] J Err.Number J vbCrL. J ]Sour"e ] _
J Err.Sour"e J vbCrL. J ],e!"ri4tion ] J _
Err.,e!"ri4tion
End Sub
Si se llegara a producir algn error en el procedimiento se salta a las
instrucciones a continuacin de la etiqueta deferror que muestran los datos del
error producido en una caja de mensaje.
Como complemento a este objeto, existe una funcin llamada Error$ que
devuelve una cadena de caracteres con la descripcin del nmero de error pasado
por argumento, su forma general es:
Strin>Error`('ErrorNumber()
Donde String es una variable, propiedad, etc. que almacene cadenas de
caracteres.
74
Clases " Objetos. Elas G. Castillo
Clases " Objetos.
a se ha visto en los captulos anteriores la utilizacin de ciertos objetos,
desde los controles hasta el objeto Printer; sin embargo Visual Basic no se
limita a la mera utilizacin de objetos ya creados sino que permite al
programador crear sus propios objetos con propiedades, mtodos, funciones y
eventos. Es aqu donde entran en juego los mdulos de clase.
Y
Antes de continuar se debe definir lo que es un objeto y lo que es una clase.
Una clase es un modelo general que define las propiedades, mtodos, funciones y
eventos de un objeto pero no es el objeto en s. Los objetos son instancias de una
clase, o sea, son entidades que se basan en determinada clase. Un ejemplo de
esto es un cuadro combinado, una caja de texto, etc. donde puede haber varias
cajas de texto (objetos) de una misma clase (TextBox); varios cuadros combinados
de una misma clase.
Entonces, lo primero que se debe hacer es crear la clase y luego pueden
crearse los objetos de esta clase que se necesiten. En la clase se definirn las
propiedades, mtodos, funciones y eventos que tendrn los objetos; y stos se
crearn en los mdulos de clase.
Antes de comenzar a explicar la construccin de los distintos elementos de
una clase, se definir el alcance de stos mediante las palabras Public y Private.
Las propiedades, mtodos, funciones o eventos definidos como Private slo sern
visibles dentro de la clase; los definidos como Public son visibles desde fuera de la
clase o sea, son los que se acceden con el nombre del objeto seguido del punto.
Propiedades.
Las propiedades dan forma al objeto ya que definen sus caractersticas. Las
propiedades establecen o devuelven un determinado tipo de dato, que puede ser
un dato simple (un nmero, una fecha, un valor Boolean,.), un valor de una
enumeracin o un objeto.
Pueden ser de lectura, escritura o ambas; por lo general son de solo lectura
o de lectura/escritura. Una propiedad de lectura se define de la siguiente forma
general:
Publi"5Private Pro4ert+ Met nPro4iedad()A! 6dato
Senten"ia!7'E$it Pro4ert+(
nPro4iedad>valor
End Pro4ert+
Donde nPropiedad es el nombre de la propiedad, Tdato es el tipo de dato
que devolver. Dentro de las sentencias, se le d a la propiedad un valor tal como
se hace con las funciones. La instruccin Exit Property es opcional y permite
escapar de la propiedad antes de llegar al final.
Una propiedad de escritura se define de la forma siguiente:
75
Clases " Objetos. Elas G. Castillo
Publi"5Private Pro4ert+ Let5Set nPro4iedad(#+Ial _
vNewIalue A! 6dato)
Senten"ia!7'E$it Pro4ert+(
End Pro4ert+
Donde !et y $et son palabras clave que definirn si se devuelve un valor o
un objeto, respectivamente; v<e20alue es el nuevo valor que se le da a la
propiedad del tipo especificado en Tdato; Exit Property tiene el mismo significado
que para las propiedades de lectura.
Para crear una propiedad de lectura/escritura se escriben las dos
sentencias, tomando la precaucin de que tengan el mismo nombre y el mismo
tipo de dato.
En general, las propiedades almacenan el valor en una variable privada
declarada en la parte de declaraciones del mdulo de clase, esto hace que la
variable est disponible dentro de toda la clase. Una variable declarada como
pblica en las declaraciones del mdulo de clase acta como una propiedad.
Mtodos y Funciones.
Los mtodos son los tpicos procedimientos Sub. Estos no difieren de los ya
vistos; pueden o no llevar argumentos, se puede escapar con Exit Sub, etc.; lo
mismo vale para las funciones ya que tienen la misma forma que las ya vistas;
pueden o no llevar argumentos, pueden devolver arrays, se puede escapar con
Exit Function, etc.
Las clases poseen dos procedimientos de eventos importantes: 7nitiali+e y
/erminate. El primero tiene lugar cuando se crea una instancia de la clase y la
segunda cuando se destruye.
Eventos.
Los eventos se declaran en la parte de declaraciones del mdulo de clase y
se producen adrede en las propiedades, mtodos o funciones. Un evento se
declara de la siguiente forma general:
Publi"5Private Event nEvento('arumento!()
Donde nEvento es el nombre del evento y argumentos es opcional ya que
un evento puede o no llevar argumentos. Luego se producen en una propiedad,
mtodo o funcin mediante la siguiente sentencia:
)ai!eEvent nEvento('valorArumento!()
Donde nEvento es el nombre del evento a producir ya declarado y
valorArgumentos es el valor que tendr cada uno al llamarse al evento.
+sistentes.
Visual Basic tiene algunas herramientas y asistentes para la creacin de
clases y de sus componentes (propiedades, mtodos, funciones y eventos). El
76
Clases " Objetos. Elas G. Castillo
primero de ellos se encuentra en el
men HERRAMENTAS,AGREGAR
PROCEDMENTO y despliega una
pantalla que permite seleccionar si
se desea crear un procedimiento
(mtodo), una propiedad, una
funcin o un evento; definir su
alcance y su nombre. Esto genera
un esqueleto de funcin, propiedad,
mtodo o evento que deber
adecuar a sus necesidades
(agregar argumentos, cambiar el
tipo de datos que por defecto es
Variant para propiedades y funciones).
Luego estas propiedades, mtodos, funciones o eventos pueden
consultarse desde el examinador de objetos. Como se ha visto al utilizarlo, el
examinador de objetos presenta no solo la estructura de uno de stos sino tambin
una definicin. Esta definicin se establece en una pantalla a la que se accede
desde el men HERRAMENTAS, ATRBUTOS DEL PROCEDMENTO.Donde se selecciona el
miembro a describir
en el cuadro
combinado superior y
en la caja de texto
Descripcin se
escribe la
descripcin. En el
botn Avanzados se
configuran otros
atributos al miembro seleccionado.
Tambin hay otro asistente para crear clases que se habilita desde los
complementos,
llamado 3tilidad
8enerador de
clases de 0,6 y
se activa este, el
cual estar
disponible desde
el men
COMPLEMENTOS.
En esta
pantalla se
definen las
propiedades,
mtodos,
eventos y tipos
enumerados de
la nueva clase
77
Clases " Objetos. Elas G. Castillo
que se est creando, e incluso puede definirse sus atributos, o sea, las ayudas que
se visualizarn en el examinador de objetos.
Tambin desde aqu se pueden crear colecciones de objetos. Luego, desde
el men ARCHVO, ACTUALZAR PROYECTO o desde el teclado con Ctrol+S se actualizan
las clases utilizadas en el proyecto. Este asistente es muy til e intuitivo en su
forma de utilizarse; luego solo habr que escribir las sentencias correspondientes
a cada propiedad o mtodo creado.
Las colecciones.
Las colecciones son objetos que almacenan otros objetos. A estos objetos
se accede con un nmero de ndice. Este objeto tiene dos funciones y dos
mtodos. Las dos funciones son las siguientes:
7tem:7nde(;* devuelve un miembro determinado de un objeto
Collection segn su posicin o su clave. Miembro predeterminado.
Count* devuelve la cantidad de objetos almacenados en la coleccin.
Los dos mtodos son los siguientes:
)dd:7tem6C9e'D6C)#terD6C,e#oreD;* agrega un miembro a un objeto
Collection. tem es el objeto a agregar y es obligatorio.
%emove:7nde(;* quita un miembro de un objeto collection.
En el siguiente subcaptulo se explica cmo crear una instancia de una
clase: un objeto.
!reaci$n de objetos.
La creacin de los objetos consta de dos pasos:
1. Declaracin de una variable del tipo del objeto a crear.
2. Creacin del objeto.
En el paso 1 se declara una variable que apuntar al objeto, pero el objeto
no est creado. Si intentara utilizarse el objeto en este momento se producira un
error.
En el paso 2 se crear el objeto y a partir de all podr utilizarse como
cualquier otro objeto. La forma general de estas dos sentencias es la siguiente:
Private5Publi"5,im 'Sit-Event!( nIariable A! nCla!e
Set nIariable>New nCla!e
Donde nVariable es la variable o nombre de esa instancia de la clase y
nClase es la clase a la que pertenecer el objeto. La instruccin WithEvents es
opcional y cuando se lo incluye permite que los objetos soporten eventos, de lo
contrario no los tendrn. Con relacin al mbito de uso del objeto cumple con las
mismas reglas que con las variables.
Cuando un objeto haya concludo su funcin puede destruirse para liberar
memoria con la siguiente sentencia:
78
Clases " Objetos. Elas G. Castillo
Set nIariable>Not-in
Donde nVariable es el nombre que es el nombre dado a esa instancia del
objeto que quiere destruirse.
Como se ha visto, la palabra clave Set se utiliza para crear o destruir
objetos. Tambin se ha utilizado la palabra clave New para indicar que se crear
un nuevo objeto de esa clase, sin embargo, pueden crearse objetos a partir de
otros almacenados en una coleccin.
Ejemplo.
A continuacin un ejemplo, se crear una clase en la que cada objeto
represente un naipe de un mazo de naipes. La clase se llamar Naipe; para ello
comience un nuevo proyecto estndar y agregue un mdulo de clase; en el cuadro
Propiedades de al nombre de la clase (por defecto Class1) el nombre Naipe.
Escriba en l el siguiente cdigo:
O4tion E$4li"it
Enum PaloEnum
#a!to>B
Co4a>1
E!4ada>9
Oro>H
End Enum
,im %denti. A! #+te
Private Sub Cla!!_%nitialiNe()
)andomiNe 6imer ;ini"ia el enerador de nRm. Aleat.
End Sub
Publi" Pro4ert+ Met %,Nai4e()A! #+te
%,Nai4e>%denti.
End Pro4ert+
Publi" Pro4ert+ Let %,Nai4e(#+Ial n%dent A! #+te)
%. n%dentT1 Or n%dentPA8 6-en
Err.)ai!e 1LLL&=Nai4e=&=%denti.i"ador invGlido=
E$it Pro4ert+
End %.
%denti.>n%dent
End Pro4ert+
Publi" Fun"tion NRmero()A! #+te
,im Nm A! #+te
Nm>%denti. /od 19
%. %denti.P11 6-en
79
Clases " Objetos. Elas G. Castillo
Nm>NmQ1
End %.
NRmero>Nm
End Fun"tion
Publi" Fun"tion Palo()A! PaloEnum
Sele"t Ca!e %denti.
Ca!e 1 6o 19
Palo>#a!to
Ca!e 1H 6o 9A
Palo>Co4a
Ca!e 9K 6o H?
Palo>E!4ada
Ca!e H: 6o A8
Palo>Oro
End Sele"t
End Fun"tion
Publi" Sub Nai4eAlANar()
,im Nm A! #+te
Nm>%nt()nd()D1BB)
%. NmPA8 Or NmT1 6-en
Nai4eAlANar
El!e7%denti.>Nm
End %.
End Sub
Ahora puede probarse la creaci de este tipo de objetos. Un objeto de este
tipo podr crearse con la siguiente sentencia:
Private Carta A! Nai4e
Set Carta>New Nai4e
Supngase ahora que se ha creado ya este objeto y que se desean guardar
en un objeto Collection; para ello se declarar una coleccin de la siguiente forma:
Private Cole""i@n A! Colle"tion
Set Cole""i@n>New Colle"tion
Ahora se guardar en la coleccin el objeto Carta, para ello se proceder de
la siguiente forma; en la segunda sentencia se destuye el objeto Carta:
Cole""i@n.Add Carta
Set Carta>Not-in
En esta sentencia se crear el objeto Carta a partir de un objeto existente
en la coleccin; en este caso el objeto de ndice 1.
80
Clases " Objetos. Elas G. Castillo
Set Carta>Cole""i@n.%tem(1)
A partir de aqu y en los siguientes captulos, los objetos sern muy
utilizados; de ah el trmino de programacin basada en objetos. Ya se han visto
creaciones de objetos Printer, PictureDisp y seguirn vindose ms.
81
Crear controles ediante c0di;o. Elas G. Castillo
Crear controles ediante c0di;o.
os controles permiten interactuar con el usuario ya para introducir datos
como para visualizarlos. Hasta ahora los controles fueron introducidos en
tiempo de diseo, arrastrndolos desde la caja de herramientas. Sin
embargo pueden crearse tambin desde el cdigo.
L
Este proceso puede efectuarse de dos formas. La primera es con un array
de controles y la segunda es creando objetos del tipo del control que se quiera
crear.
!reaci$n mediante un array de controles.
Esta forma funciona ya desde la versin 5.0 de Visual Basic y consiste en
crear un control miembro de un array, con ndice 0 y luego, mediante cdigo,
aadir elementos al array. Un ejemplo:
Cree un nuevo proyecto y coloque en el formulario un control cualquiera, en
este ejemplo ser un control Shape llamado shpArray, d el valor 0 a su propiedad
ndex y el valor 2 a su propiedad BorderWidth; coloque tambin un botn de
comando de nombre cmdAdd y una barra de desplazamiento de nombre hsbArray,
cuyas propiedades Min y Max sean 0. Luego, escriba en el formulario el siguiente
cdigo:
O4tion E$4li"it
;"ontrola el Ondi"e del "ontrol
,im Sele"t%tem A! %nteer
Private Sub "mdAdd_Cli"8()
;4one a 1 el borde del "ontrol anterior
!-4Arra+(Sele"t%tem).#orderSidt- > 1
;!e "al"ula el Ondi"e del !iuiente elemento del
;arra+ de "ontrole!
Sele"t%tem > !-4Arra+.3#ound Q 1
;!e "ara el nuevo "ontrol
Load !-4Arra+(Sele"t%tem)
;"on el bloUue Sit- !e "on.iuran !u! 4ro4iedade!
Sit- !-4Arra+(Sele"t%tem)
.Le.t>CSn(%n4ut#o$(]#orde iNUuierdo]&=,i!ta=))
.6o4>CSn(%n4ut#o$(]#orde !u4erior]&=,i!ta=))
.Ii!ible > 6rue7.#orderSidt->9
End Sit-
;a"tualiNa lo! valore! de la barra de!4laNamiento
;4ara el nuevo elmento
-!bArra+./a$ > Sele"t%tem
-!bArra+.Ialue > -!bArra+./a$
End Sub
82
Crear controles ediante c0di;o. Elas G. Castillo
Private Sub Form_Load()
;!e le da tOtulo al bot@n de "omando
"mdAdd.Ca4tion > ]JArear]
End Sub
Private Sub -!bArra+_C-ane()
;!e 4one a 1 la 4ro4iedad del "ontrol anterior
!-4Arra+(Sele"t%tem).#orderSidt- > 1
;!e a"tualiNa la variable Sele"t%tem "on la
;4ro4iedad Ialue de la barra
Sele"t%tem > -!bArra+.Ialue
;!e da el valor 9 a la 4ro4iedad #orderSidt-
!-4Arra+(Sele"t%tem).#orderSidt- > 9
End Sub
!reaci$n mediante creaci$n de objetos.
Esta forma est disponible a partir de la versin 6.0 de Visual Basic. Antes
de proceder a la explicacin es necesario conocer que cada formulario tiene una
coleccin llamada Controls, con todos los controles que contiene. Por ejemplo, si
en un formulario se tiene un control TextBox y dos controles CommandButton, la
propiedad Count del objeto Controls devolver 3.
Por ejemplo, cree un nuevo proyecto estndar y coloque en el formulario un
cuadro de lista (lstCtrl), una etiqueta (lblCount) y dos botones de comando
(cmdAdd y cmdCount). Escriba el siguiente cdigo:
O4tion E$4li"it
,im NewCtrol A! Combo#o$
Private Sub "mdAdd_Cli"8()
%. "mdAdd.Ca4tion Li8e ]Arear] 6-en
Call Area
El!e7 Call ,e!tru+e
End %.
End Sub
Private Sub "mdCount_Cli"8()
,im $ A! #+te
l!tCtrl.Clear
For $ > B 6o Control!.Count C 1
l!tCtrl.Add%tem Control!.%tem($).Name
Ne$t $
lblCount.Ca4tion > Control!.Count
End Sub
Private Sub Form_Load()
"mdAdd.Ca4tion > ]Arear]
83
Crear controles ediante c0di;o. Elas G. Castillo
"mdCount.Ca4tion > ]JContar]
End Sub
Private Sub Area()
,im i A! #+te
"mdAdd.Ca4tion > ],e!truir]
Set NewCtrol > Control!.Add(]I#.Combo#o$]& _
]NewCtrol])
Sit- NewCtrol
./ove /e.S"aleSidt- 5 9& /e.S"aleXei-t 5 9
For i > B 6o l!tCtrl.Li!tCount C 1
NewCtrol.Add%tem l!tCtrl.Li!t(i)
Ne$t i
.Ii!ible > 6rue
End Sit-
End Sub
Private Sub ,e!tru+e()
NewCtrol.Ii!ible > Fal!e
Control!.)emove NewCtrol
Set NewCtrol > Not-in
End Sub
La variable NewCtrol apunta y luego crea el objeto ComboBox que
representar. Al haber sido declarada sin la palabra clave WithEvents el nuevo
control no reconocer eventos; si se hubiese puesto esta palabra clave, aparecer
en la ventana de cdigo, junto con los controles existentes, este nuevo control.
84
Arc7i$os de <ecursos. Elas G. Castillo
Arc7i$os de <ecursos.
uando se utilizan recursos en las aplicaciones o libreras como conos,
cursores, etc. stos pueden inclurse dentro del mismo fichero en lugar de
hacer referencia a ficheros externos a la aplicacin. Esto tiene una ventaja
y una desventaja; como ventajas, los recursos estn dentro del mismo fichero
ejecutable y ello implica que no se tendr que preocupar en incluir los ficheros
conjuntamente con el fichero; como desventaja, aumenta el tamao del fichero.
Visual Basic tiene un complemento que permite la creacin de ficheros de recursos
(*.res) que contienen todos los recursos. Luego, al compilarse la aplicacin, se
compilar el fichero relacionado. Dentro del cuadro Examinador de Proyecto,
aparece en una carpeta llamada Documentos relacionados. En cada proyecto slo
puede haber un fichero de recursos.
C
Para comenzar la creacin de un fichero de recursos, active este
complemento (si no est activo) desde el men Complementos, Administrador de
complementos. y active la opcin VB 6 Resource Editor. Hecho esto en el men
HERRAMENTAS se encontrar el comando Editor de recursos. Activelo y aparecer en
pantalla el editor de recursos. Los botones presentes en la barra permiten guardar,
abrir y crear ficheros de
recursos; luego los
botones siguientes
(remarcados con rojo)
permiten agregar
Cadenas de texto,
cursores, iconos, mapas
de bits y otros recursos
personalizados por el
programador.
Cada elemento
contiene un 7denti#icador
numrico que ser
utilizado en el cdigo
para recuperar el
elemento en cuestin y
que debe recordarse
para el momento de escribir el cdigo. La forma de aadir recursos en este fichero
es fcil e intuitiva por lo tanto se remitir a explicar cmo acceder a ellos mediante
el cdigo.
Extraer recursos.
Los recursos contenidos en el fichero se extraen mediante ciertas funciones
de Visual Basic, segn el recurso de que se trate. Para extraer los recursos
contenidos en las tablas de cadenas se utiliza la funcin:
Load)e!Strin(id A! Lon)
85
Arc7i$os de <ecursos. Elas G. Castillo
Donde id es un argumento numrico que es el identificador de la cadena
dentro del fichero de recursos. Esta funcin devuelve una cadena de caracteres.
Para los recursos de tipo grfico existe otra funcin que devuelve un objeto
de tipo PictureDisp con la imagen recuperada. La forma general de esta funcin
es la siguiente:
Load)e!Pi"ture(id& re!t+4e A! %nteer)
Donde id es el identificador del recurso que se intenta recuperar y restype
es un dato numrico con el tipo de recurso grfico que se extraer. Los valores
que puede tener el argumento restype se encuentran en una enumeracin llamada
!oad%esConstants y sus miembros son los siguientes:
vb%es,itmapF0* el recurso es un mapa de bits.
vb%es7conF>* el recurso es un cono.
vb%esCursorF?* el recurso es un cursor.
Por ejemplo, si quisiera dibujarse en un formulario el mapa de bits que tiene
por identificador 102, puede utilizarse una sentencia como la siguiente (por
ejemplo):
/e.PaintPi"ture Load)e!Pi"ture(1B9&vb)e!#itma4)
Para colocar en una caja de texto el contenido de una fila en una tabla de
cadenas, identificada con el nmero 20, puede utilizarse la siguiente sentencia:
6e$t1.6e$t>Load)e!Strin(9B)
86
'orularios 1#8. Elas G. Castillo
'orularios 1#8.
D son las siglas de Multiple Document nterface (nterfaz de mltiples
documentos). Son aplicaciones que permiten trabajar con varios
documentos a la vez; como ejemplo de ellas: Microsoft Word, Microsoft
Excel, CorelDraw, etc. Todas esas aplicaciones permiten trabajar con varios
documentos a la vez, e incluso el mismo Visual Basic utiliza esta interfaz, ya que
puede haber varias ventanas a la vez abiertas por la aplicacin. Lo contrario a este
tipo de aplicaciones son las SD (Single Document nterface o interfaz de
documento nico) y como ejemplo se tiene el block de notas, Paint, etc.
M
Las aplicaciones MD constan de un formulario principal que sirve de
contenedor a los formularios hijos, que sern las ventanas donde se encuentran
los documentos. La ventaja de este tipo de aplicaciones es que las ventanas hijas
comparten la misma barra de mens, la misma barra de herramientas, la cual se
encuentra en el contenedor.
Para crear una nueva aplicacin MD, ejecute un nuevo proyecto estndar y
luego, vaya al men PROYECTO y ejecute el comando )gregar #ormulario MD7. Ver
que sobre esta pantalla no pueden colocarse controles de la misma forma que en
los formularios simples; los nicos controles (estndar) que pueden colocarse en el
formulario MD son las cajas de dibujo que sirven como contenedores de otros
controles, a modo de barras de herramientas, el control Timer y el control Data.
Tambin puede agregrsele una barra de men.
Ahora, en el men PROYECTO, PROPEDADES DEL PROYECTO, establezca como
objeto inicial el formulario MD que acaba de ingresar. Si ejecuta el proyecto lo
nico que aparecer ser una pantalla sin ningn tipo de control o comando,
excepto en la barra de ttulo los botones de maximizar, minimizar y cerrar y el
men de control. Ahora seleccione un formulario cualquiera que est presente en
la aplicacin (excepto el MD) y ver que tiene una propiedad llamada MD7C.ild;
esta propiedad Booleana establece si ese formulario ser hijo del formulario MD
(puesta a True) o no (puesta a False, por defecto).
Ahora aada al formulario una caja de dibujo para que funcione a modo de
barra de herramientas, la que por defecto aparece en la parte superior pero que
puede ajustar a cualquier borde con la propiedad (de la caja de dibujo) )lign. En el
interior de la caja de dibujo coloque un botn de comando y llame al formulario
secundario (Form1 por defecto) con el mtodo Show. Observe que este formulario
se abre, pero dentro del formulario MD. Puede colocar tantos formularios como
desee y, estableciendo su propiedad MDChild a True se abrirn en forma modal.
Depende el uso que quiera darle el usuario a la aplicacin MD el diseo de
su barra de men, de herramientas, el diseo de los formularios hijos (Child) y
dems caractersticas.
Siempre tome en cuenta que la mxima utilidad de esta interfaz de trabajo
es que se pueden abrir varios documentos con una sola instancia de la aplicacin
y que comparten los mismos comandos a travs de la ventana principal: el
formulario MD.
87
'orularios 1#8. Elas G. Castillo
Ahora, pueden haber varios documentos abiertos a la vez, esto implica que
tendra que haber varios formularios donde en cada uno se trabaje con un
documento; sin embargo es imposible conocer cuntos documentos van a haber
cargados y por consiguiente, cuntos formularios debern haber. Para solucionar
este problema se procede a crear un formulario hijo, disear sus controles, escribir
su cdigo correspondiente; luego se crean formularios hijos en un procedimiento
determinado por el usuario, por ejemplo desde el un men o un botn de
comando. Para acceder a los formularios existentes puede utilizarse la propiedad
ActiveForm del formulario MD, el cual devuelve una referencia al formulario activo.
Por ejemplo, cree un nuevo proyecto estndar y aada un formulario MD al
que establecer como el objeto inicial del proyecto. Al otro formulario (Form1) d el
valor True a su propiedad MDChild. Aada a ese formulario los controles que
necesite, en este ejemplo, agregue una caja de texto y escriba en el evento Resize
lo siguiente:
Private Sub Form_)e!iNe()
6e$t1./ove B&B&/e.S"aleSidt-&/e.S"aleXei-t
End Sub
Luego aada al formulario MD una barra de mens con el men Archivo
(mnuFile) y un submen dentro de ste de Caption Nuevo (mnuFileNew). Escriba
en el formulario principal el siguiente cdigo:
Private Sub mnuFileNew_Cli"8()
,im Formul A! Form1
Set Formul>New Form17Formul.S-ow
Set Formul>Not-in
End Sub
Al hacer clic en el men Nuevo aparecer un nuevo formulario modal. En el
evento Click del mencionado submen, podra haberse aadido una variable Static
de tipo nteger (llamada Contador) y aadir la siguiente sentencia a continuacin
de Formul.Show:
Formul.Ca4tion>=,o"umento <J Contador
Contador>1QContador
Esto permitir que los distintos formularios tengan un ttulo que los
identifique y saber cuntas ventanas se han cargado.
Ahora, al haber varios varios formularios en el formulario principal, se
identificar al formulario activo con una propiedad del formulario MD llamada
)ctiveForm, el cual devuelve una referencia al formulario activo. Por ejemplo,
aada un men Formato (mnuForm) y tres submens formando un array de
nombre mnuFormF, ndices 0, 1 y 2 y Caption Negrita, Cursiva y Subrayado,
respectivamente. Ahora escriba el siguiente cdigo:
Private Sub mnuForm#_Cli"8(%nde$ A! %nteer)
88
'orularios 1#8. Elas G. Castillo
,im 6$ A! 6e$t#o$
Set 6$>/e.A"tiveForm.A"tiveControl
%. %nde$>B 6-en
6$.Font.#old>Not 6$.Font.#old
El!e%. %nde$>1 6-en
6$.Font.%tali">Not 6$.Font.%tali"
El!e7 6$.Font.3nderline>Not 6$.Font.3nderline
End %.
Set 6$>Not-in
End Sub
Puede proceder de similar forma para los comandos que quiera ejecutar
sobre el documento activo; para operaciones como guardar, abrir, etc.
89
Bases de #atos. Elas G. Castillo
Bases de #atos.
as bases de datos son ampliamente utilizadas por las aplicaciones de gestin
de datos. Una base de datos es un conjunto ordenado de registros cuyos
datos estn relacionados. Se encuentran bases de datos en los bancos,
empresas de todo tipo, escuelas y muchas ms. incluso nosotros disponemos de
una agenda con los nombres, las direcciones, los telfonos y dems datos que
pudiese almacenarse con respecto a una persona.
L
Hay en el mercado varias aplicaciones que utilizan y gestionan bases de
datos, quiz uno de los ms populares sea Microsoft Access. Sin embargo este
tipo de bases de datos, si bien permiten realizar muchas tareas de administracin
de base de datos, es muy abierto y no tiene especializacin, por lo que a menudo
se elaboran programas que utilicen bases de datos para un fin especfico.
Microsoft Access utiliza un motor de base de datos llamado Jet y se pueden
crear en Visual Basic aplicaciones que utilicen este mismo motor para operar
sobre bases de datos.
Antes de comenzar a explicar cmo se accede desde Visual Basic a las
bases de datos, se explicar cmo estn constituidas; en el caso de las bases de
Access (*.mdb). Ya se mencion que una base de datos es un conjunto ordenado
de registros cuyos datos estn relacionados. Estos conjuntos de registros se
encuentran dentro de unos objetos llamados /ablas. Una base de datos puede
contener una o ms tablas.
Por ejemplo, supngase una base de datos que contiene informacin sobre
una papelera (Negocio.mdb); dentro contiene algunas tablas donde se almacenan
los artculos y operaciones de compra-venta que ocurre en el mismo: la tabla de
nombre Artculos contiene la informacin sobre los artculos que se comercian; una
tabla llamada Ventas con las distintas ventas efectuadas; otra llamada Compras
con las compras que se realizan y otra de nombre Caja con las variaciones en los
saldos de caja en virtud de las operaciones realizadas. Cada tabla est constituda
por una serie de %egistros y Campos. En la tabla siguiente se muestra la
estructura de la tabla Artculos:
C0di;o Nobre %recio =nidades
15422 Disquetes Storax 3 $ 115.00 38
15423 Disquetes Verbatim 3 $ 120.00 26
15424 Disquetes mation 3 $ 98.00 50
15500 CD TDK 650 Mb $ 6.50 60
15501 CD TDK 700 Mb $ 7.00 55
15502 Block A4 CopyMax x 500 $ 103.00 32
Cada registro (fila) contiene todos los datos acerca de un mismo elemento
(en este caso un artculo) y cada columna un tipo de informacin sobre cada
registro. En este caso, hay 6 registros, 6 artculos en los que se brinda su cdigo,
su nombre, su precio y las unidades en stock que hay (de una forma similar a sta
se ven en Access).
90
Bases de #atos. Elas G. Castillo
Tambin se puede acceder a otras bases de datos como dBase o Paradox,
e incluso a libros de Microsoft Excel, pero para ello se necesitar de un SAM. En
el caso de las bases de datos dBase y Paradox, la tabla es el fichero que contiene
los datos (*.dbf y *.db respectivamente) y la base de datos es el directorio en el
que se encuentran.
Ahora, debe haber un modo para que Visual Basic pueda trabajar con
Microsoft Jet: el motor de base de datos de Access; esto se realiza mediante una
librera de objetos llamada Data )ccess 5bject o en forma abreviada, D)5.
(ata +ccess Object.
Esta es una librera de objetos de acceso a datos, utilizada por ejemplo, por
el control Data. Si se quiere utilizar esta librera para acceder a bases de datos,
debe ir al men PROYECTO, REFERENCAS; en la pantalla que aparece haga una
referencia a una de las
versiones de Dao (el
control Data hace
referencia a la 2.5/3.5
compatibily library).
Al efectuar esta
referencia y hacer clic
en aceptar podr
accederse a una nueva
cantidad de objetos
que permiten el acceso
a las bases de datos.
Si se desea
conocerlos, basta con
abrir el examinador de
objetos y seleccionar
en el cuadro
combinado superior
izquierdo la librera
DAO. Ahora se explicarn algunos de los objetos de DAO.
(atabase.
Este objeto representa la base de datos: el fichero *.mdb en el caso de
Access y el directorio en el que se encuentran los ficheros. Este objeto permite
acceder a las propiedades de la base de datos y a las colecciones de objetos que
tiene como Tablas, Recordsets y Consultas.
Los objetos Database se crean mediante una funcin llamada
5penDatabase6 la cual devuelve un objeto Database; cuya forma general es la
siguiente:
O4en,ataba!e(Nombre&'O4"ione!(&'Sle"tura(&'Cone$()
91
Bases de #atos. Elas G. Castillo
Donde Nombre es una cadena de caracteres con la ruta y nombre de la
base de datos que se abrir: Opciones es un tipo Variant que indica si se abrir de
modo compartido (False, Predeterminado) o en modo exclusivo (True) de forma
que otros usuarios no puedan abrir la base de datos; Slectura es un tipo Variant
que especifica si se abrir como de solo lectura (True) o como lectura/escritura
(False, Predeterminado); Conex es una cadena de caracteres con informacin
variada sobre la conexin, incluyendo la contrasea.
Tambin puede crear una base de datos con la funcin CreateDatabase,
cuya forma general es la siguiente:
Create,ataba!e(Nombre&E!"enario&'O4"ione!()
Donde Nombre es una cadena de caracteres con la ruta y nombre de la
nueva base de datos; Escenario es una constante que especifica la ordenacin,
utilice por ejemplo la constante dbLangSpanish, tambin puede especificar una
contrasea si se utiliza la siguiente expresin en el argumento escenario:
dbLanS4ani!- J<Z4wd>NuevaContra!e^a=
Si se omite la constante se utiliza el escenario predeterminado; Opciones es
un argumento opcional y permite especificar la versin del formato de base de
datos, si se omite se utilizar el valor predeterminado dbVersion30.
Este objeto se crea como ya se vi en el captulo Clases y Objetos. Luego
se dispone de una serie de propiedades; algunas de ellas son:
Connect* proporciona informacin acerca de la conexin.
<ame* es una cadena de caracteres con el nombre de la base de
datos.
0ersion* devuelve la versin de Microsoft Jet que cre la base de
datos *.mdb
Este objeto dispone de colecciones de objetos que representan tablas,
recordsets, etc.:
Auer'De#s* esta coleccin contiene todos los objetos QueryDef
(consultas) existentes en una base de datos.
%ecordsets* esta coleccin contiene todos los objetos Recordset
abiertos en la base de datos.
/ableDe#s* esta coleccin contiene todos los objetos TableDef
(tablas) existentes en la base de datos.
Tambin tiene funciones para crear objetos y mtodos:
Close* cierra la base de datos.
<e2Pass2ord:anterior6actual;* cambia la contrasea anterior por la
actual, si desea borrar la contrasea d al argumento actual cadena
vaca(").
La funcin 5pen%ecordset abre un nuevo recordset y devuelve una
referencia a l: devuelve un objeto Recordset. La forma general de esta funcin es
la siguiente:
92
Bases de #atos. Elas G. Castillo
,#.O4en)e"ord!et(Orien&'6i4o(&'O4"ione!(&'#loU()
Donde DB es una base de datos abierta; Origen es una cadena de
caracteres el nombre de una tabla o consulta o una instruccin SQL; Tipo define el
tipo de apertura del recordset (dbOpenTable, dbOpenDynamic, dbOpenDynaset
por defecto , dbOpenSnapshot y dbOpenForwardOnly); el argumento Opciones
consta de una serie de constantes que especifican el acceso al Recordset, por
ejemplo, la constante dbSeeChanges genera un error si un usuario est
cambiando los datos que se estn modificando; el argumento Bloq tambin
consiste en una serie de constantes, por ejemplo, la constante dbReadOnly
previene que los usuarios hagan cambios en el recordset.
Otra funcin es la funcin es la funcin Create/ableDe# la que crea un
nuevo objeto TableDef y hace una referencia a l; su forma general es la siguiente:
,#.Create6able,e.(Nombre&Atributo!&Orien&Cone"tar)
Donde DB es una base de datos abierta; Nombre es una cadena de
caracteres con el nombre del campo; Atributos es una constante o conjunto de
constantes que indican caractersticas del objeto TableDef; Origen es una cadena
de caracteres que contiene el nombre de una tabla de una base de datos externa
que es el origen de los datos; Conectar es una cadena de caracteres que contiene
informacin acerca del origen de una base de datos abierta, una base de datos
utilizada en una consulta de paso a travs o en una tabla adjunta.
5ecordset.
Este objeto representa un conjunto de registros contenidos en una tabla o
consulta. Mediante este objeto se agregan, consultan, eliminan y editan los
registros y por lo tanto es uno de los ms utilizados. Puede crearse con los objetos
Database, Connection, QueryDef, Recordset y TableDef.
Los Recordset tienen las siguientes propiedades:
)bsolutePosition* la propiedad AbsolutePosition le permite situar el
puntero del registro activo en un registro especfico basado en su
posicin ordinal en un objeto Recordset de tipo Dynaset o Snapshot.
Tambin puede determinar el nmero del registro activo examinando
el valor de la propiedad AbsolutePosition. El primer registro tendr
por valor 0.
,5F* es una propiedad de tipo Boolean que indica si el registro
activo es anterior al primer registro del Recordset.
E5F* es una propiedad de tipo Boolean que indica si el registro
activo es posterior al ltimo registro del Recordset.
<ame* es una cadena de caracteres con el nombre del Recordset.
<oMatc.* devuelve un valor de tipo Boolean que indica si un registro
particular se encontr utilizando el mtodo Seek o uno de los
mtodos Find (False) o no (True).
%ecordCount* devuelve un entero de tipo Long que especifica a
cuntos registros se ha accedido; si se lleg al ltimo registro
devuelve el total de registros contenidos en el Recordset.
93
Bases de #atos. Elas G. Castillo
Este objeto tiene tambin sus mtodos; son los siguientes:
)dd<e2* aade un nuevo registro. Seguido de esta sentencia
establezca los valores de los distintos campos y luego utilice el
mtodo UpDate para actualizar los datos o CancelUpdate para
cancelar.
Cancel3pdate* cancela las modificaciones producidas por los
mtodos AddNew y Edit.
Close* cierra el recordset abierto.
Delete* elimina el registro actual.
Edit* permite modificar el registro actual. Luego habr que utilizar el
mtodo UpDate para actualizar los datos o CancelUpdate para
cancelar.
FindFirst6Find<e(t6Find!ast6FindPrevious:Criteria;* buscan el
primero, ltimo, siguiente o anterior registro de un objeto Recordset
de tipo Dynaset o Snapshot que cumpla el criterio especificado y lo
convierte en el registro activo. Criteria es una cadena de caracteres
con la condicin de bsqueda.
MoveFirst6Move<e(t6Move!ast6MovePrevious* mueven al registro
primero, ltimo, siguiente o anterior de un objeto Recordset y lo
convierten en el registro activo.
3pdate* actualiza las modificaciones producidas por AddNew o Edit.
Tambin posee una coleccin muy til llamada Fields que contiene todos
los objetos Field (Campo) del Recordset. Este objeto (Field) permite acceder a los
valores de cada campo del registro activo, as como concer su nombre, el tipo de
datos que almacena, etc. Sin embargo, los valores de los campos tambin se
pueden obtener el valor de un campo si al nombre del campo le antecede el
carcter *.
Los Recordsets, en su creacin pueden ser de tipo Snapshot
(dbOpenSnapshot), tipo Table (dbOpenTable) o tipo Dynaset (dbOpenDynaset).
Los Recordsets de tipo Snapshot admiten los mtodos Find, pero no los mtodos
AddNew, Delete, Edit y por consiguiente Update y CancelUpdate; los de tipo Table
admiten los mtodos AddNew, Delete, Edit y por consiguiente Update y
CancelUpdate pero no los mtodos Find y los de tipo Dynaset admiten todos los
mtodos.
Field.
Este objeto representa un campo. Este objeto est presente en los objetos
Recordset, TableDef y QueryDef.
Este objeto dispone de las siguientes propiedades:
)llo24ero!engt.* indica si una cadena de longitud cero es un valor
vlido cuando el campo almacena datos de texto o memo.
De#ault0alue* establece o devuelve el valor predeterminado de un
objeto Field. Para un objeto Field no agregado an a la coleccin
Fields, esta propiedad es de lectura/escritura.
<ame* devuelve una cadena de caracteres con el nombre del campo.
94
Bases de #atos. Elas G. Castillo
/'pe* establece o devuelve un valor que indica el tipo operacional o
el tipo de datos de un objeto Field.
0alue* es el valor que contiene el campo. Es un tipo Variant que
luego se evala en funcin de la propiedad Type.
"able(e&.
Este objeto representa una tabla contenida en la base de datos (objeto
Database). Para manipular una definicin de tabla, utilice un objeto TableDef y sus
mtodos y propiedades. Se pueden crear recordsets, aadir y eliminar campos,
etc. Este objeto puede crearse mediante las siguientes funciones:
#,.Create6able,e. (Nombre& 'Atrib(& 'Orien()
Donde BD es la base de datos en donde se crear la tabla; Nombre es una
cadena de caracteres con el nombre de la tabla; Atrib: opcional, son los atributos y
estn constituidos por una serie de constantes; Origen: opcional, es una cadena
de caracteres que contiene el nombre de una tabla de una base de datos externa
que es origen de la nueva tabla.
Algunas propiedades importantes de este objeto son:
<ame* es el nombre de la tabla.
%ecordCount* devuelve el nmero total de registros en la tabla.
Una coleccin importante del objeto TableDef es la coleccin Fields, que
contiene todos los campos de la tabla en cuestin. Mediante esta coleccin
pueden agregarse, modificarse y eliminarse campos de la tabla.
La funcin CreateField permite agregar campos a la tabla. La forma general
es la siguiente:
6d..CreateField(Nombre&6i4o&6ama^o)
Donde Nombre es el nombre del campo, Tipo es el tipo de dato que
almacenar el campo y Tamao es el tamao en bytes que podr almacenarse en
caso de almacenarse texto.
Los tipos que admite el argumento Tipo estn contenidos en una
enumeracin llamada Data/'peEnum.
%is(ata.
95
Bases de #atos. Elas G. Castillo
VisData es
un complemento
que viene con
Visual Basic y sirve
para crear y
acceder a bases de
datos, no solamente
de Access sino
tambin a otras
como dBase o
Paradox. Para
iniciar este
complemento
dirjase al men
COMPLEMENTOS, ADMNSTRADOR VSUAL DE DATOS. La pantalla presenta en el men
Archivo las rdenes para crear una nueva base de datos as como para abrir una
existente. En el pnel de la izquierda se puede observar las propiedades de la
base de datos y las tablas y consultas que la componen. En su men contextual
figura los comandos para crear y editar tablas y consultas.
Tambin puede abrirse la base de datos para ingresar registros, eliminarlos,
eidtarlos y realizar bsquedas desde el men contextual de la tabla seleccionada.
En el cuadro de la derecha se escriben instrucciones SQL para operar sobre la
base de datos que se trabaja. La forma de utilizacin es muy sencilla, pero si
presenta dificultades puede utilizar otro software de gestin de bases de datos
como Microsoft Access.
Ejemplo.
Ahora se ejemplificar cmo se accede a una base de datos utilizando los
objetos DAO. Asegrese antes de haber hecho una referencia a DAO desde el
men PROYECTO, REFERENCAS.
El primer procedimiento crear una base de datos llamada Dbase.mdb en el
directorio C:\Windows\Temp\Afx y luego le crear una tabla llamada Articulos la
cual contendr los campos Codigo, Nombre, Precio y Stock.
O4tion E$4li"it
,im db A! ,ataba!e
Private Sub Command1_Cli"8()
,im 6. A! 6able,e.
Set 6. > db.Create6able,e.(]Arti"ulo!])
Sit- 6.
.Field!.A44end .CreateField(]Codio]& db%nteer)
.Field!.A44end .CreateField(]Nombre]& db6e$t)
.Field!.A44end .CreateField(]Pre"io]& dbCurren"+)
.Field!.A44end .CreateField(]Sto"8]& db%nteer)
End Sit-
db.6able,e.!.A44end 6. ;a^ade la tabla a la ba!e
96
Bases de #atos. Elas G. Castillo
End Sub
Ahora, este procedimiento crea un objeto Recordset de tipo Table en el cual
se agregar un registro, los valores son especificados por las entradas
proporcionadas por la funcin nputBox. Dentro del bloque With puede accederse a
los valores de cada campo mediante su nombre precedido del carcter !.
Private Sub %nre!ar)ei!tro()
,im )!t A! )e"ord!et
,im C1 A! %nteer&C9 A! Strin&CH A! Curren"+
,im CA A! %nteer
Set )!t>db.O4en)e"ord!et(<Arti"ulo!=&dbO4en6able)
C1>C%nt(%n4ut#o$(<%nre!e el "@dio num\ri"o=))
C9>%n4ut#o$(<%nre!e el nombre del artO"ulo=)
CH>CCur(%n4ut#o$(<%nre!e el 4re"io del artO"ulo=))
CA>C%nt(%n4ut#o$(<%nre!e el !to"8 del artO"ulo=))
Sit- )!t
.AddNew
aCodio>C17aNombre>C97aPre"io>CH7aSto"8>CA
.34date
.Clo!e
End Sit-
End Sub
En este procedimiento se recorrer un Recordset de la tabla creada al
principio y se colocar en un cuadro de lista (List1) los registros recuperados.
Private Sub )e"u4erar()
,im )!t A! )e"ord!et&6e$to A! Strin
;el valor A e! el valor de la "on!tante
;dbO4enSna4!-ot
Set )!t>db.O4en)e"ord!et(<Arti"ulo!=&A)
Sit- )!t
S-ile Not .EOF
6e$to>Str(aCodio) J= C <J aNombre J= C <
6e$to>6e$to J Str(aPre"io) J= _ <J Str(aSto"8)
Li!t1.Add%tem 6e$to7./oveNe$t
Send
.Clo!e
End Sit-
End Sub
Ahora se utilizar el mtodo Find para encontrar datos en un registro. Los
dos procedimientos utilizan el mtodo Find, uno para buscar datos numricos y el
otro para buscar texto, ambos pasados por argumento.
Private Sub #u!"arC@dio(Num A! %nteer)
97
Bases de #atos. Elas G. Castillo
,im )! A! )e"ord!et
Set )!>db.O4en)e"ord!et(<Arti"ulo!=&A)
Sit- )!
.FindFir!t(<Codio>=J Num)
%. .No/at"- 6-en
/!#o$ <No !e en"ontr@ ninRn "@dio <J Num
El!e7/!#o$ <El artO"ulo e! <J aNombre
End %.
.Clo!e
End Sit-
End Sub
Private Sub #u!"arNombre(Nom A! Strin)
,im )! A! )e"ord!et
Set )!>db.O4en)e"ord!et(<Arti"ulo!=&A)
Sit- )!
.FindFir!t(<Nombre>b=J Nom J=b=)
%. .No/at"- 6-en
/!#o$ <No !e en"ontr@ ninRn artO"ulo <J Nom
El!e7/!#o$ <ArtO"ulo nRmero <JaCodio
End %.
.Clo!e
End Sit-
End Sub
98
La A!i de 9indo:s. Elas G. Castillo
La A!i de 9indo:s.
pi son las siglas de nterfaz de Programacin de Aplicaciones. Windows
contiene una serie de funciones, mtodos, constantes y estructuras que
permiten acceso a los diferentes recursos del sistema operativo; estos se
encuentran en ficheros tales como Kernel32, Gdi, Shell32, etc. Estas funciones se
declaran como pblicas o privadas en la parte de declaraciones de un formulario,
mdulo estndar o mdulo de clase y tienen el mismo mbito que las funciones y
mtodos ya vistos. La forma general de una funcin o mtodo de la Api es la
siguiente:
A
Ambito ,e"lare Fun"tion5Sub NombreFS Lib /odulo Alia! NombA _
('Arumento!() 'A! 6dato(
Donde Ambito es la palabra como Public o Private; Function/Sub es la
palabra que declarar si es una funcin o un procedimiento; NombreFS es el
nombre de la funcin o procedimiento; Modulo es una cadena de caracteres con el
nombre del fichero que contiene esa funcin (Kernel32, Gdi, User32, etc.); NombA
es el nombre del Alias, los argumentos pueden o no existir y en caso de ser una
funcin devolver un valor especificado por Tdato. En el caso de que el argumento
Alias exista, el nombre de la funcin o procedimiento (NombreFS) puede ser
definido por el programador.
En los
complementos de
Visual Basic,
viene tambin una
aplicacin llamada
0isor de te(to )pi;
con las funciones
de la Api que
pueden utilizarse.
Estas funciones y
definiciones estn
contenidas en un
fichero de texto
llamado
win32api.txt que
esta aplicacin
utiliza.
En el
cuadro combinado
de nombre Tipo
de Api se indica si
se quiere
visualizar una
99
La A!i de 9indo:s. Elas G. Castillo
declaracin de funcin, una estructura (tipo) o una constante; los botones de
comando establecen si tendr mbito pblico o privado; el botn Agregar muestra
la definicin de la funcin, tipo o constante en la caja de texto inferior donde puede
copiarse para utilizarse en la ventana de cdigo del proyecto que se desee.
Una api muy sencilla es la siguiente:
Private ,e"lare Fun"tion 6iem4o Lib=*ernelH9= _
Alia!=Met6i"8Count=()A! Lon
Esta funcin retorna un valor de tipo Long con el nmero de milisegundos
transcurridos desde que se inici Windows. El nombre de la funcin (Tiempo)
puede cambiarse si se desea.
A continuacin una serie de funciones y procedimientos de la Api para
utilizar en las distintas aplicaciones que se cren; a las funciones que se explican se
les da el mbito de Private sin embargo, pueden tambin declararse como Public
cuando sea necesario.
Private ,e"lare Fun"tion Sonido Lib ]8ernelH9] _
Alia! ]#ee4] (#+Ial dwFreU A! Lon& #+Ial _
dw,uration A! Lon) A! Lon
Esta funcin emite un sonido de frecuencia especificada por el argumento
dwFrec y una duracin (en milisegundos) indicada por el argumento dwDuration.
Private ,e"lare Fun"tion SalirdeSindow! Lib _
<3!erH9= Alia!=E$itSindow!E$=(#+Ial uFla! A! _
Lon& #+Ial dw)e!erved A! Lon)A! Lon
Donde uFlags indica la operacin que ocurrir. Si el argumento uFlags vale
0 se reinicia Windows, si vale 1 se apaga el sistema y si vale 2 se reinicia el
equipo.
Private ,e"lare Fun"tion Po!Cur!or Lib <3!erH9= _
Alia! <MetCur!orPo!=(l4Point A! PO%N6AP%)A! Lon
Donde lpPoint es una estructura de tipo PONTAP que contiene las
coordenadas del cursor en relacin con la pantalla. La estructura PONTAP tiene
la siguiente forma:
6+4e PO%N6AP%
0 A! Lon
1 A! Lon
End 6+4e
Mediante una funcin de la Api se pueden generar cajas de mensajes
similares a las mostradas mediante la funcin MsgBox de Visual Basic. La sintaxis
es la siguiente:
100
La A!i de 9indo:s. Elas G. Castillo
Private ,e"lare Fun"tion /en!aj Lib<3!erH9= Alia! _
</e!!ae#o$A= (#+Ial -wnd A! Lon& #+Ial l46e$t A!_
Strin& #+Ial l4Ca4tion A! Strin& #+Ial w6+4e A! _
Lon) A! Lon
Donde hwnd es el handle de la ventana que llama a la funcin (propiedad
hWnd), lpText es el texto que contiene la caja de mensaje (argumento Prompt),
lpCaption es el ttulo de la caja de mensaje (argumento Title) y wType es un
nmero que identifica los botones e icono que aparecer en la caja de mensaje
(argumento Buttons).
Private ,e"lare Fun"tion Po!i"Cur!or Lib]u!erH9] _
Alia! ]SetCur!orPo!] (#+Ial $ A! Lon& #+Ial + A! _
Lon) A! Lon
Donde x e y son las coordenadas donde se situar el cursor en la pantalla.
Private ,e"lare Fun"tion 6e$toIentana Lib]u!erH9] _
Alia!]SetSindow6e$tA] (#+Ial -wnd A! Lon& #+Ial _
l4Strin A! Strin) A! Lon
Esta Api asigna el texto a una ventana, el texto que aparece en la barra de
ttulo; hwnd es el handle de la ventana y lpString es el texto que aparecer.
Private ,e"lare Sub Slee4 Lib ]8ernelH9] Alia! _
]Slee4] (#+Ial dw/illi!e"ond! A! Lon)
Esta procedimiento de la Api provoca una pausa al ser llamada, esta pausa
ser de la cantidad de milisegundos especificado por dwMilliseconds.
Private ,e"lare Fun"tion 6o"arSon Lib ]winmm.dll] _
Alia!]Pla+SoundA](#+Ial l4!NName A! Strin& #+Ial _
-/odule A! Lon& #+Ial dwFla! A! Lon) A! Lon
Esta funcin permite reproducir sonidos de forma de onda (ficheros *.wav),
el argumento lpszName es una cadena de caracteres con la ruta y nombre del
fichero y dwFlags es una constante que especifica la forma de la funcin, el valor 0
es un valor que ejecuta la meloda en forma asncrona.
Ejemplo.
Cree un nuevo proyecto estndar y coloque en el formulario los siguientes
controles: cuatro etiquetas de nombres lblWinV, lblTams, lblNomb y lblMemTl; un
cuadro combinado de nombre cboMedi ingresando los siguientes elementos
[Bytes, Kbytes, Mbytes, Gbytes]; y un combo de unidad de disco llamado Drive1.
ahora escriba el siguiente cdigo en la ventana de cdigo del formulario:
101
La A!i de 9indo:s. Elas G. Castillo
O4tion E$4li"it
Con!t 3/edida A! %nteer > 1B9A
Private 6+4e OSIE)S%ON%NFO
dwOSIer!ion%n.oSiNe A! Lon
dw/ajorIer!ion A! Lon
dw/inorIer!ion A! Lon
dw#uildNumber A! Lon
dwPlat.orm%d A! Lon
!NCS,Ier!ion A! Strin D 198
End 6+4e
Private 6+4e /E/O)1S6A63S
dwLent- A! Lon
dw/emor+Load A! Lon
dw6otalP-+! A! Lon
dwAvailP-+! A! Lon
dw6otalPaeFile A! Lon
dwAvailPaeFile A! Lon
dw6otalIirtual A! Lon
dwAvailIirtual A! Lon
End 6+4e
Private 6+4e S1S6E/_%NFO
dwOem%, A! Lon
dwPaeSiNe A! Lon
l4/inimumA44li"ationAddre!! A! Lon
l4/a$imumA44li"ationAddre!! A! Lon
dwA"tivePro"e!!or/a!8 A! Lon
dwNumberOr.Pro"e!!or! A! Lon
dwPro"e!!or6+4e A! Lon
dwAllo"ationMranularit+ A! Lon
dw)e!erved A! Lon
End 6+4e
;"olo"a tOtulo a la ventana de tOtulo
Private ,e"lare Fun"tion 6ituloIentana Lib ]u!erH9] _
Alia! ]SetSindow6e$tA] (#+Ial -wnd A! Lon& #+Ial _
l4Strin A! Strin) A! Lon
;4ro4or"iona in.orma"i@n del !i!tema
Private ,e"lare Sub MetS+!tem%n.o Lib ]8ernelH9] _
(l4S+!tem%n.o A! S1S6E/_%NFO)
;4ro4or"iona in.orma"i@n del !i!tema o4erativo
Private ,e"lare Fun"tion Ier!i@n Lib ]8ernelH9] Alia! _
]MetIer!ionE$A](l4Ier!ion%n.ormation A! OSIE)S%ON%NFO) _
A! Lon
;in.orma"i@n a"er"a de la memoria
Private ,e"lare Sub Mlobal/emor+Statu! Lib ]8ernelH9] _
(l4#u..er A! /E/O)1S6A63S)
;in.orma"i@n !obre el e!4a"io de lo! di!"o!
Private ,e"lare Fun"tion E!4a"io,i!"o Lib ]8ernelH9] _
102
La A!i de 9indo:s. Elas G. Castillo
Alia! ]Met,i!8FreeS4a"eA] (#+Ial l4)ootPat-Name A! _
Strin&l4Se"tor!PerClu!ter A! Lon&l4#+te!PerSe"tor A! _
Lon& l4NumberO.FreeClu!ter! A! Lon& _
l46otalNumberO.Clu!ter! A! Lon) A! Lon
;in.orma"i@n a"er"a de la! unidade! de di!"o
Private ,e"lare Fun"tion MetIolume%n.ormation Lib _
]8ernelH9] Alia! ]MetIolume%n.ormationA] (#+Ial _
l4)ootPat-Name A! Strin& #+Ial 4IolumeName#u..er A! _
Strin& #+Ial nIolumeNameSiNe A! Lon& _
l4IolumeSerialNumber A! Lon& l4/a$imumCom4onentLent- _
A! Lon& l4FileS+!temFla! A! Lon& #+Ial _
l4FileS+!temName#u..er A! Strin& #+Ial _
nFileS+!temNameSiNe A! Lon) A! Lon
Private Sub "bo/edi_Cli"8()
Call /emoria(C#+te("bo/edi.Li!t%nde$))
End Sub
Private Sub ,rive1_C-ane()
Call Cal",i!"
End Sub
Private Sub Form_Load()
6ituloIentana /e.-wnd& ]%n.orma"i@n del !i!tema]
"bo/edi.Li!t%nde$ > B7 Call Cal",i!"
Call %n.oSi!temaO4er7 Call %n.oS+!tem
End Sub
Private Sub %n.oSi!temaO4er()
,im OI A! OSIE)S%ON%NFO& Cad A! Strin
OI.dwOSIer!ion%n.oSiNe > 1A8 cel tama^o de la e!tru"tura
;OSIE)S%ON%NFO
Ier!i@n OI
Sele"t Ca!e OI.dwPlat.orm%d
Ca!e B
Cad > ]Sindow! H.1 ver!i@n]
Ca!e 1
%. OI.dw/inorIer!ion > B 6-en
Cad > ]Sindow! LK ver!i@n ]
El!e%. OI.dw/inorIer!ion > 1B 6-en
Cad > ]Sindow! L8 ver!i@n ]
El!e7 Cad > ]Sindow! ] J OI.dw/inorIer!ion J _
] ver!i@n ]
End %.
Ca!e 9
Cad > ]Sindow! N6 ver!i@n ]
%. OI.dw/ajorIer!ion > K 6-en
103
La A!i de 9indo:s. Elas G. Castillo
%. OI.dw/inorIer!ion > B 6-en
Cad > ]Sindow! /illenium ver!i@n ]
El!e%. OI.dw/inorIer!ion > 1 6-en
Cad > ]Sindow! 0P ver!i@n ]
End %.
End %.
End Sele"t
Cad > Cad J OI.dw/ajorIer!ion J ].] J OI.dw/inorIer!ion
lblSinI.Ca4tion > Cad Q ] ] Q OI.!NCS,Ier!ion
End Sub
Private Sub %n.oS+!tem()
,im SS A! S1S6E/_%NFO& Cad A! Strin
MetS+!tem%n.o SS
Sele"t Ca!e SS.dwPro"e!!or6+4e
Ca!e %! T A8:
Cad > vbCrL. Q ]%ntel] Q Str(SS.dwPro"e!!or6+4e)
Ca!e K8?
Cad > vbCrL. Q ]%ntel Pentium]
Ca!e ABBB
Cad > vbCrL. Q ]/%PS )ABBB]
Ca!e 91B?A
Cad > vbCrL. Q ]ALPXA 91B?A]
Ca!e El!e
Cad > vbCrL. Q Str(SS.dwPro"e!!or6+4e)
End Sele"t
lblSinI.Ca4tion > lblSinI.Ca4tion Q Cad
End Sub
Private Sub /emoria(E$4on A! #+te)
,im /S A! /E/O)1S6A63S& Cad A! Strin
/S.dwLent- > H97 Mlobal/emor+Statu! /S
Cad > ]/emoria utiliNada7 ] J /S.dw/emor+Load J ]d] J _
vbCrL.
Cad > Cad Q ]/emoria .O!i"a libre7 ] J _
Str()ound(/S.dwAvailP-+! 5 3/edida F E$4on& 9)) Q _
] de] Q Str()ound(/S.dw6otalP-+! 5 3/edida F E$4on)) J _
vbCrL.7Cad > Cad Q ]/emoria virtual libre7] Q _
Str()ound(/S.dwAvailPaeFile 5 3/edida F E$4on& 9)) Q _
] de] Q Str()ound(/S.dw6otalPaeFile 5 3/edida F E$4on _
)) J vbCrL.7lbl/em6l.Ca4tion > Cad
End Sub
Private Sub Cal",i!"()
,im Nomb A! Strin& NmSer A! Lon& .la A! Lon& Nb.r _
A! Strin& i A! Lon& 6am!(H) A! Lon& Free A! Lon& _
6otal A! Lon
104
La A!i de 9indo:s. Elas G. Castillo
MetIolume%n.ormation 3Ca!e(,rive1.,rive J ][])& Nomb& _
8& NmSer& i& .la& Nb.r& 8
lblNomb.Ca4tion > ]EtiUueta7 ] J Nomb J vbCrL. J _
]Serie7 ] J Format(NmSer& ]YYCYYYCYYYB])
E!4a"io,i!"o 3Ca!e(,rive1.,rive J ][])& 6am!(B)& _
6am!(1)& 6am!(9)& 6am!(H)
Free > 6am!(B) D 6am!(1) D 6am!(9)7 6otal > 6am!(B) D _
6am!(1) D 6am!(H)
lbl6am!.Ca4tion > ]Libre7] Q Str()ound(Free 5 3medida _
F "bo/edi.Li!t%nde$& 9)) Q S4a"e(?) Q ]6otal7] Q _
Str()ound(6otal 5 3/edida F "bo/edi.Li!t%nde$& 9))
End Sub
Esta aplicacin utiliza entradas en la AP para presentar informacin del
sistema y de las unidades de disco presentes.
105
Creaci0n de Librer>as. Elas G. Castillo
Creaci0n de Librer>as.
na librera es un fichero que contiene definiciones de objetos, funciones,
tipos, etc. Estas libreras tienen generalmente extensin *.dll (Dinamic Link
Library). Windows est en gran parte compuesto por libreras, sino basta
con mirar el directorio C:\Windows\System para ver la gran cantidad de este tipo
de ficheros; tambin las libreras utilizadas en el captulo anterior para las llamadas
a la Api (winmm.dll, shell32.dll, etc.).
U
Visual Basic puede crear libreras con los objetos diseados por el
programador y compilarla en un fichero de extensin *.dll para luego ser utilizado
por otras aplicaciones. La ventaja de utilizar libreras es que pueden reutilizarse y
en caso de necesitar actualizarse, solo se actualiza la librera y no es necesario
compilar nuevamente la aplicacin.
Para crear una librera cree un nuevo proyecto de tipo Dll )ctive=. En el
caso de los proyectos estndar, la ventana principal era un formulario,
pero en el caso de este tipo de proyecto la pantalla principal es un
mdulo de clase. Pueden agregarse al proyecto otros mdulos de
clase, mdulos estndar, formularios, recursos, hacer referencia a
otras libreras, etc. Luego se compila el fichero *.dll desde el men Archivo
Generar *.dll.
Cuando se crea una clase en un proyecto de este tipo, existe una propiedad
de la clase (en el cuadro de Propiedades) llamada 7nstancing que indica la forma
en que se crear el objeto en el cdigo al utilizar la librera. Los ms tiles son:
PrivateF>* un objeto de esta clase puede ser utilizado por la librera
pero no por la aplicacin, no se podr declarar ni crear.
Public<otCreatableF?* se podr declarar pero no crear con la
instruccin New sino con una funcin de algn otro objeto.
MultiuseFI* se podr declarar y crear con la instruccin New.
Librer,a de ejemplo.
Para demostrar cmo se crea una librera, se crear una llamada
Mylibreria.dll la que contendr recursos, objetos y dems de forma de observar su
utilizacin. Para ello cree un nuevo proyecto Dll ActiveX.
Primero, aada un fichero de recursos y coloque en l los siguientes
ficheros:
1inupd.ico* se encuentra en el directorio C:\Windows y establezca su
d=20.
7J>(c#g.ico* se encuentra en el directorio C:\Windows\System y
establezca su d=21.
/ejas.bmp* se encuentra en el directorio C:\Windows y establezca su
d=30.
Pata de gallo.bmp* se encuentra en el directorio C:\Windows y
establezca su d=31.
106
Creaci0n de Librer>as. Elas G. Castillo
Esterilla.bmp* se encuentra en el directorio C:\Windows y establezca
su d=32.
,urbujas.bmp* se encuentra en el directorio C:\Windows y establezca
su d=33.
Establezca la propiedad Name del mdulo con el valor Recursos (nombre
de la clase) y Multiuse a su propiedad nstancing. Ahora escriba en l el siguiente
cdigo:
O4tion E$4li"it
Enum )e"ur!o!Enum
%"/onitor > 9B7 %"/undo > 917 #m6eja! > HB7 _
#mPata > H17 #mLinea! > H97 #m#urbuja > HH
End Enum
Publi" Fun"tion )e"ur!o(%d A! )e"ur!o!Enum) A! _
%Pi"ture,i!4
Sele"t Ca!e %d
Ca!e 9B& 91
Set )e"ur!o > Load)e!Pi"ture(%d& 1)
Ca!e HB 6o HH
Set )e"ur!o > Load)e!Pi"ture(%d& B)
Ca!e El!e7 Err.)ai!e CA8BB& ])e"ur!o!]& _
])e"ur!o no e$i!te]7 E$it Fun"tion
End Sele"t
End Fun"tion
Publi" Pro4ert+ Met 6otal)e"ur!o!() A! #+te
6otal)e"ur!o! > ?
End Pro4ert+
Ahora aada un mdulo de clase y d a su propiedad Name el nombre
Valor y a su propiedad nstancing el valor Private. Escriba en l, el siguiente
cdigo:
O4tion E$4li"it
,im Num A! ,ouble& Fr A! Lon
Publi" Pro4ert+ Met Ialor() A! ,ouble
Ialor > Num
End Pro4ert+
Publi" Pro4ert+ Let Ialor(#+Ial vNewIalue A! _
,ouble)
Num > vNewIalue
End Pro4ert+
107
Creaci0n de Librer>as. Elas G. Castillo
Publi" Pro4ert+ Met Fre"uen"ia() A! Lon
Fre"uen"ia > Fr
End Pro4ert+
Publi" Sub Aumenta_,i!minu+e(Aum A! #oolean)
%. Aum > 6rue 6-en
Fr > 1 Q Fr
El!e7 Fr > Fr C 1
End %.
End Sub
Ahora aada otro mdulo de clase y nmbrelo (propiedad Name)
Estadstica y su propiedad nstancing a Multiuse; escriba el siguiente cdigo:
O4tion E$4li"it
Private mCol A! Colle"tion
Publi" Sub Arear(#+Ial NRmero A! ,ouble)
,im objNew/ember A! Ialor& m A! %nteer
Set objNew/ember > New Ialor
objNew/ember.Ialor > NRmero7
objNew/ember.Aumenta_,i!minu+e 6rue
%. mCol.Count > B 6-en
mCol.Add objNew/ember7 Mo6o Final
End %.
For m > 1 6o mCol.Count
%. mCol.%tem(m).Ialor > NRmero 6-en
mCol.%tem(m).Aumenta_,i!minu+e 6rue7 Mo6o _
Final
End %.
Ne$t m
mCol.Add objNew/ember
Final7
Set objNew/ember > Not-in
End Sub
Publi" Sub 2uitar(NRmero A! ,ouble)
,im $ A! %nteer
For $ > 1 6o mCol.Count
%. mCol($).Ialor > NRmero 6-en
mCol($).Aumenta_,i!minu+e Fal!e7 E$it For
End %.
%. mCol($).Fre"uen"ia > B 6-en
mCol.)emove $7 E$it For
End %.
Ne$t $
End Sub
Publi" Pro4ert+ Met NewEnum() A! %3n8nown
108
Creaci0n de Librer>as. Elas G. Castillo
ce!ta 4ro4iedad 4ermite enumerar
ce!ta "ole""i@n "on la !inta$i! For...Ea"-
Set NewEnum > mCol.'_NewEnum(
End Pro4ert+
Private Sub Cla!!_%nitialiNe()
;"rea la "ole""i@n "uando !e "rea la "la!e
Set mCol > New Colle"tion
End Sub
Private Sub Cla!!_6erminate()
cde!tru+e la "ole""i@n "uando !e termina la "la!e
Set mCol > Not-in
End Sub
Publi" Pro4ert+ Met Contar() A! Lon
,im obj A! Ialor& !um A! Lon
Set obj > New Ialor
For Ea"- obj %n mCol
!um > obj.Fre"uen"ia Q !um
Ne$t
Set obj > Not-in7 Contar > !um
End Pro4ert+
Publi" Fun"tion Suma() A! ,ouble
,im obj A! Ialor& !um A! ,ouble
Set obj > New Ialor
For Ea"- obj %n mCol
!um > !um Q obj.Ialor D obj.Fre"uen"ia
Ne$t
Set obj > Not-in7 Suma > !um
End Fun"tion
Publi" Fun"tion Promedio() A! ,ouble
Promedio > Suma 5 Contar
End Fun"tion
Publi" Pro4ert+ Met /inimo() A! ,ouble
,im obj A! Ialor& /"- A! ,ouble& $ A! %nteer
Set obj > New Ialor
obj.Ialor > mCol.%tem(1)
For $ > 9 6o mCol.Count
obj > mCol.%tem($)
%. /"- P obj.Ialor 6-en
/"- > obj.Ialor
End %.
Ne$t $
109
Creaci0n de Librer>as. Elas G. Castillo
/inimo > /"-
End Pro4ert+
Publi" Pro4ert+ Met /a$imo() A! ,ouble
,im obj A! Ialor& /"- A! ,ouble& $ A! %nteer
Set obj > New Ialor
obj.Ialor > mCol.%tem(1)
For $ > 9 6o mCol.Count
obj > mCol.%tem($)
%. /"- T obj.Ialor 6-en
/"- > obj.Ialor
End %.
Ne$t $
/a$imo > /"-
End Pro4ert+
Publi" Fun"tion Fre"uen"iaIalor(NRmero A! ,ouble) _
A! Lon
,im obj A! Ialor
Set obj > New Ialor
For Ea"- obj %n mCol
%. obj.Ialor > NRmero 6-en
Fre"uen"iaIalor > obj.Fre"uen"ia7 E$it For
End %.
Ne$t
Set obj > Not-in
End Fun"tion
Ahora compile la librera y pruebe utilizarla en una aplicacin. Para ello
debe hacer primero una referencia a dicha librera desde el men PROYECTO,
REFERENCAS.
110
Creaci0n de controles. Elas G. Castillo
Creaci0n de controles.
os controles que Windows ofrece puede que no se adapten a las
necesidades del programador y ste quiera desarrollar sus propios controles.
Estos controles se almacenan en ficheros con extensin N.oc(. Para crear un
nuevo control ActiveX cree un nuevo proyecto estndar y en el men PROYECTO,
AGREGAR CONTROL DE USUARO. Esta forma crea un control aadido a una aplicacin,
pero no genera un fichero que contenga ese control para utilizar en las
aplicaciones que se deseen. Si desea crearse un fichero *.ocx que contenga los
controles que se construyan debe crearse un nuevo proyecto de tipo Control
ActiveX.
L
Los controles tienen una interfaz grfica y una interfaz de texto donde se
escribe el cdigo del control. Este control tiene algunas propiedades
predeterminadas:
<ombre* es el nombre del control que ser el tipo de control (por
ejemplo TextBox, Boton, etc.).
)uto%edra2* es similar a la propiedad AutoRedraw de los objetos grficos.
Can8etFocus* determina si el control podr recibir el foco.
/oolbo(,itmap* es un mapa de bits con el icono del control en la caja de
herramientas de Visual Basic.
Luego se disea la parte grfica del control, que estar compuesta por otros
controles existentes aadidos por el usuario para formar el nuevo control. Por
ltimo se programa todos los eventos, propiedades, mtodos y funciones. Luego
se compila el control y se genera un fichero con extensin *.ocx, el cual puede
contener uno o ms controles.
Ejemplo.
Para el siguiente ejemplo cree un nuevo proyecto estndar y aada un
control de usuario. Visualice el cuadro Propiedades y d a la propiedad Nombre el
valor Botn.
En la interfaz grfica del control agregue dos lneas de nombre lnis y lndi,
cree un array con cada una de ellas, de modo que haya cuatro lneas lnis(0),
lnis(1), lndi(0) y lndi(1). Luego agregue una etiqueta de nombre lblTitu y establezca
su propiedad AutoSize a True, en su propiedad Font establezca el nombre de la
fuente como Arial y su tamao a 10, su propiedad BackStyle el valor Transparent.
Agregue tambin un objeto Shape llamado shpFoco, su propiedad BorderStyle con
el valor Dot y su propiedad Visible a False.
Ahora escriba el siguiente cdigo en la ventana de cdigo de dicho control:
O4tion E$4li"it
Publi" Event Cli"(#ot@nP A! %nteer)
Publi" Event 6e"la(6e"laP A! %nteer)
Private Sub lbl6itu_C-ane()
111
Creaci0n de controles. Elas G. Castillo
lbl6itu./ove Sidt- 5 9 C lbl6itu.Sidt- 5 9& _
Xei-t 5 9 C lbl6itu.Xei-t 5 9
!-4Fo"o./ove lbl6itu.Le.t C 9B& lbl6itu.6o4 C 9B& _
lbl6itu.Sidt- Q 9B& lbl6itu.Xei-t Q 9B
End Sub
Private Sub lbl6itu_/ou!e,own(#utton A! %nteer& _
S-i.t A! %nteer& 0 A! Sinle& 1 A! Sinle)
)ai!eEvent Cli"(#utton)
CambiarColor
End Sub
Private Sub lbl6itu_/ou!e34(#utton A! %nteer& _
S-i.t A! %nteer& 0 A! Sinle& 1 A! Sinle)
CambiarColor
End Sub
Private Sub 3!erControl_MotFo"u!()
!-4Fo"o.Ii!ible > 6rue
End Sub
Private Sub 3!erControl_)eadPro4ertie!(Pro4#a A! _
Pro4ert+#a)
lbl6itu.Ca4tion > Pro4#a.)eadPro4ert+(]6e$to]&
]6e$to])
End Sub
Private Sub 3!erControl_S-ow()
,im 0 A! #+te
For 0 > B 6o 1
lndi(0).#orderColor > vbH,S-adow7
lni!(0).#orderColor > vbH,Xi-li-t
Ne$t 0
End Sub
Private Sub 3!erControl_*e+,own(*e+Code A! _
%nteer& S-i.t A! %nteer)
)ai!eEvent 6e"la(*e+Code)
CambiarColor
End Sub
Private Sub 3!erControl_*e+34(*e+Code A! %nteer&
S-i.t A! %nteer)
CambiarColor
End Sub
Private Sub 3!erControl_Lo!tFo"u!()
112
Creaci0n de controles. Elas G. Castillo
!-4Fo"o.Ii!ible > Fal!e
End Sub
Private Sub 3!erControl_/ou!e,own(#utton A! _
%nteer& S-i.t A! %nteer& 0 A! Sinle& 1 A! _
Sinle)
)ai!eEvent Cli"(#utton)
CambiarColor
End Sub
Private Sub 3!erControl_/ou!e34(#utton A! _
%nteer& S-i.t A! %nteer& 0 A! Sinle& 1 A! _
Sinle)
CambiarColor
End Sub
Private Sub 3!erControl_)e!iNe()
lni!(B).01 > B7 lni!(B).11 > B7 lni!(B).09 > Sidt-
lni!(B).19 > B7lni!(1).01 > B7 lni!(1).11 > B
lni!(1).09 > B7lni!(1).19 > Xei-t
lndi(B).01 > Sidt- C 1B7 lndi(B).11 > B
lndi(B).09 > Sidt- C 1B7 lndi(B).19 > Xei-t
lndi(1).01 > B7 lndi(1).09 > Sidt-7lndi(1).11 > _
Xei-t C 1B7 lndi(1).19 > Xei-t C 1B
lbl6itu./ove Sidt- 5 9 C lbl6itu.Sidt- 5 9& _
Xei-t 5 9 C lbl6itu.Xei-t 5 9
!-4Fo"o./ove lbl6itu.Le.t C 9B& lbl6itu.6o4 C 9B& _
lbl6itu.Sidt- Q 9B& lbl6itu.Xei-t Q 9B
End Sub
Publi" Pro4ert+ Met 6e$to() A! Strin
6e$to > lbl6itu.Ca4tion
End Pro4ert+
Publi" Pro4ert+ Let 6e$to(#+Ial 6$t A! Strin)
lbl6itu.Ca4tion > 6$t
Pro4ert+C-aned ]6e$to]
End Pro4ert+
Private Sub CambiarColor()
,im 0 A! #+te
%. lni!(B).#orderColor > vbH,Xi-li-t 6-en
For 0 > B 6o 1
lni!(0).#orderColor > vbH,S-adow7
lndi(0).#orderColor > vbH,Xi-li-t7 #a"8Color > _
vb#uttonS-adow
Ne$t 0
El!e
113
Creaci0n de controles. Elas G. Castillo
For 0 > B 6o 1
lndi(0).#orderColor > vbH,S-adow
lni!(0).#orderColor > vbH,Xi-li-t7 #a"8Color > _
vbH,Fa"e
Ne$t 0
End %.
End Sub
Private Sub 3!erControl_SritePro4ertie!(Pro4#a _
A! Pro4ert+#a)
Call Pro4#a.SritePro4ert+(]6e$to]& _
lbl6itu.Ca4tion& ]6e$to])
End Sub
Los eventos que reconocer este control sern los eventos Clic y Tecla, que
se producirn al presionar un botn del mouse sobre el control en s o sobre la
etiqueta, pasndo como parmetro el botn del mouse presionado; el evento Tecla
ocurrir al presionar una tecla sobre el control (cuando ste tiene el foco) y pasa
como parmetro el valor de la tecla presionada. Estos eventos declarados en la
parte de declaraciones del control se ocasionan con la sentencia RaiseEvent en
los distintos eventos en el cdigo.
El evento Resize del UserControl tiene por finalidad adecuar el tamao y
posicin de los controles que contiene al nuevo tamao del control; esta sentencia
se desencadenar al cambiar el tamao del control tanto en tiempo de ejecucin
como en tiempo de diseo.
Los eventos GotFocus y LostFocus del UserControl se desencadenan
cuando el control recibe y pierde el foco respectivamente; se hace visible e
invisible la forma shpFoco, lo cual permite conocer grficamente cuando recibe y
cuando pierde el foco el control.
El evento Show ocurre al mostrarse el control y en l se ha dado color a las
lneas que forman el borde.
La propiedad Texto devuelve y establece el texto contenido en el control. El
valor de esta propiedad se conserva en la propiedad Caption de la etiqueta lblTitu.
Cuando se crean propiedades en un control, en la propiedad de escritura (Let o
Set) hay que incluir la sentencia Propert'C.anged pasndole como argumento una
cadena de texto con el nombre de la propiedad.
Todo control tiene dos eventos llamados 1riteProperties y %eadProperties,
los que son necesarios para almacenar los valores dados a las propiedades que
se establezcan. /odas las propiedades que se escriban deben figurar en estos
eventos para que las propiedades funcionen correctamente.
La forma general del evento WriteProperties tiene la siguiente forma
general:
Private Sub 3!erControl_SritePro4ertie!(Pro4#a A! _
Pro4ert+#a)
Call Pro4#a.SritePro4ert+(NPro4iedad& IarOrien& ,e.e"to)
End Sub
114
Creaci0n de controles. Elas G. Castillo
Donde Npropiedad es una cadena de caracteres donde figrua el nombre de
la propiedad a tratar; ValOrigen es el dato donde se almacena el valor de la
propiedad, puede ser la propiedad de un control (como en el caso de este control)
o una variable, Defecto es el valor por defecto que tendr.
La forma general del evento ReadProperties es la siguiente:
Private Sub 3!erControl_)eadPro4ertie!(Pro4#a A! _
Pro4ert+#a)
IarOrien > Pro4#a.)eadPro4ert+(NPro4iedad& ,e.e"to)
End Sub
Donde Npropiedad, ValOrigen y Default tienen el mismo significado que
para el evento WriteProperties.
Por ltimo, hay una propiedad til en la fase de diseo de controles que
permite conocer si se est trabajando con el control en tiempo de diseo o en
tiempo de ejecucin. Esta propiedad se llama 3serMode y devuelve un valor de
tipo Boolean que indica si se est trabajando en modo de diseo (False) o en
ejecucin (True). Esta propiedad se encuentra en el objeto Ambient y puede
utilizarse para poder cambiar el valor de las propiedades desde el cdigo y no
desde el modo diseo, por ejemplo.
115
1icroso4t Coon #ialo;. Elas G. Castillo
1icroso4t Coon #ialo;.
ste componente se encuentra en un fichero llamado ComdlgG?.oc( y se
llama 1indo2s Common Dialog Control 6.0. La utilidad de este control,
llamado CommonDialog, es mostrar cuadros de dilogo personalizados,
muy comunes en el entorno de Windows; ellos son:
E
Abrir como
Guardar como
Color
Fuente
mprimir
Ayuda
Un mismo control CommonDialog puede mostrar cualquiera de
estos cuadros, o todos juntos. Al insertar este control en el formulario,
tendr la apariencia mostrada en la figura, pero en tiempo de ejecucin
no se ver sobre el formulario, pero mediante el cdigo se puede activar
cualquiera de las pantallas ya mencionadas.
En la ventana Propiedades de este control puede verse una propiedad
llamada Personalizado, lo cual despliega una pgina de propiedades para el
control. Ahora se enumerarn algunas propiedades de este control:
)ction* establece o devuelve el tipo de dilogo que se va a mostrar
CancelError* establece o devuelve si se producir un error si se hace
clic en el botn Cancelar (True).
Color* devuelve o establece el color seleccionado (cuando se
muestra el cuadro Color).
Copies* devuelve o establece el nmero de copias que se imprimirn
(cuando se muestra el cuadro de dilogo mprimir).
De#aultE(t* devuelve o establece la extensin predeterminada en el
cuadro de dilogo (abrir o guardar).
Dialog/itle* devuelve o establece la cadena de texto que es ttulo del
cuadro de dilogo.
Filename* devuelve o establece la ruta de acceso y el nombre de un
archivo seleccionado.
Filetitle* devuelve o establece el nombre del archivo que se va a abrir
o guardar.
Filter* devuelve o establece una cadena de texto los filtros que se
mostrarn en el cuadro de lista Archivos de tipo de un cuadro de
dilogo.
Filter7nde(* devuelve o establece un valor con el filtro predeterminado
para un cuadro de dilogo Abrir o Guardar como.
Flags* devuelve o establece las opciones de un cuadro de dilogo.
FromPage* devuelve o establece el valor que indica la primera
pgina que se va a imprimir.
7nitDir* devuelve o establece el directorio de archivos inicial.
116
1icroso4t Coon #ialo;. Elas G. Castillo
Ma(File$i+e* devuelve o establece el tamao mximo del nombre de
archivo abierto usando el control CommonDialog.
5rientation* devuelve o establece la orientacin del papel de la
impresora.
PrinterDe#ault* determina si las selecciones de un usuario en cuadro
de dilogo mprimir se usan para cambiar la configuracin
predeterminada de la impresora.
/oPage* devuelve o establece el valor que indica la primera pgina
que se va a imprimir.
La aparicin de los distintos dilogos se realiza mediante los mtodos de
este control, que son los siguientes:
$.o2Color* muestra el cuadro de dilogo Color.
$.o2Font* muestra el cuadro de dilogo Fuente.
$.o2Help* ejecuta Winhelp.EXE y muestra el archivo de Ayuda que
ha especificado.
$.o25pen* muestra el cuadro de dilogo Abrir.
$.o2Printer* muestra el cuadro de dilogo mprimir.
$.o2$ave* muestra el cuadro de dilogo Guardar.
El cuadro de dilgo Fuente visualizado con el mtodo ShowFont es el
siguiente:
El cuadro de dilgo Guardar como es similar al cuadro de dilogo Abrir, se
visualizan con los mtodos ShowSave y Show Open respectivamente, y su forma
es similar a la mostrada a continuacin:
117
1icroso4t Coon #ialo;. Elas G. Castillo
El cuadro de dilogo mprimir visualizado con el mtodo ShowPrinter tiene
la siguiente apariencia:
Por ltimo, el cuadro de dilogo Color visualizado utilizando el mtodo
ShowColor, tiene la siguiente forma:
118
1icroso4t Coon #ialo;. Elas G. Castillo
Utilice las distintas propiedades del control CommonControl para obtener
los valores establecidos en los cuadros desplegados.
Ejemplo.
Cree un nuevo proyecto estndar y vaya al men Proyecto, Componentes o
desde el teclado con Ctrol + T y luego haga referencia al mencionado componente.
Agregue una caja de texto (Text1), dos botones de comando (cmdColor y
cmdFuente) y un control CommonControl (cdlPant).
Ahora escriba el siguiente cdigo en la ventana del formulario:
O4tion E$4li"it
Private Sub "mdColor_Cli"8()
cmue!tra el "uadro "olor
"dlPant.S-owColor
ce!table"e el "olor !ele""ionado al 6e$tbo$
6e$t1.#a"8Color > "dlPant.Color
End Sub
Private Sub "mdFuente_Cli"8()
cmue!tra el "uadro .uente
"dlPant.S-owFont
ce!table"e la .uente !ele""ionada
Sit- "dlPant
6e$t1.Font#old > .Font#old
6e$t1.Font%tali" > .Font%tali"
6e$t1.FontName > .FontName
6e$t1.FontSiNe > .FontSiNe
6e$t1.FontStri8et-ru > .FontStri8et-ru
6e$t1.Font3nderline > .Font3nderline
119
1icroso4t Coon #ialo;. Elas G. Castillo
End Sit-
End Sub
Ahora presione F5 para probar la aplicacin. Recuerde que si esta
aplicacin la ha de ejecutar en otro equipo, debe asegurarse que en el directorio
$'stem se encuentra el fichero ComdlgG?.oc(.
120
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
1icroso4t 9indo:s Coon Controls ?.@
ste es un grupo de controles que se encuentra en el fichero ComctlG?.oc(
situado en el directorio System; estos controles son muy utilizados en el
entorno Windows. Para utilizar los controles situados en este fichero debe ir
al men Proyecto, Componentes o desde el teclado con la combinacin Ctrol + T,
tambin puede acceder con el men contextual de la caja de herramientas y el
men Componentes. Los controles proporcionados por este fichero son 8, a saber:
E
7mage!ist* una lista con imgenes que pueden ser utilizadas vinculando la
lista con otros controles o recuperndolas con las funciones que
proporciona.
/ool,ar* este control es una barra de herramientas personalizable, con
botones e imgenes como las barras de herramientas de Word o Excel por
ejemplo.
/ab$trip* este control es un plano con varias legetas, como el que hay en
la pantalla Propiedades del proyecto.
$tatus,ar* es una barra de estado como la que aparece en la parte inferior
de las ventanas del explorador de Windows, Word, Excel y muchas otras
aplicaciones.
Progress,ar* es una barra cuya funcin es indicar el progreso de una tarea.
Esta barra aparece, por ejemplo, cuando se hace una deteccin de nuevo
hardware o cuando se marca el proceso de copia de un fichero.
$lider* su funcin es anloga a la de las barras de desplazamiento pero
tiene marcadores de posicin.
/ree0ie2* es un "rbol jerrquico, que se ve en Windows en el explorador
de Windows, donde se muestra la estructura de los directorios con sus
subdirectorios.
!ist0ie2* este control se ve en Windows en las diferentes pantallas
visualizando el contenido de un directorio mediante conos con los ficheros
y subdirectorios que contiene.
Tambin contiene las enumeraciones para dar valor a las propiedades de
los distintos controles que contiene.
-ma.eList.
Este control no tiene una interfaz grfica (al igual que el control
CommonDialog), permite almacenar una serie de grficos; funciona como una
coleccin de objetos grficos (PictureDisp, de formatos *.ico y *.bmp) a los que
puede accederse mediante ciertas funciones. En el cuadro
Propiedades se ve una propiedad llamada Personalizado; en este
cuadro de propiedades pueden agregarse y quitarse imgenes a este
control, as como definir el tamao (en pixeles) de las imgenes. Cada
imagen tendr una propiedad 7nde( establecida por el orden en que se vayan
ingresando las imgenes, una propiedad 9e' que es un texto nico para cada
imagen que la identifica y una propiedad /ag que es informacin adicional sobre la
121
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
imagen. Para agregar y quitar imgenes no debe haber ningn control enlazado al
control mageList.
Este control no tiene eventos, pero tiene propiedades, mtodos y funciones.
Las propiedades de este control son:
Mas-Color* devuelve o establece un valor que indica al color que
ser transparente en las operaciones grficas de mageList. Esta
propiedad est disponible en tiempo de diseo y de ejecucin.
3seMas-Color* devuelve o establece un valor de tipo Boolean que
indica si se utilizarn mscaras de colores para las operaciones
grficas. Disponible en tiempo de diseo y en tiempo de ejecucin.
5verla':9e'>69e'?;* esta funcin devuelve un objeto de tipo
PictureDisp con una imagen compuesta por las dos imgenes
pasadas por argumento; Key1 y Key2 son la propiedad Key de las
imgenes en cuestin.
Este objeto contiene una coleccin llamada !ist7mages que almacena
objetos !ist7mage: las imgenes almacenadas en el control. Un objeto Listmage
tiene las siguientes propiedades:
7nde(* es el ndice del elemento.
9e'* es la clave del objeto.
Picture* devuelve o establece la imagen del objeto.
/ag* guarda datos adicionales acerca del objeto.
Tambin contiene una funcin un mtodo:
Dra2:.DC6=6@;* dibuja la imagen en un contexto de dispositivo.
E(tract7con:;* esta funcin devuelve un objeto PictureDisp con el
grfico contenido en el objeto.
En cuanto a la coleccin Listmages, tiene los siguientes componentes:
Count* propiedad que devuelve el nmero de objetos contenidos en
la coleccin.
7tem* devuelve el objeto Listmage especificado mediante su ndice o
su clave.
)dd:C7nde(D6C9e'D6CPictureD;* agrega un elemento, ndex es el ndice,
Key es la clave y Picture el objeto PictureDisp que se aadir.
Clear* quita todos los miembros de la coleccin.
%emove:7nde(;* quita un miembro determinado de la coleccin.
"ool#ar.
Este elemento es una tpica barra de herramientas, al colocar el control en
el formulario se ajusta automticamente a su borde superior. Luego se procede a
colocar
los
botones correspondientes, que estn representados por objetos de tipo ,utton.
Las propiedades de este control son las siguientes:
)lign* devuelve o establece la alineacin de la barra en la ventana.
)ppearance* devuelve o establece el efecto 3D o plano de la barra.
122
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
,order$t'le* devuelve o establece si se ver un borde cuando la
apariencia de la barra sea plana.
,uttonHeig.t6 ,utton1idt.* devuelve o establece la altura y el ancho
de los botones.
En la pantalla Propiedades que aparece al hacer clic en la propiedad
Personalizado; aparece en la lengeta 8eneral la propiedad mageList, que
permite seleccionar un control mageList para colocar sus imgenes en los
botones. En la lengeta ,otones se permite introducir y quitar botones en tiempo
de diseo as como establecer sus propiedades.
La barra de herramientas tiene una coleccin llamada ,uttons que contiene
los objetos ,utton o botones de la barra. Esta coleccin tiene los clsicos
miembros )dd, %emove, Clear, Count e 7tem. Ahora se explicar las propiedades,
funciones y mtodos del objeto Button.
Caption* es el texto que contendr el botn.
Description* devuelve o establece una cadena de caracteres con la
descripcin mostrada cuando el usuario hace clic en un objeto Button
durante una operacin de personalizacin.
Enabled* habilita o deshabilita el botn.
7mage* devuelve o establece el ndice o la clave de un objeto
Listmage que se va a usar.
9e'* devuelve o establece la cadena nica (clave) de un objeto en
una coleccin.
$t'le* devuelve o establece el estilo de un botn. El valor se
encuentra en una enumeracin llamada ButtonStyleConstants.
/ag* guarda datos adicionales:
/ool/ip/e(t* devuelve o establece una descripcin abreviada del
botn.
0alue* devuelve o establece el valor del botn. El valor se extrae de
una numeracin llamada ValueConstants.
0isible* determina si el botn est visible o invisible.
Por tanto, puede agregar botones a la barra desde el cuadro de
propiedades Personalizado o desde el cdigo. Esta barra tiene varios eventos; el
ms relevante es el evento ButtonClick que ocurre al hacer clic en uno de los
botones de la barra, su forma general es la siguiente:
Private Sub n#arra_#uttonCli"8(#+Ial #utton A! _
Com"tlLib.#utton)
Donde nBarra es el nombre de la barra. El argumento Button es un objeto
de tipo Button que representa el botn sobre el que se ha hecho clic. Utilice
sentencias de control como la Select Case para realizar una u otra accin segn el
botn que se haya cliqueado. Tambin tiene otros eventos: Click, DblClick,
Change, MouseMove, etc.
Tambin tiene algunos mtodos de inters que son:
123
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
Customi+e* nvoca el cuadro de dilogo Personalizar barra de
herramientas cuando el usuario hace doble clic en un control Toolbar.
No lleva argumentos.
%estore/ool,ar:9e' )s $tring6 $ub-e' )s $tring6 0alue )s $tring;*
restaura una barra de herramientas, creada con un control Toolbar, a
su estado original antes de personalizarla.
$ave/ool,ar:9e' )s $tring6 $ub-e' )s $tring6 0alue )s $tring;*
guarda la barra de herramientas en un fichero de iniciacin (*.ini).
"ab*trip.
Este control presenta una pgina con lengetas para seleccionar grupos de
controles. Este control est compuesto por una serie
de fichas que tienen legetas, entonces, hay tantas
fichas como lengetas haya; cada ficha est
representada por un objeto /ab contenido en una
coleccin llamada /abs. Hay que destacar que las
fichas de este control no funcionan como contenedores
de otros controles, por lo tanto, para visualizar los
distintos controles segn la lengeta que se cliquee, habr que codificar qu
controles se mostrarn, por ejemplo, haciendo visible algunos controles e invisibles
otros.
Este objeto tiene las siguientes propiedades:
Client!e#t6 Client/op6 Cliente1idt.6 ClientHeig.t* devuelve o
establece el borde izquierdo, superior, el largo y la altura del rea
interna del control, respectivamente.
7mage!ist* establece un control mageList para utilizar las imagenes
que contenga en el objeto TabStrip.
Multi%o2* devuelve o establece si se puede mostrar ms de una fila
de fichas (True).
$elected7tem* devuelve un objeto Tab que representa la ficha
seleccionada.
$.o2/ips* habilita o deshabilita el texto de informacin sobre
herramientas; propiedad de tipo Boolean.
$t'le* devuelve o establece la apariencia de estilo (ficha o botn) de
un control TabStrip. Los valores se encuentran en una enumeracin
llamada TabStyleConstants.
/abFi(edHeig.t* devuelve o establece el alto fijo de un control
TabStrip, pero slo si TabWidthStyle est establecido como Fixed
Width.
/abFi(ed1idt.* devuelve o establece el largo fijo de un control
TabStrip, pero slo si TabWidthStyle est establecido como Fixed
Width.
/ab1idt.$t'le* devuelve o establece el ancho y la justificacin de
todas las fichas de un control TabStrip. El valor se extrae de una
enumeracin llamada TabWidthStyleConstants.
Los eventos ms relevantes soportados por este control son los siguientes:
124
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
,e#oreClic-:Cancel )s 7nteger;* se genera al hacer clic en un objeto
Tab o al cambiar la propiedad Value de la ficha. Se usa para
comprobar parmetros antes de que se genere el evento Click.
Clic-6 9e'Do2n6 9e'3p6 etc.
Ya se ha dicho que este control posee una enumeracin llamada Tabs
donde se almacenan los objetos Tab que representan las fichas que dicho control
contiene. Esta coleccin posee los tpicos mtodos, funciones y propiedades de
las colecciones ya vistas, a saber: )dd6 %emove6 Count6 Clear e 7tem.
Las propiedades de un objeto Tab son las siguientes:
Caption* es el texto que aparece en la lengeta de la ficha.
7mage* es el ndice o la clave del objeto Listmage del control
mageList asociado al control.
9e'* devuelve o establece la cadena nica de un objeto en una
coleccin.
$elected* es un valor de tipo Boolean que devuelve o establece si la
ficha est seleccionada.
*tatus#ar.
Este control representa la barra de estado de una aplicacin. Cada barra de
herramientas est dividida en secciones,
cada seccin est representada por un
objeto de tipo Panel, contenido en la coleccin Panels del control StatusBar. Las
propiedades del control StatusBar son las siguientes:
)lign* devuelve o establece la alineacin de la barra de estado en el
formulario; por defecto en la parte inferior.
$imple/e(t* devuelve o establece el texto mostrado cuando la
propiedad Style de un control StatusBar se establece a Simple.
$t'le* devuelve o establece el estilo de la barra de estado; el valor se
extrae de una enumeracin llamada SbarStyleConstants.
Los eventos sobresalientes del control StatusBar son los eventos PanelClick
y PanelDblClick que ocurren al hacer clic y doble clic sobre un pnel de la barra.
Ambos eventos llevan el parmetro Panel, el cual es un objeto Panel que
representa el panel sobre el que se ha hecho clic o doble clic.
Los objetos Panel que componen la barra de herramientas se pueden
agregar desde la pantalla Propiedades, Personalizado o desde el cdigo mediante
la coleccin Panels.
Las propiedades del objeto Panel son las siguientes:
)lignment* devuelve o establece la alineacin que tendr el texto
dentro del panel.
)utosi+e* devuelve o establece si el panel se adaptar al contenido
cuando ste cambie o cuando el tamao del formulario cambie.
,evel* devuelve o establece la apariencia del biselado de un objeto
Panel, insertado, elevado o ninguno.
Min1idt.* devuelve o establece el ancho mnimo de un objeto Panel.
125
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
Picture* devuelve o establece la propiedad Picture de un objeto
Panel; es un objeto PictureDisp.
$t'le* devuelve o establece el estilo del panel.
/e(t* devuelve o establece el texto que contendr el panel.
Pro.ress#ar.
La barra de progreso tiene mucha
similitud con respecto a las barras de
desplazamiento. No tiene colecciones y las 3
propiedades ms importantes son lasmismas que en las barras de
desplazamiento, a saber:
Min* el valor mnimo de la barra.
Ma(* el valor mximo de la barra.
0alue* el valor actual de la barra.
La diferencia es que en una barra de desplazamiento la propiedad Value se
puede establecer desde el cuadro Propiedades y desde el cdigo y en la bara de
progreso se puede establecer desde el cdigo.
*lider.
Este control tambin funciona como la barra de desplazamiento; se aprecia
este control en diversas partes de Windows, por ejemplo, en la pantalla donde se
modifica el volmen del sistema. Tiene las mismas
propiedades (Min, Max, etc.) que las barras de
desplazamiento y las nuevas propiedades que posee son para definir su aspecto
visual. Pruebe estas propiedades para observar la apariencia visual que generan.
Algunas propiedades son:
,order$t'le* define el borde del control.
5rientation* establece si el control slider se presenta en forma
horizontal o vertical.
$elect%ange* propiedad de tipo Boolean que permite establecer si un
control slider puede tener un intervalo de seleccin.
/ic-Fre&uenc'* devuelve la relacin entre las marcas y los intervalos
del control slider.
/ic-$t'le* establece la orientacin de las marcas en el control.
"ree%ie6.
Este control se visualiza en el Explorador
de Windows con la estructura jerrquica de las
carpetas. Este control es una ventana similar a
una caja de dibujo, en donde se colocan objetos
de distintas jerarquas. Cada ejemento de la
jerarqua est representado por un objeto llamado
<ode que se encuentra en la coleccin <odes del
control TreeView.
126
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
Las propiedades de este control son las siguientes:
DropHig.lig.t* devuelve una referencia a un objeto Node y destaca el
objeto con los colores de resalte del sistema.
Hide$election* determina si el elemento seleccionado se mostrar
como seleccionado cuando TreeView pierda el enfoque; un valor de
tipo Boolean.
7mage!ist* devuelve o establece el control mageList que se enlazar
al control TreeView para utilizar sus imgenes.
7ndentation* devuelve o establece el ancho de la sangra de un
control TreeView.
!abelEdit* devuelve o establece un valor que determina si un usuario
puede modificar la etiqueta de un objeto Node. El valor se extrae de
una enumeracin llamada LabelEditConstants.
!ine$t'le* devuelve o establece el estilo de las lneas mostradas
entre objetos Node. Enumeracin TreeLineStyleConstants.
Pat.$eparator* evuelve o establece una cadena de delimitacin
usada por la ruta de acceso que devuelve la propiedad FullPath.
$elected7tem* devuelve una referencia al objeto Node que est
seleccionado.
$orted* determina si los elementos se ordenan automticamente en
orden alfabtico ascendente.
$t'le* muestra una lista jerrquica de objetos Node, cada uno con
una etiqueta y un mapa de bits opcional. Se extrae de la
enumeracin TreeStyleConstants.
Algunas funciones y mtodos de este control son los siguientes:
8et0isibleCount* devuelve el nmero de objetos Node que se ajusta
en el rea interna de un control TreeView.
Hit/est:= )s $ingle6 @ )s $ingle;* devuelve un objeto Node situado
en las coordenadas del punto X,Y.
$tart!abelEdit* inicia una operacin de modificacin de una etiqueta
en un objeto Node.
Los siguientes eventos son los ms destacados del control TreeView:
)#ter!abelEdit:Cancel )s 7nteger6 <e2$tring )s $tring;* ocurre
cuando un usuario modifica la etiqueta del objeto Node seleccionado
actualmente.
,e#ore!abelEdit:Cancel )s 7nteger;* ocurre cuando un usuario intenta
modificar la etiqueta del objeto Listtem o Node seleccionado
actualmente.
Collapse:<ode )s <ode;* ocurre al contraer cualquier objeto Node,
referenciado por el parmetro Node.
E(pand:<ode )s <ode;* ocurre cuando se expande un objeto Node
en un control TreeView; es decir, cuando sus nodos secundarios se
vuelven visibles.
<odeClic-:<ode )s <ode;* ocurre al hacer clic en un nodo,
referenciado por el parmetro Node.
127
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
La coleccin Nodes tiene contiene los objetos Node que estn presentes en
el control y tiene los clsicos miembros )dd, %emove, Clear, 7tem y Count. Las
propiedades de los objetos Node son las siguientes:
C.ild* devuelve una referencia al primer elemento secundario de un
objeto Node.
C.ildren* devuelve el nmero de nodos secundarios que tiene un
objeto Node.
E(panded* evuelve o establece un valor boolean que indica si un
objeto Node est expandido.
E(panded7mage* devuelve o establece ndex o Key de una imagen
en un control mageList usado cuando el nodo est expandido.
First$ibling* devuelve una referencia al primer objeto Node en un
nivel jerrquico.
FullPat.* devuelve el nombre cualificado completo de un objeto
Node.
7mage* devuelve o establece el ndice o clave de la imagen contenida
en el control mageList enlazado al TreeView.
!ast$ibling* devuelve una referencia al ltimo objeto Node de un nivel
jerrquico.
<e(t* devuelve una referencia al siguiente objeto Node de un nivel
jerrquico.
Previous* evuelve una referencia objeto Node anterior en un nivel
jerrquico.
%oot* devuelve una referencia al objeto Node raz de un control
TreeView.
$elected* devuelve o establece un valor Boolean que indica si un
objeto Node est seleccionado.
$elected7mage* devuelve o establece un ndex o Key de una imagen
en un control mageList que se muestra cuando est seleccionado un
objeto Node.
/e(t* devuelve o establece el texto que se mostrar en el nodo.
Las funciones de este objeto son las siguientes:
CreateDrag7mage* crea una imagen compuesta de un icono y un
ttulo que se usa en operaciones de arrastrar y colocar. Devuelve un
objeto PictureDisp.
Ensure0isible* asegura que un objeto Node sea visible, desplazando
o expandiendo el control si es necesario; resultado de tipo Boolean.
List%ie6.
Este control
se visualiza en la
ventana del
Explorador de
Windows, en la
regin derecha
128
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
donde se muestran los ficheros y directorios. Tiene cuatro vistas, como las que
dispone el explorador: conos grandes, conos pequeos (en la imagen), Lista y
Detalles. Este control tiene, a diferencia de los anteriores, dos colecciones:
ColumnHeaders y !ist7tems6 que almacenan objetos ColumnHeader y !ist7tem. Las
propiedades del control ListView son las siguientes:
)rrange* devuelve o establece cmo se organizan los iconos en las
vistas de iconos e iconos pequeos de un control ListView.
Enumeracin ListArrangeConstants.
,ac-Color* establece o devuelve el color de fondo del control
ListView.
DropHig.lig.t* devuelve una referencia a un objeto Listtem y destaca
el objeto con los colores de resalte del sistema.
HideColumnHeaders* devuelve o establece si los encabezados de
columna de un control ListView estn ocultos en el modo de ver
nforme. Propiedad de tipo Boolean.
Hide$election* determina si el elemento seleccionado se mostrar
como seleccionado cuando el control ListView pierda el enfoque.
!abelEdit* devuelve o establece un valor que determina si un usuario
puede modificar la etiqueta de un objeto Listtem.
!abel1rap* devuelve o establece un valor que determina si las
etiquetas se ajustan cuando ListView est en el modo de ver cono.
Multi$elect* devuelve o establece un valor que indica si un usuario
puede realizar selecciones mltiples en el control ListView y cmo se
realizan las selecciones mltiples.
$elected7tem* devuelve una referencia al objeto Listtem
seleccionado actualmente.
$mall7cons* devuelve o establece las imgenes asociadas con la
propiedad Smallcons de un control ListView.
$orted* propiedad Boolean que indica si los elementos de un control
se ordenan automticamente de forma alfabtica.
$ort9e'* devuelve o establece la clave de ordenacin actual.
$ort5rder* devuelve o establece si Listtems se ordenar en sentido
ascendente o descendente. Enumeracin ListSortOrderConstants.
0ie2* devuelve o establece el tipo de vista que presentar el control
ListView. Estos valores se extraen de una enumeracin llamada
ListViewConstants.
Los mtodos y funciones que presenta son los siguientes:
Find7tem:s+ )s $tring6C1.ereD6C7nde(D6C#PartialD;* busca un elemento
en la lista y devuelve una referencia a ese elemento (Listtem).
8etFirst0isible:;* obtiene una referencia al primer elemento visible en
el rea cliente.
Hit/est:(6';* devuelve una referencia al objeto Listtem situado en las
coordenadas x e y. Se usa en las operaciones de arrastrar y colocar.
$tart!abelEdit:;* inicia una operacin de modificacin de una etiqueta
en un objeto Listtem.
129
)olumn%eader
*ist+tem
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
)#ter!abelEdit:Cancel )s 7nteger6 <e2$tring )s $tring;* ocurre
cuando un usuario modifica la etiqueta del objeto Listtem
seleccionado actualmente.
,e#ore!abelEdit:Cancel )s 7nteger;* ocurre cuando un usuario intenta
modificar la etiqueta del objeto Listtem seleccionado actualmente.
ColumnClic-:ColumnHeader )s ColumnHeader;* ocurre al hacer clic
en un objeto ColumnHeader de un control ListView.
7temClic-:7tem )s !ist7tem;* ocurre curre al hacer clic en un objeto
Listtem de un control ListView.
Se mencion que este control tiene dos colecciones: Listtems y
ColumnHeaders, los elementos Listtem son los iconos que se ven en las
ventanas, sin embargo, los objetos ColumnHeader solo se visualizan en la vista
Reporte, que coincide con la vista Detalles del explorador de Windows (ver
imagen).
El texto que define el nombre del fichero o directorio est especificado por la
propiedad /e(t del objeto Listtem, el tamao, el tipo y la fecha y hora de
modificacin estn determinados por una propiedad denominada de tipo String
llamada $ubitems que se accede mediante un ndice (comienza por 1). En el
ejemplo de la imagen, el control ListView tiene cuatro objetos ColumnHeader y
varios objetos Listtem. Cada objeto Listtem tiene un array llamado Subtems de
tres elementos (de ndice 1 a 3). Las propiedades de un objeto ColumnHeader son
las siguientes:
)lignment* devuelve o establece la alineacin del texto en la
columna. Enumeracin ListColumnAlignmentConstants.
9e'* devuelve o establece la cadena nica de un objeto en una
coleccin.
$ub7tem7nde(* devuelve el ndice del subelemento (propiedad
Subtems del Listtem) asociado con un objeto ColumnHeader en un
control ListView.
/e(t* devuelve o establece el texto que se mostrar en un control.
1idt.* devuelve o establece el ancho de un objeto.
Las propiedades del objeto Listtem son las siguientes:
8.osted* devuelve o establece el estado visual de un objeto Listtem,
propiedad Boolean.
7con* devuelve o establece el ndice de un icono en un control
mageList asociado.
9e'* devuelve o establece la clave del objeto Listtem.
$elected* propiedad Boolean que devuelve o establece un valor que
indica si un objeto Listtem est seleccionado.
$mall7con* devuelve o establece el ndice de un icono pequeo en un
control mageList asociado.
$ub7tems:7nde( )s 7nteger;* devuelve o establece una matriz de
cadenas que representa los datos de Listitem.
/e(t* devuelve o establece el texto que se mostrar en un control.
Tambin tiene los siguientes mtodos y funciones:
130
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
CreateDrag7mage* crea una imagen compuesta de un icono y un
ttulo que se usa en operaciones de arrastrar y colocar. Devuelve un
objeto PictureDisp.
Ensure0isible* asegura que un objeto Listtem sea visible,
desplazando o expandiendo el control si es necesario; resultado de
tipo Boolean.
Ejemplo.
Cree un nuevo proyecto estndar y haga una referencia al componente ya
mencionado. Luego coloque en el formulario los siguientes controles:
Control %ro!iedad Valor Control %ro!iedad Valor
iml16
(mageList)
Height
Width
16
16
iml32
(mageList)
Height
Width
32
32
imgRes
(mage)
Stretch True lvwProb
(ListView)
View lvwcon
Progressbar1
(Progressbar)
Min
Max
0
50
Slider1
(Slider)
Min
Max
0
50
stbBarra
(StatusBar)
------- -------- TlbBarra
(ToolBar)
------- --------
trwProb
(TreeView)
------- --------
Ahora escriba el siguiente cdigo en la ventana de cdigo del formulario:
O4tion E$4li"it
Private Sub Form_Load()
,im ). A! Strin
c"ara imGene! en lo! "ontrole! imaeLi!t
). > ]C7[Sindow![Aro!.bm4]
iml1?.Li!t%mae!.Add 1& ]Aro!]& LoadPi"ture().)
imlH9.Li!t%mae!.Add 1& ]Aro!]& LoadPi"ture().)
). > ]C7[Sindow![6eja!.bm4]
iml1?.Li!t%mae!.Add 1& ]6eja!]& LoadPi"ture().)
imlH9.Li!t%mae!.Add 1& ]6eja!]& LoadPi"ture().)
). > ]C7[Sindow![Sinu4d.i"o]
iml1?.Li!t%mae!.Add 1& ]/undo]& LoadPi"ture().)
imlH9.Li!t%mae!.Add 1& ]/undo]& LoadPi"ture().)
). > ]C7[Sindow![S+!tem[%81$"..i"o]
iml1?.Li!t%mae!.Add 1& ]Pantalla]& LoadPi"ture().)
imlH9.Li!t%mae!.Add 1& ]Pantalla]& LoadPi"ture().)
). > ]C7[Sindow![E!terilla.bm4]
iml1?.Li!t%mae!.Add 1& ]E!tera]& LoadPi"ture().)
imlH9.Li!t%mae!.Add 1& ]E!tera]& LoadPi"ture().)
cmue!tra la .un"i@n Overla+ del imaeli!t
131
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
im)e!.Pi"ture > imlH9.Overla+(]Aro!]& ]E!tera])
ca!o"ia lo! "ontrole! "on la! li!ta! de imaene!
tvwProb.%maeLi!t > iml1?7 tlb#arra.%maeLi!t > _
imlH9
lvwProb.%"on! > imlH97 lvwProb.Small%"on! > iml1?
Call )ellenartvwProb7 Call Carar#arra
Call CararXerramienta!
tlb#arra.#utton!(]Mi"on]).Ialue > tbrPre!!ed
End Sub
Private Sub )ellenartvwProb()
,im 6vw A! Node
c4rimera .orma de "rear un nodo
Set 6vw > tvwProb.Node!.Add
Sit- 6vw
.*e+ > ]Nodo1]7 .%mae > ]E!tera]7 .6e$t > ]Nodo
Prin"i4al]7 .Sele"ted%mae > ]6eja!]
End Sit-
c!eunda .orma de "rear un nodo
tvwProb.Node!.Add ]Nodo1]& tvwC-ild& ]Nodo1.1]& _
]Nodo -ijo]& ]/undo]& ]Pantalla]
tvwProb.Node!.Add ]Nodo1]& tvwC-ild& ]Nodo1.9]& _
]Otro nodo -ijo]& ]/undo]& ]Pantalla]
Set 6vw > tvwProb.Node!.Add
Sit- 6vw
.*e+ > ]Nodo9]7 .%mae > ]Aro!]7 .6e$t > _
]Nodo )aON]7 .Sele"ted%mae > ]E!tera]
End Sit-
celimina el objeto de la memoria
Set 6vw > Not-in
End Sub
Private Sub Carar#arra()
,im P A! Panel
!tb#arra.Font.#old > 6rue
Set P > !tb#arra.Panel!.Add
Sit- P
.Alinment > !brLe.t7 .6e$t > Str(Now)7 .Ii!ible _
> 6rue7 .AutoSiNe > !brContent!7 .*e+ > ]Panel1]
End Sit-
!tb#arra.Panel!.Add & ]Panel9]& ]%"ono/ue!tra]& & _
iml1?.Li!t%mae!.%tem(K).E$tra"t%"on
!tb#arra.Panel!(9).AutoSiNe > !brContent!
Set P > Not-in
End Sub
Private Sub CararXerramienta!()
,im # A! #utton
tlb#arra.#utton!.Add & ]Cerrar]& ]Salir]& & ]/undo]
132
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
Set # > tlb#arra.#utton!.Add
Sit- #
.Ca4tion > ]/en!aje]7 .,e!"ri4tion > _
]Menera un men!aje] J vbCrL. J ]/!#o$]7 .%mae > _
]E!tera]7 .*e+ > ]/en!aje]
End Sit-
tlb#arra.#utton!.Add & ]A^adir]& ]A^adir %tem]& & _
]Aro!]
Set # > tlb#arra.#utton!.Add
Sit- #
.Ca4tion > ]%"ono!]7 .*e+ > ]Mi"on]7 .St+le > _
tbrC-e"8
End Sit-
Set # > tlb#arra.#utton!.Add
Sit- #
.Ca4tion > ]Li!ta]7 .*e+ > ]Li!ta]7 .St+le > _
tbrC-e"8
End Sit-
Set # > Not-in
End Sub
Private Sub lvwProb_%temCli"8(#+Ial %tem A! _
Com"tlLib.Li!t%tem)
/!#o$ ]*e+>] J %tem.*e+ J vbCrL. J ]6e$t>] J
%tem.6e$t
End Sub
Private Sub Slider1_S"roll()
Prore!!#ar1.Ialue > Slider1.Ialue
End Sub
Private Sub tlb#arra_#uttonCli"8(#+Ial #utton A! _
Com"tlLib.#utton)
,im /! A! Strin
Sele"t Ca!e #utton.*e+
Ca!e ]Cerrar]
End
Ca!e ]/en!aje]
/!#o$ ]Xa -e"-o "li" en el bot@n men!aje]& _
vb%n.ormation
Ca!e ]A^adir]
/! > %n4ut#o$(]E!"riba un te$to])
lvwProb.Li!t%tem!.Add & ]Li] J _
lvwProb.Li!t%tem!.Count& /!& ]/undo]& ]Aro!]
Ca!e ]Mi"on]
lvwProb.Iiew >lvw%"on
tlb#arra.#utton!(]Li!ta]).Ialue > tbr3n4re!!ed
133
1icroso4t 9indo:s Coon Controls ?.@ Elas G. Castillo
Ca!e ]Li!ta]
lvwProb.Iiew > lvwLi!t
tlb#arra.#utton!(]Mi"on]).Ialue > tbr3n4re!!ed
End Sele"t
End Sub
134
Visual Basic " O44ice. Elas G. Castillo
Visual Basic " O44ice.
as aplicaciones de Microsoft Office son aplicaciones ActiveX. Este tipo de
aplicaciones est conformada por una serie de objetos los cuales son
accesibles desde otras aplicaciones para poder ser utilizados; por ejemplo,
desde Visual Basic se puede hacer referencia a Microsoft Excel (o cualquier otro
componente de Office) y utilizar sus objetos e inclusive crear ficheros, funciones,
grficos y todo lo que Excel puede hacer. En este caso se dice que Excel es la
aplicacin $ervidor y Visual Basic es la aplicacinCliente. Los programas que
componen Office ya tienen en su men HERRAMENTAS, MACRO, EDTOR DE VSUAL BASC
o desde el teclado con Alt + F11, un Editor de Visual Basic para programar su
comportamiento y establece procedimientos definidos por el programador. Desde
aqu puede usted examinar los diversos objetos que contiene cada aplicacin de
Office para luego utilizarlos en Visual Basic 6.0.
L
En este captulo se demostrar la relacin de uno de los componentes de
Office, precisamente Microso#t E(cel. Se crear una aplicacin de ejemplo y se
utilizarn algunos objetos, no todos, como demostracin de lo que puede hacerse,
queda en manos de usted estudiar desde el mencionado Editor de Visual Basic
desde el programa de Office correspondiente sus objetos y colecciones, ya que se
procede de forma similar para todos ellos.
Cree un nuevo proyecto estndar y vaya al men PROYECTO, REFERENCAS y
haga una referencia a Microsoft Excel (por ejemplo Microsoft Excel 9.0 Object
Library). Una vez hecho esto dispone de todos los objetos para trabajar en Excel.
Acto seguido debe crearse un objeto que represente a la propia aplicacin
Servidor, o sea, la aplicacin Excel, de la siguiente forma:
Private 0l! A! E$"el.A44li"ation
Set 0l!>CreateObje"t(<E$"el.A44li"ation=)
Si en vez de trabajar con Excel se trabajara por ejemplo con Word, habra
que utilizar Word.Application en vez de Excel.Application.
Cuando no se necesite ms el objeto puede destruirlo con el mtodo Auit
del propio objeto Aplicacin (Application).
Microsoft Excel trabaja con Libros; un fichero de Excel es un libro el cual
podr tener como mnimo una hoja y ningn, uno o ms grficos. La aplicacin
Excel puede tener uno o ms libros abiertos. Un libro de excel est representado
por un objeto de tipo 1or-boo-, contenido en una coleccin llamada 1or-boo-s.
Una hoja de un libro est representado por un objeto de tipo 1or-s.eet contenido
en una coleccin del objeto Workbook denominada 1or-s.eets. Un grfico es un
objeto de tipo C.art contenido en una coleccin del objeto Workbook denominada
C.arts.
Para utilizar entonces un libro cree un objeto de tipo Workbook de la
siguiente forma:
,im Sb A! Sor8boo8
135
Visual Basic " O44ice. Elas G. Castillo
Set Sb>0l!.Sor8boo8!.Add
Esta forma agrega un nuevo libro a la aplicacin y el objeto Wb apunta a l.
Otras formas pueden ser las siguientes:
Set Sb>0l!.Sor8boo8!.%tem(1)
Set Sb>0l!.Sor8boo8!.O4en(Filename A! Strin)
La primer forma hace referencia al primer libro de la aplicacin y la segunda
forma hace referencia a un libro que se abrir con la funcin Open que recibe
como argumento una cadena de caracteres con la ruta y nombre del fichero a
abrir.
Para cerrar un libro se utiliza el mtodo Close del objeto Workbook. Este
mtodo lleva tres parmetros; el primero de tipo Boolean y especifica si se
guardar o no el libro (True o False respectivamente) y su valor por defecto es
True; el segundo y tercero se utilizarn en caso de que el primer argumento sea
True y especifica el nombre y la ruta del fichero, respectivamente.
Una hoja de clculo se crea de las siguientes formas:
,im S! A! Sor8!-eet
Set S!>Sb.Sor8!-eet!.Add
Set S!>Sb.Sor8!-eet!.%tem(9)
Donde la primer sentencia Set aade una nueva hoja al libro y la segunda
apunta a la segunda hoja del libro.
Excel posee otros objetos para el trabajo con los datos de la hoja de
clculo:
%ange:Cell>6CCell?D;* este objeto representa un rango de celdas,
donde el argumento Cell1 es obligatorio y es la celda de la parte
superior izquierda; el argumento Cell2 es opcional y es la celda de la
parte inferior derecha del rango, en caso de omitirse el rango ser de
una nica celda definida por Cell1.
o $elect* este mtodo selecciona el rango.
o Clear* borra todo el contenido del rango.
o Column1idt.* establece o devuelve el ancho de las columnas.
o %o2Heig.t* devuelve o establece la altura de las filas.
o ,order)round:C!ine$t'leD;* marca un borde en la seleccin, el
borde se especifica en LineStyle.
,orders* este objeto permite definir todo el aspecto del borde del
rango. Tiene sus propiedades como Weight que define el grosor del
borde; LineStyle define el tipo de lnea; Color y Colorndex definen el
color del borde.
7nterior* es un objeto que representa el relleno o interior del rango.
Tiene las propiedades Color y Colorndex que definen el sombreado
del rango y Pattern establece el diseo del sombreado.
136
Visual Basic " O44ice. Elas G. Castillo
Cells:Fila6Columna;* representa una celda, donde fila y columna es el
nmero de fila y de columna que definen la celda.
Excel tambin dispone de un objeto llamado 1or-s.eerFunction donde
estn contenidas todas las funciones de Microsoft Excel (Suma, Promedio, etc.).
Los objetos Column y %o2 representan una columna y una fila, estos se
encuentran dentro de una coleccin llamada Columns y %o2s, respectivamente.
Otro objeto contenido en el objeto Workbook es el objeto C.art que
representa un grfico; se encuentra en una coleccin denominada C.arts del
objeto Workbook. Se crea de la siguiente forma:
,im C- A! C-art
Set C->Sb.C-art!.Add
Set C->Sb.C-art!.%tem(1)
Donde la primera sentencia Set crea un nuevo grfico y la segunda apunta
a uno ya existente. El objeto Chart tiene las siguientes propiedades:
C.art/'pe* define el tipo de grfico (de barras, lneas, circular, etc.).
$et$ourceData* define los datos que se utilizarn para el grfico y
lleva por argumento el objeto Range de una hoja de clculo y un
valor que indica si se representan los datos por columna o por filas.
!ocation* define si se colocar en una nueva hoja o dentro de una
hoja de clculo existente.
Has/itle* un valor de tipo Boolean que establece si el grfico tendr
ttulo o no.
!egend* objeto que representa el cuadro con la leyenda.
C.arttitle* objeto que representa el ttulo.
)(es* objeto que representa los ejes; Axes(xlCategory) representa el
eje X y Axes(xlValue) representa el eje Y.
Excel dispone de muchos otros objetos objetos que corresponde al
programador estudiar.
Ejemplo.
Cree un nuevo proyecto estndar y vaya al men PROYECTO, REFERENCAS y
haga una referencia a Microsoft Excel.
nserte dos cajas de texto llamadas t(tCateg y t(t0alor. Luego ingrese dos
cuadros de lista de nombre !ist> y !ist?. Por ltimo inserte un botn de nombre
cmdE(cel y establezca su propiedad Caption con Ver en Excel.
Escriba el siguiente cdigo en el formulario:
O4tion E$4li"it
,im 0l! A! E$"el.A44li"ation
Private Sub "mdE$"el_Cli"8()
,im $ A! %nteer& Cld A! Strin
,im Sb A! Sor8boo8& S! A! Sor8!-eet& C- A! C-art
Set 0l! > CreateObje"t(]E$"el.A44li"ation])
137
Visual Basic " O44ice. Elas G. Castillo
Set Sb > 0l!.Sor8boo8!.Add
Set S! > Sb.Sor8!-eet!.%tem(1)
Sit- S!
'A1( > ]CateorOa]7 '#1( > ]Ialor]
.)ane(]A17#1]).%nterior.Color > vb)ed
For $ > B 6o Li!t1.Li!tCount C 1
.Cell!($ Q 9& 1) > Li!t1.Li!t($)7 .Cell! _
(9 Q $& 9) > Li!t9.Li!t($)
Ne$t $
End Sit-
Set C- > Sb.C-art!.Add
Cld > ]A97#] J Li!t9.Li!tCount Q 1
Sit- C-
.SetSour"e,ata S!.)ane(Cld)& B7 .C-art6+4e > _
$lH,Column
End Sit-
0l!.Ii!ible > 6rue
Set C- > Not-in7 Set S! > Not-in
Set Sb > Not-in
End Sub
Private Sub Form_Load()
t$tIalor.6e$t > B
End Sub
Private Sub Form_3nload(Can"el A! %nteer)
On Error )e!ume Ne$t
0l!.Ii!ible > Fal!e7 0l!.Sor8boo8!.Clo!e7 0l!.2uit
Set 0l! > Not-in
End Sub
Private Sub t$tCate_*e+Pre!!(*e+A!"ii A! %nteer)
%. *e+A!"ii > 1H 6-en
t$tIalor.SetFo"u!
End %.
End Sub
Private Sub t$tIalor_*e+Pre!!(*e+A!"ii A! %nteer)
%. *e+A!"ii > 1H 6-en
Li!t1.Add%tem t$tCate.6e$t7 Li!t9.Add%tem _
t$tIalor.6e$t
t$tCate.6e$t > ]]7 t$tIalor.6e$t > B
t$tCate.SetFo"u!
End %.
End Sub
138
Visual Basic " O44ice. Elas G. Castillo
Este modelo es solamente un ejemplo de lo que puede hacerse vinculando
Office y Excel u eventualmente, cualquier otra aplicacin de Office.
139
8ndice. Elas G. Castillo
8ndice.
QU ES VISUAL BASIC. ......................................................................................................... 2
LOS OBJETOS. .......................................................................................................................... 3
,-.,+/0#0/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3
123.0.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 3
4U5)+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 4
/6/53.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 4
ENTORNO DE TRABAJO. ...................................................................................................... 5
/* /7#1+5#0.- 0/ .89/3.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 7
4+)%/-.( 0/ U5 ,-.:/)3.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 7
LOS CONTROLES. ................................................................................................................... 8
/3+;U/3#( <*#8/*=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 8
)#9#( 0/ 3/73. <3/738.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 9
)U#0-.( 0/ *+(3# <*+(38.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 10
)U#0-.( ).18+5#0.( <).18.8.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 11
1#-).( <4-#1/=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 12
8.3.5/( 0/ .,)+>5 <.,3+.58U33.5=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 12
)#(+**#( 0/ 6/-+4+)#)+>5 <)%/)?8.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 13
8.3.5/( 0/ ).1#50. <).11#508U33.5=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 13
8#--#( 0/ 0/(,*#@#1+/53. <()-.**8#-(=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 14
).53-.* 0/ 3+/1,. <3+1/-=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 14
).18. 0/ U5+0#0/( 0/ 0+(). <0-+6/*+(38.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 15
*+(3#( 0/ 0+-/)3.-+.( <0+-*+(38.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 15
*+(3#( 0/ #-)%+6.( <4+*/*+(38.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 15
*A5/#( <*+5/=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 16
4.-1#( <(%#,/=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 16
)#9#( 0/ +1#B/5 <+1#B/=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 17
)#9#( 0/ 0+8U9. <,+)3U-/8.7=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 17
).53-.* 0/ 0#3.( <0#3#=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 18
4.-1U*#-+.( <4.-1=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 19
/7,*+)#)+.5/( 0/ #*BU5.( /6/53.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 20
.,/-#)+.5/( 0/ #--#(3-/$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 21
ROCEDI!IENTOS" #UNCIONES $ VARIABLES. ....................................................... 23
*.( ,-.)/0+1+/53.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 23
*#( 4U5)+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 25
3+,.( 0/ 0#3.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 27
*#( 6#-+#8*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 28
*#( ).5(3#53/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 30
/(3-U)3U-#( <3+,.( 0/4+5+0.( ,.- /* U(U#-+.=$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 30
*#( /5U1/-#)+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 31
140
8ndice. Elas G. Castillo
*.( #--#:($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 32
4U5)+.5/( ;U/ 0/6U/*6/5 #--#:($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 35
#--#:( 0/ ).53-.*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 35
SENTENCIAS DE CONTROL. ............................................................................................. 3%
+4 C 3%/5 C /*(/ C /50 +4 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 37
(/53/5)+# (/*/)3 )#(/C )#(/ C /50 (/*/)3$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 38
8U)*/ 4.-C5/73$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 39
(/53/5)+# B.3. (U8$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 40
'%+*/C '/50$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 40
0.C *.., $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 41
/* 8*.;U/ '+3%$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 42
)#(.( +1,.(+8*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 42
OERADORES $ #UNCIONES. .......................................................................................... &&
.,/-#0.-/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 44
4U5)+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 44
CAJAS DE !ENSAJE $ DE ENTRADA. ............................................................................ &8
)#9#( 0/ 1/5(#9/$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 48
)#9#( 0/ /53-#0#$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 49
LOS !EN'S. ............................................................................................................................ 5(
/* /0+3.- 0/ 1/5D($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 50
1/5D( ).53/73U#*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 51
GR)#ICOS EN VISUAL BASIC. .......................................................................................... 52
/* ).*.-$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 52
(+(3/1#( 0/ )..-0/5#0#($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 54
123.0.( B-E4+).($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 55
TRABAJO CON #IC*EROS. ................................................................................................ 58
#-)%+6.( (/)U/5)+#*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 58
4+)%/-.( 0/ #))/(. #*/#3.-+.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 60
)+/--/ 0/ 4+)%/-.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 63
4U5)+.5/( 0/ 4+)%/-.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 64
LA I!RESORA. .................................................................................................................... +5
,-.,+/0#0/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 65
.89/3. ,-+53/-($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 67
LOS RO$ECTOS. ................................................................................................................. +,
/* .89/3. #,,$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 70
EL ORTAAELES DE -INDO-S. ................................................................................ %.
OTROS OBJETOS DE VISUAL BASIC. ............................................................................. %2
/* .89/3. /--$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 73
141
8ndice. Elas G. Castillo
CLASES $ OBJETOS. ............................................................................................................ %5
,-.,+/0#0/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 75
123.0.( : 4U5)+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 76
/6/53.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 76
#(+(3/53/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 76
*#( ).*/))+.5/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 78
)-/#)+>5 0/ .89/3.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 78
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 79
CREAR CONTROLES !EDIANTE C/DIGO. ................................................................. 82
)-/#)+>5 1/0+#53/ U5 #--#: 0/ ).53-.*/($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 82
)-/#)+>5 1/0+#53/ )-/#)+>5 0/ .89/3.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 83
ARC*IVOS DE RECURSOS. ................................................................................................ 85
/73-#/- -/)U-(.($ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 85
#OR!ULARIOS !DI. ........................................................................................................... 8%
BASES DE DATOS. ................................................................................................................. ,(
0#3# #))/(( .89/)3$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 91
0#3#8#(/$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 91
-/).-0(/3$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 93
4+/*0$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 94
3#8*/0/4$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 95
6+(0#3#$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 95
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 96
LA AI DE -INDO-S. ......................................................................................................... ,,
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 101
CREACI/N DE LIBRER0AS. ............................................................................................. .(+
*+8-/-A# 0/ /9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 106
CREACI/N DE CONTROLES. .......................................................................................... ...
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 111
!ICROSO#T CO!!ON DIALOG. .................................................................................. ..+
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 119
!ICROSO#T -INDO-S CO!!ON CONTROLS 5.( ................................................. .2.
+1#B/*+(3$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 121
3..*8#-$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 122
3#8(3-+,$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 124
(3#3U(8#-$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 125
,-.B-/((8#-$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 126
(*+0/-$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 126
3-//6+/'$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 126
142
8ndice. Elas G. Castillo
*+(36+/'$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 128
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 131
VISUAL BASIC $ O##ICE. ................................................................................................ .35
/9/1,*.$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 137
INDICE. ................................................................................................................................... .&(
143

Vous aimerez peut-être aussi