Anda di halaman 1dari 74

Introduccin a Visual Basic 6.

Archivos del proyecto Formularios (*.frm) Mdulos estndar (*.bas) Mdulos de clase (*.cls) Controles El Depurador (Debugger)

Es un lenguaje de programacin de alto nivel, que permite desarrollar aplicaciones Windows; este lenguaje utiliza el cdigo BASIC para las instrucciones y sentencias de la aplicacin. Es un lenguaje basado en objetos, ya que tiene una interfaz grfica donde se colocan los controles y luego se programan los eventos de cada objeto en cdigo BASIC y se ejecuta la aplicacin. Contiene todos los controles que se ven en el entorno Windows y stos se colocan sobre un elemento llamado Formulario, el cual ser la ventana de la aplicacin. Con Visual Basic 6.0 es muy sencillo crear aplicaciones y es el lenguaje predilecto de los que recin principian en el campo de la programacin Los programas creados con Visual Basic 6.0 se podrn ejecutar en cualquier equipo, aunque no tengan instalado el lenguaje; slo basta con que est presente en el directorio C:\Windows\System el archivo msvbvm60.dll (se puede copiar y pegar en dicho directorio) para que las aplicaciones funcionen. Sin embargo, pueden ser necesarios otros archivos, generalmente con extensin *.ocx y*.dll con informacin sobre los controles y libreras de objetos utilizados por el programa. Toda aplicacin que se est creando en Visual Basic 6.0 se denomina Proyecto y contiene bsicamente dos archivos, uno con extensin *.vbp y otro con extensin *.frm. El archivo *.vbp contiene toda la informacin acerca del proyecto en cdigo ASCIi, o sea, editable por el Block de Notas; entre los datos que contiene, estn los archivos que lo componen (*.frm, *.bas, *.cls, etc) y los archivos que utiliza, como los ya mencionados con extensin *.ocx o *.dll. Para crear el ejecutable, en el men Archivo, Generar... exe, se desplegar un cuadro de dilogo donde se elegir el lugar donde colocar el ejecutable, una vez hecho esto se compilar el proyecto y se crear el ejecutable. Al iniciar el programa aparecer una pantalla donde se elegir el tipo de programa que se crear: una aplicacin estndar, una aplicacin ActiveX, un control, etc. Si se selecciona una aplicacin estndar (EXE estndar) aparecer una pantalla donde se encuentra el Formulario, o sea, la futura ventana. Tambin se visualiza la caja de herramientas donde se encuentran los controles que se colocarn en el formulario. En la parte superior derecha se encuentra el Explorador de Proyecto, el cual es un cuadro donde se ven los formularios, mdulos y dems que pueda contener ese proyecto. Debajo de ste se encuentra el cuadro Propiedades, el cual muestra las propiedades del objeto seleccionado. Debajo de ste se encuentra el cuadro Posicin, el cual muestra la posicin del formulario en la pantalla, y permite ajustarla. Por ltimo, si alguna de estas pantallas no llega a visualizarse porque se cerraron, se las

hace aparecer desde el men Ver. Los formularios, mdulos, etc., tienen una pantalla propia que muestra su contenido y que al haber ms de una abierta, se puede cambiar de ventana desde el men Ventana.

Archivos del Proyecto.


Ya se dijo que un proyecto est compuesto bsicamente por dos archivos con extensin *.vbp (Visual Basic Proyect) el cual contiene la informacin del proyecto y otro con extensin *.frm (Form) el cual es el formulario en el que se desarrollar la aplicacin. Adems, pueden haber otros archivos *.frm en caso de tener ms de un formulario, mdulos estndar (*.bas) o mdulos de clase (*.cls); adems de otros como pginas de datos, controles ActiveX (*.ocx), etc. Ahora se describir la funcin y utilidad de algunos de estos archivos:

Formularios (*.frm)
Estos archivos tienen la informacin acerca de la ventana que representa, los controles que tiene, sus propiedades y el cdigo escrito en l. Este archivo contiene la interfaz grfica de la ventana y tambin el cdigo en ella escrito. Por lo tanto, a la hora de editarlo, se tendrn dos ventanas, una que muestra su interfaz grfica la cual se puede ver seleccionando dicho formulario en el Explorador del Proyecto y en Ver Objeto en el men Ver; la otra mostrar el cdigo BASIC escrito en el archivo y se accede a ella seleccionando el formulario y en Ver Cdigo desde el men Ver. Este archivo est escrito en cdigo ASCII editable por el Block de Notas.

Mdulos estndar (*.bas)


Estos archivos slo contienen cdigo BASIC y por lo tanto no tiene interfaz grfica, sin embargo su utilidad es grande ya que permite a todo el proyecto utilizar las funciones y procedimientos en l escritos, y de esta forma se evita reescribir cdigo. El alcance del cdigo escrito aqu es mucho ms amplio que el escrito en los formularios. Tambin se puede leer con el Block de Notas por contener caracteres ASCII.

Mdulos de Clase (*.cls)


Este tipo de mdulos, al igual que los mdulos estndar no tienen interfaz grfica y slo contienen cdigo BASIC, editable por el Block de Notas. La utilidad de stos es que permiten crear objetos diseados por el usuario, con propiedades, mtodos, funciones y eventos creados tambin por el usuario. Existen adems otros objetos como son los componentes ActiveX (otros controles), o los objetos Connection que son conexiones a bases de datos de otros servidores, etc. Para ingresar un nuevo formulario, mdulo estndar, mdulo de clase, etc., ir al men Insertar y elegir el componente a ingresar; tambin se puede ingresar alguno de estos componentes ya existente haciendo clic con el botn derecho en el Explorador de Proyecto

y elegir el comando importar archivo, entonces se despliega un cuadro de dilogo en el cual se elegir el archivo a importar. Para quitar uno de estos componentes, seleccionarlo con el botn derecho y elegir Quitar, se pedir confirmacin y se quitar el archivo. Un objeto de estos tipos, una vez guardados, permanecen en su ubicacin, si se quitan del Proyecto no se elimina el archivo del disco.

Controles.
Los controles son aquellos objetos de Visual Basic 6.0 que tienen una interfaz grfica. Estos se encuentran en la caja de herramientas y son controles estndar; entre ellos se encuentran los siguientes:

Etiquetas (Label) Cajas de Texto (Textbox) Barras de Desplazamiento (Scrollbars) Marcos (Frame) Botones de Opcin (Option) Casillas de Verificacin (Checkbox) Cuadros de Lista (Listbox) Cuadros Combinados (Combobox) Botones de Comando (Commandbutton) Controles de archivos (Drive, Dirlist, Filelist) Controles grficos (Image, Picturebox) Control de tiempo (Timer) Control de Datos (Datacontrol)

Si se agregan algunos componentes, desde el men Proyecto, Controles adicionales, se agregarn libreras y controles ActiveX (*.dll y *.ocx) los cuales contienen otros tipos de controles que aparecern disponibles en la caja de herramientas, controles como la barra de progreso (Progressbar), el control Listview, el control Imagelist, el control de Fechas (DTPitch), etc. Cada control que se coloca en el formulario, y aun el mismo formulario tienen sus propios Eventos, Propiedades y Mtodos; stos se vern ms adelante.

El Depurador (Debugger)
Cuando se crea una aplicacin, se suelen cometer muchos errores hasta que, con muchas pruebas, se los va corrigiendo (depurando) hasta que responde de acuerdo a lo que se espera. Visual Basic 6.0 tiene una excelente herramienta para la depuracin de las aplicaciones. Para este fin se puede ejecutar la aplicacin en cualquier momento, desde el men Ejecutar, si se llega a un momento en el programa en el cual se introdujeron errores, el programa dar un mensaje de error y mostrar en la ventana de cdigo el lugar donde se encuentra el error. Tambin se puede pausar o terminar la ejecucin del programa con los botones Interrumpir y Restablecer de este men. Estos tres botones se encuentran tambin en la barra de

herramientas Estndar. El men Depuracin permite la ejecucin controlada del programa;ejecutar el programa paso a paso, colocar puntos de interrupcin en el cdigo y al llegar a ese punto la ejecucin del programa se pausa y se muestra la lnea de cdigo resaltada. En este men hay un comando llamado Agregar Inspeccin, donde se escribe una expresin (variable, propiedad de un control, etc.), se le asigna un contexto (procedimiento, funcin, etc.), un mdulo (un formulario, un mdulo estndar, todo el proyecto, etc.) y un tipo de inspeccin, la cual ser el criterio que se utilizar para examinarla y que interrumpir el programa cuando la condicin se cumpla. Tambin en el men Ver se encuentra la ventana Inmediato, en la cual se pueden visualizar los resultados (cuando el programa est interrumpido o no est ejecutndose), escribiendo la sentencia Print y luego la expresin. Se puede utilizar tambin llamndola desde el cdigo con la sentencia Debug. Otra ventana es la ventana Locales, en la cual se visualizan los cambios ocurridos en las variables locales de un procedimiento o funcin, es ideal para cuando se ejecuta un programa paso a paso, para examinar el comportamiento de las variables. Por ltimo, la ventana Inspecciones muestra las variables que se hallan agregado con Agregar inspeccin.

Personalizacin de Visual Basic 6.0


La ventana de cdigo. Comentarios. Sentencias en la misma lnea y sentencias en ms de una lnea Agregando componentes Propiedades del Proyecto

Visual Basic 6.0 se puede personalizar para una mayor facilidad al trabajar con l, de acuerdo a las preferencias del usuario. En la ventana de cdigo, el cdigo que se escribe aparece con determinados colores. El cdigo escrito aparece en negro, las palabras clave (Keywords) de Visual Basic 6.0 aparecen en azul, los errores en rojo y los comentarios en verde. Estos colores aparecen por defecto, sin embargo se pueden personalizar. Para esto, ir al men Herramientas y luego a Opciones. En la pestaa Formato del Editor aparece la opcin de cambiar los colores del cdigo, la fuente y tamao. En la ventana de cdigo, los procedimientos (las expresiones que comienzan con Private Sub y finalizan con End Sub) aparecen separadas por una lnea. En la pestaa Editor, la casilla Separador de procedimientos, se activa y desactiva esta caracterstica. Cuando se escribe un identificador (el nombre de un objeto por ejemplo) seguido de un punto, aparece una lista con las propiedades y mtodos de ese objeto. Esta caracterstica se habilita o deshabilita desde la pestaa Editor, las casillas Lista de miembros automtica, Informacin rpida automtica y Sugerencias de datos automticas. Estas caractersticas

se denominan Autocompletar. Los formularios poseen una cuadrcula en la vista diseo, la cual no se ve cuando se ejecuta el programa. Esta sirve como gua para el usuario a la hora de posicionar los controles en el formulario. Se personaliza, activa o desactiva esta caracterstica desde la pestaa General, Opciones de Cuadrcula. Cuando se utilicen variables, puede elegirse que se obligue a declararlas todas a la hora de escribir cdigo, aparecer al inicio de la ventana una expresin que dir Option Explicit; para activar o desactivar esta opcin, pestaa Editor, casilla Requerir declaracin de variables.

La ventana de cdigo.
Con respecto a la ventana de cdigo, vale mencionar algunas caractersticas de sta a fin de utilizar mejor las posibilidades que brinda. Los cuadros combinados de la parte superior indican el control y el evento que involucra el procedimiento a editar. Los botones de la parte inferior izquierda sirven para mostrar un slo procedimiento a la vez en la ventana (se puede alternar con los cuadros combinados de la parte superior) o todos los procedimientos separados por una lnea. En la parte izquierda de esta ventana hay una barra vertical donde se cliquea para agregar puntos de interrupcin (que aparecen como un crculo bord) para la ejecucin controlada de un programa.

Comentarios.
Los comentarios son frases explicativas acerca del cdigo que se est escribiendo, se presentan por defecto de color verde y no son tomados en cuenta a la hora de ejecutar el programa (lo mismo que para las sentencias que utilicen Debug). Para escribir un comentario, se comienza con un carcter '(apstrofe) y luego se escribe lo que se desee.

Sentencias en la misma lnea y sentencia en ms de una lnea.


Las sentencias se pueden separar de dos formas: comenzando a escribir en otra lnea o en la misma lnea, separada por : (dos puntos). Tambin se puede escribir una sentencia en ms de una lnea, si se deja un espacio y se coloca un carcter & antes de pasar a la lnea siguiente. Una limitacin de este tipo de escritura es que no se pueden comentar este tipo de lneas.

Agregando componentes.
Puede que se desee utilizar controles adicionales (como los ya mencionados) o que se deseen utilizar libreras de objetos especiales, como DAO para el acceso a bases de datos (Access, dBase, Paradox, etc.). Estos componentes se pueden agregar desde el men Proyecto, Controles adicionales (o con Ctrol+T desde el teclado) para los controles y Proyecto, Referencias para las libreras. En ambos casos aparecer un cuadro para elegir los componentes deseados, o eliminar los que no se deseen utilizar.

Propiedades del Proyecto.


El proyecto que se est elaborando tiene sus propiedades: un nombre, descripcin, derechos de autor, nmero de versin, etc. Estas propiedades son accesibles desde el men Proyecto, Propiedades de... . En estas propiedades se basar un objeto denominado App.

Trabajo con Visual Basic 6.0


Eventos Ejemplo 1 Propiedades Ejemplo 2 Mtodos Ejemplo 3

Los objetos de Visual Basic 6.0 tienen (o pueden tener) eventos, propiedades y mtodos. Los eventos son las acciones que el usuario ejerce sobre un objeto; es un evento el hacer clic sobre un control, mover el ratn, etc. Las Propiedades son las cualidades que presenta un objeto; por ejemplo su nombre, su color, su tamao, su posicin, etc. Los Mtodos son las operaciones que un objeto puede hacer, por ejemplo un formulario posee el mtodo PrintForm, el cual enva un trabajo de impresin de s mismo.

Eventos.
Segn el tipo de objeto, se admitirn algunos eventos, ya que si bien hay eventos comunes a varios objetos, otros no los tienen, y algunos objetos no tienen eventos (por ejemplo los controles Line y Shape). En la ventana de de cdigo de un formulario hay dos cuadros combinados en la parte superior. El de la izquierda despliega todos los controles del formulario (y el propio formulario) que admiten eventos, si se selecciona uno, en el cuadro combinado de la

derecha aparecern todos los eventos que ese control soporta. Cuando un evento tiene lugar, el usuario programa lo que ese evento desencadenar. Esto se establece de la siguiente manera:
Private Sub objeto_evento() Sentencias End Sub

Donde objeto es el nombre del objeto en que se genera el evento y evento es el nombre del evento que se genera. Sentencias son las instrucciones que indican qu ocurrir al producirse este evento y End Sub finaliza este procedimiento. Antes de continuar, hay que aclarar los nombres de los controles. Un control puede tener cualquier nombre, siempre que empiece con una letra, que no tenga caracteres comodines (como ? ; / \ < > # : *) y no sea una palabra reservada por el lenguaje; estas palabras reservadas aparecen en azul cuando se escribe el cdigo (For, Private, End, If, Print, etc.). Por convencin, se establece que las tres primeras letras del nombre del objeto lo describan y las restantes describan su funcin; por ejemplo, una caja de texto donse se escriban edades, podra llamarse txtEdad, sin embargo es una convencin, no es regla. Algunos eventos tienen argumentos. Los argumentos son datos adicionales sobre el evento, los cuales lo hacen ms especfico; hay eventos que no utilizan argumentos y otros que s. Los argumentos se encierran entre parntesis a continuacin del nombre del evento.

Ejemplo 1
Crea un nuevo proyecto estndar y coloca los siguientes controles, con sus propiedades: Control Form "" "" Textbox Propiedad Name Caption Caption Name Valor frmProg cmdBlanco Blanco cmdAzul Azul Text1

Commandbutton Name Commandbutton Name

Escribe en la ventana de cdigo del formulario el siguiente cdigo:


Private Sub cmdBlanco_Click() Text1.BackColor=vbWhite End Sub Private Sub cmdAzul_Click() Text1.BackColor=vbBlue End Sub

Ejecute el programa como ya se ha visto anteriormente (men Ejecutar o F5). Cuando se hace clic sobre el botn de nombre cmdBlanco, se desencadena el evento Click, el cual trae por resultado el cambio del color de fondo de la caja de texto, y lo mismo ocurre con el botn cmdAzul. Ahora un ejemplo de un evento que lleva argumentos: el evento KeyPress. Este evento ocurre cuando se oprime una tecla del teclado sobre un control. Lleva por argumento la expresin Keyascii as Integer, el cual especifica el botn del teclado que se puls. Crea un nuevo proyecto y coloca los siguientes controles: Control Form "" Textbox "" Propiedad Valor Name frmProg cmdPrueba Convertir txtPrueba Caption Name Text

Commandbutton Name

Escribe en la ventana de cdigo del formulario el siguiente cdigo:


Private Sub cmdPrueba_Click() txtPrueba.Text=Chr(Keyascii) End Sub Private Sub txtPrueba_KeyPress(Keyascii as Integer) cmdPrueba.SetFocus End Sub

Pulse F5 para probar esta aplicacin. Cada tecla del teclado tiene un carcter en cdigo ASCII que la representa y se puede saber oprimiendo la tecla Alt y un nmero en el teclado numrico. Por ejemplo, el carcter @ tiene nmero 64, o sea que Alt+64 devolver el carcter @. A continuacin, una lista de los eventos ms usuales y su descripcin.

Click: ocurre al hacer clic sobre un control (con el botn primario del mouse). No lleva argumentos. Dblclick: ocurre al hacer doble click sobre un control (con el botn primario del mouse). No lleva argumentos. LostFocus: ocurre cuando un control pierde el Foco (cuando deja de estar activo), no lleva argumentos GotFocus: ocurre cuando un control recibe el Foco (comienza a estar activo), no lleva argumentos Change: ocurre cuando algo cambia en un control. No lleva argumentos. KeyPress: ocurre cuando se presiona una tecla del teclado sobre un control. Lleva por argumento la expresin Keyascii as Integer, un nmero entero que representa el cdigo ASCII de la tecla presionada.

MouseMove: ocurre cuando se mueve el mouse sobre un control. Tiene por argumentos ByVal Button as Integer, ByVal Shift as Integer, ByVal X as Single, ByVal Y as Single. Con respecto a estos argumentos, Button indica si hay algn botn presionado, Shift indica si est presionadoa alguna de las teclas del teclado (Shift, Control y/o Alt), X indica la coordenada X del puntero e Y indica la coordenada Y del puntero. MouseUp: ocurre al soltar un botn del mouse sobre un objeto. Tiene los mismos argumentos que el evento MouseMove. MouseDown: ocurre al presionar un botn del mouse sobre un objeto. Tiene los mismos argumentos que el evento MouseMove y MouseUp. DragOver: ocurre mientras se arrastra un objeto sobre otro. Vale decir que este evento no ocurre sobre el objeto arrastrado sino sobre el objeto sobre el que se arrastra. Los argumentos son X e y que son las coordenadas (como en los tres eventos anteriores) y un argumento llamado Control el cual indica el control que se arrastra. DragDrop: ocurre cuando finaliza una operacin de arrastre. Los argumentos son las coordenadas X e Y.

Hay eventos que son propios de cada control, porque solamente se producirn en ese control. Un ejemplo es el evento Timer del control Timer (un control estndar que permite que determinadas acciones se ejecuten peridicamente), el evento Resize del formulario, etc. Estos se vern cuando se vea cada control en particular. Ya se mencion que los eventos MouseUp, MouseDown, MouseMove tienen ciertos argumentos como Button y Shift que indican qu obtones del mouse y del teclad estn presionados. Estos valores son constantes de Visual Basic 6.0 que tienen un valor numrico y una constante literal. A continuacin dos tablas con los valores de estas constantes: Tabla 1 - Constantes del argumento Button Botn Constante Valor 1 2 4 3 Constante vbShiftMask vbCtrlMask vbAltMask Valor 1 2 4 3 Botn izquierdo presionado vbLeftButton Botn derecho presionado vbRightButton Botn central presionado Botn izq + der Tabla 2 - Constantes del argumento Shift Botn Tecla Shift Tecla Control Tecla Alt Tecla Shift + Ctrol vbMiddleButton

Propiedades.

Las propiedades de los objetos varan segn el objeto. Hay propiedades comunes a varios objetos y otras nicas, propias del objeto, debido a su funcin. Las propiedades se pueden definir en tiempo de diseo y en tiempo de ejecucin. Las propiedades se definen en tiempo de diseo mediante el cuadro Propiedades y en tiempo de ejecucin mediante las sentencias en el cdigo. Las propiedades definidas en tiempo de diseo son las propiedades por defecto de los objetos y stas se presentarn al cargarse el formulario (a menos que se cambien con el evento Load del formulario). Las propiedades pueden ser de slo lectura, de slo escritura o ambas. Las propiedades de slo lectura se pueden consultar pero no cambiar directamente, si se intenta cambiar el valor de una propiedad de lectura se producir un error en tiempo de ejecucin. Las propiedades de slo escritura no se pueden ver, solamente cambiar y son poco frecuentes. Las propiedades de lectura y escritura son consultables y editables por el usuario. Una propiedad se define en tiempo de ejecucin de la siguiente manera:
objeto.Propiedad=Valor

Para obtener el valor de una propiedad en tiempo de ejecucin se utiliza la siguiente sentencia:
destino=objeto.Propiedad

Destino es el lugar donde se mostrar el valor de la propiedad (en una variable, en una caja de texto, etc). En el primer ejemplo, al ejecutarse los eventos Click de los botones de comando, lo que ocurra era un cambio en la propiedad BackColor de la caja d texto. En el ejemplo del evento KeyPress del botn de comando, lo que desencadena es un cambio en la propiedad Text de la caja de texto. Las propiedades ms usuales de los controles son las siguientes:

Name: es el nombre interno del objeto. Con l se hace referencia a dicho objeto en el cdigo. Caption: es el texto que figurar en el control, un ttulo; no es el nombre del control sino solamente una etiqueta. BackColor: es el color de fondo del control Align: especifica la alineacin del texto en un control que lleve texto (como las cajas de texto o las etiquetas). Puede ser izquierda, derecha o centrada. Left: indica la distancia entre el borde izquierdo del objeto y el borde superior del objeto que lo contiene. Top: indica la distancia entre el borde superior del objeto y el borde superior del objeto que lo contiene. Height: es la altura del objeto Width: es el ancho del objeto Forecolor: es el color de la letra del objeto ToolTipText: es un texto que aparece al situar el cursor sobre un objeto Visible: indica si un objeto es visible (True) o invisible (False). Enabled: indica si el objeto puede recibir el foco (True) o no (False).

TabStop: establece si un objeto puede recibir el foco mediante la tecla Tab (True) o no (False). TabIndex: un nmero que ser progresivo y nico para cada control, el cual indica el orden en que irn recibiendo el foco con la tecla Tab. Value: indica el valor de un control, y ser variado el valor a asignarle segn el tipo de objeto. Font: esta es una propiedad general que da acceso a otras subpropiedades, todas relacionadas con la fuente. Se accede a estas digitando un punto inmediatamente despus de la palabra Font. Estas propiedades son: o Bold: es la letra en negrita (True). o Italic: es la letra en cursiva (True). o Underline: es la letra subrayada (True). o Strike: es la letra tachada (True). o Size: es el tamao de la fuente. o Name: es el tipo de la fuente Text: es una propiedad de las cajas de texto, la cual es el texto que mostrar en su interior.

Ejemplo 2
Crea un nuevo proyecto estndar y coloca los siguientes controles, con sus propiedades: Control Propiedad Valor Form Name frmProp Frame "" Shape "" "" "" "" "" "" Name Caption Name Shape Min Value Caption Caption Caption fraCont Color de fondo shpForma Oval hsbMover 0 0 optAmarillo Amarillo optRojo Rojo optVerde Verde

HScroll Name

Option Name Option Name Option Name

Ahora escribe el siguiente cdigo en la ventana de cdigo:


Private Sub Form_Load() hsbMover.Max=me.ScaleWidth-shpForma.Width

shpForma.Left=0 End Sub Private Sub hsbMover_Change() shpForma.Left=hsbMover.Value End Sub Private Sub optAmarillo_Click() me.BackColor=vbYellow End Sub Private Sub optRojo_Click() me.BackColor=vbRed End Sub Private Sub optVerde_Click() me.BackColor=vbGreen End Sub

Presione F5 para probar la aplicacin y ver cmo van cambiando las propiedades de los objetos. El evento Form_Load es un evento que ocurre mientras se carga el formulario y se lo puede utilizar para dar valor a las variables y propiedades. La instruccin me hace referencia al formulario en el cual se est escribiendo el cdigo. La propiedad ScaleWidth del formulario hace referencia al ancho del formulario. En el caso de la propiedad BackColor se han utilizado las constantes de color de Visual Basic 6.0.

Mtodos.
Los mtodos son aquellas que los objetos pueden realizar. Algunos mtodos llevan argumentos y otros no y son, por lo general, especficos de un tipo de control. Un mtodo que ya se ha utilizado es el mtodo SetFocus, el cual mueve el foco al objeto que lo ha llamado. Este es uno de los mtodos que no lleva argumentos. A modo de ejemplo, se vern los mtodos Additem y Clear, mtodos de los cuadros de lista y cuadros combinados. El primer mtodo ingresa valores en el control y el segundo los elimina todos, el primer mtodo lleva argumentos mientras que el segundo no.

Ejemplo 3
Crea un nuevo proyecto estndar y coloca los siguientes controles: Control Form Textbox ListBox Propiedad Valor Name frmMetod cmdLimpiar txtTexto lstLista Name Name

Commandbutton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Private Sub cmdLimpiar_Click() lstLista.Clear End Sub Private Sub txtTexto_KeyPress(Keyascii as Integer) If Keyascii=13 Then lstLista.Additem txtTexto.Text txtTexto.Text="" End If End Sub

La sentencia If... Then... End If es una sentencia de control la cual, en este caso, sirve para que se ejecute el mtodo Additem cuando se presione la tecla Enter (Keyascii=13), esta sentencia se ver ms adelante. Pulsar F5 para probar el programa. Otro mtodo de ejemplo puede ser el mtodo PrintForm del formulario, el cual imprime el formulario con sus controles, todo excepto la barra de ttulo. Para verlo funcionarr, agregue al ejemplo anterior un nuevo botn de comando y su propiedad Name: cmdPrint; su Caption: Imprimir. Aadir el siguiente cdigo:
Private Sub cmdPrint_Click() me.PrintForm End Sub

Pulse F5 para probar

Las Variables

Alcance de las variables Ejemplo 1 Constantes Tipos definidos por el usuario Arrays Ejemplo 2 Redimensionar un array Arrays de controles Ejemplo 3

Las variables son espacios en la memoria donde el programa guarda datos. A este lugar en la memoria se hace referencia mediante un identificador: el nombre de la variable. Un nombre de variable tiene que cumplir con las mismas reglas que con los nombres de los objetos. La variable almacenar un determinado tipo de dato, y de esto depender la cantidad de

memoria que ocupe. Las variables, por tanto, sern de distinto tipo y en el cdigo se puede declarar (crear) una variable del tipo que se especifique. La sentencia para declarar una variable ser:
Alcance nVariable as tDato

Donde Alcance ser el alcance de la variable (Private o Public); nVariable ser el nombre de la variable y tDato ser el tipo de dato que almacenar. Los tipos de datos son los siguientes: Tabla 3 - Tipos de Datos Tipo Dato Descripcin Rango True o False (1 o 0) 0 a 255 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 -3,40x1038 a -3,40x1038 1,79x10308 a 1.79x10308, es ms preciso que el Single 1/01/100 a 31/12/9999; 0:00:00 a 23:59:59 Hasta 65.500 caracteres Espacio (en bytes) 2 1 2 4 4 8 8 1 por c/caracter 16 (+1 por c/caracter en caso de ser texto)

Boolean Valores binarios Byte Integer Long Single Double Date String Variant Nmeros naturales Enteros cortos Enteros largos Reales Precisin Simple Reales Precisin Doble Fechas y Horas Cadena de caracteres Cualquier tipo de dato

Hay otro tipo de dato, que son los tipos definidos por el usuario. Tambin llamados Estructuras se vern en el item Tipos definidos por el usuario. Las variables que se utilicen pueden estar declaradas explcita o implcitamente. Una variable est declarada en forma explcita cuando se la declara con una sentencia, o implcitamente cuando se la utiliza sin la sentencia de declaracin. El inconveniente de las variables de este tipo es que son de tipo Variant y ocupan mucho espacio; conviene declarar todas las variables que se utilicen. Para dar valor a una variable se utiliza la siguiente sentencia:
nVariable.Valor

Supngase una variable de tipo Integer llamada nmero a la cual se quiere dar el valor 3.790; la declaracin de la variable podra ser:

Dim nmero as Integer

Para asignarle el valor -3.790 se escribe la siguente sentencia:


nmero=-3790

Si se quisiera consultar el valor de una variable se podra utilizar alguna sentencia donde se le asigne, por ejemplo, su valor a la propiedad Caption de una etiqueta, imprimirla en la ventana Inmediato, etc:
lblResu.Caption=nmero Debug.Print nmero

Alcance de las variables.


Se denomina alcance de una variable a los lugares desde donde sta puede ser accesible, o sea, desde donde se la puede utilizar. Este alcance depender del lugar donde haya sido declarada (formulario, mdulo estndar, etc) y la forma en que haya sido declarada (Private o Public). Vale decir que una variable declarada con Dim equivale a Private. Una variable declarada en un mdulo estndar como Public es accesible desde todo el proyecto; declarada como Private es accesible slo dentro de ese mdulo. Una variable declarada en un formulario como Public es accesible en todo ese formulario y en otros, siempre que est precedida por el nombre del formulario. Declarada como private es accesible en todo ese formulario. Una variable declarada dentro de un procedimiento o funcin slo ser accesible dentro de ese procedimiento o funcin y ser declarada con Dim.

Ejemplo 1
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control Form Textbox "" Frame "" Option "" Option "" Option "" Propiedad Valor Name frmProg Name Text Name Caption Name Caption Name Caption Name Caption fraCont Variables optBool Boolean optInte Integer optStri String txtValor

Option "" Label "" "" ""

Name Caption Name Caption

optDate Date lblValor cmdAsignar Asignar cmdMostrar Mostrar

Commandbutton Name Caption Caption Commandbutton Name

Escriba el siguiente cdigo en la ventana de cdigo del formulario:


Option Explicit Dim bool as Boolean, inte as Integer, stri as String, fech as Date Private Sub cmdAsignar_Click() If optBool.Value=True Then bool=txtValor.Text:lblValor.Caption=bool End If If optInte.Value=True Then inte=txtValor.Text:lblCaption=inte End If If optStri.Value=True Then stri=txtValor.Text:lblCaption=stri End If If optDate.Value=True Then fech=txtValor.Text:lblCaption=fech End If End Sub Private Sub Debug.Print Debug.Print Debug.Print Debug.Print End Sub cmdMostrar_Click() "El valor de bool es"& "El valor de inte es"& "El valor de stri es"& "El valor de fech es"&

bool inte stri fech

Private Sub optBool_Click() lblValor.Caption=bool End Sub Private Sub optInte_Click() lblValor.Caption=inte End Sub Private Sub optStri_Click() lblValor.Caption=stri End Sub

Private Sub optFech_Click() lblValor.Caption=fech End Sub

Pulse F5 para probar la aplicacin. Si se asigna, por ejemplo, a la variable bool el valor 17, la aplicacin enviar un mensaje en tiempo de ejecucin (Desbordamiento). Para el correcto de la aplicacin, debe darse a las variables valores adecuados a ellas.

Constantes.
Las constantes son como las variables, con la excepcin de que su valor es asignado una nica vez y luego no puede ser cambiado. Su valor es asignado en la misma declaracin y si luego se intenta cambiar su valor se producir un error. Las constantes son privadas por defecto y si se desea que sean pblicas habr que declararlas como Public. A continuacin los ejemplos generales de una constante privada y otra pblica:
Const nConst as tDato=Valor Public Const nConstante as tDato=Valor

Donde nConstante es el nombre la constante, tDato es el tipo de dato que almacenar (Integer, Single, Date, etc.) y valor es el valor que almacenar. La declaracin de una constante que almacene velocidad de la luz, en forma privada y pblica, sera:
Const velocidadluz as Long=300000 Public Const velocidadluz as Long=300000

El valor de una constante se utiliza de la misma forma que el valor de una variable y cumple con los mismos criterios de alcance.

Tipos definidos por el usuario.


Hay otro tipo de dato para asignar a una variable, el cual es un tipo de dato creado por el usuario, ya que los existentes pueden no adaptarse plenamente a lo que el usuario quiere almacenar en la variable. Los tipos de datos definidos por el usuario no son ms que agrupaciones de variables de distintos tipos reunidas bajo el nombre de una variable comn. Estos tipos de datos se denominan tambin estructuras y se construyen en un mdulo estndar (*.bas). La forma de la sentencia a utilizar es la siguiente:
Public Type ntDato nvDato1 as tDato nvDato2 as tDato ... nvDato as tDato End Type

Donde ntDato es el nombre del tipo de dato que se crear, nvDato son los nombres de las variables que compondrn la estructura y tDato es el tipo de dato de de dichas subvariables,

y que podr ser de cualquier tipo, incluso de otro tipo definido por el usuario. Suponga un tipo de dato denominado Paciente, en el cual figure su nmero de ficha, su apellido, su nombre, su edad y su fecha de ingreso. La estructura podra ser la siguiente:
Public Type Paciente ficha as Long apellido as String*15 nombre as String*10 edad as Byte ingreso as Date End Type

Slo en las variables de tipo String se coloc un asterisco seguido de un nmero. Este indica la cantidad mxima de caracteres que almacenar la variable y de esta forma se sabr con exactitud cuntos bytes ocupar la variable y, por consecuencia, el nuevo tipo creado. En este caso el tipo creado ocupar 44 bytes porque: ficha as Integer 2 bytes apellido as String*15 15 bytes nombre as String*10 10 bytes edad as Byte 1 byte ingreso as Date 8 bytes 36 bytes TOTAL Para declarar una variable de este tipo se procede como para declarar cualquier variable. Con respecto al acceso a la misma, a continuacin del nombre de la variable se digita un punto y se escribe la subvariable de este tipo, para recuperar o para dar valor. En el caso del tipo Paciente:
Dim pac as Paciente pac.ficha=12037 pac.nombre="Claudio" lblApellido.Caption=pac.apellido

Los tipos definidos por el usuario son muy tiles a la hora de guardar la informacin en ficheros (archivos) y recuperarla luego.

Arrays.
Un array es una variable que almacena varios datos del mismo tipo; estos datos ocupan posiciones contiguas en la memoria y cada dato particular del array tiene un indice que lo identifica. Un array se declara como una variable pero luego de escribir el nombre de sta, se pone entre parntesis la cantidad de elementos que lo conformarn. Por ejemplo:
Private unarray(5) as Integer

Es la declaracin de un array de 6 elementos, numerados de 0 a 5. Para entenderlo ms fcilmente, en forma grfica se representara as: 0 1 2 3 4 5 Cada elemento del array almacena un Integer, por lo que todo el array ocupar 12 bytes (2 bytes x 6 elementos). Todos los arrays comienzan a ser numerados por cero, a menos que se declare el array de la siguiente forma:
Private unarray(1 To 5) as Integer

En este caso se est declarando un array de 5 elementos, numerados de 1 a 5 (1 To 5), por tanto ocupar 10 bytes (2 bytes x 5 elementos), grficamente este array se representara as: 1 2 3 4 5 Estos tipos de array tienen una sola dimensin y se denominan Vectoriales. Supngase ahora el siguiente array:
Private otroarray(4) as Byte

Este es un array de 5 elementos numerados de 0 a 4, donde cada elemento almacena un dato de tipo Byte y ocupar 5 bytes (1 byte x 5 elementos). Si se quiere dar valor a cualquier elemento del array, se procede como se ha visto para dar valor a una variable, pero seguido al nombre de la variable se escribe entre parntesis el ndice del elemento. Para dar el valor 87 al primer elemento de este array, se escribe la siguiente sentencia: otroarray(0)=87 87 otroarray(3)=207 87 207

Para recuperar el elemento de ndice 3 de otroarray y presentar su valor en una caja de texto llamada txtVarray, se escribe la siguiente sentencia:
txtVarray.Text=otroarray(3)

Los arrays no solamente pueden tener una dimensin (vectoriales o unidimensionales) sino varias, a estos arrays se los denomina multidimensionales o matrices. Se declaran como los arrays vectoriales, pero se especifica tambin la cantidad de

dimensiones que tiene a continuacin de la cantidad de elementos y separada por una coma (,). Un array de nombre matrz, que conste de 5 elementos por cada dimensin y 3 dimensiones, que almacene datos Byte, se declara as:
Private matriz(4,2) as Byte

Cada elemento del array estar identificado por una coordenada que representa el ndice que tiene y su dimensin; grficamente se representa as: 0,0 1,0 2,0 3,0 4,0 0,1 1,1 2,1 3,1 4,1 0,2 1,2 2,2 3,2 4,2 Este array ocupar 15 bytes (1 byte x 5 elementos x 3 dimensiones). Para este caso, si se desea asignar el valor 9 al tercer elemento de la primera dimensin, el valor 18 al quinto elemento de la segunda dimensin y el valor 100 al primer elemento de la tercera dimensin se escriben las siguientes sentencias:
matriz(2,0)=9 matriz(4,1)=18 matriz(0,2)=100

9 18 100 Tambin puede declararse una matriz de 5 elementos por dimensin y 3 dimensiones de la siguiente manera:
Dim otramatriz(1 To 5, 1 To 3) as Byte

En este caso, la matriz contendr tambin 15 elementos por dimensin y ocupar 15 bytes, pero los elementos y las dimensiones no comenzarn a numerarse por cero, sino por uno. En esta matriz, para dar el valor 18 al quinto elemento de la sengunda dimensin la sentencia ser:
otramatriz(5,2)=18

Ejemplo 2
Crea un nuevo proyecto estndar y coloca en l los siguientes elementos: Control Form Propiedad Valor Name frmArray

Textbox "" HScroll "" "" "" VScroll "" "" "" ""

Name Text Name Min Max Value Name Min Max Value Caption

txtVarray hsbElem 0 7 0 vsbDimen 0 3 0 cmdCambio Cambiar

Commandbutton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Option Explicit Dim matriz(7,3) as Integer Private Sub hsbElem_Change() txtVarray.Text=matriz(hsbElem.Value,vsbDimen.Value) End Sub Private Sub vsbDimen_Change() txtVarray.Text=matriz(hsbElem.Value,vsbDimen.Value) End Sub Private Sub cmdCambio_Click() matriz(hsbElem.Value,vsbDimen.Value)=txtVarray.Text End Sub

Pulse F5 para probar la aplicacin. El array matriz declarado almacena datos Integer; 8 elementos por dimensin y tiene 4 dimensiones, por tanto ocupa 64 bytes (2 bytes x 8 elementos x 4 dimensiones). Los ndices de los elementos de la matriz a ser consultados o cambiados estn determinados por las propiedades Value de las barras de desplazamiento. Si el tipo de dato ingresado no es un Integer, se generar un error en tiempo de ejecucin.

Redimensionar un array.
Antes de explicar cmo se redimensiona un array se explicar qu es un array dinmico. Un array dinmico es un array en el cual no se especifica cuntos elementos tendr. Si se quiere declarar un array dinmico de nombre dinarray que almacene datos de tipo Double se utiliza la siguiente sentencia:

Dim dinarray() as Double

Redimensionar un array significa cambiar el nmero de elemetos, pero no se puede cambiar sus dimensiones. Esto implica que no se puede transformar, por ejemplo, un vector en una matriz. Solamente se puede redimensionar un array una vez por procedimiento o funcin. Esta operacin se realiza con la sentencia Redim, y su sintaxis es la siguiente:
Redim nArray(nValor)

Se redimensiona el array dinarray para que almacene 12 elementos:


Redim dinarray(11)

Al redimensionar un array se borran todos los elementos que contuviera: si los datos son numricos se ponen a 0, si son texto se ponen a cadena vaca, si son Variant se ponen a Empty, etc. Si se quiere redimensionar un array y conservar los valores ya almacenados se utiliza la palabra Preserve luego de la palabra Redim, de la siguiente forma:
Redim Preserve nArray(nValor)

Arrays de controles.
Los arrays de controles son un conjunto de controles del mismo tipo que tienen el mismo nombre, pero cada uno se individualiza de los dems por su propiedad Index. La ventaja de utilizar array de controles es que si los controles responden de forma similar a un evento, bastara con escribir el cdigo del evento por el que respondern todos los controles que conformen el array. Para crear un array de controles basta con colocar un control, copiarlo y pegarlo. Se preguntar si se desea crear una matriz de controles, a lo que se responde que s. Cuando se escribe el cdigo de un evento que involucra un array de controles, aparecer un argumento denominado Index as Integer, el cual permite identificar a cada control en particular.

Ejemplo 3
Crea un nuevo proyecto estndar y coloca un Commandbutton de propiedad Name: cmdArray. Copiarlo y pegarlo 5 veces, hasta que se forme un array de 6 botones. Escribir el siguiente cdigo en la ventana de cdigo del formulario:
Private Sub cmdArray_Click(index as Integer) Debug.Print "Ha presionado el botn de ndice"& index End Sub

Pulse F5 para probar la aplicacin

Procedimientos

Procedimientos y funciones recursivos.

Los procedimientos y funciones son porciones de cdigo que realizan una determinada tarea. Tienen un ambito que cumple con las mismas reglas que las variables. Los procedimientos comienzan con Private Sub o Public Sub, segn se establezcan como privados o pblicos, y finalizan con End Sub. Estas porciones de cdigo realizan mltiples tareas, pero no tienen valor de retorno (a diferencia de las funciones), o sea, no devuelven explcitamente un resultado. Un ejemplo de procedimientos son los eventos. Si bien comienzan con Private o Public Sub y finalizan con End Sub, se puede escapar en cualquier momento con la instruccin Exit Sub. Puede llevar o no parmetros, los cuales irn entre parntesis. Las funciones tienen por cometido brindar directamente un resultado al cual se podr acceder directamente a travs del nombre de la funcin y el resultado ser de un determinado tipo (Integer, Single, String, etc.). Comienzan con Private Function o Public Function y se puede escapar en cualquier momento con la instruccin Exit Function; tambin puede o no llevar parmetros. Dentro de la misma funcin, se utilizar su nombre como variable y se le dar un valor; este valor ser el valor de retorno de la funcin. La forma general de un procedimiento es la siguiente:
Private/Public Sub nProcedimiento(argumentos) sentencias 'se puede utilizar la instruccin Exit Sub si se desea End Sub

La forma general de una funcin es la siguiente:


Private/Public Function nFuncin(argumentos) as tDato sentencias 'se puede utilizar la instruccin Exit Function si se desea nFuncin=sentencias End Function

Cuando se quiere que un procedimiento o funcin llame a otro procedimiento se utiliza la instruccin Call seguida del nombre del procedimiento y los argumentos si los llevase.
Call nProcedimiento argumentos

Al hacer esta llamada se ejecuta el procedimiento indicado y finalizado ste se retorna a la siguiente instruccin luego de la llamada. Un ejemplo:
Private Sub proceso1()

(1) sentencias (2) Call proceso2 argumento (3)

sentencias End Sub Private Sub proceso2() sentencias sentencias:Exit Sub sentencias End Sub

(7) (8) (4) (5) (6) (6)

Los nmeros indican el curso del programa. La salida de proceso2 puede darse tanto con Exit Sub como con End Sub. Una funcin devuelve un valor, por lo tanto se utiliza el nombre de dicha funcin para llamarla y utilizar el valor que retorna, ya sea para almacenarlo en una variable, utilizarlo en un clculo, etc. Por ejemplo:
Private Function inverso(numero as Integer, ndecim as Byte)as Double inverso=round(numero,ndecim) End Function Private Sub usarfuncion() Dim var as Double var=inverso(17,3) End Sub

Procedimientos y funciones recursivos.


Una funcin o procedimiento es recursivo cuando se llama a s mismo, por ejemplo, un procedimiento se llama a s mismo hasta que se cumple una determinada condicin.
Private Sub proceso() sentencias If condicin Then Call proceso End If End Sub

Este es slo un ejemplo general de una funcin recursiva. Se puso una funcin condicional para salir de la recursividad pues si no se generara un bucle interminable que terminara por bloquear el sistema.

Sentencias de Control.

If... Then... Else... End If For... Step... Next Ejemplo 1 Select Case... Case... End Select

While... Wend Do... Loop...

Las sentencias de control permiten controlar el flujo del programa, tomando decisiones a partir de comparaciones y generando bucles mientras o hasta que se cumplan ciertas condiciones. Son muy utilizadas y es importante conocer su correcta utilizacin.

If... Then... Else... End If


Esta sentencia permite ejecutar determinadas acciones segn evaluaciones que haga de una comparacin lgica. La estructura de esta sentencia es:
If comparacin Then sentencias si la condicin es verdadera Else sentencias si la condicin es falsa End If

No obstante, primero habr que conocer los signos y comparaciones matemticas y lgicas para escribir sentencias efectivas: Tabla 4 - Operadores Lgicos. Signo = > < <> >= <= Concepto Igual que Menor que Mayor que Distinto Menor o Igual que Mayor o Igual que

Like Igual que (para texto) Un ejemplo de esta funcin:


Dim var as Boolean, vars as String var=False If var=True Then vars="Verdadero" Else:vars="Falso" End If

En este caso la variable vars ser Falso ya que se ejecuta la sentencia a continuacin de Else. Se puede anidar una funcin If con otra para que una condicin pueda derivar en otra condicin. Por ejemplo:

Dim x as Integer, y as Integer x=78:y=2028 If 26*x Then x=y-26*x Else If 26*x>y Then x=x*26-y Else:x=y End If End If Al salir de esta sentencia x e y tendrn el mismo valor, ya que se ejecutar la sentencia a continuacin de Else de la segunda sentencia If. En la condicin de la sentencia If se puede especificar ms de una condicin si se concatenan con algunos operadores lgicos como and, or, xor, etc., los cuales son los siguientes: And: devuelve Verdadero si todas las comparaciones son verdaderas. Or: devuelve Verdadero si alguna de las comparaciones es verdadera. Xor: devuelve Verdadero si una comparacin es verdadera y otra es falsa. Eqv: devuelve Verdadero si ambas comparaciones son verdaderas. Imp: devuelve Verdadero siempre y cuando no sea verdadera la primera condicin y falsa la segunda.

Sea por ejemplo: Dim x as Boolean, y as Byte x=True:y=61 If x=False Or y<70 Then Debug.Print "Se cumpli una de las condiciones" Else:Debug.Print "No se cumpli ninguna condicin" End If Puede crearse un nuevo proyecto estndar y asociar este procedimiento con algn evento para probarlo.

For... Step... Next


Esta sentencia permite ejecutar un bucle con un valor inicial y final, en el cual puede especificar el intervalo y si es creciente o decreciente. La sintaxis de esta sentencia es: For var=a To b Step interval sentencias Next x Donde var es una variable que crece o decrece, segn sea el bucle, a y b son los valores de comienzo y final del bucle, intervalo es el intervalo con que crece o decrece el bucle, si se omite Step intervalo se considera 1. Sentencias son las sentencias que se ejecutarn en el bucle; Next var indica dnde terminan las sentencias del bucle. Se puede salir de este bucle en cualquier momento con la instruccin Exit For. Si se desea que el bucle sea decreciente, el valor de a deber ser

mayor que el valor de b y se deber utilizar la instruccin Step donde el intervalo ser negativo. Mediante esta sentencia se puede calcular el factorial de un nmero. El factorial de un nmero se halla multiplicando todos los nmeros naturales hasta dicho nmero; por ejemplo, el factorial de 5 es 120 porque 5x4x3x2x1 es 120.

Ejemplo 1
Crea un nuevo proyecto estndar y aade al formulario los siguientes controles:

Control Propiedad Form Label Name Name Textbox Name

Valor frmProg txtNumero lblFact

Escribe el siguiente cdigo en la ventana de cdigo del formulario: Private Sub txtNumero_KeyPress(Keyascii as Integer) If Keyascii=13 Then lblFact.Caption=Factorial(txtNumero.Text) Else:Exit Sub End If End If End Sub Private Function Factorial(numero as Integer)as Long Dim x as Integer, f as Long numero=Int(Abs(numero)):f=1 If numero=0 Then Factorial=1:Exit Function Else: For x=1 To numero f=x*f Next x Factorial=f End If End Function Presione F5 para ejecutar la aplicacin. La funcin Int redondea un nmero a entero, la funcin Abs devuelve el valor absoluto de un nmero; con esto se asegura que el nmero sea un nmero natural. Esta sentencia utilizada en forma decreciente: Dim result as Integer, v as Byte result=100 For r=10 To 4 Step -2 result=result-r Next r

Al salir de este bucle, result valdr 72. Puede crearse un nuevo proyecto y asociar este cdigo a algn evento para probarlo. Si en algn momento se desea escapar de este bucle se utiliza la sentencia Exit For, por ejemplo: Dim sumar as Integer, x as Byte For x=10 To 30 sumar=sumar+2*x If sumar>121 Then Exit For End If Next x Se escapa del bucle mediante Exit For cuando x=15.

Select Case... Case... End Select


Esta sentencia permite realizar varias comparaciones (casos) y ejecutar sentencias en aquellos que sean verdaderos. Esta sentencia comienza con Select Case seguido de la expresin a comparar. Luego se escriben tantas sentencias Case como se necesiten, donde se escribirn las comparaciones. Se finaliza con End Select. La forma general de la sentencia es la siguiente: Select Case expresin Case comparacin1 sentencias Case comparacin2 sentencias ... End Select Expresin es una variable, una propiedad de un objeto (por ejemplo la propiedad Text de una caja de texto o Caption de una etiqueta), etc. Comparacin1, comparacin2,... son las comparaciones lgicas. En cada Case el valor de expresin se representa con Is. Dim valor as Integer, caso as String valor=3619 Select Case valor Case 2748 caso="Case 1" Case Is >3630 caso="Case 2" Case Is<3621 caso="Case 3" Case Else caso="Case 4" End Select Cuando termina con End Select la variable caso valdr "Case 3", porque Case Is<3621 es la nica que se cumple. Case Else es verdadero cuando ninguno de los anteriores casos fuese verdadero. Si se cumpliesen dos o ms condiciones se verificar solamente la primera condicin.

While... Wend
La sentencia While se ejecuta mientras se cumpla una condicin dada. Este bucle comienza con While y termina con Wend. Su sintaxis es la siguiente: While condicin sentencias Wend Donde condicin es la condicin que se evaluar. Mientras esa condicin sea verdadera se ejecutarn las sentencias hasta Wend; cuando ya no se cumpla la condicin se saldr del bucle. Un ejemplo: Dim var1 as Byte, var2 as Long var1=56:var2=1050 While var1>50 var2=var2+var1 var1=var1-1 Wend Al final del bucle, var1 valdr 50 y var2 valdr 1371.

Do... Loop...
La sentencia Do permite ejecutar bucles mientras o hasta que se cumpla una determinada condicin (While o Until). La comprobacin se puede efectuar al principio del bucle (luego de Do) o al final del bucle (luego de Loop). Se puede escapar de este bucle en cualquier momento con la sentencia Exit Do. La forma general de este bucle es la siguiente: Do While/Until condicin sentencias 'puede escaparse del bucle con Exit Do Loop En el ejemplo anterior la comparacin lgica se hizo al principio del bucle, en la siguiente la comprobacin se har al final del bucle. Do sentencias 'puede escaparse del bucle con Exit Do Loop While/Until condicin Un ejemplo prctico de este bucle: Dim var1 as Integer, var2 as Long var1=367 Do var1=var1+2:var2=var2-var1*2 Loop Until var2>-2301 Al salir del bucle var1 vale 375 y var2 vale -2976.

Operadores y Funciones.

Ejemplo 1 Funciones Ejemplo 2

Los programas necesitarn efectuar clculos matemticos, de texto, trigonomtricos, etc., segn el trabajo que el programa realizar. Para ello Visual Basic tiene operadores matemticos y funciones precreadas para programar. Los operadores matemticos son los siguientes: Tabla 5 - Operadores matemticos. Signo + Suma * / \ ^ & Concepto

Resta (o signo negativo) Multiplicacin Divisin Divisin entera Potenciacin Concatenacin

Mod Resto de una divisin

Ejemplo 1
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control Form Textbox "" "" "" Propiedad Name Name Index Caption Caption Valor frmCalc txtVisor cmdOper 0a6 +, -, *, /, \, ^, Mod cmdIgual =

Commandbutton Name

Commandbutton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario:

Option Explicit Dim numer as Double, oper as Byte Private Sub txtVisor_LostFocus() If isnumeric(txtVisor.Text)=False Then MsgBox("Introduzca un valor numrico"):txtVisor.SetFocus End Sub Private Sub cmdIgual_Click() Select Case oper Case 0 numer=txtVisor.Text Case 1 txtVisor.Text=numer+txtVisor.Text numer=txtVisor.Text:oper=0 Case 2 txtVisor.Text=numer-txtVisor.Text numer=txtVisor.Text:oper=0 Case 3 txtVisor.Text=numer*txtVisor.Text numer=txtVisor.Text:oper=0 Case 4 txtVisor.Text=numer/txtVisor.Text numer=txtVisor.Text:oper=0 Case 5 txtVisor.Text=numer\txtVisor.Text numer=txtVisor.Text:oper=0 Case 6 txtVisor.Text=numer^txtVisor.Text numer=txtVisor.Text:oper=0 Case 7 txtVisor.Text=numer Mod txtVisor.Text numer=txtVisor.Text:oper=0 End Select End Sub Private Sub cmdOper_Click(index as Integer) oper=1+index End Sub Private Sub txtVisor_KeyPress(Keyascii as Integer) If Keyascii=13 Then Call cmdIgual_Click End If End Sub

Pulse F5 para probar la aplicacin.

Funciones.
En esta parte se brindarn funciones matemticas, funciones de texto, etc., para utilizar. Las siguientes son las funciones matemticas y trigonomtricas:

Abs(numero): esta funcin devuelve el valor absoluto de un nmero; el valor absoluto de un nmero es ese nmero con signo positivo. Int(numero) o Fix(numero): estas dos funciones devuelven la parte entera de un nmero. Round(numero,ndec): esta funcin permite redondear el argumento nmero con tantos lugares decimales como lo especifique el argumento ndec. Sgn(numero): devuelve el signo del argumento nmero. -1 si numero es menor que 0, 1 si es mayor que 0 y 0 si nmero es 0. Sqr(numero): devuelve la raz cuadrada del argumento nmero. Sin(angulo): devuelve el seno del argumento ngulo. Cos(angulo): devuelve el coseno del argumento ngulo. Tan(angulo): devuelve la tangente del argumento ngulo. Atan(angulo): devuelve el arco tangente del argumento ngulo. Log(numero): devuelve el logaritmo de un nmero. Exp(numero): devuelve el nmero e (2.71828...), elevada al argumento nmero [enumero]. Randomize(numero): inicia el generador de nmeros aleatorios. Rnd(numero): devuelve un nmero aleatorio entre 0 y 1, basado en el argumento numero (o en el generador de nmeros aleatorios).

Aclaracin: para las funciones trigonomtricas el sistema de medicin angular son radianes. Las siguientes son las funciones de trabajo con texto:

Lcase(texto): devuelve el texto en minsculas. Ucase(texto): devuelve el texto en maysculas. Len(texto): devuelve el nmero de caracteres que conforman una cadena de texto. Left(texto,largo): toma del argumento texto los caracteres especificados en el argumento largo, contados desde la izquierda. Right(texto,largo): toma del argumento texto los caracteres especificados en el argumento largo, contados desde la derecha. Mid(texto,inicio,largo): toma del argumento texto los caracteres especificados en el argumento largo, contados desde el caracter inicio. Trim(texto): devuelve el argumento texto sin los espacios que pudiera tener al inicio o al final. Like: es un operador que devuelve un valor booleano el cual compara dos cadenas de texto, devuelve False si las cadenas son diferentes y True si las cadenas de texto son iguales. Str(expresin): devuelve el argumento expresin como una cadena de caracteres. Instr(n,texto1,texto2): devuelve la posicin de texto2 dentro de texto1, buscando a partir de caracter n. Strcomp(texto1,texto2): devuelve -1, 0 o 1 segn sea texto1 <,= o > que texto2. Replace(texto,cadena,reemplazo): en un texto, reemplaza cadena con reemplazo.

Las funciones para el trabajo con fechas son:

Date(): devuelve la fecha actual. Time(): devuelve la hora actual. Day(fecha): devuelve el da del argumento fecha. Month(fecha): devuelve el mes del argumento fecha. Year(fecha): devuelve el ao del argumento fecha. Hour(hora): devuelve la hora del argumento hora. Minute(hora): devuelve los minutos del argumento hora. Second(hora): devuelve los segundos del argumento hora.

Estas son las funciones de comparacin, las cuales devuelven valores booleanos (True o False):

Isnumeric(expresin): devuelve True si expresin es un nmero. Isdate(expresin): devuelve True si expresin es una fecha. Isobject(expresin): devuelve True si expresin es un objeto. Iserr(expresin): devuelve True si expresin es un valor de error.

Existen funciones de conversin de un tipo de dato en otro, y son las siguientes:


Cbool(numero): devuelve el valor de nmero como un dato de tipo Boolean. Cbyte(numero): devuelve el valor de nmero como un dato de tipo Byte. Cint(numero): devuelve el valor de nmero como un dato de tipo Integer. Clng(numero): devuelve el valor de nmero como un dato de tipo Long. Csng(numero): devuelve el valor de nmero como un dato de tipo Single. Cdbl(numero): devuelve el valor de nmero como un dato de tipo Double. Cdate(numero): devuelve el valor de nmero como un dato de tipo Date o Time. Cstr(numero): devuelve el valor de nmero como un dato de tipo String. Cvar(numero): devuelve el valor de nmero como un dato de tipo Variant. Val(numero): devuelve el valor de nmero como un dato de tipo Double.

Hay muchas ms funciones, de las cuales se mencionarn algunas ahora y otras en captulos posteriores.

Format(expresin, presentacin): esta funcin devuelve el dato de expresin en un formato definido en presentacin. Expresin es un valor, presentacin es un texto que define el formato con que se devolver expresin, por ejemplo: Format(23/10/1963,"Long Date") devolver viernes 23 de octubre de 1963 Format(2437.1,"Currency") devolver 2,437.10 Pts (depende del formato monetario especificado en el Panel de Control-Configuracin Regional) Format(14732,"#,##0.00") devolver 14,732.00 Timer(): devuelve la cantidad de segundos pasados desde la medianoche. Asc(caracter): devuelve un nmero (Long) que representa el cdigo ASCII del argumento caracter. Chr(nmero): devuelve un carcter que representa el cdigo ASCII del argumento nmero (Long). Hex(numero): devuelve el valor de numero expresado en el sistema Hexagesimal. Oct(numero): devuelve el valor de numero expresado en el sistema Octagesimal.

Bin(numero): devuelve el valor de numero expresado en el sistema Binario.

Ejemplo 2
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control Propiedad Form Label "" "" Frame "" "" "" "" "" "" "" "" "" Name Name Caption Text Name Caption Caption Caption Caption Caption Caption Caption Caption Caption Valor frmCalc lblResu 0 txtValor 0 fraFunc Funciones optAbs Abs optFix Fix optRound Round optSqr Sqr optRnd Rnd optSin Sin optCos Cos optTan Tan

Textbox Name

Option Name Option Name Option Name Option Name Option Name Option Name Option Name Option Name

Escribe el siguiente cdigo en la ventana de cdigo


Private Sub txtValor_KeyPress(Keyascii as Integer) If isnumeric(txtValor.Text)=False Then txtValor.Text="" End If End Sub

Private Sub optAbs_Click() lblResu.Caption=Abs(txtValor.Text) End SUB Private Sub optFix_Click() lblResu.Caption=Fix(txtValor.Text) End SUB Private Sub optRound_Click() Dim y as Byte y=InputBox("Ingrese la cantidad de dgitos decimales a redondear",0,"Funcin Round") lblResu.Caption=Round(txtValor.Text,y) End SUB Private Sub optSqr_Click() lblResu.Caption=Sqr(txtValor.Text) End SUB Private Sub optRnd_Click() lblResu.Caption=Rnd(txtValor.Text) End SUB Private Sub optSin_Click() lblResu.Caption=Sin(txtValor.Text) End SUB Private Sub optCos_Click() lblResu.Caption=Cos(txtValor.Text) End SUB Private Sub optTan_Click() lblResu.Caption=Tan(txtValor.Text) End Sub

Controles estndar de Visual Basic.

El Formulario o Eventos o Propiedades o Mtodos o Formularios MDI Etiquetas Cajas de Texto Botones de Comando Marcos Botones de Opcin Casillas de Verificacin

Barras de Desplazamiento Cuadros de Lista y Cuadros Combinados o Propiedades o Mtodos Control Timer Drives Lista de Directorios Lista de Archivos Lneas Formas Datacontrol Ejemplo

El Formulario (Form).
El formulario es el elemento indispensable a la hora de construir la parte grfica de un programa. Sobre ste se colocarn los controles y ser la ventana de la aplicacin. El formulario tiene sus eventos, propiedades y mtodos propios. Para hacer referencia al formulario dentro de su ventana de cdigo se puede utilizar la instruccin Me. Eventos Los eventos ms notables del formulario son nueve: Initialize, Load, Activate, Paint, Resize, Deactivate, Unload, QueryUnload y Terminate. Los primeros cuatro eventos se suceden cuando se visualiza un formulario por primera vez; el evento Initialize sucede al iniciarse un formulario e inicializa las variables a nivel de mdulo, el evento Load ocurre al cargarse el formulario y se puede aqu cargar las propiedades de los controles y variables del formulario; el evento Activate ocurre al convertirse el formulario en la ventana activa, este evento hace visible en la pantalla el formulario y puede utilizarse por ejemplo para dar el foco a un control; el evento Paint ocurre al dibujarse los mtodos grficos del formulario y puede utilizarse para los mtodos grficos que se vern ms adelante. El evento Resize ocurre al cambiar el tamao de un formulario, ya sea con los botones maximizar/restaurar o manualmente. Cuando se termina la ejecucin de un programa ocurren ciertos eventos, los cuales son la contrapartida de los eventos que lo inicializaron. El evento Deactivate es el evento opuesto al evento Activate y ocurre cuando un formulario deja de ser la ventana activa; el evento Unload es la contrapartida del evento Load y ocurre cuando se descarga el formulario; el evento QueryUnload ocurre antes que el evento Unload y permite confirmar si definitivamente se ocultar el formulario o se cancelar esa orden, tiene los parmetros (Cancel as Integer, Unloadme as Integer); el evento Terminate es la contrapartida del evento Initialize y elimina completamente el formulario de la memoria. Propiedades

Tambin tiene propiedades nicas. La propiedad WindowState permite definir si un formulario se iniciar maximizado, minimizado o normal. Las propiedades MinButton y MaxButton especifican si tendrn habilitados los botones de minimizar y maximizar/restaurar habilitados. La propiedad Appearance especifica cmo se comportar el formulario: si podr cambiarse manualmente su tamao, por ejemplo. Mtodos El formulario tiene mtodos propios y mtodos grficos que comparte con otro control: las Cajas de Dibujo (Picturebox); estos mtodos se vern en otro captulo. Mtodo PrintForm: imprime el formulario, todo excepto la barra de ttulo y los mtodos grficos llamados desde el evento Paint. Es sencillo de utilizar pero no utiliza toda la resolucin de la impresora. Mtodo Hide: oculta el formulario y equivale a hacer su propiedad visible=False, sin embargo, el formulario slo desaparece de la pantalla, no de la memoria. Mtodo Show: muestra un formulario. Si se ocult con el mtodo Hide, solamente lo activa (ocurren los eventos Activate y Paint); si no estaba cargado ocurren los eventos Initialize, Load, Activate y Paint. Tiene un argumento (vbModal o simplemente 1) el cual no permite acceder al formulario desde el que se lo llam (si es que as fuese) hasta que se cierre dicho formulario. Mtodo Unload: genera el evento Unload del formulario. Lleva como argumento el nombre del formulario que se desea descargar. Formularios MDI Aplicaciones como Microsoft Word, Microsoft Excel, CorelDraw, etc., pueden tener varios documentos abiertos a la vez en la misma aplicacin. A esto se le llama Formularios MDI (Multiple Document Interface). Para comenzar un formulario modal, ir al men Proyecto y agregar un formulario MDI (MDI Form); ste debe ser el formulario inicial. Para volverlo el formulario inicial ir al men Proyecto-Propiedades del proyecto y elegir el en formulario inicial dicho formulario. Este ser el "Padre". Luego se podrn agregar otros formularios simples y cambiar su propiedad MDIChild a True; de esta forma stos se convertirn en formularios "Hijos" del primero. Comparndolo con el ejemplo de Microsoft Word, la ventana Microsoft Word es el formulario Padre y cada documento sern los formularios Hijos. Una de las ventajas de trabajar con este tipo de formularios es que todos los formularios hijos pueden compartir la misma barra de herramientas, de estado, etc. que estarn en el formulario Padre.

Etiquetas (Label).
Las etiquetas son controles en los cuales slo se puede editar texto a travs de cdigo, o sea, a travs de instrucciones y sentencias. Su propiedad ms importante es la propiedad Caption que es el texto que habr en la etiqueta. Tambin al respecto sern tiles sus propiedades Font y Forecolor. La propiedad Border permite dar o no un efecto de

bajorrelieve a la etiqueta. La propiedad Autosize permite ajustar el tamao de la etiqueta al texto contenido en ella, y la propiedad WordWrap permite el texto en mltiples lneas. Admiten eventos pero no es comn que se utilicen.

Cajas de Texto (Textbox).


Son los controles ms habituales para ingresar datos. Su propiedad ms importante es la propiedad Text, la cual es el texto que aparece en la caja y, por ende, las propiedades Font y Forecolor. La propiedad Multiline permite ingresar texto en ms de una lnea. La propiedad Alignment tiene tres valores para texto alineado a la izquierda (0), a la derecha (1) y centrado (2). La propiedad Locked determina si se bloquea la modificacin del texto de la caja de texto. Otras propiedades son Password para que no se vean los caracteres que se digitan, sino solamente uno que se especifica en la propiedad; SelStart sirve para posicionar el cursor en algn lugar del texto, SelText SelLength indica el nmero de caracteres seleccionados y MaxLength se utiliza para determinar el nmero mximo de caracteres que puede contener. El mtodo ms importante es el mtodo SetFocus.

Botones de Comando (CommandButton).


La utilidad de estos controles es la de ejecutar acciones y su evento por excelencia es el evento Click, aunque tambin soporta otros eventos KeyPress, LostFocus, etc. Su propiedad ms importante es la propiedad Caption la cual establecer el ttulo que mostrar el botn. Si esta propiedad se aade el carcter & delante de otro, ste otro aparecer subrayado y mediante la combinacin de la tecla Alt + caracter se acceder al evento click del botn. Esto es vlido para la propiedad Caption de varios controles. Si se establece su propiedad Style a Graphical y su propiedad Picture se le adjudica un cono, el botn aparecer con ese cono. Otras propiedades importantes de este control son sus propiedades Enabled y Visible.

Marcos (Frame).
El marco es un recuadro con un ttulo en su parte superior izquierda (el cual se cambia cambiando su propiedad Caption) y sirve para agrupar controles. Su mayor utilidad radica en agrupar botones de opcin, lo cual permite que slo uno est activo a la vez.

Botones de Opcin (Option).


Los botones de opcin permiten decidir acciones, eligiendo entre opciones. Para que esto ocurra deben estar colocados dentro de un Marco. Se selecciona el marco y luego se colocan los botones de opcin dentro. Sus propiedades ms importantes son la propiedad Value que tiene dos valores (True o False) que indica si el botn estar activo o no; dentro de un marco solamente un botn podr tener su propieda Value=True. La propiedad Caption especifica el texto que contendr el control.

Casillas de Verificacin (CheckBox).


Estos controles tambin sirven para decidir acciones, pero no se excluyen entre ellos. Al igual que los botones de opcin sus propiedades ms importantes son las propiedades Value y Caption. En el caso de la propiedad Value, esta podr tener los valores Checked (tendr un signo de OK en su interior) y Unchecked (la casilla estar vaca). Su evento ms importante es el evento Click.

Barras de Desplazamiento (Scroll Bar).


Las Barras de Desplazamiento son horizontales o verticales, pero ambas son iguales en eventos, propiedades y mtodos. Los eventos por excelencia de estos controles son los eventos Change y Scroll. Estos eventos ocurren al mover una barra de desplazamiento (cambiar su propiedad Value), pero la diferencia est en que el evento Change ocurre cuando se termin de arrastrar la barra y el evento Scroll ocurre mientras se arrastra la barra. Tres propiedades importantes de este control son las propiedades Min, Max y Value. Las propiedades Min y Max son los valores mnimos y mximos que podr tener la barra y la propiedad Value es el valor que tenga la barra en un momento dado y el que se cambia al mover la barra. La propiedad Value no podr ser entonces, mayor que la propiedad Max ni menor que la propiedad Min.

Cuadros de Lista y Cuadros Combinados (ListBox y ComboBox).


Los cuadros de lista son controles donde se pueden listar elementos, ya sean numricos, alfanumricos o alfabticos. Los cuadros combinados combinan las cualidades de los cuadros de lista y las cajas de texto, sin embargo tienen las propiedades y mtodos de los cuadros de lista y se estudian en forma conjunta. Los eventos ms usuales son los eventos Click, DblClick y Change. Los elementos de una lista o un cuadro combinado tienen un ndice o sea, un nmero que los identifica (al igual que los arrays) dentro de la lista y se comienzan a numerar por 0 para el primer elemento, 1 para el segundo, etc... Las siguientes son las propiedades de estos controles:

ListIndex: es el ndice del elemento actualmente seleccionado en el control. Si no hay ningn elemento activo el valor de Listindex es -1. List: esta propiedad devuelve el texto contenido en uno de los registros del control. Lleva por argumento el parmetro Indice el cual es el ndice del elemento a recuperar. ListCount: esta propiedad de solo lectura indica la cantidad de elementos que contiene un control. MultiSelect: esta propiedad de los cuadros de lista especifica si se pueden seleccionar ms de un elemento a la vez (True) o no (False). Sorted: ordena alfabticamente los elementos dentro del control.

Selected(Indice): indica si un elemento est seleccionado o no. El argumento Indice es el ndice del elemento. Tambin pueden seleccionarse elementos a travs de cdigo mediante esta propiedad. DropCombo: para los cuadros combinados esta propiedad indica la forma en que se presentar el cuadro combinado.

Los mtodos de estos controles son:

Additem(Elemento,Indice): este mtodo permite ingresar elementos al control. El argumento Elemento es obligatorio y es el elemento que se ingresar y el argumento Indice es opcional y especifica el ndice que tendr el elemento. Si no se coloca este argumento, el elementos se colocar al final de la lista. Removeitem(Indice): este mtodo permite quitar elementos del control. Lleva el argumento Indice que es el ndice del elemento a quitar. Clear: elimina todos los elementos de un control.

Control Timer (Timer).


Este control sirve para realizar en forma peridica determinadas tareas. Admite un nico evento: el evento Timer el cual se produce cuando la propiedad Interval es mayor que 0 y cuando la propiedad Enabled est a True. Este control no tiene una interfaz grfica por lo tanto al ejecutar la aplicacin que lo utilice no visualizar el control, solamente se vern sus efectos controlados por cdigo. Sus propiedades ms importantes son Enabled e Interval. La propiedad Enabled activa o desactiva el evento Timer; asimismo la propiedad Interval=0 desactiva el evento Timer. La propiedad Interval es el intervalo en milisegundos en que ocurrir el evento Timer una y otra vez.

Drives (Drive).
Este control es uno de los controles estndar para la gestin de archivos. Es un cuadro combinado con las unidades de disco existentes como elementos. El evento ms sobresaliente de este control es el evento Change y su propiedad, la propiedad Drive; ya que con este evento y esta propiedad se puede relacionar el control con los otros dos controles de ficheros.

Lista de Directorios (DirList).


Este control muestra los directorios de un disco y, haciendo doble clic en uno de ellos, se muestran los subdirectorios, etc. Su evento ms importante es el evento Change y su propiedad, la propiedad Path. Con esto se relaciona este control con los dems controles de fichero. La propiedad Path es una cadena de texto con la ruta a un directorio (por ejemplo C:\Windows\Media).

Lista de Archivos (FileList).

Este control es un cuadro de lista que muestra los archivos que hay en un directorio. Para este control, los eventos ms importantes sern los eventos Click y DblClick. Mediante el cdigo correspondiente en estos eventos se podran abrir archivos, ejecutar programas, etc. La propiedad Path es una cadena de texto que es la ruta del directorio que contiene los archivos mostrados; a travs de la propiedad Pattern se puede especificar qu tipos de archivo se mostrarn en este control. Si la propiedad Pattern es *.* (por defecto) se mostrarn todos los archivos, si se le da por valor *.doc, se mostrarn solamente los archivos con extensin doc; si tiene por valor *.doc;*.txt se mostrarn slo los archivos con extensin txt y doc.

Lneas (Line).
Este control es meramente decorativo y no tiene eventos ni mtodos. Las propiedades X1, Y1, X2 e Y2 son las coordenadas de sus extremos, las que pueden cambiarse a travs de cdigo. La propiedad BorderWidth permite definir el grosor de la lnea.

Formas (Shape).
Al igual que las lneas, las formas no tienen ni eventos ni mtodos, pero tienen ms propiedades que las lneas. La propiedad Shape permite definir qu figura geomtrica tendr (crculo, rectngulo, rectngulo ovalado, elipse, etc.). La propiedad BackColor define el color de fondo de la forma, BackStyle tiene dos valores: Opaque y Transparent. Si la propiedad est en Transparent no se ver el color de fondo. La propiedad FillStyle permite determinar el relleno de la figura (con lneas diagonales, cuadriculado, etc.) y FillColor determina el color de dichas lneas de relleno. BorderStyle determina el tipo de lnea que conformar el borde y BorderColor determinar el color del borde.

DataControl (Data).
Este control Data permite tener un acceso sencillo a bases de datos. Pueden ser bases de datos de Access (*.mdb) o dBase (*.dbf), Paradox (*.db), etc. a travs de un ISAM instalable. Visual Basic tiene una herramienta para crear bases de datos de cualquiera de los tipos ya mencionados (y ms), llamada VisData. Este tema se tratar ms adelante.

Ejemplo
Crea un nuevo proyecto estndar. Este proyecto tendr 3 formularios: Control Form "" Propiedad Valor Name frmPrin Caption Inicio cmdFtime

Commandbutton Name

"" "" "" "" Label "" ""

Caption Caption Caption Caption Name Autosize Caption

Control &Timer cmdFfich &Ficheros cmdFcont &Controles cmdExit &Salir lblFech True

Commandbutton Name Commandbutton Name Commandbutton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Private Sub cmdFtime_Click() frmTime.Show 1 End Sub Private Sub cmdFfich_Click() frmFich.Show 1 End Sub Private Sub cmdFcont_Click() frmContr.Show 1 End Sub Private Sub cmdExit_Click() End End Sub Private Sub Form_Load() lblFech.Caption=Format(Date,"Long Date") &" - "& Time End Sub

Control Form "" Shape "" "" "" "" Shape

Propiedad Valor Name frmTime Caption Name Height Width Left Top Name Control Timer shpCont 500 3000 80 80 shpMovil

"" "" "" "" "" Timer "" "" Scroll Bar "" "" "" ""

Shape Height Width Top Left Name Enabled Interval Name Min Max Value Caption

Circle 420 420 120 90 tmrMover False 2 hsbInter 0 100 2 cmdMover Comenzar

Commandbutton Name

Escribe el siguiente cdigo en este formulario:


Option Explicit Dim direccion as Boolean Private Sub hsbInter_Change() tmrMover.Interval=hsbInter.Value End Sub Private Sub cmdMover_Click() If cmdMover.Caption="Comenzar" Then tmrMover.Enabled=True:cmdMover.Caption="Detener" Else:tmrMover.Enabled=False:cmdMover.Caption="Comenzar" End If End Sub Private Sub tmrMover_Timer() Select Case direccion Case Is=False While shpMovil.Left<2570 shpMovil.Left=shpMovil.Left+1 Wend direccion=True Case Is=True While shpMovil.Left>90 shpMovil.Left=shpMovil.Left-1 Wend direccion=False End Select End Sub

Control Propiedad Valor Form Name frmFich "" Image Drive Caption Name Name Ficheros imgFoto drvDisco dirCarp filArch *.bmp;*.jpg;*.gif lblNomb lblTipo True

DirList Name FileList Name "" Label "" Label "" "" Pattern Name Caption Name Caption Autosize

Escribe el siguiente cdigo en el formulario:


Private Sub drvDisco_Change() dirCarp.Path=drvDisco.Drive End Sub Private Sub dirCarp_Change() filArch.Path=dirCarp.Path End Sub Private Sub filArch_Click() Dim nomb as String, longit as Byte nomb=filArch.List(filArch.ListIndex) longit=Len(nomb)-4 lblNomb.Caption=Left(nomb,longit) Select Case Lcase(Right(nomb,3)) Case "bmp" lblTipo.Caption="Mapa de Bits" Case "jpg" lblTipo.Caption="Imagen JPEG" Case "gif" lblTipo.Caption="Imagen GIF" End Select imgFoto.Picture=LoadPicture(filArch.Path &"\"& nomb) End Sub

Control Form "" TextBox

Propiedad Name frmCont Caption Name Controles txtEscr

Valor

"" "" Label "" "" Frame "" Option "" "2 CheckBox "" CheckBox "" CheckBox ""

Text Multiline Name Caption WordWrap True Name Caption Name Caption Index Name Caption Name Caption Name Caption fraColor Colores optColor Negro, Blanco. Azul, Rojo, Verde, Amarillo 0a5 chkBold Negrita chkItalic Cursiva chkUnderline Subrayado Dar Formato True lblFormat

Commandbutton Name

Escribe el siguiente cdigo en el formulario:


Option Explicit Dim constcolor as ColorConstants Private Sub optColor_Click(index as Integer) Select Case index Case 0 constcolor=vbBlack Case 1 constcolor=vbWhite Case 2 constcolor=vbBlue Case 3 constcolor=vbRed Case 4 constcolor=vbGreen Case 5 constcolor=vbYellow End Select End Sub Private Sub Form_Load() constcolor=vbBlack optColor(0).Value=True End Sub

Private Sub cmdFormat_Click() lblFormat.Caption=txtEscr.Text lblFormat.Forecolor=constcolor chkBold.Value=lblFormat.Font.Bold chkItalic.Value=lblFormat.Font.Italic chkUnderline.Value=lblFormat.Font.Underline End Sub

Pulse F5 para probar la aplicacin

El Color en Visual Basic 6.0.


Constantes de color Funcin RGB Ejemplo Variables de color

El color en Visual Basic 6.0 est definido por el sistema R.G.B. RGB proviene de las iniciales de Red-Green-Blue, y cada valor de cada color ocupa 1 byte (de 0 a 255), expresado en sistema hexagesimal (0 a 255, 00 a FF). El color ocupa 4 byes en la memoria: 1 para cada color (1 para Rojo, 1 para Verde y 1 para Azul) y un byte extra. Los distintos colores surgen de los valores dados a cada una de las componentes de RGB, o sea que la cantidad de colores que se pueden formar es muy amplia.

Constantes de color.
Visual Basic 6.0 dispone de una serie de constantes de colores, las cuales se han utilizado en ejemplos anteriores, al grupo de estas constantes se lo denomina ColorConstants y contiene las constantes que se encuentran en la tabla 6. Estas constantes son algunos de los colores ms usuales del sistema RGB, sin embargo es bastante limitado ya que con el sistema RGB se pueden obtener millones de combinaciones y por lo tanto millones de colores. Tabla 6 - Constantes de Colores Color Negro Blanco Verde Rojo Azul Constante vbBlack vbWhite vbGreen vbRed vbBlue 0 16777215 65535 65280 255 16711680 16776960 Valor

Amarillo vbYellow

Turquesa vbCyan

Magenta vbMagenta 16711935

Funcin RGB.
Existe una funcin con la cual obtener en cualquier color del sistema RGB y es mediante la funcin RGB. Esta funcin tiene por argumento los tres valores de las componentes R.G.B., que pueden tomar un valor de 0 a 255. Si se le da un valor mayor que 255, se toma el valor 255. La forma general de la funcin RGB es la siguiente:
RGB(rojo as Integer,verde as Integer, azul as Integer)

Ahora se presentan los valores de la funcin RGB para algunos colores: RGB RGB(0,0,0) RGB(255,0,0) RGB(0,0,255) RGB(0,255,0) RGB(0,255,255) Color Negro Rojo Azul Verde Turquesa

RGB(255,255,255) Blanco

Ejemplo
Crea un nuevo proyecto estndar y coloca los siguientes controles: Control Propiedad Valor ListBox Name lstColor Label "" Label "" "" "" "" "" Name Caption Name Caption Index Min Max Value lblHex 000000 lblDec 0-0-0 hsbColor 0a2 0 255 0

Scroll Bar Name

Escribe el siguiente cdigo en la ventana de cdigo:

Private Sub Font_Load() lstColor.BackColor=vbBlack End Sub Private Sub hsbColor_Scroll(index as Integer) lstColor.BackColor=RGB(hsbColor(0).Value,hsbColor(1).Value,hsbColor(2).Va lue) lblDec.Caption=hsbColor(0).Value &"-"& hsbColor(1).Value &"-"& hsbColor(2).Value lblHex.Caption=Hex(hsbColor(0).Value) & Hex(hsbColor(1).Value) & Hex(hsbColor(2).Value) End Sub

Pulse F5 para probar la aplicacin. La barra de desplazamiento de ndice 0 da valor al argumento rojo de la funcin RGB, la de ndice 1 da valor al argumento verde y la de ndice 2 da valor al argumento azul. La etiqueta lblDec contiene los valores de la funcin R-G-B y la etiqueta lblHex contiene esos valores convertidos al sistema Hexagesimal. En el lenguaje HTML, por ejemplo, los colores se representan en el sistema RGB con esta notacin Hexagesimal. Otra forma de definir el color es con la siguiente notacin: &H00FFFF& RGB(255,255,0) Los colores estn determinados en sistema Hexagesimal por 6 caracteres entre la H y el signo & (00FFFF). Este color representa el amarillo y los dos primeros caracteres (00) representan al color azul, los dos siguientes al verde y los dos ltimos al rojo.

Variables de color.
Los colores que se representan con las constantes de color de Visual Basic 6.0 se pueden almacenar en un tipo de variable declarada como ColorConstants. Un color cualquiera, por ejemplo, el que se obtiene con la funcin RGB se almacenan en una variable de tipo Long.

Grficos en Visual Basic 6.0


Funcin LoadPicture Funcin SavePicture Control Imagen Cajas de Dibujo

Hay tres objetos en Visual Basic 6.0 en los cuales se puede trabajar con imagenes y ellos son: el Control Imagen (Image), las Cajas de Dibujo (PictureBox) y el propio Formulario. Los formatos grficos admitidos por Visual Basic 6.0 son los siguientes:

o o o o o o

*.bmp *.jpg *.gif *.ico *.cur *.wmf

Si se quiere utilizar un grfico en otro formato habr que transformarlo previamente a alguno de estos con algn programa.

Funcin LoadPicture.
La funcin LoadPicture permite recuperar un archivo grfico para colocarlo en un control. Esta funcin tiene la siguiente forma general:
LoadPicture(archivo

as String, largo as Long, ancho as Long, flags as

LoadPictureConstants) Donde archivo es una cadena de texto con al ruta y el nombre del archivo grfico. Si se quiere colocar un grfico en un control, por ejemplo, esta funcin se utiliza de la siguiente forma:
nControl.Picture=LoadPicture(argumentos)

Funcin SavePicture.
Esta funcin permite guardar grficos en un archivo. La sintaxis general de la funcin es la siguiente:
SavePicture Dibujo as IPictureDisp, archivo as String

Donde Picture es el grfico que se desea guardar y archivo es la ruta y nombre de archivo donde se guardar el grfico. Supngase un control que contiene un grfico y se desea guardar el grfico en un archivo en el directorio Dibujo del disco A (Disquetera), esta funcin sera:
SavePicture nControl.Picture, "A:\Dibujo\nArchivo.ext"

Control Imagen (Image).


Este control es para incorporar elementos grficos a travs de su propiedad Picture. Una propiedad importante de este control es la propiedad Stretch, la cual a True ajusta la imagen al tamao del control. Soporta eventos como Click, MouseMove, etc.

En el captulo acerca de los controles estndar, en el ejemplo donde se trabaja con un control Imagen y se utiliza su propiedad Picture y la funcin LoadPicture para mostrar imgenes.

Cajas de Dibujo (PictureBox).


Las cajas de dibujo son controles especialmente diseados para el trabajo con grficos. Comparten ciertas propiedades y mtodos (relacionados a grficos) con los formularios. Soporta eventos como Click, DblClick, MouseMove, etc. Las propiedades y mtodos grficos que comparten se vern en el prximo captulo. La propiedad Autosize a True ajusta el tamao del control al tamao del grfico que contiene.

Los Mtodos Grficos.


Mtodo Scale Mtodo Cls Mtodo Print Mtodo PSet Mtodo Line Mtodo Circle Mtodo Point Ejemplo

Los mtodos grficos, propios de las Cajas de Dibujo, de los Formularios y del objeto Printer, permiten dibujar formas, lneas, colorear, etc.; sin embargo es necesario conocer ciertas propiedades de estos controles para poder aprovechar su total potencial. La propiedad Autoredraw permite redibujar los mtodos grficos. Esta propiedad debe estar a True para visualizarlos. La propiedad DrawWidth especifica el grosor del trazo del mtodo grfico. La propiedad BackColor especifica el color de fondo del control. La propiedad FillStyle especifica el estilo de relleno que tendrn los mtodos grficos. La propiedad FillColor especifica el color de relleno que tendrn los mtodos grficos. La propiedad BorderColor especifica el color del borde de los mtodos grficos.

Mtodo Scale.
Este mtodo permite dar una escala de medida al control. Es muy til para utilizar sistemas de coordenadas y para conocer dnde aparecern los grficos. La propiedad Scalemode contiene unidades de medida para utilizar con los mtodos grficos; por defecto es el Twip, pero tambin se pueden utilizar Pixeles, centmetros, milmetros e incluso puede definirse otra unidad.

Tabla 7 - Constantes de la propiedad ScaleMode Unidad de medida Definida por usuario Twips (1440*) Puntos (72*) Pixeles Caracteres Pulgadas Milmetros Centmetros * unidades por pulgada La forma general de este mtodo es el siguiente:
nObjeto.Scale (x1, y1)-(x1, y2)

Constante vbUser vbTwips vbPoints vbPixels vbCharacters vbInches vbMillimeters vbCentimeters

Valor 0 1 2 3 4 5 6 7

Donde x1 e y1 definen las coordenadas del vrtice superior izquierdo del objeto y x2 e y2 definen las coordenadas del vrtice inferior derecho del objeto.

Mtodo Cls.
El mtodo Cls elimina todos los mtodos grficos que haya en un objeto; este mtodo no lleva ningn argumento.

Mtodo Print.
El mtodo Print permite escribir texto en un objeto. El color y tipo de letra estar determinado por las propiedades ForeColor y Font de dicho objeto. La forma general de este mtodo es:
nObjeto.Print texto

Donde texto es una cadena de texto con lo que desea escribir en el objeto. El texto comenzar a escribirse segn las coordenadas CurrentX y CurrentY del objeto.

Mtodo PSet.
Este mtodo permite dibujar puntos en un objeto. La forma general de este mtodo es:
nObjeto.PSet Step (x,y), color

Donde Step es un argumento opcional que indicar si (x,y) sern las coordenadas absolutas o relativas respecto a las propiedades CurrentX y CurrentY, segn se omita o se agregue

este argumento. (x,y) son las coordenadas del punto. Color es opcional y define el color del punto; si se omite el punto tendr el color de la propiedad ForeColor.

Mtodo Line.
Este mtodo permite dibujar lneas y rectngulos. La forma general del mtodo Line es la siguiente:
nObjeto.Line Step (x1, y1)-Step (x2, y2), color, BF

Donde Step es opcional en ambos casos y significan lo mismo que en el mtodo PSet; idem para color. x1 e y1 son opcionales y son la coordenada del inicio de la lnea, si se omite dicho inicio estar determinado por las propiedades CurrentX y CurrentY. x2, y2 son las coordenadas del final de la lnea y son obligatorias. El argumento B dibuja un rectngulo, su vrtice superior izquierdo estar determinado por la coordenada x1, y1 y el inferior derecho por la coordenada x2, y2; el argumento F rellena el rectngulo con color.

Mtodo Circle.
Este mtodo permite dibujar circunferencias, arcos y elipses en un objeto. La sintaxis del mtodo es la siguiente:
nObjeto.Circle Step (x,y), radio, color, start, end, aspect

Donde Step es opcional y tiene el mismo significado que en los mtodos anteriores; (x,y) son las coordenadas del centro de la circunferencia; radio es el radio; start y end son opcionales y permiten dibujar arcos siendo start el ngulo inicial y end el ngulo final; aspect permite dibujar elipses, es opcional y es la relacin entre el dimetro vertical y el dimetro horizontal, cuando se utiliza este argumento, radio define el mayor de ambos dimetros.

Mtodo Point.
El mtodo Point devuelve un tipo Long con el valor del color de un punto de un objeto. Su sintaxis es:
nObjeto.Point (x,y)

Donde (x,y) son las coordenadas del punto.

Ejemplo
En el siguiente ejemplo se construir un sencillo programa de diseo grfico. Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control Propiedad Valor

Form "" PictureBox "" "" ComboBox "" ComboBox "" Label "" "" ""

Name Caption Name

frmDraw Programa de Dibujo pctPapel

Autoredraw True ScaleMode Pixels Name List Name List Name Caption Index Caption 0, 1 cmdCls &Limpiar cmbFigura Punto - Lnea - Rectngulo - Rectngulo relleno - Crculo cmbColor Blanco - Negro - Azul - Rojo - Amarillo - Verde Aguamarina - Magenta lblCoord

CommandButton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Option Explicit Dim vcolor as ColorConstants, xinic as Integer, paso as Boolean, radio as Integer Private Sub Form_Load() cmbFigura.ListIndex=0:cmbColor.ListIndex=1:vcolor=vbBlack End Sub Private Sub cmbColor_Click() Select Case cmbColor.ListIndex Case 0 vcolor=vbWhite Case 1 vcolor=vbBlack Case 2 vcolor=vbBlue Case 3 vcolor=vbRed Case 4 vcolor=vbYellow Case 5 vcolor=vbGreen Case 6 vcolor=vbCyan Case 7 vcolor=vbMagenta End Select End Sub

Private Sub cmdCls_Click() pctPapel.Cls:paso=False End Sub Private Sub cmbFigura_Click() paso=False End Sub Private Sub pctPapel_MouseMove(Button as Integer, Shift as Integer, X as Single, Y as Single) lblCoord(0).Caption=Fix(X):lblCoord(1).Caption=Fix(Y) End Sub Private Sub pctPapel_Click() Select Case cmbFigura.ListIndex Case 0 pctPapel.Pset (lblCoord(0).Caption,lblCoord(1).Caption), vcolor Case 1,2,3 Call dLinea lblCoord(0).Caption, lblCoord(1).Caption, cmbFigura.ListIndex Case 4 radio=InputBox("Ingrese el radio",0,"Radio") pctPapel.Circle (lblCoord(0).Caption, lblCoord(1).Caption, radio, vcolor End Select End Sub Private Sub dLinea(x1 as Integer, y1 If paso=False Then xinic=x1:yinic=y1:paso=True:Exit Sub Else Select Case figura Case 1 pctPapel.Line (xinic,yinic)-(x1,y1), Case 2 pctPapel.Line (xinic,yinic)-(x1,y1), Case 3 pctPapel.Line (xinic,yinic)-(x1,y1), End Select End If End Sub as Integer, figura as Byte)

color:paso=False color, B: paso=False color, BF: paso=False

Pulse F5 para probar la aplicacin.

Cajas de Mensaje y Cajas de Entrada


Cajas de Mensajes Cajas de Entrada Ejemplo

Las Cajas de Mensajes y las Cajas de Entrada son muy usuales en el sistema operativo Windows y en las aplicaciones. Las primeras son ventanas que aparecen en el centro de la pantalla y piden al usuario una

decisin, la que podr tomar presionando algn botn. Un ejemplo de estas son las cajas de confirmacin de guardar cambios en los archivos al cerrar un programa. Las segundas son ventanas donde se pide ingresar un un dato que el usuario digita en una caja de texto y enva este resultado a una variable.

Cajas de mensajes (MsgBox).


Las cajas de mensajes devuelven un valor, el cual depender del botn pulsado en el cuadro de mensaje. Este valor es numrico y se almacena en una variable para luego tomar decisiones. La sintaxis de la caja de mensajes es la siguiente:
MsgBox(texto, botones+focobotn+icono, ttulo)

Donde texto ser el texto descriptivo que aparecer en la caja, botones son los botones que aparecern en la caja y se definen por una constante de Visual Basic, focobotn es una constante de Visual Basic que especifica qu botn ser el predeterminado (el que tendr el foco), icono ser otra constante que definir el icono que aparecer en la caja, ttulo es el texto que aparecer en la barra de ttulo de la caja de mensaje. A continuacin las constantes de los argumentos botones, focobotn e icono. Tabla 7 - Constantes del argumento botones Botones Aceptar Aceptar, Cancelar Si, No, Cancelar Si, No Reintentar, Cancelar Foco Primer botn Segundo botn Tercer botn Icono Constante vbOkOnly vbOkCancel vbYesNoCancel vbYesNo vbRetryCancel Valor 0 1 3 4 5 Valor 0 256 512

Anular, Reintentar, Ignorar vbAbortRetryIgnore 2

Tabla 8 - Constantes del argumento focobotones Constante vbDefaultButton1 vbDefaultButton2 vbDefaultButton Constante vbCritical vbQuestion Valor 16 32

Tabla 9 - Constantes del argumento icono

vbExclamation vbInformation

48 64

Las cajas de mensaje devuelven un valor el que se podr almacenar en una variable. El valor devuelto por esta funcin depender del botn que se halla pulsado y en la tabla 10 se muestra el valor que devolver pulsar un botn: Tabla 10 - Valores de retorno de MsgBox Botn pulsado Aceptar Cancelar Anular Reintentar Ignorar Si No 1 2 3 4 5 6 7 Valor de retorno

De esta forma se podr utilizar una sentencia If, por ejemplo, para determinar diferentes acciones segn el valor devuelto por MsgBox.

Cajas de Entrada (InputBox).


Las cajas de entrada permiten el ingreso de un valor o de un texto y devuelven una cadena con el texto ingresado. La sintaxis de esta funcin es:
InputBox(texto, predeterminado, ttulo)

Donde texto es el texto descriptivo que aparecer en la caja de entrada, predeterminado es el valor predeterminado que aparecer en la caja de texto de la caja de entrada, ttulo es el texto que aparecer en la barra de ttulo de la caja de entrada.

Ejemplo
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control Form "" Propiedad Name frmCajas Caption Valor

Caja de mensajes y de entrada

Label "" Label "" "" ""

Name Caption Name Caption Caption Caption

lblTexto lblProd 0 cmdTexto &Escribir cmdProd &Multiplicar

CommandButton Name CommandButton Name

Escribe el siguiente cdigo en el formulario:


Private Sub Form_Load() MsgBox "Prueba de Caja de Mensajes"& vbCrLf &"y Caja de Entrada" End Sub Private Sub cmdTexto_Click() lblTexto.Caption=InputBox("Introduzca un texto","introducir","Cuadro de entrada") End Sub Private Sub cmdProd_Click() Dim numer as String numer=InputBox("Introduzca un nmero",0,"Multiplicar por 2") lblProd.Caption=2*Cint(numer) End Sub

Pulse F5 para probar el programa.

Archivos en Visual Basic 6.0


Archivos Secuenciales Archivos de Acceso Aleatorio Archivos Binarios Funciones de trabajo con archivos Ejemplo

Una parte muy importante al trabajar con programas es el guardar el trabajo realizado en un archivo para su posterior recuperacin, edicin, etc. Visual Basic 6.0 permite guardar los archivos en un disco. Los archivos podrn ser de tres tipos:

Secuenciales De Acceso Aleatorio

Binarios

Los archivos secuenciales son aquellos en los que se tiene acceso comenzando desde el principio. No se puede tener acceso a una parte sin haber pasado antes por las anteriores. Un ejemplo de este tipo de archivo son los archivos de texto. Estn escritos en caracteres ASCII y se pueden leer con el Block de Notas. Los archivos de Acceso Aleatorio graban los datos tal como estn escritos en la memoria y no son legibles por el Block de Notas. Los datos se guardan en registros y se puede tener acceso a cualquier registro directamente. Con este tipo de archivos se puede crear una base de datos simple, sin embargo, tiene la limitacin de que los registros deben tener el mismo tamao. Los archivos Binarios son iguales a los de Acceso Aleatorio con la diferencia de que el acceso no es por registros sino por Bytes; es muy poco utilizado. Todos los archivos deben abrirse para trabajar con ellos (y es aqu donde se define el tipo de archivo) y deben cerrarse luego de terminado el trabajo.

Archivos Secuenciales.
La sintaxis para abrir un archivo de tipo secuencial depender de lo que se desee hacer con l; si se quiere leer o escribir. No se podr entonces leer un archivo abierto para escritura ni escribir en un archivo abierto para lectura. Para abrir un archivo para lectura la sentencia ser la siguiente:
Open archivo For Input As #nFich

Donde archivo es una cadena de caracteres con la ruta y el nombre del archivo a abrir y nFich es un nmero que identifica al fichero. La sentencia para cerrar un archivo abierto, para cualquier tipo de archivo ser la misma:
Close #nFich

Si se escribe esta sentencia sin el argumento #nFich se cerrarn todos los archivos abiertos. Lo siguiente es leer los caracteres de un archivo abierto y para ello se utilizan determinadas funciones. La funcin Input lee determinada cantidad de caracteres, la cual tiene la siguiente sintaxis:
Input(caracteres,#nFich)

Donde caracteres es la cantidad de caracteres a leer. Una aclaracin con respecto a los caracteres. Un salto de lnea est determinado por la sucesin de dos caracteres no imprimibles que en cdigo ASCII tienen los cdigos 13 y 10, y la constante de Visual Basic para esta sucesin es vbCrLf; por tanto, esta funcin tomar un salto de lnea como dos caracteres. Si se quiere leer todo el contenido de un archivo se puede utilizar la funcin Input de la siguiente forma:
Input(LOF(nFich),#nFich)

Otra funcin importante es la funcin Line Input, la cual lee toda una lnea (una lnea termina con un salto de lnea, o sea, con vbCrLf). La sintaxis de esta funcin es:
Line Input #nFich, variable

Donde variable es una variable donde se almacenar la lnea leda. Si se quiere leer todo un archivo utilizando esta funcin, la sentencia puede ser la siguiente:
While Not EOF(nFich) Line Input #nFich, variable1 variable2=variable2 & variable1 Wend

Variable2 contendr todo el fichero al salir del bucle While. Tambin puede utilizarse en lugar de una variable la propiedad Caption de una etiqueta o la propiedad Text de una caja de textp, por ejemplo. Para escribir en un archivo secuencial se debe abrir el archivo para escritura y hay dos modos de apertura; el primero es:
Open archivo For Output As #nFich

Este modo de apertura reemplaza con la nueva escritura toda la escritura anterior. La segunda forma aade al final del archivo la nueva escritura, y la sentencia es:
Open archivo For Append As #nFich

Si el archivo existe se abre el archivo, si no existe se crea uno. Esto es vlido para ambos modos de apertura y para los archivos de Acceso Aleatorio y Binario, pero si se intenta abrir un archivo que no existe en modo de lectura (For Input) se generar un error en tiempo de ejecucin (Error 53). Para escribir en archivos secuenciales se utiliza la instruccin Write, la cual separa los datos mediante el carcter (,); su sintaxis es la siguiente:
Write #nFich, dato1; dato2; dato3...

Donde dato1, dato2, dato3... son datos o variables con los datos a escribir. Se puede leer luego el fichero con la funcin Input. Otra instruccin para la escritura en archivos es la instruccin Print, la cual tiene la siguiente sintaxis:
Print #nFich, Spc(n); texto

Donde Spc(n) es un argumento opcional que permite ingresar espacios antes de escribir y n el nmero de espacios, texto es el texto que se desea escribir. Se puede leer normalmente con las funciones Input y Line Input.

Archivos de Acceso Aleatorio.


Este tipo de archivos no son legibles por el Block de Notas, a diferencia de los secuenciales ya que no contienen caracteres ASCII. Se abren de la misma forma tanto para lectura como para escritura y si no existen se crean. La sintaxis para la apertura de este tipo es:
Open archivo For Random As #nFich Len=tamao

Este modo de apertura tiene un argumento: Len. En l se especifica el tamao de cada registro. Un registro consiste en una serie de datos los cuales se pueden almacenar en una variable y aqu se puede aprovechar las estructuras o tipos definidos por el usuario para crear una base de datos. Supngase una estructura declarada de la siguiente forma en un mdulo estndar:
Public Type persona apellido as String*10 documento as Long End Type

Cada registro almacenar una variable de tipo persona; una variable de este tipo ocupar 18 bytes (4+10 bytes + 4 bytes), por tanto la sentencia sera:
Open archivo For Random As #nFich Len=18

Tambin puede emplearse alternativamente otra expresin. Supngase declarada la variable Gabriel de tipo persona, la sentencia puede ser tambin:
Open archivo For Random As #nFich Len=Len(Gabriel)

Las funciones para leer y escribir en este tipo de archivos son las funciones Get y Put. La funcin Get lee un registro y guarda lo ledo en una variable. La sintaxis de esta funcin es la siguiente:
Get #nFich, registro, variable

Donde registro es el nmero del registro a leer y variable es la variable donde se almacenar el registro ledo. La funcin Put escribe un registro, si el registro existe lo reemplaza. Su sintaxis es la siguiente:
Put #nFich, registro, variable

Donde registro es el nmero del registro que se escribir (o reemplazar) y variable es la variable que contiene el dato a escribir en el registro.

Archivos Binarios.

Se trabajan de la misma forma que los archivos de Acceso Aleatorio y se leen y escriben con las funciones Get y Put, pero en vez de acceder a los datos por registros se accede por bytes. Este sistema de trabajo no es usual. La sintaxis para abrir un archivo de este tipo es:
Open archivo For Binary As #nFich Len=tamao

Funciones de trabajo con archivos.


Hay varias funciones para trabajar con archivos. Algunas se han utilizado y se explican a continuacin junto con otras no vistas.
o

LOF: devuelve el tamao de un archivo abierto (en bytes). Devuelve un entero de tipo Long. Su sintaxis es:
LOF(nFich)

FileLen: devuelve un entero de tipo Long con el tamao en bytes de un archivo no abierto. Su sintaxis es:
FileLen(archivo)

EOF: devuelve un valor booleano que indica si se lleg al final de un archivo (True) o no (False). Su sintaxis es:
EOF(nFich)

LOC: devuelve un entero de tipo Long con la posicin en un archivo abierto. Si es secuencial, la ubicacin del ltimo carcter ledo y si es de Acceso Aleatorio, el ltimo registro ledo. Su sintaxis es:
LOC(nFich)

FileCopy: este procedimiento permite copiar archivos. Tiene por argumentos origen y destino, los cuales son el archivo a copiar (y su ruta) y el archivo de destino (y su ruta). Su sintaxis es:
FileCopy origen destino

Kill: este procedimiento elimina archivos. archivo es una cadena de caracteres con la ruta y el nombre del archivo a eliminar.
Kill archivo

o o o

MkDir: crea un directorio o subdirectorio. Su sintaxis es:


MkDir directorio

RmDir: elimina un directorio o subdirectorio. Su sintaxis es:


RmDir carpeta

FileDateTime: devuelve un valor de tipo Variant (Date) con la fecha y hora en que un archivo fue creado o modificado por ltima vez. Su sintaxis es:
FileDateTime(archivo)

Ejemplo
Crea un nuevo proyecto estndar, aade un mdulo estndar y coloca los siguientes controles en el formulario: Control Form Propiedad Valor Name frmArch

Label "" Label "" Label "" "" Label "" TextBox "" "" "" ""

Name Caption Name Caption Name Caption Caption Name Caption Name Text Index Caption Caption

lblDocu lblApell lblEdad Registros lblEspa 0 txtIngr 0, 1, 2 cmdBusc &Buscar cmdIngr &Ingresar

CommandButton Name CommandButton Name

Escribe en el mdulo estndar a siguiente estructura:


Public Type Persona documento as Long apellido as String*12 nacimiento as Date End Type

En la ventana de cdigo del formulario escribe el siguiente cdigo:


Option Explicit Dim pers as Persona, regs as Integer, x as Byte Private Sub Form_Load() Open "c:\Windows\Temp\datbase.tmp" For Random As #1 Len=24:lblEspa.Caption=LOF(1) End Sub Private Sub cmdBusc_Click() If txtIngr(0).Text="" Then Exit Sub Else:regs=LOF(1)\24 For x=1 To regs Get #1,x,pers If txtIngr(0).Text=pers.documento Then lblDocu.Caption=pers.documento:lblApell.Caption=pers.apellido lblEdad.Caption=pers.nacimiento:Exit For End If

Next x End Sub Private Sub cmdIngr_Click() If Len(txtIngr.Text>0) And isDate(txtIngr(2).Text)=True Then pers.documento=txtIngr(0).Text:pers.apellido=txtIngr(1).Text:pers.nacimie nto=txtIngr(2).Text regs=LOF(1)\24+1:Put #1,regs,pers:lblEspa.Caption=LOF(1) End If End Sub

Pulse F5 para probar la aplicacin.

El Objeto App.
El objeto App permite acceder a las propiedades de la misma aplicacin. Las propiedades de este objeto son:
o

o o o o o

App.Path: devuelve una cadena de caracteres con la ubicacin de la aplicacin. En caso de que se haya compilado la aplicacin (*.exe) App.Path devolver la ubicacin del archivo *.exe; de lo contrario, devolver la ruta del archivo del proyecto (*.vbp). App.Revision: devuelve el nmero de revisin del programa. App.Comments: devuelve los comentarios. App.LegalCopyright: devuelve los derechos de autor de la aplicacin. App.EXEName: devuelve el nombre del ejecutable (*.exe). App.Title: devuelve el ttulo de la aplicacin.

Estas propiedades se establecen desde el men Proyecto-Propiedades.

El Objeto Printer.
El objeto Printer representa la impresora. Es un objeto que no tiene una interfaz grfica pero tiene propiedades y mtodos grficos que los formularios y cajas de dibujo. Este objeto tiene algunas propiedades especficas para la impresora tales como Quality, Device, etc.; propiedades que se vern ms adelante. Se puede definir la escala del objeto con el mtodo Sclae, dibujar crculos y lneas con los mtodos Circle y Line, limpiar el objeto con el mtodo Cls. Sin embargo, hasta este momento slo se imprimieron estos elementos en el objeto pero no se envi el trabajo a la impresora. Para enviar efectivamente el trabajo a la impresora se utiliza la instruccin EndDoc. Las propiedades CurrentX y CurrentY permiten especificar en qu punto comenzar a

imprimirse un mtodo grfico. Esto es especialmente til con el mtodo Print ya que se puede especificar en qu punto comenzar a escribirse el texto. Un ejemplo sencillo de impresin de texto es el siguiente cdigo, el cual puede asociarse a algn evento para probarlo.
Printer.Print "Esto es una prueba de impresin"& vbCrLf &"Microsoft Visual Basic 6.0":EndDoc

El mtodo KillDoc se utiliza para cancelar un trabajo de impresin cuando se desee, aunque no se haya terminado. Las propiedades del objeto Printer son propiedades relacionadas con la impresora, tales como su nombre, la calidad de la impresin, el tamao de las hojas, etc.; y los valores que pueden tomar estas propiedades estn definidas por ciertas constantes, algunas de ellas son:

Orientation(integer): devuelve o establece la posicin de la hoja. Page: devuelve el nmero de la pgina actual. Es de solo lectura. Copies: devuelve o establece el nmero de copias a imprimir. PrintQuality(integer): es una propiedad que devuelve la resolucin de la impresora, o sea la calidad de la impresin. vbPRPQMedium (-3) calidad media de impresin. vbPRPQDraft (-1) calidad de borrador. NewPage: este mtodo permite continuar el trabajo de impresin en otra pgina.

El Objeto ClipBoard.

Ejemplo

El objeto ClipBoard manipula el portapapeles de Windows. A travs de l se colocan datos en el portapapeles (copiar) y se recuperan datos del portapapeles (pegar). Puede utilizarse este objeto para crear un men Edicin con los comandos Copiar y Pegar. Los siguientes son los mtodos del objeto ClipBoard:

SetText(texto): guarda el argumento texto en el portapapeles. GetText:: permite acceder al texto contenido en el portapapeles. Clear: elimina el contenido del portapapeles.

Ejemplo
Crea un nuevo proyecto estndar y coloca en l los siguientes controles:

Control Propiedad Valor

El Objeto Err.

Ejemplo 1 Ejemplo 2

Este objeto representa los errores y tiene sus propiedades, mtodos y funciones. La funcin Raise genera errores en tiempo de ejecucin, su forma general es la siguiente:
Raise(numero as Long, origen as String, descripcin as String)

Donde numero es el nmero del error; origen es opcional e indica el objeto o aplicacin que gener el error; descripcin es una cadena de caracteres con la descripcin acerca del error producido.

Ejemplo 1
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control TextBox "" ListBox Propiedad Valor Name txtNum Text Name 0 cmdError lstAdd

CommandButton Name

Escribe el siguiente cdigo en el formulario:


Private Sub cmdError_Click() If isnumeric(txtNum.Text)=True Then lstAdd.Additem txtNum.Text Else:Err.Raise 77,"txtIntro","La expresin no es numrica" End If End Sub

La propiedad Number del objeto Err es la propiedad ms importante y hace referencia al nmero del error. La propiedad Description es una cadena de texto que describe el error producido. La propiedad Source indica en qu lugar se produjo el error. La propiedad HelpFile es la ruta de acceso a un archivo de ayuda en el caso de producirse un error. El mtodo Clear limpia todos los errores, o sea deja Err=0.

Si un error se produce, Visual Basic emite un mensaje con el nmero y la descripcin del error y all finaliza la ejecucin, perdiendo todo el trabajo realizado (si no se ha guardado). Para evitar estas situaciones hay ciertas instrucciones para controlar los errores:
- On Error GoTo etiqueta - On Error Resume Next

La primer instruccin activa una rutina que comienza en la etiqueta lnea. Si se establece en el cdigo lo siguiente:
On Error GoTo Unerror sentencias Unerror: sentencias

Se ejecutarn las sentencias a continuacin de Unerror en caso de producirse un error. La segunda instruccin hace que la ejecucin del programa contine despus de la lnea que produjo el error. Si se establece en el cdigo lo siguiente:
On Error Resume Next sentencia1 sentencia2 sentencia3 sentencia4

Si el error sucede en la sentencia 1, se pasar la ejecucin a la sentencia2, si se produce un error en la sentencia2 se pasar la ejecucin a la sentencia3, y as sucesivamente.

Ejemplo 2
Crea un nuevo proyecto estndar y coloca en el formulario los siguientes controles: Control TextBox "" Frame Option "" "" "" "" Propiedad Name txtDato Text Caption Name Index Caption Caption Caption Operaciones optOper 0, 1, 2 Divisin 500/x - variable as Byte - Raz cuadrada cmdCerr Con control cmdSerr Sin control Valor

CommandButton Name CommandButton Name

Escribe el siguiente cdigo en la ventana de cdigo del formulario


Private Sub Form_Load() optOper(0).Value=True End Sub Private Sub cmdSerr_Click() Dim var as Integer If optProc(0).Value=True Then txtDato.Text=500/txtDato.Text Else If optOper(1).Value=True Then txtDato.Text=Sqr(txtDato.Text) Else:var=txtDato.Text End If End If End Sub

Pulse F5 para probar la aplicacin. Trata de introducir errores, como la divisin entre 0, la raz cuadrada de nmeros negativos y guardar en la variable de tipo Byte valores no aptos. A continuacin una tabla con algunos de los valores de error: Tabla 11 - Algunos valores de error Nmero 11 13 6 5 9 53 54 55 3170 Descripcin Divisin por cero No coinciden los tipos Desbordamiento Argumento o llamada a procedimiento no vlida Archivo no encontrado Modo de archivo incorrecto El archivo ya est abierto No se encontr el ISAM instalable Asingar un valor de caracteres a una variable numrica Asignar a una variable numrica un valor que no puede almacenar Utilizacin de argumentos no vlidos Motivo

Subndice fuera del intervalo Asignar un ndice mayor al ndice de un array Abrir un archivo que no existe Ocurre cuando se intenta utilizar un mtodo de lectura o escritura incompatible con el mtodo open utilizado Se intenta abrir un archivo ya abierto Intenta acceder a una base de datos sin el ISAM instalable

Las Clases.

Propiedades

Mtodos Funciones Ejemplo

Una clase es un objeto. En los ejemplos de aplicaciones que se han visto se utilizaron clases, por ejemplo el formulario es un tipo especial de clase, las cajas de texto, los cuadros de lista, etc. El usuario puede crear sus propias clases u objetos, con mtodos, propiedades y funciones utilizando los Mdulos de Clase. Un mdulo de clase tiene una ventana donde se escribe el cdigo de la clase, no tiene una interfaz grfica. En l se definen los mtodos, propiedades y funciones de la clase. Si bien se puede escribir el cdigo directamente, en el men Herramientas, Procedimiento se encuentra un cuadro de dilogo donde se define el nombre del procedimiento y si ser una funcin, propiedad, mtodo o evento y si ser de carcter pblico o privado. Una vez elegido el nombre, tipo y alcance del procedimiento se hace clic en Aceptar y aparcer en la ventana de cdigo del mdulo de clase el inicio y final del procedimiento; solo hay que agregarle el cdigo y cambiar algunos parmetros (si fuese necesario). Cuando se define un procedimiento como pblico o privado se indica si se podr acceder a l desde fuera de la clase o si ser un procedimiento interno, al cual no se acceder desde fuera.

Propiedades.
Las propiedades pueden ser de lectura, escritura o ambas. Una propiedad podr ser de cualquier tipo (String, Long, Currency, etc.) pero siempre la propiedad de lectura y escritura debern ser del mismo tipo. Una propiedad de lectura se define de la siguiente forma:
Public/Private Property Get nombre () as tDato nombre=sentencias End Property

Una propiedad de escritura tiene la siguiente forma general:


Public/Private Property Get nombre (ByVal vNewValue as tDato) sentencias=vNewValue End Property

Donde vNewValue es el valor que se le dar a la propiedad.

Mtodos.
Los mtodos son similares a los procedimientos vistos hasta ahora. Se definen como pblicos o privados y pueden o no llevar argumentos. La sintaxis de un mtodo es la siguiente:

Public/Private Sub nombre (argumentos) sentencias End Sub

Funciones.
Las funciones se crean de la misma forma que las ya vistas y pueden, tambin, ser pblicas o privadas. Recurdese que las funciones siempre tienen un valor de retorno a diferencia de los mtodos.

Ejemplo
Crea un nuevo proyecto estndar y coloca en l un mdulo de clase, cambie su nombre a cPrueba y escriba el siguiente cdigo:
Option Explicit Dim valor as Long, x as Byte, y as Byte, t as Byte Public Property Get numero () as Long numero=valor End Property Public Property Let numero (ByVal vNewValue as Long) valor=vNewValue End Property Private Function reducir(a as String) as Byte For x=1 To Len(a) y=y+Mid(a,x,1) Next x If y>9 Then t=y reducir=reducir(y) Else:reducir(y) End If End Function Public Property Get reduccion () as Byte reduccion=reducir(valor) End Property

El nombre de la clase que se cre es cPrueba, pero para poder utilizarla se debe crear el objeto de esa clase en la aplicacin. Esto se realiza declarando una variable de ese tipo y luego crendola con la instruccin Set . La forma general para declarar un objeto ser la siguiente:
Dim var as nClase Set var=New nClase

Donde var es la variable que identificar al objeto y nClase es el nombre de la clase a la cual pertenece el objeto. Tambin se podr utilizar la siguiente sentencia para la creacin de un objeto:
Dim var as New nClase

Cada objeto creado e identificado con una variable se dice que es una instancia de la clase a la que pertenece. Una vez que se cre el objeto se puede acceder a sus propiedades, mtodos y funciones declarados como pblicos en la clase, de la misma forma como se accede en cualquier objeto. Luego de que su utilidad termin puede destruirse el objeto con el fin de liberar memoria mediante la siguiente sentencia:
Set var=Nothing

En el caso de la clase cPrueba hay dos propiedades: la propiedad numero es de lectura y escritura y la propiedad reduccin es de solo lectura. La funcin reducir es privada, por lo tanto es interna de la clase y no ser accesible. Ahora coloca en el formulario los siguientes controles: Control Propiedad Valor Label Name lblReduc TextBox Name txtNum

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Private Sub Form_Load() Dim obj as New cPrueba End Sub Private Sub Form_Unload() Set obj=Nothing End Sub Private Sub txtNum_KeyPress(Keyascii as Integer) If Keyascii=13 Then obj.numero=txtNum.Text:lblReduc.Caption=obj.reduccion End If End Sub

Presione F5 para probar la aplicacin. Las clases tienen dos eventos propios: el evento Initialize y el evento Terminate. Estos eventos tienen lugar cuando se crea y se elimina un objeto, respectivamente. Pueden emplearse estos eventos, por ejemplo, para una clase que trabaje con ficheros. En el evento Initialize se puede abrir un archivo con la instruccin Open y en el evento Terminate se puede cerrar el archivo abierto con la instruccin Close. Por ejemplo:

Private Sub Class_Initialize() Open App.Path &"\Prueba.txt" For Input As #1 End Sub Private Sub Class_Terminate() Close #1 End Sub

El Objeto Collection.

Ejemplo

El objeto Collection permite almacenar objetos en s, es algo as como un array de objetos. Tiene dos mtodos y dos propiedades: El mtodo Add permite agregar elementos a la coleccin y el mtodo Remove permite quitar los elementos. La propiedad Count es una propiedad de solo lectura e indica el nmero de elementos que contiene la coleccin y la propiedad Item con el argumento index permite acceder al objeto almacenado con ese ndice. Nota: a diferencia de los arrays los elementos (Items) de una coleccin comienzan a numerarse por 1. Para crear una coleccin primero se declara una variable de tipo Collection, por ejemplo:
Private Sub nVariable as Collection

Luego se crea efectivamente la coleccin con la sentencia:


Set nVariable=New Collection

A partir de aqu se puede comenzar a utilizar la coleccin almacenando objetos, quitndolos y todo lo que se desee hacer con ella. Supngase creado un objeto de nombre miObjeto y un objeto Collection de nombre miColeccion. Se puede agregar a la coleccin el objeto miObjeto con la siguiente sentencia:
miColeccion.Add miObjeto

Para recuperar un objeto de la coleccin con ndice 2, por ejemplo, se almacena este elemento de la coleccin en una variable de objeto; si se utilizan el objeto y la coleccin declaradas anteriormente:
miObjeto=miColeccion.Item(2)

Ejemplo

Crea un nuevo proyecto estndar e introduce un nuevo mdulo de clase de nombre cFicha. Escribe en la ventana de cdigo del mdulo lo siguiente:
Option Explicit Dim apell as String, nomb as String, nacim as Date Public Property Get nombre() as String nombre=nomb End Property Public Property Let nombre (ByVal vName as String) nomb=vName End Property Public Property Get apellido() as String apellido=apell End Property Public Property Let apellido(ByVal vApel as String) apell=vApel End Property Public Property Get nacimiento() as Date nacimiento=nacim End Property Public Property Let nacimiento (ByVal vFech as Date) nacim=vFech End Property Public Property Get edad()as Integer edad=Cint(Date-nacim) End Property

Coloca en el formulario los siguientes controles: Control Form "" TextBox "" TextBox "" TextBox "" "" Propiedad Valor Name frmColec Caption Name Text Name Text Name Text cmdAdd &Agregar Ficha Caption txtFnac txtApel Fichas txtNomb

CommandButton Name

CommandButton Name "" Label "" Label "" Label "" Scroll Bar "" "" "" Caption Name Caption Name Caption Name Caption Name Min Max Visible

cmdRemove &Quitar Ficha lblNomb lblEdad lblNfich 0 Fichas hsbFich 1 1 False

Escribe el siguiente cdigo en la ventana de cdigo del formulario:


Option Explicit Dim Fichas as Collection, Ficha as cFicha Private Sub Form_Load() Set Fichas=New Collection End Sub Private Sub cmdAdd_Click() Set Ficha=New cFicha Ficha.nombre=txtNomb.Text:Ficha.apellido=txtApel.Text Ficha.nacimiento=txtFnac.Text Fichas.Add Ficha:Set Ficha=Nothing If Fichas.Count<2 Then hsbFich.Visible=True Else:hsbFich.Max=Fichas.Count End If lblNfich.Caption=Fichas.Count &" Fichas" End Sub Private Sub cmdRemove_Click() Fichas.Remove hsbFich.Value:hsbFichas.Max=Fichas.Count If Fichas.Count=0 Then hsbFich.Visible=False End If lblNfich.Caption=Fichas.Count &" Fichas" Call hsbFich_Change End Sub Private Sub hsbFich_Change() Set Ficha=Fichas.Item(hsbFich.Value) lblEdad.Caption=Ficha.nacimiento &" tiene "& Ficha.Edad &" aos" lblNomb.Caption=Ficha.nombre &" "& Ficha.apellido Set Ficha=Nothing End Sub

Pulse F5 para probar la aplicacin.

Anda mungkin juga menyukai