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.
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.
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.
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.
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.
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
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
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
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
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
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:
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
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
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
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.
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
Commandbutton Name
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:
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)
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
Procedimientos
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
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()
sentencias End Sub Private Sub proceso2() sentencias sentencias:Exit Sub sentencias End Sub
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
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
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.
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
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.
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:
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.
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.
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
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
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
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.
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.
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.
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
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
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.
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.
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.
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.
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.
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
Control &Timer cmdFfich &Ficheros cmdFcont &Controles cmdExit &Salir lblFech True
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
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
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
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
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
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
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.
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
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
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"
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.
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)
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)
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 "" "" ""
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
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)
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.
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
Tabla 8 - Constantes del argumento focobotones Constante vbDefaultButton1 vbDefaultButton2 vbDefaultButton Constante vbCritical vbQuestion Valor 16 32
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.
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
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:
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.
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
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
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
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
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.
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:
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
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
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
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
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:
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
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
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