INTRODUCCION A LA PROGRAMACION VISUAL 
 
 
1.1.- INTRODUCCIN HISTRICA AL ENTORNO WINDOWS. 
 
Las interfaces grficos de usuario (GUI) han revolucionado el mundo informtico. Quiz ms importante a largo plazo 
es el hecho de que las aplicaciones Windows tienen una interfaz de usuario consistente, es decir, los usuarios tienen ms 
tiempo para dominar la aplicacin sin tener que preocuparse de las teclas que deben pulsarse dentro de los mens y 
cuadros de dilogo. 
 
Todo esto tiene un precio; antes de la existencia de Visual Basic, el desarrollo de aplicaciones para Windows era mucho 
ms complicado que desarrollar aplicaciones para DOS. Los programadores tenan que preocuparse ms de lo que estaba 
haciendo el ratn, de dnde estaba el usuario dentro de un men y de si estaba realizando un clic o un doble clic en un 
punto determinado. Desarrollar aplicaciones para Windows requera expertos programadores en C, e incluso stos tenan 
problemas. 
 
Visual Basic ha cambiado esta situacin. Se pueden desarrollar aplicaciones para Windows ms rpidamente. Los 
errores de programacin no se generan tan frecuentemente y, si lo hacen, son ms sencillos de depurar. Adems incluye 
dos conceptos importantes: 
 
Un mtodo visual de creacin de aplicaciones, incluyendo formularios (ventanas), controles y, componentes del 
formulario. 
 
La habilidad de asociar cdigo directamente a cada evento de cada elemento del diseo visual. 
 
 
 
1.2.- DESARROLLO DE APLICACIONES EN WINDOWS. 
 
Windows 95 ha sido diseado para tomar las ventajas de las nuevas tecnologas de hardware y software. Entre las 
innovaciones ms importantes de la programacin con Windows 95 tenemos: 
 
API (Application Programming Interface) de 32 bit, compatible con la API soportada en Windows NT. 
 
Un modelo de memoria sin muchas de las restricciones de versiones anteriores de Windows, lo que significa que las 
cadenas ya no estn limitadas a 65.535 caracteres, pudiendo alcanzar casi los 2 billones de caracteres de longitud. 
 
La capacidad de incrustar objetos OLE entre la inmensa mayora de aplicaciones Windows 95 con solo arrastrar y soltar. 
 
La adaptacin de los controles OLE (OCXs) en lugar de los controles VBX para utilizarlos en programacin. 
 
Optimizacin del registro central para almacenar informacin de las aplicaciones. sto sustituye a los ficheros INI 
utilizados en Windows 3.x para mantener informacin acerca del sistema y las aplicaciones. 
 
Optimizacin de la implementacin de multimedia, incluyendo sonidos, grficos y animaciones. 
 
Introduccin de un nuevo modo de presentacin de las aplicaciones, incluyendo la barra de tareas, controles de ficha y, 
ficheros de ayuda. 
 
Etc. 
 
 






1.3.- LA PROGRAMACIN VISUAL Y GUIADA POR EVENTOS. 
 
 
Un programa realizado en DOS es un conjunto de sentencias que se ejecutan de arriba a abajo ms o menos, en el orden 
que el programador ha diseado. Una aplicacin en Windows presenta todas las opciones posibles en uno o ms 
formularios para que el usuario elija entre ellas. La secuencia en la que se ejecutarn las sentencias no puede ser prevista 
por el programador. sto da lugar a la Programacin Orientada a Eventos. Para programar una aplicacin en Windows 
hay que escribir cdigo separado para cada objeto en general, quedando la aplicacin dividida en pequeos 
procedimientos, conducido cada uno de ellos por un suceso. Un suceso es una accin reconocida por un objeto 
(formulario o control) el suceso puede ser causado por el usuario o, indirectamente por el cdigo. En Visual Basic cada 
formulario y cada control tienen predefinidos un conjunto de sucesos. Cuando ocurren estos sucesos, Visual Basic 
invoca al procedimiento asociado con el objeto para ese suceso. 
 
Para desarrollar una aplicacin en Visual Basic, los pasos que se seguirn son: 
 
1.Crear la interfaz de usuario. 
 
1.Modificar las propiedades de cada objeto. 
 
1.Escribir el cdigo asociado a los eventos de cada objeto. 
 
 
1.4.- EL ENTORNO VISUAL BASIC. 
 
Los elementos que componen la pantalla de Visual Basic son: 
 
Barra de mens. 
 
Visualiza las rdenes que se utilizan para desarrollar, probar y archivar una aplicacin. 
Los mens que nos encontramos son: 
 
Archivo contiene las rdenes para trabajar con archivos. 
 
Edicin contiene las herramientas que ayudan a escribir el cdigo. 
 
Ver da acceso rpido a todas las partes del programa. 
 
Insertar permite incluir nuevos mdulos y formularios en la aplicacin. 
 
Ejecutar permite verificar la aplicacin mientras se desarrolla. 
 
Herramientas controla el aspecto y propiedades del entorno. 
 
Complementos contiene las utilidades para el manejo de bases de datos. 
 
Ayuda. 
 
Ventana o barra de herramientas. 
 
Facilita el uso a las rdenes ms comunes. De izquierda a derecha los iconos que aparecen permiten: 
 
Formulario crear un nuevo formulario. 
 
Modulo crear un nuevo mdulo. Se utiliza para crear fragmentos de cdigo independiente del formulario. 
 


Abrir Project permite abrir un proyecto. 
 
Guardar Proyecto permite guardar un proyecto. 
 
Bloquear Controles impide que se muevan los controles del formulario involuntariamente. 
 
Editor de Mens visualiza la ventana de diseo de mens. 
 
Propiedades visualiza la ventana de propiedades de los distintos objetos. 
 
Examinador de Objetos muestra las clases, mtodos, propiedades, etc. de los objetos disponibles en la aplicacin. 
 
Proyecto visualiza la ventana de proyecto. 
 
Inicio. 
 
Interrumpir. 
 
Terminar. 
 
Alternar Puntos de Ruptura. 
 
Inspeccin Instantnea visualiza el valor del elemento seleccionado en la ventana de cdigo. 
 
Llamadas visualiza la estructura de llamadas activas. 
 
Paso a Paso por instrucciones. 
 
Paso a Paso por procedimientos. 
 
 
Caja de herramientas. 
 
Provee de un conjunto de herramientas que permiten colocar los controles en el formulario durante el diseo del 
proyecto. 
 
 
 
Ventana de proyecto. 
 
En esta ventana estn especificados los ficheros (formularios, mdulos, etc.) que forman la aplicacin y, dnde se 
seleccionarn para crearlos o modificarlos. Esto se debe a que hay ficheros que pueden utilizarse en ms de una 
aplicacin. Adems contiene dos botones: Ver Formulario que visualiza el formulario seleccionado y; Ver Cdigo que 
visualiza el cdigo del fichero seleccionado. 
 
 
 
Ventana del formulario. 
 
Es la ventana que da lugar a la interfaz de usuario. Es la ventana que se personalizar. Los puntos que aparecen sobre el 
formulario, forman una rejilla que ayuda a la hora de alinear los controles que se sitan sobre el mismo. Esta rejilla 
desaparece en tiempo de ejecucin. Para eliminarla en tiempo de diseo se acceder a la opcin 
Herramientas/Opciones/Ficha Entorno/Mostrar Cuadrcula. 
 
 
 

Ventana de propiedades. 
 
Especifica las propiedades de cada uno de los objetos. En cada momento mostrar las propiedades del objeto 
seleccionado en el formulario. Est formada por dos partes: la lista desplegable de objetos que visualiza el nombre del 
objeto seleccionado y, la lista de propiedades del objeto seleccionado. 
 
 
QU SUCEDE AL EJECUTAR UNA APLICACIN VISUAL BASIC? 
 
Los eventos que tendrn lugar a la hora de ejecutar una aplicacin son: 
 
1.Form_Initialize 
 
1.Form_Load 
 
1.Form_Resize 
 
1.Form_Activate 
 
1.Form_GotFocus 
 
1.Form_Paint (solo en el caso de que la propiedad AutoRedraw del formulario est 
establecida a False) 
 
 
y, antes de descargar un formulario de memoria, los eventos que tienen lugar son: 
 
1.Form_Terminate 
 
1.Form_Unload 
 
 
 
CMO FUNCIONA UNA APLICACIN VISUAL BASIC? 
 
Normalmente, se escribe cdigo a los eventos a los que se quiera dar respuesta. Si el evento no tiene respuesta o no se 
produce, Visual Basic no har nada, es decir no se ejecutar cdigo alguno. Para poder ejecutar cdigo, se tendr que 
haber dado respuesta a algn evento de algn control y, que dicho evento tenga lugar. 
 
 
ES VISUAL BASIC 4.0 ORIENTADO A OBJETOS? 
 
Visual Basic 4.0 es la primera versin realmente orientada a objetos. Cumple los tres conceptos clave: 
 
Encapsulacin: 
 
La utiliza de manera diferente a C++. Los objetos Visual Basic tienen propiedades como color, tamao, tipo de letra y, 
adems incorporan unos mtodos que responden a mensaje como clics de ratn, pulsacin de teclas, etc. En los que se 
puede integrar cdigo. 
 
Polimorfismo: 
 
Capacidad de reaccionar de manera distinta ante un mensaje idntico, dependiendo del objeto que lo reciba, p.e. un clic 
del ratn recibido por un botn de comando o por una caja de texto. 
 

Herencia: 
 
Capacidad de derivarse a partir de otro objeto.


2.1.- CONCEPTO DE PROYECTO. 
Dado que es muy comn en aplicaciones Visual Basic compartir cdigo o formularios personalizados, Visual Basic 
organiza las aplicaciones en lo que denomina proyectos. Cada proyecto puede tener varios formularios y, el cdigo que 
activa los controles de un formulario es archivado con el formulario en archivos separados. El cdigo general 
compartido por todos los formularios de una aplicacin puede ser dividido en varios mdulos, que tambin se archivan 
separadamente. En Visual Basic 4.0 un proyecto puede tener, adems, mdulos de clase y ficheros de recursos. 
Aunque Visual Basic almacena separadamente los archivos que forman un proyecto, hace un seguimiento de dnde 
estn los archivos. Crea un archivo con la extensin .VBP de Visual Basic Program/Project. Visual Basic permite tener 
un solo proyecto abierto en un momento determinado. Los formularios se archivan con la extensin .FRM y contienen 
una imagen del formulario y, de todos los controles que pertenecen a l, incluidas sus propiedades. Tambin pueden 
contener subrutinas de manejo de eventos, procedimientos generales, declaraciones de variables y de constantes a nivel 
de formulario y, procedimientos externos. Un mdulo estndar contiene cdigo Visual Basic que no est asociado a 
ningn formulario en particular. Los procedimientos que se encuentran en el mdulo, pueden ser accedidos desde 
cualquier otro procedimiento de la aplicacin. Se almacenan con la extensin .BAS. Los mdulos de clase tienen la 
extensin .CLS y contienen cdigo, incluido subrutinas, funciones, mtodos y procedimientos para crear descripciones 
genricas de objetos. Estos mdulos contienen propiedades que describen el comportamiento de una clase, as como el 
cdigo que define las propiedades y los mtodos de la clase. Los archivos de recursos se almacenan con la extensin 
.RES y contienen bitmaps, cadenas de texto, o cualquier otra informacin que pueda ser cambiada sin tener que reeditar 
el cdigo de la aplicacin. Un proyecto solo puede contener un archivo de recursos. 


2.2.- FORMULARIOS Y CONTROLES. PROPIEDADES COMUNES 
Despus de arrancar Visual Basic, aparece un proyecto y un formulario por defecto. Si se quiere iniciar un nuevo 
proyecto, se acceder a Archivo/Nuevo Proyecto, o bien se abrir un proyecto existente. 
EJEMPLO: 
Realizaremos el primer programa en Visual Basic. Para ello, una vez arrancado Visual Basic mostraremos la ventana de 
cdigo, para lo que se har doble clic en cualquier parte del formulario. En la ventana que aparece se escribir el cdigo 
Visual Basic. Esta ventana est formada por las siguientes partes: 
En la parte superior encontramos a la izquierda una lista desplegable correspondiente a los objetos del formulario (en 
este caso ninguno) y, precedido por Objeto. A la derecha la lista desplegable que aparece corresponde a la lista de 
procedimientos y viene precedido por Procedimiento. Esta lista muestra todos los procedimientos que puede reconocer 
el objeto Visual Basic que se encuentra en la lista Objeto. 
En la parte inferior y, con fondo blanco, se encuentra la zona de escritura de cdigo donde se escribir el cdigo. En este 
momento aparece la plantilla de procedimiento para un suceso. 
Private Sub Form_Load() 
End Sub 
Supongamos que queremos escribir un mensaje cada vez que se haga clic en el formulario. Para ello cambiaremos el 
procedimiento seleccionando, para el objeto Form, el suceso Clic. Una vez seleccionado, se escribir: 
Private Sub Form_Click() 
Print "Has hecho un clic con el ratn" 
End Sub 
Para ejecutar la aplicacin pulsaremos F5 y, cuando se haga clic sobre el formulario, aparecer el mensaje. Para detener 
la aplicacin, pulsaremos el botn de Parada o, Ejecutar/Terminar. 
Por lo general, los procedimientos de suceso asociados a un formulario empiezan por: 
Private Sub Form_NombreDelSuceso() 
Para situar un control en el formulario tenemos dos formas: 
1.Se hace clic sobre la caja de herramientas, sobre el control a situar. Se lleva el puntero del ratn al formulario. Se 
dibuja un rectngulo del tamao que ser el control. 
1.Hacer doble clic sobre el control a situar. 


EJEMPLO: 
La aplicacin que vamos a realizar estar formada por una caja de texto y un botn de comando. Para ello los pasos a 
seguir son: 
De la caja de herramientas seleccionamos el control Caja de texto, indicado por ab| y, lo situamos en la esquina superior 
izquierda del formulario. 
Ahora seleccionamos el botn de comando (2 fila, control ms a la derecha) y lo situamos a la derecha de la caja de 
texto. 
Modificaremos las propiedades de los controles. El botn debe visualizar "Presiname", para lo cual modificaremos las 
propiedades del botn. Una vez visualizada la ventana de propiedades del botn (con el icono, con F4 o desde 
Ver/Propiedades) seleccionaremos la propiedad Caption y cambiaremos el texto por "Presiname". Como valor de la 
propiedad Name asignaremos cmdPrimerBoton. A la caja de texto cambiaremos el valor de la propiedad Name para que 
muestre txtPrimeraCaja. La propiedad Text la dejaremos vaca. 
Supongamos que queremos escribir en la caja de texto un mensaje de bienvenida. Para ello cambiaremos el 
procedimiento seleccionando, para el objeto cmdPrimerBoton, el suceso Clic. Una vez seleccionado, se escribir: 
Private Sub cmdPrimerBoton _Click() 
txtPrimeraCaja.Text = "Bienvenido a Visual Basic" 
End Sub 
GUARDAR FORMULARIOS, MDULOS Y PROYECTOS 
En el men Archivo tenemos 4 opciones para guardar: 
Guardar Proyecto Guarda todos los archivos asociados con el proyecto actual. 
Guardar Proyecto Como... Se puede escoger un nuevo nombre para el proyecto actual y guarda todos los archivos 
asociados con el proyecto actual. 
Guardar Archivo Guarda el formulario o mdulo actual. 
Guardar Archivo Como... Se puede escoger un nuevo nombre para el formulario/mdulo actual. 
EJEMPLO: 
Modificaremos la aplicacin para que, cuando el usuario escriba en la caja de texto, en el botn aparezca el mensaje 
"Restaurar mensaje". Para ello mostraremos la ventana de cdigo asociada a la caja de texto haciendo doble clic sobre 
ella. El evento que se produce cuando el usuario escribe en una caja de texto es Change, por lo que el cdigo a escribir 
ser: 
Private Sub txtPrimeraCaja _Change() 
cmdPrimerBoton.Caption = "Restaurar mensaje" 
End Sub 
EJERCICIO: 
Modificaremos la aplicacin para que, una vez restaurado el mensaje, en el botn de comando vuelva a aparecer el texto 
"Presiname". 
Como se ha podido apreciar, la forma de referirse a una propiedad es Objeto.Propiedad, donde Objeto es el nombre del 
formulario o del control (valor de la propiedad Name) y Propiedad es el nombre de la propiedad a la que se quiere 
acceder. 
PROPIEDADES MS COMUNES DE LOS FORMULARIOS 
AutoRedraw (Redibujado automtico) 
Gestiona la manera de redibujar las imgenes en pantalla. Puede tomar los valores True/False. 
BackColor (Color de fondo) 
Determina el color de fondo. 
BorderStyle (Estilo del borde) 
Solo se puede determinar en modo de diseo. Modifica el borde del formulario en el momento de ejecucin. Puede 
tomar los siguientes valores: 
0 - None La ventana del formulario no tiene borde 
1 - Fixed Single Tamao fijo con borde no dimensionable. Puede incluir men de control, barra de ttulo, botn de 
maximizar y botn de minimizar. 
2 - Sizeable Valor por defecto. 
3 - Fixed Dialog Tamao fijo del borde, no dimensionable. Puede incluir men de control, barra de ttulo. No puede 
incluir botn de maximizar y botn de minimizar. 
4.- Fixed ToolWindow Bajo aplicaciones de 16 bits o Windows NT 3.51 o anteriores funciona como Fixed Single, sin 
visualizar los botones de maximizar y minimizar. Con Windows 95 visualiza el botn de cerrar y, no aparece en la barra 
de tareas. 
5.- Sizeable ToolWindow Bajo aplicaciones de 16 bits o Windows NT 3.51 o anteriores funciona como Sizeable, sin 
visualizar los botones de maximizar y minimizar. Con Windows 95 visualiza el botn de cerrar y, no aparece en la barra 
de tareas. 
Caption (Leyenda) 
Establece el texto de la barra de ttulo de la ventana del formulario. Esta propiedad indica lo que el usuario visualiza. No 
confundir con la propiedad Name. Propiedad comn a muchos controles. 
ControlBox (Cuadro de control) 
Tiene efecto en tiempo de ejecucin. Puede tomar los valores True/False. Permite visualizar o no tanto el men de 
control como el botn de cerrar en Windows 95. 
Enabled (Habilitado) 
El valor False hace que el formulario no responda a eventos. 
Font (Fuente) 
Determina el tipo de letra, atributos, etc. para impresin. El texto ya escrito no se ver afectado por un cambio en estas 
propiedades, pero s el texto impreso posteriormente. 
Height, Width (Ancho y Alto) 
Determinan la anchura y altura del formulario. Se miden en Twips (1/20 punto o lo que es lo mismo, 567 twips en 1 
centmetro) Determinan el tamao del formulario cuando se imprima, no cuando sea visualizado en pantalla. A menos 
que el usuario modifique el borde cambiando la propiedad BordeStyle, el usuario podr modificar el tamao y la forma 
de los diversos formularios de la aplicacin sin tener en cuenta esta propiedad. 
Icon (Icono) 
Representa al formulario cuando est minimizado o cuando se convierta en una aplicacin independiente en el escritorio 
de Windows. 
Left, Top (Izquierda, Arriba) 
Determinan la posicin del formulario dentro de la pantalla. Funcionan de manera idntica a las propiedades Height y 
Width descritas anteriormente. Se miden en twips. 
MaxButton, MinButton (Botones de maximizar y minimizar respectivamente) 
El valor de esta propiedad (True/False) ser ignorado si se ha establecido la propiedad BorderStyle a 0 - None. Solo es 
visible en tiempo de ejecucin. 
MousePointer (Puntero del ratn) 
Determina la forma en que se mostrar el puntero del ratn. 
Name (Nombre) 
Propiedad MUY importante y comn a todos los objetos de Visual Basic. Define el nombre del objeto en el cdigo del 
programa. Para poder acceder a un control habr que hacerlo a partir de su nombre. No disponible en tiempo de 
ejecucin. 
Picture (Dibujo) 
Dibuja una imagen en el formulario (bitmap) 
Visible 
Determina si un formulario estar visible o no en tiempo de ejecucin. 
WindowState (Estado de la ventana) 
Determina la forma en la que aparece el formulario durante la ejecucin. 
ScaleMode (Modo de la escala) 
Permite cambiar las unidades de medida empleadas en el sistema de coordenadas interno del formulario. 
ScaleHeight, ScaleWidth (Escala de la Altura y la Anchura) 
Sirven para establecer una escala propia para la altura y anchura del formulario. Tiene efecto colateral sobre la propiedad 
ScaleMode, que se establece a 0. 
ScaleLeft, ScaleRight (Escala de Izquierda y Derecha) 
Sirven para establecer una escala propia para los mrgenes izquierdo y superior del formulario. El valor original de estas 
propiedades es 0. 


PROPIEDADES COMUNES DE LOS CONTROLES 
Los controles que se pueden incluir en el formulario aparecen en la caja de herramientas. No es necesario recordar la 
posicin o forma de cada control. En Visual Basic 4.0, cuando el cursor se sita sobre un control de la caja de 
herramientas, aparece una pista recordando el control que permite crear. Todos los controles tienen algunas propiedades 
comunes como pueden ser: 
Caption (Leyenda) 
Establece el texto que el usuario visualizar. No confundir con la propiedad Name. 
Text (Texto) 
Acta igual que la propiedad Caption para aquellos controles que no dispongan de dicha propiedad, p.e. las cajas de 
texto. Muestra el contenido del control y, por tanto, tambin contiene los caracteres introducidos por el usuario. No 
confundir con la propiedad Name. 
Name (Nombre) 
Propiedad MUY importante. Define el nombre del control en el cdigo del programa. No confundir con las propiedades 
Caption o Text que es lo que el usuario visualiza. 
TabStop (Punto de Tabulacin) 
Si el valor es True, el control ser susceptible de recibir el foco durante la ejecucin de la aplicacin. 
TabIndex (ndice de tabulacin) 
Indica el nmero de orden en el que el control recibir el foco cuando el usuario, en tiempo de ejecucin, pulse la tecla 
Tab para recorrer los controles. A medida que se van situando controles en el formulario, Visual Basic incrementa en 
una unidad, el valor de esta propiedad para el nuevo control y, lo decrementa en caso de eliminar algn control. El valor 
para el primer control es 0. 
PROPIEDADES DE LOS BOTONES DE COMANDO 
Command Button (2 fila, icono de la derecha). Se utiliza para ejecutar la accin asociada a la pulsacin de dicho botn. 
Enabled (Habilitado) 
El valor False hace que el botn aparezca atenuado y, no responda a eventos. 
Cancel (Cancelar) 
Establecer el valor de esta propiedad a True, hace que el botn responda a la pulsacin de la tecla ESC como si se 
hubiera hecho clic sobre l. En un formulario solo puede haber un botn con esta propiedad establecida a True. 
Default (Defecto) 
Establecer el valor de esta propiedad a True, hace que el botn responda a la pulsacin de la tecla INTRO como si se 
hubiera hecho clic sobre l. Al igual como antes, en un formulario solo puede haber un botn con esta propiedad 
establecida a True. 
PROPIEDADES DE LAS CAJAS DE TEXTO 
Text Box (2 fila, icono de la izquierda). Es un rea dentro del formulario donde el usuario puede escribir texto o 
visualizarlo. 
MaxLength (Tamao mximo) 
Determina el nmero mximo de caracteres que puede aceptar la caja de texto. 
MultiLine (Lneas Mltiples) 
Permite que la caja de texto admita varias lneas con la pulsacin de la tecla INTRO. Normalmente se combina con la 
propiedad ScrollBars. 
ScrollBars (Barras de desplazamiento) 
Controla si en la caja de texto aparecern las barras de desplazamiento o no. 
PasswordChar (Carcter clave) 
Permite mostrar un carcter clave en vez de los introducidos por el usuario. 
Locked (Bloqueada) 
Permite bloquear la caja de texto para que el usuario en tiempo de ejecucin, no modifique el contenido de la caja. Esta 
propiedad es nueva en Visual Basic 4.0 
SelLength (Longitud del texto seleccionado) 
Nmero de caracteres seleccionado actualmente. Accesible durante la ejecucin. 
SelStart (Comienzo de la seleccin) 
Indica dnde comienza el texto seleccionado (la posicin del cursor). Si el valor es 0, el texto seleccionado empieza 
delante del primer carcter de la caja de texto. Si es igual a la longitud del texto de la caja, indica la posicin detrs del 
ltimo carcter del texto. Accesible en tiempo de ejecucin. 
SelText (Texto seleccionado) 
Contiene el texto seleccionado. Accesible en tiempo de ejecucin. 


PROPIEDADES DE LAS ETIQUETAS 
Label (1 fila, icono de la derecha). Es un rea dentro del formulario donde el usuario puede visualizar texto sin 
modificarlo. 
Alignment (Alineacin) 
Determina la situacin del texto dentro de la etiqueta. 
AutoSize, WordWrap (Tamao automtico y enlace de textos) 
La primera propiedad permite que la etiqueta crezca horizontalmente en funcin de su contenido. La segunda propiedad 
permite que el crecimiento sea vertical. 
EJERCICIOS: 
1.Crear una aplicacin que traslade el contenido de lo que el usuario escriba en una caja de texto a otra, que ser solo de 
lectura. 
1.Crear una aplicacin para que al pulsar un botn, muestre en una caja de texto, un mensaje de presentacin. Al pulsar 
otro botn, se debe borrar el contenido de la caja de texto. 
1.Crear una aplicacin con las siguientes caractersticas: en la barra de ttulo del formulario debe aparecer el texto 
"Modificando las propiedades"; muestre una caja de texto inicialmente vaca; se visualicen tres botones de comando: 
uno con el texto "Haga clic aqu", otro con el texto "?" y, el tercero con el texto "Salir". Cuando se pulse el botn "Haga 
clic aqu", se mostrar en la caja de texto, el nombre del programador. Al pulsar el botn "?", se mostrar el mensaje 
"Contento?" y, al pulsar el botn "Salir", finalice la aplicacin. Inicialmente, el botn "?" estar desactivado y se 
activar al pulsar el botn "Haga clic aqu". 
INTERACCIN CON EL USUARIO 
Para permitir al usuario introducir valores, se utilizan las cajas de texto, pero en un momento determinado, puede 
interesar la detencin momentnea de la ejecucin y, mostrar un cuadro de dilogo para que el usuario introduzca algn 
dato. Del mismo modo, se puede mostrar un cuadro de mensaje al usuario para advertirle de cualquier circunstancia. 
Para ambos casos tenemos respuesta en Visual Basic. 
Variable_de_cadena = InputBox("Pregunta_a_realizar" [," Ttulo_Caja",  
Valor_por_Defecto]) 
MsgBox("Mensaje_a_mostrar", Tipo_Caja, "Ttulo_Caja") 
donde el parmetro Tipo_Caja permite controlar el icono y los botones que aparecern en el cuadro de mensajes. 
EJERCICIO: 
Crear una aplicacin que pregunte al usuario su nombre y, una vez contestado, le d la bienvenida. 

PROPIEDADES DE LOS CUADROS DE IMAGEN 

Image (1 fila, icono central). Se utiliza cuando se quiere visualizar una imagen que el programador dibuja con cdigo o 
que importa de algn fichero. 
Picture (Imagen) 
Establece la imagen que el usuario ver en el cuadro de imagen. 
Stretch (Extensin) 
Determina si el control de imgenes se ajusta a la imagen o, es la imagen la que se ajusta al tamao del control. El valor 
True hace que el cuadro de imgenes se ajuste al tamao de la imagen, mientras que el valor False, hace que sea la 
imagen la que se ajuste. 
PROPIEDADES DEL CONTROL IMAGEN 
Picture Box (7 fila, icono de la izquierda). Se utiliza cuando se quiere visualizar una imagen que el programador dibuja 
con cdigo o que importa de algn fichero. Se diferencia de la caja de imgenes en la forma de presentacin. 
Picture (Imagen) 
Establece la imagen que el usuario ver en el cuadro de imagen. 
AutoSize (Extensin) 
Determina si el control de imgenes se ajusta a la imagen o, es la imagen la que se ajusta al tamao del control. El valor 
True hace que el control imagen se ajuste al tamao de la imagen, mientras que el valor False (valor por defecto), hace 
que sea la imagen la que se ajuste. 


PROPIEDADES DEL CONTROL DE FORMAS O FIGURAS 
Shape (6 fila, icono central). Se utiliza para aadir rectngulos, cuadrados, elipses o crculos a un formulario. 
Shape (Forma) 
Determina el tipo de formas que se dibujar. 
BackStyle (Color de fondo) 
Determina si el fondo ser transparente o no. 
BorderColor (Color del borde) 
Determina el color del contorno del objeto a dibujar. 
BorderWidth (Ancho del borde) 
Determina el grosor del contorno del objeto a dibujar. 
BorderStyle (Estilo del borde) 
Determina la forma del contorno del objeto a dibujar. Si el valor de la propiedad BorderWidth es mayor que uno, no 
tendr efecto el valor de esta propiedad. 
FillColor, FillStyle (Color de fondo y estilo de relleno) 
El valor por defecto de la propiedad FillStyle es 1 - Transparent, por lo que si no se cambia, el valor de la propiedad 
FillColor no tendr efecto. 
EJEMPLO: 
Crearemos una aplicacin que encienda y apague una bombilla al mismo tiempo que en un botn de comando el 
mensaje que aparece cambia a ON y OFF. Se debe aadir un botn con el mensaje Salir. 
El formulario a disear deber tener los siguientes controles con las propiedades: 
CONTROL  
PROPIEDAD  
VALOR  
Command Button  
Caption  
Salir  
 
Name  
cmdSalir  
Command Button  
Caption  
ON  
 
Name  
cmdOnOff  
Picture Box  
BorderStyle  
0-None  
 
Name  
picOff  
 
Picture  
vb\icons\misc\Lightoff.ico  
Picture Box  
BorderStyle  
0-None  
 
Name  
PicOn  
 



Picture  
vb\icons\misc\Lighton.ico 
El cdigo a escribir ser: 
Private Sub Form_Initialize() 
'Centrar el formulario 
Left = (Screen.Width - F.Width) / 2 
Top = (Screen.Height - F.Height) / 2 
'Posicionar las linternas en la misma posicin 
picOn.Left = 1200 
picOn.Top = 600 
picOff.Left = 1200 
picOff.Top = 600 
'Asegurarse que el programa empieza con la linterna apagada 
picOff.Zorder 0 
End Sub 
Private Sub cmdClose_Click() 
'Finalizar la aplicacin 
Unload cmdClose.Parent 
End Sub 
Private Sub cmdOnOff_Click() 
'Cambiar la linterna de ON a OFF o viceversa 
If cmdOnOff.Caption = "ON" Then 
cmdOnOff.Caption = "OFF" 
'Traer la linterna encendida delante 
picOn.ZOrder 0 
Else 
cmdOnOff.Caption = "ON" 
'Traer la linterna apagada delante 
picOff.ZOrder 0 
End If 
End Sub 
PROPIEDADES DE LOS CUADROS DE LISTA 
List Box (4 fila, icono izquierdo) Permite ofrecer al usuario una serie de opciones para que elija. Visual Basic aadir 
barras de desplazamiento al cuadro de lista si la lista completa es demasiado larga para ser vista toda a la vez. El 
contenido de un cuadro de lista no se puede definir durante el diseo. En su lugar se utilizar el mtodo AddItem para 
introducir elementos en la lista. 
List (lista) 
Esta propiedad no se puede modificar en fase de diseo, contiene la matriz de todos los valores almacenados en el 
cuadro de lista. Para acceder a un elemento de la lista se seguir la sintaxis:  
Objeto.List(ndice). 
ListCount (contar lista) 
No puede modificarse directamente. Contiene el nmero de elementos del cuadro de lista. 
ListIndex (ndice de la lista) 
Indica el nmero de la lista ms recientemente seleccionado. El valor del primer elemento es 0, el del segundo, 1, y as 
sucesivamente. Si no hay ningn elemento seleccionado, la propiedad tendr un valor de -1. 
Sorted (ordenada) 
Para mantener la lista ordenada alfabticamente. 
Text (texto) 
No se puede modificar directamente, contiene el texto del elemento ms recientemente seleccionado. 
Los mtodos utilizados con los cuadros de lista son: AddItem (aadir elemento) permite insertar una lnea de texto en el 
cuadro de lista. Su sintaxis es objeto.AddItem texto[, ndice] . Clear (borrar) sirve para eliminar todos los elementos del 
cuadro de lista. Su sintaxis es: objeto.Clear. RemoveItem (eliminar elemento) permite eliminar una lnea del cuadro de 
lista. Su sintaxis es:  
objeto.RemoveItem ndice. 




PROPIEDADES DE LOS CUADROS COMBINADOS 
Combo Box (3 fila, icono derecho) Puede combinar un cuadro de texto y un cuadro de lista en un solo control. 
Style (estilo) 
Determina el tipo de cuadro combinado y cmo se comporta. Puede tomar los siguientes valores: 0 -  
Dropdown Combo; 1 - Simple Combo; 2 - Dropdown List. 
Text (texto) 
Contiene el texto del elemento seleccionado o introducido por el usuario en el rea de edicin. 
Los procedimientos descritos en el apartado anterior sirven para este tipo de control. Ambos tipos de control permiten 
asociar a los elementos del listado un nmero entero. Para ello se debe utilizar la matriz ItemData, que es una propiedad 
de estos controles. Para aadir los datos numricos a esta matriz, se debe conocer el ndice matriz del elemento, para lo 
que se utilizar la propiedad NewIndex del control. Es decir, se necesitar escribir cdigo parecido a: 
Listado1.AddItem Elemento_A_Aadir 
Listado1.ItemData(Listado1.NewIndex) = Datos_Del_Entero 
> 
Transferencia interrumpida! 
B> 
2.3.- PROCEDIMIENTOS DE EVENTO 
En Visual Basic existen dos clases de procedimientos: procedimientos generales o procedimientos de evento. Un 
procedimiento de evento es invocado cuando un objeto en la aplicacin reconoce que el evento ha tenido lugar. Los 
procedimientos de eventos para un control combinan el nombre del objeto con un subrayado y, el nombre del evento. 
P.e. cmdOK_Click. Los procedimientos de eventos para un formulario combinan la palabra reservada Form con un 
subrayado y, el nombre del evento. P.e. Form_Load. Los procedimientos de eventos para un formulario MDI combinan 
la palabra reservada MDIForm con un subrayado y, el nombre del evento. P.e. MDIForm_Unload. Un procedimiento 
general indica cmo realizar una tarea determinada. Se ejecutar solo si es invocado especficamente en la aplicacin. 




3.1.- VARIABLES Y CONSTANTES: DECLARACIN, TIPOS, MBITO Y DURACIN. 
Las variables en Visual Basic no necesitan ser declaradas, en el momento en que son necesitadas pueden aparecer en el 
cdigo. Sin embargo, puede ser til el exigir la declaracin de todas las variables que aparezcan en el cdigo. Para ello, 
se utilizar la instruccin: 
Option Explicit 
en la seccin de declaraciones del formulario. Una vez procesada esta instruccin, no se permitirn variables no 
declaradas. Para declarar una variable la instruccin adecuada es: 
Dim Nombre_Variable [As Tipo] 
donde Tipo puede ser: 
TIPO  
DESCRIPCIN  
TAMAO OCUPADO  
IDENTIFICADOR  
String  
Carcter  
1 Byte por carcter  
$  
Integer  
Entero  
2 Bytes  
%  
Long  
Entero largo  
4 Bytes  
&  
Single  
Real simple  
4 Bytes  
!  
Double  
Real doble  
8 Bytes  
#  
Currency  
Moneda  
8 Bytes  
@  
Byte  
Byte *  
1 Byte  
(ninguno)  
Boolean  
Booleano *  
2 Bytes  
(ninguno)  
Date  
Fecha *  
8 Bytes  
(ninguno)  
Object  
Objeto *  
4 Bytes  
(ninguno)  
Variant  
Variante  
Cualquiera de los anteriores  


* Nuevos tipos en Visual Basic 4.0 
Para declarar una constante se necesita la instruccin: 
Const Nombre_Constante = Expresin 
Hay dos tipos de constantes: 
Intrnsecas o definidas por el sistema, proporcionadas por Visual Basic o cualquier otra aplicacin que provee una 
librera de objetos. Para ver una lista de estas constantes, se acceder a Ver/Examinador de Objetos. En la lista 
desplegable superior, se seleccionar VB-Objects and Procedures. De la lista de la izquierda se har doble clic en 
cualquier opcin acabada en Constants. 
Simblicas o definidas por el usuario. Es una buena idea el declarar las constantes simblicas con el prefijo con, p.e. 
Const conPi = 3.141592 
MBITO DE LAS VARIABLES EN VISUAL BASIC 
Se entiende por mbito de una variable el espacio de la aplicacin donde la variable es visible y por tanto se puede 
utilizar. Los distintos alcances que puede tener una variable declarada en Visual Basic son: 
1.Las variables declaradas con Dim o utilizadas directamente en un procedimiento, son variables locales, es decir, 
accesibles solamente desde el procedimiento que las declara. 
1.Si las variables se declaran en la seccin de declaraciones del formulario o del mdulo, son variables a nivel de 
formulario o de mdulo. Una variable declarada a nivel de formulario es accesible desde cualquier procedimiento del 
formulario y lo mismo para las variables a nivel de mdulo: una variable declarada a nivel de mdulo es accesible desde 
cualquier procedimiento de ese mdulo, pero no desde otros mdulos. Estas variables se declaran con Dim o Private. 
1.Las variables pblicas son declaradas en la seccin de declaraciones de un mdulo con la sentencia Public y, podrn 
ser accesibles desde cualquier mdulo. 
EJEMPLO: 
Crear un formulario con dos botones de comando (cmdInicio y cmdParada), tres etiquetas (lblHInicio; lblHParada y 
lblTTranscurrido) y, tres cajas de texto (txtHInicio, txtHParada, txtTTranscurrido). Inicialmente, el botn cmdParada 
estar desactivado. Se pretende que, cuando el usuario pulse el botn cmdInicio, en la caja de texto asociada a la etiqueta 
lblHInicio, aparezca la hora actual y, al mismo tiempo, se active el botn cmdParada y se desactive el de cmdInicio. Al 
pulsar el botn cmdParada, se mostrar la hora de parada, el tiempo transcurrido, se desactivar el botn de cmdParada 
y, se habilitar el de cmdInicio. El cdigo asociado ser: 
Private Sub cmdInicio_Click() 
HInicio = Now 
txtHInicio.Text = Format$(HInicio; "hh:mm:ss") 
cmdInicio.Enabled = False 
cmdParada.Enabled = True 
End Sub 
Private Sub cmdParada_Click() 
HParada = Now 
Tiempo = HParada - HInicio 
txtHParada.Text = Format$(HParada; "hh:mm:ss") 
txtTTranscurrido.Text = Format$(Tiempo; "hh:mm:ss") 
cmdInicio.Enabled = True 
cmdParada.Enabled = False 
End Sub 
En este ejemplo se deben declarar las variables HoraInicio, HoraParada y Tiempo como variables a nivel de formulario 
(en la seccin de declaraciones del formulario) para que sean accedidas desde cualquier procedimiento asociado al 
formulario. Por tanto, el mbito de una variable determina qu procedimientos podrn acceder a esa variable. Cualquier 
sentencia Dim declarada en cualquier procedimiento tiene preferencia con respecto a variables declaradas a nivel de 
mdulo. Siempre que una variable aparece por primera vez, es inicializada al valor por defecto (0 para variables 
numricas y cadena vaca para tipo String) Para que una variable mantenga el valor en cada ejecucin del procedimiento 
donde se utiliza, se debe declarar con la instruccin: 
Static Nombre_Variable [As Tipo] 
Se mantiene la palabra reservada Global por compatibilidad de la versin 3.0, pero es preferible utilizar la palabra 
reservada equivalente: Public. 




EJERCICIOS: 
1.Crear un formulario con tres cajas de texto, un botn de comando y una etiqueta. La aplicacin debe sumar los dos 
valores introducidos por el usuario y, mostrarlos en la 3 caja de texto. La aplicacin debe estar preparada para que, la 
caja de texto que muestre el resultado, no pueda ser accesible al pulsar la tecla TAB. 
1.Modificar el ejercicio anterior para que, el usuario pueda escoger la operacin aritmtica a realizar. 
TIPOS DEFINIDOS POR EL USUARIO 
Se pueden definir tipos por parte del usuario para crear registros (structs en C, Record en Pascal). Un registro puede 
definirse como una coleccin de datos de diferentes tipos relacionados entre s. Para crear un registro se necesita la 
sentencia Type ... End Type. Esta sentencia solo puede aparecer en la seccin de declaraciones de un mdulo estndar y 
pueden ser declarados como Private o Public. P.e: 
Type Ficha 
Nombre As String 
Direccin As String * 40 
Telfono As Long 
DNI As Long 
End Type 
Una vez definido un tipo de datos, se pueden declarar variables del mismo tipo. P.e: Dim Alum As Ficha 
Para refererirse a un determinado campo del registro, se utiliza la notacin variable.campo P.e: 
Alumno.Nombre. Un tipo definido por el usuario no puede contener un array dinmico, pero s esttico. 
EJERCICIOS: 
1.Crear un formulario que permita actuar como un editor de texto haciendo una copia de  
texto o movindolo a otra posicin. La aplicacin debe tener un botn que permita borrar el  
contenido de la caja de texto, un botn que permita cortar el texto seleccionado, un botn  
que permita copiar el texto seleccionado y un botn que permita pegar el texto. La  
aplicacin debe estar preparada para que no se pueda pegar texto si antes no se ha  
copiado/cortado texto. Pistas: utilizar una caja de texto multilnea y, las propiedades  
SelStart, SelLength y, SelText para copiar o cortar. La propiedad Enabled para  
activar/desactivar los botones. 
1.Crear una aplicacin que permita almacenar la informacin de 5 empleados, cada uno de  
ellos con la siguiente informacin: nombre, sueldo, fecha de ingreso. 
EJEMPLO: 
Crear un formulario que acte como un reloj despertador, de forma que visualice la  
hora actual y, si el usuario ha activado la alarma, cuando la hora actual sea la misma  
que la alarma, se debe emitir un pitido. Para ello, aadiremos los siguientes controles  
al formulario. 
CONTROL  
PROPIEDAD  
VALOR  
Label  
Caption  
(ninguno)  
 
Name  
lblPantalla  
 
BorderStyle  
1-Fixed Single  
Label  
Caption  
Alarma  
Text Box  
Text  
(ninguno)  
 




Name  
txtAlarma  
Option Button  
Caption  
Alarma On  
 
Name  
optAlarmaOn  
Option Button  
Caption  
Alarma Off  
 
Name  
optAlarmaOff  
 
Value  
True  
Timer  
Interval  
1000  
 
Name  
tmrReloj 
Inicialmente, la alarma debe estar desactivada y no se permitirn valores distintos  
del carcter ':' o cualquier dgito. El cdigo asociado ser: 
Dim AlarmaOn As Boolean 
Private Sub txtAlarma_KeyPress(KeyAscii As Integer) 
Dim Key As String 
'Comprobar que se escriben dgitos o el carcter : 
Key = Chr(KeyAscii) 
If (Key < "0" Or Key > "9") Then 
If Key <> ":" Then 
Beep 
KeyAscii = 0 
End If 
End If 
End Sub 
Private tmrReloj_Timer() 
'Comprobar si la alarma > hora actual 
If (Time >= txtAlarma.Text And AlarmaOn) Then 
Beep 
End If 
lblPantalla.Caption = Time 
End Sub 
Private optAlarmaOn_Click() 
AlarmaOn = True 
End Sub 
Private optAlarmaOff_Click() 
AlarmaOn = False 
End Sub 






EJERCICIO: 
Modificar el ejercicio anterior para que suene la alarma 5 segundos. 
NOTA: 
Cada vez que el usuario presiona una tecla, se generan los eventos KeyDown, KeyUp y KeyPress. El  
evento KeyPress devuelve el cdigo ASCII de la tecla presionada. Los eventos KeyDown y KeyUp  
se producen cuando el usuario presiona o libera una tecla y reciben dos argumentos: KeyCode que  
mantiene el cdigo ANSI de la tecla presionada y, Shift que indica el estado de las teclas Shift,  
Alt y Ctrl. 
FORMULARIOS MLTIPLES 
Los formularios mltiples aaden flexibilidad a las aplicaciones. Para poder acceder a un control  
en un formulario distinto del que contiene el foco, es necesario nombrar al control por su nombre  
completo, es decir, utilizando la sintaxis: 
Nombre_Formulario!Nombre_del_Control 
El formulario inicial en cualquier proyecto, se consigue accediendo al men  
Herramientas/Opciones/Ficha Proyecto y, de la lista Formulario Inicial, escogeremos el nombre  
del formulario con el que se quiere iniciar la aplicacin. Con cualquier formulario las operaciones  
posibles sern: 
Show (Mostrar) 
Sirve para mostrar en primer plano el formulario. La sintaxis es: Nombre_Formulario.Show 
Load (Cargar) 
Lleva a memoria el formulario, pero no lo visualiza. La sintaxis es: Load Nombre_Formulario 
Hide (Ocultar) 
Retira el formulario de la pantalla pero no lo descarga de memoria. La sintaxis es:  
Nombre_Formulario.Hide 
Unload (Descargar) 
Descarga de memoria el formulario, perdindose toda la informacin de sus variables. La sintaxis  
es: Unload Nombre_Formulario 
EJERCICIO: 
Crear una aplicacin que muestre un formulario inicial preguntando la contrasea.  
Dicha contrasea no debe visualizarse en la pantalla. Si la contrasea es correcta, se  
mostrar un nuevo formulario que mostrar la hora y fecha actual y, tras introducir  
el usuario la fecha de su nacimiento, permita obtener los aos vividos por esa  
persona. En caso que sea el cumpleaos, se debe felicitar al usuario. El nmero de  
intentos permitidos para introducir la contrasea es de tres. En caso de superar los  
intentos, el programa debe dar un mensaje de error al usuario y, tirarlo de la  
aplicacin. 


3.2.- SENTENCIAS DE CONTROL: BUCLES Y BIFURCACIONES 
BUCLES DETERMINADOS 
For Variable = Valor_Inicial To Ultimo_Valor [Step incremento] 
[Declaraciones] 
[Exit For] 
[Declaraciones] 
Next [Variable] 
BUCLES INDETERMINADOS 
Do [{While | Until} Condicin] Do 
[Declaraciones] [Declaraciones] 
[Exit Do] [Exit Do] 
[Declaraciones] [Declaraciones] 
Loop Loop [{While | Until} Condicin] 
TOMA DE DECISIONES 
SELECCIN SIMPLE SELECCIN MLTIPLE 
If Condicin_1Then Select Case Condicin_de_testeo 
Declaraciones_1 Case valor1 
[ElseIf Condicin_2 Then [Declaraciones_1] 
Declaraciones_2]... [Case valor2 
[Else [Declaraciones_2]]... 
Declaraciones_n] [Case Else 
End If [Declaraciones_n]] 
End Select 
donde valor1,... puede tomar cualquiera de las siguientes formas: 
expresin1[, expresin2]... 
expresin1 To expresin2 
Is operador_relacional expresin 
o cualquier combinacin de las anteriores separadas por comas. 
EJEMPLO: 
Crear una aplicacin que permita obtener el cdigo ASCII de una tecla pulsada. Se  
necesita un botn que permita borrar la tecla anterior. Para ello, aadiremos los  
siguientes controles al formulario. 
CONTROL  
PROPIEDAD  
VALOR  
Label  
Caption  
Pulsa una tecla  
 
Name  
lblPulsaTecla  
Text Box  
Name  
txtPulsaTecla  
 
Text  
(ninguno)  
Label  
Caption  
Valor ASCII  
 
Name  
lblValor  
Label  
Caption  
(ninguno)  
 

Name  
lblResultado  
 
BordeStyle  
1-Fixed single  
Command Button  
Caption  
Limpiar  
 
Name  
cmdLimpiar  
 
Default  
True 
Private Sub cmdLimpiar_Click() 
txtPulsaTecla.Text = "" 
lblResultado.Caption = "" 
txtpulsaTecla.SetFocus 
End Sub 
Private Sub Form_Activate() 
txtpulsaTecla.SetFocus 
End Sub 
Private Sub txtPulsaTecla_KeyDown(KeyCode As Integer, Shift As Integer) 
Const vbKeyDelete = 46 
Const vbKeyInsert = 45 
Const vbKeyEnd = 35 
Select Case Keycode 
Case vbKeyDelete 
lblResultado.Caption = "Presionado Suprimir" 
txtpulsaTecla = "[[Suprimir] " 
Case vbKeyInsert 
lblResultado.Caption = "Presionado Insertar" 
txtpulsaTecla = "[Insertar] " 
Case vbKeyEnd 
lblResultado.Caption = "Presionado Fin" 
txtpulsaTecla = "[Fin] " 
Case Else 
End Select 
End Sub 
Private Sub txtPulsaTecla_KeyPress(KeyAscii As Integer) 
If txtPulsaTecla.Text <> "" Then 
txtPulsaTecla.Text = "" 
End If 
Select Case KeyAscii 
Case 8 
txtPulsaTecla.Text = "[Retroceso] " 
Case 9 
txtpulsaTecla = "[Tab] " 
Case 13 
txtpulsaTecla = "[Intro] " 
Case Else 
End Select 
lblResultado.Caption = KeyAscii 
End Sub 

3.3.- FUNCIONES BSICAS INCORPORADAS 
CONVERSIN DE TIPO DE DATOS 
CDbl(expresin) CInt(expresin) 
Conversin a tipo Doble. Conversin a tipo Integer. 
CLng(expresin) CDate(expresin) 
Conversin a tipo Long. Conversin a tipo Date. 
etc. 
FUNCIONES DE CALENDARIO 
DateSerial(expresin) IsDate(expresin) 
Devuelve el nmero de serie de la fecha indicada Verifica si un valor es del tipo Fecha/Hora. 
Date Time 
Devuelve la fecha actual. Devuelve la hora actual. 
Now Day(Nm_serie) 
Devuelve la fecha y hora actuales. Devuelve un entero entre 1 y 31. 
Month(Nm_serie) Year(Nm_serie) 
Devuelve un entero entre 1 y 12. Devuelve un entero entre 1753 y 2078. 
etc. 
FUNCIONES DE CADENA 
Space(Num_espacios) String(Nmero, expr_cadena) 
Crea una cadena formada por Num_espacios. Crea una cadena de caracteres repetidos. 
Mid(expr_cadena, Inicio[, Long] ) Left(expr_cadena, Nmero) 
Permite extraer subcadenas. Extrae los Nmero caracteres de la izquierda. 
Right(expr_cadena, Nmero) Instr([Inicio,] cadena_1, cadena_2) 
Extrae los Nmero caracteres de la derecha. Indica si cadena_2 est contenida en cadena_1 
LCase(expr_cadena) UCase(expr_cadena) 
Convierte a minsculas. Convierte a maysculas. 
StrComp(cadena_1, cadena_2) Trim(expr_cadena) 
Compara cadena_1 y cadena_2. Elimina los espacios del principio y final. 
RTrim(expr_cadena) LTrim(expr_cadena) 
Elimina los espacios del final. Elimina los espacios del principio. 
Format(expresin[, formato] ) 
Permite dar a una cadena o a un nmero un formato especfico. 
EJEMPLO: 
Vamos a construir una aplicacin que, al desplazarse el usuario con las teclas de  
cursor, se van iluminando los pixeles por los que pasa. Se necesitar un formulario  
para el rea de dibujo con la propiedad AutoRedraw establecida a True. Finaliza al  
pulsar la tecla Fin 
Dim AlturaPixel As Single, AnchuraPixel As Single 
Dim XPunto As Single, YPunto As Single 
Private Sub Form_Load() 
AutoRedraw = True 
ScaleMode = 3 'Pixels 
AlturaPixel = ScaleHeight 
AnchuraPixel = ScaleWidth 
XPunto = AnchuraPixel / 2 
YPunto = AlturaPixel / 2 
End Sub 
Private Sub Form_Resize() 
AlturaPixel = ScaleHeight 
AnchuraPixel = ScaleWidth 
End Sub 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 
Dim sino As Integer 
Select Case KeyCode 
Case vbKeyLeft 
If XPunto <= 0 Then 
XPunto = 0 
Else 
XPunto = XPunto - 1 
End If 
Case vbKeyRight 
If XPunto >= AnchuraPixel Then 
XPunto = AnchuraPixel 
Else 
XPunto = XPunto + 1 
End If 
Case vbKeyUp 
If YPunto <= 0 Then 
YPunto = 0 
Else 
YPunto = YPunto - 1 
End If 
Case vbKeyDown 
If YPunto >= AlturaPixel Then 
YPunto = AlturaPixel 
Else 
YPunto = YPunto + 1 
End If 
Case vbKeyEnd 
sino = MsgBox("Ests seguro de que quieres terminar", 4) 
If sino = 6 Then End 'Clic en el botn S 
Case Else 
Beep 
End Select 
PSet (XPunto, Ypunto) 'Dibujar un punto 
End Sub 
EJERCICIOS: 
1.Crear una aplicacin que permita calcular la posicin de los espacios en blanco de una  
cadena introducida por el usuario. 
1.Crear una aplicacin que, dada una frase, permita obtener el nmero de apariciones de  
cada vocal en la frase. El resultado debe aparecer indicado de forma clara. 
1.Disear una aplicacin que el usuario escoja entre introducir nmeros o letras. Si escoge  
nmeros, no se debe permitir introducir ninguna letra y, si escoge letras, no se debe permitir introducir ningn dgito. 






















ELEMENTOS DEL LENGUAJE II  

4.1.- ARRAYS Y FUNCIONES ASOCIADAS 
Un array permite referirse a una serie de elementos del mismo tipo por un mismo nombre y  
referenciar un nico elemento de la serie utilizando un ndice. Los arrays deben ser declarados  
explcitamente. 
ARRAYS ESTTICOS 
Para declarar un array esttico, formado por un nmero fijo de elementos, Visual Basic utiliza una  
sintaxis parecida a la declaracin de variables. Veamos algunos ejemplos: 
Dim Array_A(19) As String 
declara un array unidimensional de 20 elementos: Array_A(0), Array_A(1)... 
Dim Array_B(3, 1 To 6) As Integer 
declara un array bidimensional de 4x6 elementos: Array_B(0,1), Array_B(1,2)... 
ARRAYS DINMICOS 
Para declarar un array dinmico, formado por un nmero variable de elementos, Visual Basic  
utiliza una sintaxis parecida a la declaracin anterior. El espacio necesario para un array  
dinmico ser asignado durante la ejecucin del programa. Un array dinmico puede ser  
redimensionado en cualquier momento durante la ejecucin. Para redimensionarlos se utiliza la  
sentencia ReDim. Esta sentencia puede aparecer solamente en un procedimiento y permite cambiar  
el nmero de elementos del array, no el nmero de dimensiones. Por ejemplo: 
Dim Array_A() As String 
declara un array unidimensional dinmico. Ms tarde, un procedimiento puede utilizar  
la sentencia ReDim para asignar el espacio, p.e. ReDim Array_A(4,4) 
Cada vez que se ejecuta la sentencia ReDim, todos los valores en el array se pierden. Cuando  
interese conservar los valores del array, se utilizar la sentencia ReDim Preserve. Slo se puede  
cambiar el lmite superior de la ltima dimensin. 
FUNCIONES ASOCIADAS 
LBound 
Devuelve el ndice ms bajo posible de un array. 
UBound 
Devuelve el ndice ms alto posible de un array. 
En general, la orden 
LBound(Nombre_Matriz, I) 
da el lmite inferior para la dimensin Y (para un array unidimensional, la I es opcional). Por tanto,  
en el siguiente ejemplo: 
Dim Test%(1 To 5, 6 To 10, 7 To 12) 
Print LBound(Test%, 2) 
devuelve un 6 y, 
Print UBound(Test%, 3) 
devuelve un 12. 
Las rdenes LBound y UBound permiten copiar arrays de diferentes lmites, siempre que el nmero  
total de filas y columnas sea el mismo. (Al sustraer LBound de UBound para cada dimensin, se  
puede comprobar si coinciden) 
EJERCICIOS: 
1.Crear una aplicacin que permita crear un cuadrado mgico. Un cuadrado mgico es aquel  
en el que todas las filas, columnas y diagonales principales suman lo mismo. Para resolver el  
ejercicio se utilizar el argumento de Loubre, que funciona solo con cuadrados mgicos  
impares: 
Colocar 1 en el centro de la primera fila. 
Los nmeros se colocan en orden movindose hacia arriba en diagonal hacia la  
derecha. 
Si se sale por la parte superior se sustituye por el lugar correspondiente de la fila  
inferior. 
Si se sale por la derecha se sigue en la posicin correspondiente de la columna  
izquierda. 
Si se llena el cuadrado o se alcanza la esquina superior derecha, desplazarse hacia  
abajo y continuar con las reglas. 
17 24 1 8 15 
23 5 7 14 16 
4 6 13 20 22 
10 12 19 21 3 
11 18 25 2 9 
2.Crear una aplicacin que permita obtener el elemento mayor de una matriz cuadrada de  
dimensin cualquiera. Los elementos de la matriz sern nmeros entre el 1 y el 1000  
introducidos aleatoriamente. 
4.2- FUNCIONES Y PROCEDIMIENTOS 
Para evitar duplicar cdigo en los procedimientos de evento, se deben utilizar los procedimientos  
generales. stos deben escribirse como un procedimiento Sub o como una funcin Function. 
Cuando un procedimiento es llamado para su ejecucin, Visual Basic lo busca en el formulario o en  
el mdulo donde se encuentre en ese momento. Si no lo encuentra, contina la bsqueda en el resto  
de los mdulos de la aplicacin. 
Para crear un procedimiento general, desde la ventana de cdigo se acceder a Insertar/Nuevo  
Procedimiento. 
Las funciones en Visual Basic son declaradas en los mdulos o en la seccin de declaraciones de  
un formulario y devuelven un valor al procedimiento que la invoc. La sintaxis empleada es la  
siguiente: 
[Private | Public] [Static] Function nombre [(lista_argumentos) ] [As tipo] 
[Declaraciones] 
[nombre = expresin] 
[Exit Function] 
[Declaraciones] 
[nombre = expresin] 
End Function 
Los procedimientos generales necesitan ser invocados explcitamente para poder ser ejecutados.  
No devuelven ningn valor. La sintaxis para declarar procedimientos generales es: 
[Private | Public] [Static] Sub nombre [(lista_argumentos) ] 
[Declaraciones] 
[Exit Sub] 
[Declaraciones] 
End Sub 
donde: 
Public indica que el procedimiento es accesible desde otros procedimientos en cualquier  
mdulo. Si se utiliza en un mdulo privado, no estar disponible fuera del proyecto. 
Private indica que el procedimiento solo es accesible desde los procedimientos del mdulo  
en que est declarado. 
Static indica que las variables locales al procedimiento mantendrn el valor entra llamadas  
al procedimiento. 
Lista_argumentos es una lista de los argumentos que se pasan al procedimiento. Los  
argumentos mltiples van separados por comas. Puede tomar la forma siguiente: 
[[Optional] [ByVal | ByRef] [ParamArray] varnombre [( )] As tipo] 
donde: 
Optional indica que el argumento no se necesita. Todos los argumentos opcionales deben ser  
de tipo Variant. 
ByVal indica que el argumento es pasado por valor. 
ByRef indica que el argumento es pasado por referencia. 
ParamArray utilizado para indicar que el argumento final es una lista opcional de  
argumentos. Proporciona una forma de pasar un nmero arbitrario de argumentos. No puede  
utilizarse con ByVal, ByRef o con Optional. 
La forma de llamar a una funcin es 
var = nombre_funcin([argumentos] ) 
La forma de invocar a un procedimiento es utilizando cualquiera de las dos formas siguientes: 
Call nombre_procedimiento[(argumentos)] 
nombre_ procedimiento [argumentos] 
PASO DE PARMETROS 
Por defecto, los argumentos son pasados por referencia.; de este modo cualquier cambio de valor  
que sufra un parmetro en el cuerpo de la funcin o del procedimiento tambin se produce en el  
argumento correspondiente de la llamada a la funcin o procedimiento. 
Cuando se llama a una funcin o a un procedimiento, se podr especificar que el valor de un  
argumento sea pasado por valor, poniendo dicho argumento entre parntesis en la llamada. Otra  
forma de especificar que un argumento ser siempre pasado por valor es anteponiendo la palabra  
ByVal a la declaracin del parmetro en la cabecera del procedimiento. 
EJERCICIOS: 
1.Crear una aplicacin que permita calcular el factorial de un nmero. Utilizar funciones o  
procedimientos. 
1.Crear un procedimiento que permita separar en palabras una frase dada. 
1.Crear un procedimiento que, dada una frase, permita devolver la misma frase invertida. 
1.Obtener un procedimiento capaz de determinar si una palabra es palndroma (capica). 
1.Disear una aplicacin que permita al usuario introducir valores en una lista desplegable y,  
obtenga la suma de dichos valores. 
1.Crear una aplicacin que permita al usuario escoger entre ordenar valores ascendente o  
descendentemente. Los valores se introducirn en una lista desplegable y, el resultado se  
mostrar en otra lista. Slo se permite la introduccin de valores numricos. 
1.Disear una aplicacin que permita simular un tragaperras de forma que, cuando el usuario  
pulse el botn de jugar, se descuente de la cantidad introducida el valor de la jugada y, se  
muestren aleatoriamente las figuras del premio. Transcurrido unos segundos, las imgenes  
se deben detener y se proceder a comprobar si ha tocado premio, en cuyo caso se  
incrementar la cantidad ganada. 
1.Disear una aplicacin que utilice procedimientos para hacer el siguiente juego de palabras: 
Todas las palabras de una letra permanecen iguales. 
Las palabras que empiezan por vocal, se les aade el sufijo "way". 
Las palabras que empiezan por una cadena de consonantes se traslada la consonante  
al final y se les aade el sufijo "ay". 
Cualquier q movida por la regla anterior se lleva la u con ella. 
No hay ms consonantes. 
4.3- MATRICES DE CONTROLES 
Una Matriz de Controles es un grupo de controles que comparten el mismo nombre y tipo. A su vez,  
comparten los mismos procedimientos de eventos, pero son controles fsicamente separados y cada  
uno posee su propio conjunto de propiedades. Una matriz de controles tiene al menos un elemento  
y no puede exceder de 254. Para crear una matriz de controles es suficiente con asignar el mismo  
nombre a dos o ms controles (propiedad Name) durante el diseo de la aplicacin, o bien asignar  
un valor a la propiedad Index de un control. En el ltimo caso se genera una matriz de un solo  
elemento, lo cual es til cuando se quieren crear controles en tiempo de ejecucin. Cuando Visual  
Basic crear una matriz de controles, asigna por defecto los ndices 0, 1, ..., los cuales pueden  
modificarse a voluntad del usuario cambiando el valor de la propiedad Index. Esta operacin solo  
puede hacerse durante el diseo. 
Cuando cualquier control de la matriz reconoce un suceso, Visual Basic pasa el ndice como  
argumento extra y, sirve para determinar que control ha recibido el suceso. Un elemento de la  
matriz de controles puede referenciarse escribiendo NombreMatriz(Index) 
AADIR Y RETIRAR CONTROLES EN TIEMPO DE EJECUCIN 
Una vez se ha creado una matriz de controles durante el diseo, se pueden aadir controles  
mientras se ejecuta la aplicacin. Cuando Visual Basic crea un nuevo control en una matriz de  
controles, el objeto es invisible. El resto de propiedades se copian del elemento de la matriz con  
menor ndice. Como lo controles creados se apilan unos sobre otros, deben moverse con el mtodo  
Move. 
Para eliminar elementos de una matriz de controles, se utilizar la sentencia 
Unload Nombre_Matriz(ndice) 
EJEMPLO: 
Crear un formulario con dos cajas de texto a las que se les haya cambiado la  
propiedad Name para que ponga, en ambas, "Prueba". De esta forma tenemos creada  
una matriz de controles. Vamos a escribir un procedimiento de evento asociado a las  
dos cajas de texto. 
Private Sub Prueba_Change(Index As Integer) 
If Index = 0 Then 
Print "Ha escrito en la caja de texto 0" 
Else 
Print "Ha escrito en la caja de texto 1" 
End If 
End Sub 
Ahora modificaremos el ejemplo para que, al cargar el formulario, se aadan cuatro  
cajas de texto nuevas a la matriz de controles. 
Private Sub Form_Load(Index As Integer) 
Dim I As Integer 
For I = 2 To 5 
Load Prueba(I) 
Prueba(I).Text = "Caja de texto " & Str(I) 
Prueba(I).Move 0, 495 * (I - 2) 
Prueba(I).Visible = True 
Next I 
End Sub 
EJERCICIOS: 
1.Crear una aplicacin que permita simular un tablero de juego tres en raya. Cada vez que el  
usuario haga clic sobre un cuadrado, la aplicacin debe controlar si el cuadrado ya est  
marcado y, si no lo est, lo marcar con la seal del jugador. En caso de hacer tres en raya,  
dar un mensaje de felicitacin. 
1.Disear una aplicacin que muestre en su formulario tres botones con el texto "+6%",  
+13%", "+33%" respectivamente. El usuario debe ser capaz de escribir en una caja de texto  
el valor de una cantidad determinada y, al seleccionar cualquiera de los porcentajes, la  
aplicacin debe mostrar el tanto por ciento correspondiente y, la suma de dicho valor. Si la  
cantidad introducida por el usuario supera los 100.000.000, debe aparecer otro botn con  
el texto "+54%" y, si la cantidad es menor, debe desaparecer. 
1.Disear una calculadora cientfica utilizando matrices de controles. Se debe poder obtener  
cualquier operacin aritmtica bsica: sumar, restar, multiplicar y dividir. Llevar un control  
de la memoria. Obtener la raz cuadrada y el tanto por ciento de un nmero. Debe permitir  
un encendido/apagado de la calculadora (p.e. un botn que inicialmente muestre ON y, una  
vez pulsado, visualice un cero en la pantalla y, en el botn, el texto OFF) 
1.Se pretende realizar una aplicacin que permita al usuario llevar la gestin de sus apuestas  
en la Lotera Primitiva. Para ello, la aplicacin debe permitir marcar seis nmeros  
seleccionados al azar entre el 1 y el 49. Se pretende que el botn correspondiente a  
"Marcar" seleccione seis nmeros al azar y, los marque en las casillas adecuadas  
(equivalente al men Apuesta / Marcar). El botn "Nueva apuesta" debe permitir desactivar  
las casillas marcadas en la apuesta anterior (Apuesta / Nueva). La aplicacin debe tener un  
formulario inicial con el nombre del alumno, de forma que, transcurridos 5 segundos,  
muestre el formulario de la Primitiva. 
VARIABLES DE OBJETO 
Igual que se tienen variables para manipular enteros, cadenas, etc. se pueden utilizar variables  
para manipular objetos de Visual Basic. Utilizando variables objeto se podr crear en tiempo de  
ejecucin mltiples instancias de formularios, escribir procedimientos que modifiquen cualquier  
formulario o control y construir arrays de formularios. Un ejemplar o instancia de un formulario  
es una copia que existe con independencia del original. Una variable objeto no contiene una copia  
de un objeto, sino una referencia a dicho objeto. 
Para declarar una variable objeto se utiliza la sintaxis: 
{Dim | ReDim | Static} VarObj As [New] TipoObj 
donde TipoObj puede ser: un formulario existente o las palabras reservadas Form, Control  
MDIForm, TextBox, ... 
EJEMPLO: 
Crear un formulario con un botn de comando, que tenga asociado el siguiente  
cdigo: 
Private Sub Command1_Click() 
Dim MiForm As New Form1 'Variable objeto; 
'se crea un nuevo ejemplar 
MiForm.Show 'carga y visualiza MiForm 
'Mover y colorear el nuevo ejemplar 
MiForm.Move Left + (Width \ 10), Top + (Height \ 6) 
MiForm.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256) 
End Sub 
Para asignar un objeto especfico a una variable objeto, se utiliza la sentencia Set: 
Set VarObj = RefObj 
Cuando una variable objeto no se refiere a un determinado objeto, tiene asignado el valor  
especial, Nothing. 
Para pasar una variable objeto a un procedimiento se debe definir en la cabecera del  
procedimiento los parmetros que se necesitan de tipo de objeto genrico (Form, Control y  
MDIForm) y especfico (TextBox, etc.). Un parmetro declarado de tipo Form puede actuar sobre  
cualquier formulario, un parmetro declarado de tipo Control puede operar sobre cualquier  
control. 
Para determinar el tipo de una variable objeto se puede utilizar alguna de las sentencias  
siguientes: 
{If | ElseIf} TypeOf VarObj Is TipoObj Then 
Una coleccin se define como un grupo de objetos. Visual Basic provee de colecciones que se  
pueden utilizar para acceder a todos los formularios de una aplicacin, o a todos los controles de  
un formulario particular. Una aplicacin tiene una coleccin de formularios global y cada  
formulario tiene una coleccin de controles. 
La coleccin de formularios contiene los formularios cargados. La sintaxis para referirse a la  
coleccin de formulario es: 
Foms(ndice) 
donde ndice es un valor entre 0 y Forms.Count -1. La propiedad Count devuelve el nmero de  
formularios en la coleccin. 
La coleccin de controles permite referirse solamente a los controles cargados en un formulario.  
Cuando en un formulario hay array de controles, cada elemento de cada array es incluido en la  
coleccin. La sintaxis para referirse a la coleccin de controles es: 
[formulario.] Controls(ndice) 
donde ndice es un valor entre 0 y Controls.Count -1. 
Visual Basic provee de cinco objetos especiales para obtener informacin acerca del entorno en el  
cual se est trabajando. Estos objetos son: 
App Suministra informacin especfica de la aplicacin. 
Clipboard Permite manipular texto y grficos a travs del portapapeles. 
Debug Permite enviar informacin a la ventana de depuracin. 
Printer Permite enviar texto y grficos a la impresora. 
Screen Indica el formulario activo, control activo y otros datos. 
EJEMPLO: 
Disear un formulario que permita obtener una lista de las fuentes de la pantalla: 
Private Sub Form_Click() 
Dim I As Integer 
For I = 1 To Screen.FontCount - 1 
Font.Name = Screen.Fonts(I) 
Print "Escrito en letra "; Screen. Fonts(I) 
Next I 
End Sub 
4.4- LAS HERRAMIENTAS DE DEPURACIN 
Cuando se realiza una aplicacin se pueden presentar tres clases de errores: 
Los errores de sintaxis son el resultado de escribir incorrectamente una sentencia. Para  
activarlos tan pronto como se producen se debe tener activada la opcin  
Herramientas/Opciones/Ficha Entorno/Verificacin Automtica de Sintaxis. 
Los errores de ejecucin ocurren cuando al ejecutar una aplicacin una sentencia intenta  
una operacin imposible de realizar. 
Los errores lgicos se producen cuando siendo la aplicacin sintcticamente correcta, se  
ejecuta sin producirse errores en tiempo de ejecucin, pero los resultados obtenidos no son  
correctos. 
DEPURACIN 
Durante el diseo y puesta en marcha de una aplicacin, hay tres modos en los que se puede estar:  
diseo, ejecucin y pausa. 
Modo Diseo, caracterizado porque en l se realiza la mayor parte del trabajo de creacin  
de la aplicacin. Para pasar al modo ejecucin, se ejecutar Ejecutar/Inicio, se pulsar F5  
o se har clic en el icono Ejecutar; para pasar al modo pausa se ejecuta la orden  
Ejecutar/Paso a paso por instrucciones, Ejecutar/Paso a paso por procedimiento, pulse F8,  
pulse Mays + F8, hacer clic en el icono Paso a paso o en el icono Paso procedimiento. 
Modo Ejecucin caracterizado porque la aplicacin toma el control. Para pasar al modo de  
diseo, se acceder a Ejecutar/Terminar o se har clic en el icono Detener; para pasar al  
modo pausa, se pulsar el icono pausa. 
Modo Pausa caracterizado por permitir ejecutar la aplicacin paso a paso. Para pasar de  
este modo al de ejecucin, se acceder a Ejecutar/Inicio, pulsar la tecla F5 o se har clic  
en el icono Ejecutar. Para pasar al modo de diseo se acceder a Ejecutar/Terminar o se  
har clic en el icono Detener. 
Para depurar una aplicacin, se debe entrar en el modo pausa. Para ejecutar el cdigo paso a paso  
desde un punto determinado, se insertarn puntos de parada, que detienen la ejecucin de la  
aplicacin pasando del modo de ejecucin al de pausa. 
VENTANA DE DEPURACIN 
Para poder mostrarla se accede a Ver/Ventana Depuracin. Sirve para poder visualizar los valores  
de las expresiones y poderlas verificar. Para ello, desde la ventana de depuracin se podr  
utilizar la sentencia Print o ? o utilizar la orden Herramientas/Agragar Inspeccin. Tambin es  
posible mediante cdigo, insertar sentencias del tipo: 
Debug.Print Var_A_Depurar 
EJEMPLOS 
1.Disear una aplicacin que permita utilizar las herramientas de depuracin. Para ello, la  
aplicacin ordenar alfabticamente 5 nombres. Utilizar las herramientas de depuracin  
para depurarlo. 
Private Sub Form_Click() 
Static Nombres(4) As String 
Nombres(0) = "Juan" 
Nombres(1) = "Toms" 
Nombres(2) = "Eduardo" 
Nombres(3) = "Samuel" 
Nombres(4) = "Francisco" 
For I = 0 To 4 
For J = 0 To 4 
If Nombres(I) > Nombres(J) Then 
Temp$ = Nombres(I) 
Nombres(I) = Nombres(J) 
Nombres(J) = Tmp$ 
End If 
Next J 
Next I 
For I = 0 To 4 
Print Nombres(I) 
Next I 
End Sub 
2.Disear una aplicacin que permita realizar una inversin de 1000 Pts al 7% durante 12  
aos, lo que debe dar una resultado de: inversin * (1 + Inters/100)Aos = 1000 * (1 +  
0,07)12 = 2252,19 Pts. El formulario estar formado por 4 cajas de texto y un botn de  
comando. Aadiremos las etiquetas necesarias para una mejor comprensin. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Appearance  
1 - 3D  
 
Name  
frmInversin  
Label  
Caption  
Inversin en Pts  
Text Box  
Text  
(ninguno)  
 
Name  
txtInversin  
Label  
Caption  
Inters  
Text Box  
Caption  
(ninguno)  
 
Name  
txtInters  
Label  
Caption  
Periodo en aos  
Text Box  
Caption  
(ninguno)  
 
Name  
txtAos  
Label  
Caption  
Resultado  
Text Box  
Caption  
(ninguno)  
 
Name  
txtResultado  
 
TabStop  
False  
 
Locked  
True  
Command Button  
Caption  
Rendimiento  
 
Name  
cmdRendimiento 
Private Sub cmdRendimiento_Click() 
Inversin = Val(txtInversin.Text) 
Inters = Val(txtInters.Text) 
Aos = Val(txtAos.Text) 
Resultado = Inversin * (1 + Interes / 100) ^ Aos 
txtResultado = Format(Resultado, Currency) 
End Sub 
4.5- CONTROL DE ERRORES EN TIEMPO DE EJECUCIN 
Cuando se produce un error en tiempo de ejecucin, Visual Basic detiene la aplicacin. Para  
habilitar la captura de errores en tiempo de ejecucin para su uso posterior, se tendr que utilizar  
la sentencia: 
On Error GoTo... 
donde los tres puntos indican la etiqueta que define la captura del error. El cdigo etiquetado  
debe estar en el procedimiento actual. Una etiqueta es un identificador que finaliza con dos  
puntos. Para que no se ejecute la rutina de tratamiento de errores cuando la aplicacin funcione  
bien, es aconsejable tener una salida (Exit Function, Exit sub, etc.) en la lnea inmediatamente  
anterior a la rutina de tratamiento. 
En caso de que el error pueda corregirse, la sentencia Resume lleva a la instruccin que provoc el  
error inicialmente. Si no puede resolverse, se puede identificar el error con la funcin Err, que  
devuelve el entero asociado al ltimo error producido. 
La sentencia Resume Next permite saltarse la instruccin que provoc el error y, se comienza a  
procesar la instruccin inmediatamente posterior a la que ha causado el problema. Tambin se  
puede restaurar la ejecucin a cualquier punto mediante la sentencia Resume Etiqueta. 
Para conocer el mensaje del error producido, se puede utilizar la funcin Error$. 
Para desactivar la captura de errores, se utiliza la sentencia: 
On Error GoTo 0 
EJEMPLO: 
Disear una aplicacin que permita ejecutar una aplicacin Windows introducida por  
el usuario. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Ejecutar...  
 
Name  
frmEjecutar  
 
MinButton  
False  
 
MaxButton  
False  
 
BorderStyle  
1 - Fixed Single  
Text Box  
Text  
(ninguno)  
 
Name  
txtArchivo  
Command Button  
Name  
cmdAceptar  
 
Caption  
Aceptar  
 
Default  
True  
Command Button  
Caption  
Cancelar  
 
Name  
cmdCancelar  
 
Default  
True 
Private Sub cmdAceptar_Click() 
Dim Retorno As Long 
Dim NombreArchivo As String 
NombreArchivo = txtArchivo.Text 
If Existe(NombreArchivo) Then 
Retorno = Shell(NombreArchivo, vbNormalFocus) 
Else 
MsgBox "Por favor, intntalo de nuevo con un fichero existente", vbExclamation, _ 
"Ejecutar Programa" 
End If 
End Sub 
Private Function Existe(F As String) As Boolean 
'Comprueba la existencia de un archivo 
Dim X As Long 
On Error Resume Next 
X = FileLen(F) 
If X Then 
Existe = True 
Else 
Existe = False 
End If 
End Function 
Private Sub cmdCancelar_Click() 
End 
End Sub 




OTROS CONTROLES VB Y ELTOS DE INTERFACE  

5.1.- BOTONES DE OPCIN, CUADROS DE VERIFICACIN, BARRAS DE  
DESPLAZAMIENTO Y TEMPORIZADORES. 
CASILLAS DE VERIFICACIN Y CUADROS DE OPCIN. 
Los botones de opcin (Option Button, 3 fila, icono central) y las casillas de verificacin  
(CheckBox, 3 fila, icono izquierdo), indican un estado y permiten al usuario que cambie el estado.  
Las casillas de verificacin actan independientemente. Por el contrario, los botones de opcin  
aparecen en conjuntos y permiten escoger un valor del conjunto. 
Las propiedades importantes de estos controles son, prcticamente las mismas que las de un botn  
de comando, a excepcin de la propiedad Value (valor), que indica el estado del control. Para los  
botones de opcin puede estar establecida a True o False. Si est a True, el botn estar  
activado. Para las casillas de verificacin, se podr establecer a 0-Unchecked (no est activado),  
1-Checked (activado) o 2-Grayed (atenuado). 
MARCOS 
Los marcos (Frame, 2 fila, icono central) sirven para separar grupos de otros objetos en la  
pantalla. Para los controles anteriores, tambin afectan al comportamiento de ellos. Para  
asegurarse que los controles que se aadan al marco pertenecen al marco, se deben crear dentro  
del marco y no arrastrarlos encima del marco. 
BARRAS DE DESPLAZAMIENTO 
(HScrollBar y VScrollBar, 4 fila, iconos central y derecho) Informan de la posicin del cuadro  
de desplazamiento dentro de la barra. 
Las propiedades que se suelen utilizar son: Value (valor) contiene el nmero que representa la  
posicin actual del cuadro de desplazamiento en el interior de la barra. LargeChange (gran  
cambio) representa el valor aadido o sustrado al nmero contenido en la propiedad Value cuando  
el usuario hace clic dentro de la barra de desplazamiento. Max (mximo) indica el valor de la  
propiedad Value cuando el cuadro de desplazamiento est en su posicin ms a la derecha o abajo  
posible. Min (mnimo) indica el valor de la propiedad Value cuando el cuadro de desplazamiento  
est en su posicin ms a la izquierda o arriba posible. SmallChange (cambio pequeo) representa  
el valor aadido o sustrado al nmero contenido en la propiedad Value cuando el usuario hace clic  
dentro de una de las flechas de desplazamiento. 
Los eventos asociados a este tipo de control son los eventos Change producido despus de que se  
haya modificado la posicin del cuadro de desplazamiento; y el evento Scroll, emitido  
repetidamente mientras el cuadro de desplazamiento se arrastra por el interior de la barra de  
desplazamiento (no ocurre si se mueve haciendo clic en las flechas o en la barra). Se utiliza para  
proporcionar informacin instantnea. 
TEMPORIZADORES 
(Timer, 5 fila, icono izquierdo) Este tipo de control se programa estableciendo su propiedad  
Interval al nmero de milisegundos que deben transcurrir entre los eventos que emita. En la  
mayora de los ordenadores, un valor en la propiedad Interval inferior a 56 no es til. El valor  
mximo permitido es algo ms de un minuto: 66... Antes de generar un evento de reloj, el sistema  
siempre comprueba si hay algn otro evento de reloj pendiente, si lo hay, no genera un evento  
nuevo. Invisible en tiempo de ejecucin. 
CONTROL DE REJILLA (CONTROL GRID) 
Una rejilla tiene la apariencia de una hoja de clculo, por lo que la informacin que muestra  
aparece en las celdas de la rejilla. Durante la ejecucin, el usuario podr seleccionar celdas, pero  
no modificar su contenido. En una rejilla podemos tener celdas fijas y no fijas. El color por  
defecto de las celdas fijas es gris y, el de las no fijas, blanco. Si el nmero de celdas no cabe en  
la rejilla, aparecern barras de desplazamiento. En Visual Basic 4.0, este control debe ser aadido  
al proyecto desde Herramientas/Controles Personalizados/ Activando "Microsoft Grid Control" 
Las propiedades ms importantes de este control son: Row (fila) determina la fila actual. Col  
(columna) contiene la columna actual. Rows (filas) determina el nmero total de filas. Cols  
(columnas) que determina el nmero total de columnas. FixedRows (filas fijas) determina el nmero  
de filas, empezando desde arriba, que permanecen fijas. FixedCols (columnas fijas) determina el  
nmero de columnas, empezando desde la izquierda, que permanecen fijas. ColWidth (anchura  
columna) determina el ancho de la columna. RowHeight (altura fila) determina el alto de la fila.  
Ambas estn medidas en Twips. Text (texto) contiene el contenido de la celda. 
EJERCICIOS: 
1.Crear una aplicacin que permita mostrar en una caja de texto la posicin actual de una  
barra de desplazamiento. 
1.Disear una aplicacin que transcurrido un intervalo de tiempo introducido por el usuario,  
simule un protector de pantalla. 
1.Disear una aplicacin que permita al usuario definir un color escogiendo la cantidad de  
rojo, verde y azul. Se deben utilizar barras de desplazamiento para cada color y, una caja  
de texto para mostrar el color resultante. 
5.2.- CUADROS DE DILOGO COMUNES. CONTROLES DE UNIDADES,  
DIRECTORIOS Y ARCHIVOS 
CUADROS DE DILOGO 
(Common Dialog, 8 fila, icono izquierdo) Este control es invisible en tiempo de ejecucin. Sin  
embargo, cuando se pone un control de este tipo en un formulario, se puede llamar a  
cualquiera de las cinco operaciones estndar de Windows como Abrir, Guardar como, Color,  
Fuente e Impresora. El cuadro de dilogo no realiza acciones, slo recoge informacin. La  
ejecucin de las funciones seleccionadas comienza cuando se establece la propiedad  
(Personalizado) del control de dilogo estndar. Las instrucciones de Visual Basic se  
suspenden hasta que el usuario sale del cuadro de dilogo. Entonces se podrn examinar las  
propiedades del control para ver qu accin se produjo. No hay ni mtodos ni eventos  
asociados a este tipo de control. Todas las funciones del cuadro de dilogo permiten generar  
un error si el usuario selecciona el botn Cancelar. Para ello, se utiliza la propiedad  
CancelError (cancelar error), que por defecto est desactivada. 
Al modificar la propiedad (Personalizado) aparece una serie de fichas para escoger el tipo de  
cuadro de dilogo que se debe mostrar. Las posibilidades son las siguientes: 
Abrir / Guardar Como: Permite al usuario seleccionar una unidad de disco, un  
directorio, una extensin de archivo, un nombre de archivo e indicar si ste va a  
ser abierto slo para lectura. Sus propiedades ms importantes son: DialogTitle  
(ttulo del cuadro de dilogo) que puede ser establecida en cualquier cadena de  
caracteres; FileName (nombre de archivo) utilizada para establecer el nombre  
inicial que aparecer en el cuadro Nombre del archivo del cuadro de dilogo.  
Sirve adems para saber el nombre del archivo seleccionado; Filter (filtro) se  
utiliza para restringir los nombres de los archivos que aparecern en el cuadro  
de lista. Debe ser una cadena de texto con una o ms parejas de componentes,  
donde cada componente est formada por una descripcin y por un carcter  
comodn y, separadas por |; FilterIndex (filtro ndice) tendr como valor un  
nmero entero que indica la pareja de componentes del filtro que actuar por  
omisin; Flags (banderas) establecida como una combinacin de uno o ms  
valores que controlan caractersticas especiales del cuadro de dilogo. 
Color: Permite al usuario seleccionar un color de una paleta o crear y  
seleccionar un color personalizado. La propiedad Color determina el color  
seleccionado. 
Fuente: Permite al usuario seleccionar un tipo de letra, especificando la fuente, el  
estilo y el tamao. 
Imprimir: Visualiza el tipo de impresora que se est utilizando y permite al usuario  
especificar una nueva impresora y/o indicar cmo se va a realizar la impresin.  
Las propiedades Copies (nmero de copias), FromPage (desde la pgina n),  
ToPage (hasta la pgina n), determinan la informacin relativa a la impresin. 
Ayuda: Permite ejecutar Winhelp.exe, pero no se visualiza cuadro de dilogo. La  
propiedad HelpCommand (comando de ayuda) especifica el tipo de ayuda que se  
quiere obtener; HelpFile (archivo de ayuda) especifica el nombre del archivo de  
ayuda y HelpKey (clave de ayuda) especifica la palabra clave que se debe usar  
para la pantalla inicial de ayuda. 
Una vez en tiempo de ejecucin, para visualizar el cuadro de dilogo se deber utilizar uno de  
los mtodos siguientes: 
Mtodo Tipo de Caja 
ShowOpen Caja de dilogo Abrir 
ShowSave Caja de dilogo Guardar Como 
ShowColor Caja de dilogo Color 
ShowFont Caja de dilogo Fuente 
ShowPrinter Caja de dilogo Imprimir 
ShowHelp Invoca a Winhelp.exe (no visualiza caja de dilogo) 
EJEMPLO: 
Disear una aplicacin que permita visualizar varios tipos de cuadros de dilogo. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Cuadros de dilogo  
 
Name  
frmCDemo  
 
Appearance  
1 - 3D  
Label  
Caption  
Elige un tipo de cuadro  
List Box  
Font  
Font: Courier  
 
Name  
lstDiags  
Command Button  
Name  
cmdOK  
 
Caption  
OK  
 
Default  
True  
Command Button  
Caption  
Cancelar  
 
Name  
cmdCancelar  
 
Cancel  
True  
Common Dialog  
Name  
CommonDialog1 
Private Sub Form_Load() 
lstDiags.AddItem "Ningn cuadro de dilogo - Action = 0" 
lstDiags.AddItem "Cuadro de dilogo Abrir - Action = 1" 
lstDiags.AddItem "Cuadro de dilogo Guardar Como - Action = 2" 
lstDiags.AddItem "Cuadro de dilogo Color - Action = 3" 
lstDiags.AddItem "Cuadro de dilogo Fuentes - Action = 4" 
lstDiags.AddItem "Cuadro de dilogo Imprimir - Action = 5" 
lstDiags.AddItem "Cuadro de dilogo Ayuda - Action = 6" 
End Sub 
Private Sub cmdOK_Click() 
MostrarCuadro 
End Sub 
Private Sub lstDiags_DblClick() 
MostrarCuadro 
End Sub 
Private Sub cmdCancelar_Click() 
Unload cmdCancelar.Parent 
End Sub 
Public Sub MostrarCuadro() 
Dim Cual As Integer 
Const OFNFileMustExists = 4096 'Constantes obtenidas del "Object Browser" 
Const OFNAllowMultiselect = 512 
Const OFNShowHelp = 16 
Const OFNOverwritePrompt = 2 
Const CCFullOpen = 2 
Const CFBoth = 3 
Const PPrintSetup = 64 
Const HelpContents = 3 
If lstDiags.ListIndex = 0 Or lstDiags.ListIndex = -1 Then 
MsgBox "Lo siento, no hay cuadro de dilogo seleccionado" 
Else 
Cual = lstDiags.ListIndex 
Select Case Cual 
Case 1 'Abrir archivo, Action = 1 
CommonDialog1.Flags = OFNFileMustExist Or OFNAllowMultiselect 
CommonDialog1.ShowOpen 
Case 2 'Guardar archivo, Action = 2 
CommonDialog1.Flags = OFNShowHelp Or OFNOverwritePrompt 
CommonDialog1.ShowOpen 
Case 3 'Color, Action = 3 
CommonDialog1.Flags = CCFullOpen 
CommonDialog1.ShowOpen 
Case 4 'Fuentes, Action = 4 
CommonDialog1.Flags = CFBoth 
CommonDialog1.ShowOpen 
Case 5 'Imprimir, Action = 5 
CommonDialog1.Flags = PDPrinterSetup 
CommonDialog1.ShowOpen 
Case 6 'Ayuda, Action = 6 
CommonDialog1.HelpFile = "VB.HLP" 
CommonDialog1.HelpCommand = HelpContents 
CommonDialog1.ShowOpen 
End Select 
End If 
End Sub 
CONTROLES DE UNIDADES DE DISCO 
(DriveList, 5 fila, icono central) La propiedad Drive del control de unidades de disco, permite  
saber cul es la unidad actual. Slo el primer carcter es significativo. Disponible en tiempo de  
ejecucin. Un cambio de unidad de disco provoca el suceso Change. Para que cambie la unidad de  
disco se debe ejecutar la sentencia: 
ChDrive Drive1.Drive 
CONTROL DE DIRECTORIOS 
(DirList, 5 fila, icono derecho) Muestra la estructura de directorios de la unidad actual. La  
propiedad Path devuelve el camino completo del directorio actual, incluyendo el nombre de  
unidad. Disponible en tiempo de ejecucin. Un cambio de directorio provoca el suceso Change.  
Para que cambie el directorio se debe ejecutar la sentencia: 
ChDir Dir1.Path 
El directorio especificado por la propiedad Path siempre tiene como ndice (propiedad ListIndex)  
-1. El que est inmediatamente encima de l, tiene como ndice -2, y as sucesivamente hasta el  
directorio raz. El primer subdirectorio que est inmediatamente a continuacin, tiene como ndice  
0. Si hay varios directorios en el primer nivel de subdirectorios, el siguiente tiene ndice 1, y as  
sucesivamente. El nmero de directorios correspondientes al primer nivel de subdirectorios del  
directorio especificado por Path, viene dado por la propiedad ListCount de la lista. 
CONTROL DE ARCHIVOS 
(FileList, 6 fila, icono izquierdo) Muestra los archivos del directorio actual. La propiedad  
FileName permite especificar el fichero que se quiere utilizar o devuelve el nombre del fichero  
seleccionado. Disponible en tiempo de ejecucin. La propiedad Pattern permite que se visualicen  
los ficheros que cumplen el patrn especificado por sta. Admite los comodines * y ?. Los atributos  
estn disponibles a travs de las propiedades Archive, Normal, System, Hidden y ReadOnly.  
Para poner atributos a un fichero se ejecutar la propiedad SetAttr y, para obtenerlos, GetAttr.  
Las propiedades List y ListIndex son idnticas a las propiedades del mismo nombre de los cuadros  
combinados. 
EJEMPLOS: 
1.Disear una aplicacin que permita buscar ficheros a partir de un determinado directorio  
previamente especificado. Se necesitan dos formularios y un mdulo. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Buscar ficheros  
 
Name  
frmBuscarFicheros  
Label  
Caption  
Criterio de bsqueda:  
Text Box  
Text  
(ninguno)  
 
Name  
txtPatrn  
Command Button  
Name  
cmdDirectorio  
 
Caption  
Directorio:  
Text Box  
Caption  
(ninguno)  
 
Name  
txtDirectorio  
Command Button  
Caption  
Buscar  
 
Name  
cmdBuscar  
 
Default  
True  
Command Button  
Caption  
Cancelar  
 
Name  
cmdCancelar  
Command Button  
Caption  
Salir  
 
Name  
cmdSalir  
List  
Name  
lstLista  
 
Sorted  
True 
Private Sub cmdSalir_Click() 
End 
End Sub 
Private Sub Form_Load() 
txtDirectorio.Text = CurDir$ 'Directorio actual 
txtPatrn.Text = "*.*" 
End Sub 
Private Sub txtPatrn_Change() 
FrmSistemaF.fleArchivos.Pattern = txtPatrn.Text 
End Sub 
Private Sub cmdBuscar_Click() 
BuscarFichero 
End Sub 
Private Sub cmdCancelar_Click() 
NoAbandonarBuscar = False 
End Sub 
Private Sub cmdDirectorio_Click() 
frmSistemaF.Show 1 'Formulario modal 
End Sub 
En un nuevo mdulo: 
Public NoAbandonarBuscar As Boolean 
Dim NumFicheros As Integer 
Public Sub BuscarFichero() 
'Inicializacin para llamar a RecorrerArbolDirs para ejecutar una bsqueda  
recursiva 
Dim Abandono As Boolean, I As Integer, Msj As String 
'Si ya existe una lista, borrarla 
If frmBuscarFicheros.lstLista.ListCount Then FrmBuscarFicheros.lstLista.Clear 
'Comenzar la bsqueda recursiva de directorios 
Abandono = RecorrerArbolDirs(frmBuscarFicheros.txtDirectorio.Text, "") 
frmSistemaF.fleArchivos.Path = frmSistemaF.dirDirectorio.Path 
If Not Abadono Then 
If frmBuscarFicheros.lstLista.ListCount Then 
NumFicheros = frmBuscar-ficheros.lstLista.ListCount 
Msj = "Se encontraron " & Str$(NumFicheros) 
Msj = Msj & " ficheros" 
Else 
Msj = "No se encontraron ficheros" 
End If 
MsgBox Msj, vbInformation, frmBuscarFicheros.Caption 
Else 
Msj = "Error: se abandon la bsqueda" 
MsgBox Msj, vbCritical, frmBuscarFicheros.Caption 
End If 
End Sub 
Public Function RecorrerArbolDirs(DirActual As String, DirAnterior As String) _ 
As Boolean 
'Buscar directorios recursivamente desde DirActual hacia abajo 
Dim vr As Integer, I As Integer, Msj As String 
'Permitir al usuario abandonar la bsqueda 
NoAbandonarBuscar = True 
'Si ocurre un error, la funcin devuelve True 
RecorrerArbolDirs = False 
'Permitir ejecutar otros sucesos 
vr = DoEvents 
'Ahora Cancelar puede poner NoAbandonar a False 
On Error GoTo ManipularErrorRecorrerArbolDirs 
'Directorios debajo del actual 
DirsDebajo = frmSistemaF.dirDirectorio.ListCount 
Do While (DirsDebajo > 0) And NoAbandonarBuscar 
'DirViejo se guarda en DirAnterior para la prxima recursin 
DirViejo = DirActual 
If frmSistemaF.dirDirectorio.ListCount > 0 Then 'otro nodo 
FrmSistemaF.dirDirectorio.Path = frmSistemaF!dirDirectorio.List(DirsDebajo - 1) 
NoAbandonarBuscar = RecorrerArbolDirs((frmSistemaF!dirDirectorio.Path), _ 
DirViejo) 
End If 
'Otra rama del mismo nivel de directorios 
DirsDebajo = DirsDebajo - 1 
If NoAbandonarBuscar = False Then 
RecorrerArbolDirs = True 
Exit Function 
End If 
Loop 
'Completar camino 
If frmSistemaF.fleArchivos.ListCount Then 
If Len(DirActual) > 3 Then DirActual = DirActual + "\" 
'Aadir ficheros a la lista 
For I = 0 To frmSistemaF.fleArchivos.ListCount - 1 
Entrada = DirActual & frmSistemaF.fleArchivos.List(I) 
FrmBuscarFicheros.lstLista.AddItem Entrada 
NumFicheros = NumFicheros + 1 
Next I 
End If 
If DirAnterior <> "" Then 'Directorio anterior en la lista 
FrmSistemaF.dirDirectorio.Path = DirAnterior 
End If 
Exit Function 
ManipularErrorRecorrerArbolDirs: 
Ir Err = 7 Then 'Insuficiente memoria (lista llena) 
'Visualizar mensaje de error y retornar True en AbandonarBusqueda 
Msj = "Lista llena. Se abandona la bsqueda" 
MsgBox Msj, vbExclamation 
RecorrerArbolDirs = True 
Exit Function 'Exit pone Err a 0 
Else 
MsgBox Error, vbCritical 
End 
End If 
End Function 
En un nuevo formulario: 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Sistema de Ficheros  
 
Name  
frmSistemaF  
Label  
Caption  
Ficheros:  
File  
Name  
FleArchivos  
Label  
Caption  
Directorios:  
Dir  
Name  
dirDirectorio  
Label  
Caption  
Unidades:  
Drive  
Name  
drvUnidades  
Command Button  
Caption  
Aceptar  
 
Name  
cmdAceptar  
Command Button  
Caption  
Cancelar  
 
Name  
cmdCancelar 
Private Sub drvUnidades_Change() 
On Error GoTo Unidades 
dirDirectorio.Path = drvUnidades.Drive 
Exit Sub 
Unidades: 
MsgBox "Error: unidad no preparada", vbExclamation, "Sistema Ficheros" 
Exit Sub 
End Sub 
Private Sub dirDirectorio_Change() 
fleArchivos.Path = dirDirectorio.Path 
End Sub 
Private Sub cmdAceptar_Click() 
'Actualizar la lista de directorios 
dirDirectorio.Path = dirDirectorio.List(dirDirecrorio.ListIndex)) 
frmBuscarFicheros.txtDirectorio.Text = dirDirectorio.Path 
frmSistemaF.Hide 
End Sub 
Private Sub cmdCancelar_Click() 
frmSistemaF.Hide 
End Sub 
2.Disear una aplicacin que simule una base de datos de una farmacia. Se debe guardar  
informacin sobre el nombre del producto, cantidad en stock y comentarios sobre el  
producto. Para ello, se utilizar un tipo Registro. El formulario estar formado por un botn  
para buscar un producto determinado, otro botn para aadir un nuevo producto, as como  
las cajas de texto necesarias para visualizar el inventario. Cuando se desee buscar un  
producto, se mostrar un formulario con una lista en la que aparecern los nombres de los  
productos. Cuando el usuario seleccione un producto, se visualizar en el formulario inicial  
toda la informacin relativa a dicho producto. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Inventario de Farmacia  
 
Name  
frmInventario  
Text Box  
Text  
(ninguno)  
 
Name  
txtNombre  
Text Box  
Text  
(ninguno)  
 
Name  
txtCantidad  
Text Box  
Text  
(ninguno)  
 
Name  
txtComentarios  
 
MultiLine  
True  
 
ScrollBars  
2-Vertical  
Command Button  
Caption  
Buscar Producto  
 
Name  
cmdBuscar  
Command Button  
Caption  
Aadir  
 
Name  
cmdAadir 
Private Sub cmdAadir_Click() 
TotalRegistros = TotalRegistros + 1 
Articulo(TotalRegistros).Nombre = txtNombre.Text 
Articulo(TotalRegistros).Cantidad = txtCantidad.Text 
Articulo(TotalRegistros).Comentario = txtComentarios.Text 
frmRegistros.lstNombre.AddItem txtNombre.Text 
txtNombre.Text = "" 
txtCantidad.Text = "" 
txtComentarios.Text = "" 
txtNombre.SetFocus 
End Sub 
Private Sub Form_Terminate() 
End 
End Sub 
Private Sub cmdBuscar_Click() 
frmRegistro.Show 
End Sub 
En un nuevo mdulo: 
Type Registro 
Nombre As String * 50 
Cantidad As String * 20 
Comentarios As String * 200 
End Type 
Public TotalRegistros As Integer 
Public Articulo(1 To 100) As Registro 
Public Sub BuscarRegistro() 
Dim QueRegistro As Integer 
For QueRegistro = 1 To 100 
If (RTrim(Articulo(QueRegistro).Nombre)) = _ RTrim(frmRegistro.lstNombre.Text  
Then Exit For 
Next QueRegistro 
frmInventario.txtNombre.Text = Articulo(QueRegistro).Nombre 
frmInventario.txtCantidad.Text = Articulo(QueRegistro).Cantidad 
frmInventario.txtComentarios.Text = Articulo(QueRegistro).Comentarios 
frmRegistro.Hide 
End Sub 
En un nuevo formulario: 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Buscar Producto  
 
Name  
frmRegistro  
 
Max Button  
False  
 
Min Button  
False  
 
BorderStyle  
1-Fixed Single  
List Box  
Sorted  
True  
 
Name  
lstNombre  
Command Button  
Caption  
Aceptar  
 
Name  
cmdAceptar  
Command Button  
Caption  
Cancelar  
 
Name  
cmdCancelar 
Private Sub cmdCancelar_Click() 
frmRegistro.Hide 
End Sub 
Private Sub cmdAceptar_Click() 
BuscarRegistro 
End Sub 
Private Sub lstNombre_DblClick() 
BuscarRegistro 
End Sub 
EJERCICIO: 
Crear una aplicacin que permita al usuario escoger un tipo de letra y sus  
determinados atributos. El formulario debe parecerse lo ms posible al mostrado por  
Visual Basic al cambiar la propiedad Font de cualquier control. 
5.3.- CREACIN DE MENS. 
DISEO DE UN MEN 
Para disear un men se utilizar Herramientas/Editor de Mens. Los elementos de un men  
pueden ser rdenes o comandos, que al hacer clic sobre ellos ejecutan acciones; submens, que  
despliegan una nueva lista de elementos y; separadores o lnea horizontal que agrupa las opciones  
del men. Una vez en la ventana de diseo de mens, se introducirn los siguientes datos: 
Caption Nombre del men que se desea crear (lo que ve el usuario). Se insertar un  
ampersand (&) delante de la letra que dar acceso al men. Para introducir un  
separador, se escribir un guin (-) en este apartado. 
Name Nombre utilizado en el cdigo para referirse al men. 
Index Permite que un conjunto de rdenes sean agrupadas en una matriz de  
controles. 
ShortCut Permite definir un acelerador, es decir, una combinacin de teclas para  
activar el elemento. 
Checked til para indicar si una orden est activa o no. Si lo est, en la orden  
aparece una marca  a su izquierda. 
Enabled til para desactivar una orden. Si una orden tiene esta propiedad marcada,  
aparecer atenuada y no podr ser ejecutada. 
Visible Es til cuando en tiempo de ejecucin se quiere ocultar una orden. 
WindowList Permite especificar si un men mantiene una lista de las ventanas  
abiertas, con una marca  a la izquierda de la ventana activa. 
HelpContexID Se utiliza para proveer una ayuda en lnea para una aplicacin. 
NegotiatePosition Determina si el men va a aparecer en el formulario y cmo lo  
hace. 
Para introducir sangras entre los elementos de men, se pulsar los botones de flecha. El botn  
Next inserta un nuevo elemento de men o, se desplaza al siguiente. 
En tiempo de ejecucin se podrn aadir rdenes a un men. Para ello se utilizar la sentencia  
Load, tal como se utilizaba en matrices de controles. Para eliminar una orden de un men, se  
utilizar Unload. Para poder utilizar estas dos sentencias, las rdenes que componen el men  
tienen que pertenecer a una matriz de controles, por lo que durante el diseo se debe haber  
creado al menos, un elemento (haber puesto a un comando la propiedad Index a 0). 
MENS DESPLEGABLES FLOTANTES O EMERGENTES 
Para poder crear un men emergente o contextual, se utilizar el mtodo: 
[formulario.] PopupMenu NombreMen 
donde NombreMen es el valor de la propiedad Name del men que se quiere mostrar. Ya se ver  
cmo hacer que aparezcan al pulsar el botn derecho del ratn. 
EJEMPLO: 
Modificar la aplicacin que permita simular un editor de texto. 
CONTROL  
PROPIEDAD  
VALOR  
Form  
Caption  
Editor de Textos  
 
Name  
frmEditor  
Text Box  
Text  
(ninguno)  
 
MultiLine  
True  
 
ScrollBars  
3- Both  
 
Name  
txtEditor 
El men a disear tiene el siguiente formato: 
CAPTION  
NAME  
OTRAS  
&Archivo  
mnuArchivo  
 
&Salir  
mnuArchivoSalir  
ShortCut: CTRL+S  
&Edicin  
mnuEdicin  
 
&Cortar  
mnuEdicinCortar  
ShortCut: CTRL+X 
Enabled: False  
C&opiar  
mnuEdicinCopiar  
ShortCut: CTRL+C 
Enabled: False  
&Pegar  
mnuEdicinPegar  
ShortCut: CTRL+V 
Enabled: False  
&Configuracin  
mnuConfiguaracin  
 
&Fuente  
mnuConfFuente  
 
Arial  
Fuente  
Checked: True 
Index: 0  
Times New Roman  
Fuente  
Index: 1  
&Tamao  
mnuConfTamao  
 
10  
Tamao  
Checked: True 
Index: 0  
20  
Tamao  
Index: 1  
&Color  
mnuConfColor  
 
Negro  
Color  
Checked: True 
Index: 0  
Azul  
Color  
Index: 1  
Rojo  
Color  
Index: 2  
A&yuda  
mnuAyuda  
 
Acerca de ...  
mnuAyudaAcerca  

Dim SealColor As Integer 
Dim SealFuente As Integer 
Dim SealTamao As Integer 
Private Sub Form_Load() 
Clipboard.Clear 'Limpiar el portapapeles 
txtEditor.Font.Name = "Arial" 
SealFuente = 0 
txtEditor.Font.Size = 10 
SealTamao= 10 
txtEditor.ForeColor = RGB(0, 0, 0) 
SealColor = 0 
End Sub 
Private Sub mnuArchivoSalir_Click() 
End 
End Sub 
Private Sub mnuEdicin_Click() 
mnuEdicinCopiar.Enabled = (txtEditor.SelLength > 0) 
mnuEdicinCortar.Enabled = (txtEditor.SelLength > 0) 
'Activar la opcin Pegar si el portapapeles tiene algo 
mnuEdicinPegar.Enabled = (Len(Clipboard.GetText()) > 0) 
End Sub 
Private Sub mnuEdicinCopiar_Click() 
Clipboard.SetText txtEditor.SelText 'Llevar al portapapeles 
End Sub 
Private Sub mnuEdicinCortar_Click() 
Clipboard.SetText txtEditor.SelText 'Llevar al portapapeles 
txtEditor.SelText = "" 'Eliminar el texto 
End Sub 
Private Sub mnuEdicinPegar_Click() 
txtEditor.SelText = Clipboard.GetText() 
End Sub 
Private Sub Fuente_Click() 
txtEditor.Font.Name = Fuente(Index).Caption 
Fuente(SealFuente).Checked = False 'Desactivar la fuente anterior 
Fuente(Index).Checked = True 'Activar la nueva fuente 
SealFuente = Index 
End Sub 
Private Sub Tamao_Click() 
txtEditor.Font.Size = Val(Tamao(Index).Caption 
Tamao(SealTamao).Checked = False 'Desactivar el tamao anterior 
Tamao(Index).Checked = True 'Activar el nuevo tamao 
SealTamao = Index 
End Sub 
Private Sub Color_Click() 
Select Case Index 
Case 0 
txtEditor.ForeColor = RGB(0, 0, 0) 
Case 1 
txtEditor.ForeColor = RGB(0, 0, 255) 
Case 2 
txtEditor.ForeColor = RGB(255, 0, 0) 
End Select 
Color(SealColor).Checked = False 
Color(Index).Checked = True 
SealColor = Index 
End Sub 
EJERCICIOS: 
1.Modificar el ejemplo anterior para que no utilice el portapapeles. 
1.Modificar la aplicacin de la alarma de forma que tenga un men "Alarma" con una nica  
opcin. Inicialmente la opcin indicar "Activar alarma" y, una vez la alarma est activada,  
la opcin del men indicar "Desactivar alarma". 
5.4.- CONTROL DE ACTIVIDAD DEL RATN, EVENTOS ASOCIADOS. 
EVENTOS ASOCIADOS 
Los formularios y varios tipos de controles reconocen tres sucesos porducidos por el ratn: 
MouseDown. Reconocido cuando el usuario pulsa cualquier botn. 
MouseUp. Reconocido cuando el usuario suelta cualquier botn. 
MouseMove. Reconocido cada vez que el usuario mueve el cursor del ratn a una  
nueva posicin. 
Los procedimientos asociados a estos sucesos tienen los mismos argumentos: Button, botn pulsado;  
Shift, tecla/s pulsada/s; X e Y, coordenadas de la posicin actual del ratn. 
Objeto_SucesoRatn(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Los valores vlidos para el argumento Button dependen del suceso. Para los sucesos MouseDown y  
MouseUp, este argumento puede tomar los siguientes valores: 
CONSTANTE VALOR 
vbLeftButton 1 
vbRightButton 2 
vbMiddleButton 4 
Para el suceso MouseMove, este argumento puede tomar los siguientes valores: 
CONSTANTE VALOR 
vbLeftButton 1 
vbRightButton 2 
vbLeftButton + vbRightButton 3 
vbMiddleButton 4 
vbLeftButton + vbMiddleButton 5 
vbMiddleButton + vbRightButton 6 
vbLeftButton + vbRightButton + vbRightButton 7 
Los valores vlidos para el argumento Shift pueden ser: 
CONSTANTE VALOR 
vbShiftMask 1 
vbCtrlMask 2 
vbAltMask 4 
EJEMPLOS: 
1.Crear una aplicacin que indique en tres cajas de texto txtTest1, txtTest2 y txtTest3  
respectivamente, que permitan mostrar los valores de los argumentos X, Y y Button para el  
evento MouseDown. 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, _ 
Y As Single) 
txtTest1.Text = Str(X) 
txtTest2.Text = Str(Y) 
Select Case Button 
Case 1 
txtTest3.Text = "Botn Izquierdo" 
Case 2 
txtTest3.Text = "Botn Derecho" 
Case 4 
txtTest3.Text = "Botn Central" 
End Select 
End Sub 
2.Crear una aplicacin que permita dibujar lneas en el formulario mientras se presiona el  
botn izquierdo del ratn. 
Dim PuntoX As Integer 
Dim PuntoYAs Integer 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, _ 
Y As Single) 
If Button = 1 Then 'Botn izquierdo 
PuntoX = X 
PuntoY = Y 
CurrentX = X 
CurrentY = Y 
End If 
End Sub 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, _ 
Y As Single) 
If Button = 1 Then Line -(X, Y) 'Dibujar una lnea 
End Sub 
ARRASTRAR Y SOLTAR 
Para que un control pueda ser arrastrado, su propiedad DragMode debe estar establecida a 1. En  
este caso, este objeto ya no recibe ms los eventos Click y MouseDown. En su lugar, el objeto se  
mueve cuando el usuario hace clic sobre l y comienza a arrastrarlo. Al mover un objeto, Visual  
Basic muestra un cuadro gris en lugar del objeto. Si se quiere sustituir por una imagen, se  
modificar la propiedad DragIcon del objeto a mover. 
Cuando un objeto est siendo arrastrado, se denomina objeto fuente y, el objeto sobre el que se  
suelta, objeto destino. Este ltimo objeto recibe el evento DragDrop. A todos los objetos por los  
que el objeto fuente haya pasado por encima durante el arrastre, se emitir el evento DragOver. 
Un objeto puede ser movido a peticin del usuario. Para ello, la propiedad DragMode del objeto  
estar establecida a 0. Para permitir o no arrastrar el objeto, se utilizar el mtodo: 
[control.] Drag accin 
donde accin puede tener el valor 0, 1  2. Un valor 0 cancela la operacin de arrastrar, un valor 1  
inicia la operacin de arrastrar, un valor 2 finaliza la operacin de arrastrar y provoca el suceso  
DragDrop. 
 



CREACION DE APLICACIONES MDI  

6.1.- QU ES MDI? 
Visual Basic permite crear aplicaciones empleando una interfaz de mltiples documentos (MDI - Multiple  
Document Interface), o dicho en trminos de Visual Basic, mltiples formularios. En una aplicacin MDI, se  
pueden abrir varias ventanas hijas. Cada una de estas ventanas hijas (formularios) son iguales entre s. En una  
aplicacin MDI pueden haber varias ventanas hijas, pero solo una ventana padre por aplicacin. El formulario  
padre acta como contenedor de los formulario hijo. Muchos procesadores de textos bajo Windows son buenos  
ejemplos de aplicaciones MDI. 
Para crear una aplicacin MDI se empezar a crear un nuevo proyecto y, se accede a Insert/MDI Form. El  
nuevo formulario ser el formulario padre. Para que un formulario sea un formulario hijo, se deber cambiar su  
propiedad MDIChild y establecerla a True. 
Cuando se visualizan varios formulario hijos, todos comparten el mismo cdigo, pero cada uno de ellos guarda  
sus propios datos y reconoce sus propios sucesos. Segn sto, no se podr utilizar el identificador del  
formulario para referirse a los controles o a sus propiedades, aunque s se podr utilizar la palabra clave Me. 
6.2.- COMPORTAMIENTO DE MENS Y BARRAS DE HERRAMIENTAS 
Los nicos controles que se pueden incluir en un formulario padre son aquellos que tengan la propiedad Align  
y, dentro de stos controles se podrn colocar otros controles. De esta forma se crean las barras de  
herramientas. 
Los mens de cada formulario hijo, son visualizados en el formulario padre. Cada vez que se activa un formulario  
hijo, su men sustituye al men que se est visualizando en el formulario padre. Ahora bien, si no hay un  
formulario hijo cargado, o si dicho formulario no tiene men, entonces se visualiza el del padre, si lo tiene. 
Es aconsejable que el formulario padre tenga un men que permita abrir o crear un nuevo formulario hijo. 
6.3.- EVENTO QUERYUNLOAD 
Cuando el usuario ejecuta la orden Cerrar del men de control del formulario padre, Visual Basic intenta  
descargar dicho formulario. Esto hace que se d el suceso QueryUnload primero para el formulario padre y luego  
para cada uno de los hijos. 
Cuando el usuario ejecuta la orden Cerrar del men de control del formulario hijo tambin se da el suceso  
QueryUnload pero solo para este formulario. 
La sentencia Unload permite descargar un formulario o un control de la memoria, pero antes de que el formulario  
sea descargado, se da el suceso QueryUnload, seguido del suceso Unload. El suceso QueryUnload para un  
formulario MDI va seguido del suceso QueryUnload para cada uno de los formularios hijo. 
EJEMPLO: 
Vamos a construir una aplicacin que permita crear varios formularios hijo. Para ello, se  
necesitar crear un nuevo proyecto con un formulario MDI y, un formulario hijo, al que se le haya  
establecido su propiedad Caption a Formulario Hijo y su propiedad Name a frmHijo. Al  
formulario padre se le aadir un men Archivo con los comandos Nuevo y Salir. Se aadir el  
men Ventana con la propiedad Window List activada y, con las opciones Cascada, Mosaico y  
Organizar iconos. Tambin se le aadir un control 3D panel, seleccionando Tools/Custom  
Controls. A dicho control se le modificar las propiedades Align con 2 - Align Bottom,  
BevelInner con 1 - Inset, BevelWidth con 2 y, BordeWidth con 2. Dentro de este control se  
aadirn dos etiquetas: lblTexto y lblContador. 
En un nuevo mdulo: 
Public Contador As Integer 
En el formulario padre: 
Private Sub mnuArchivoNuevo_Click() 
Dim X As New frmHijo 
Contador = Contador + 1 
X.Show 
End Sub 
Private Sub mnuArchivoSalir_Click() 
End 
End Sub 
Private Sub mnuVentanaCascada_Click() 
MDIForm1.Arrange 0 
End Sub 
Private Sub mnuVentanaMosaico_Click() 
MDIFomr1.Arrange 1 
End Sub 
Private Sub mnuVentanaOrganizar_Click() 
MDIFomr1.Arrange 3 
End Sub 
Private Sub MDIForm_Initialize() 
Contador = 0 
lblContador = Str(Contador) 
End Sub 
En el formulario hijo: 
Private Sub Form_Initialize() 
Me.Caption = Me.Caption & " #" & Str(Contador) 
MDIForm1.lblContador = Str(Contador) 
End Sub 
Private Sub Form_Unload(Cancel As Integer) 
'Si el valor de Cancel es True, el formulario asociado no se descarga. 
'En otro caso, se van cerrando primero cada hijo y, por ltimo el padre. 
Contador = Contador - 1 
MDIForm1.lblContador = Str(Contador) 
End Sub 
EJERCICIOS: 
1.Modificar la aplicacin "Editor de Texto" para permitir trabajar con ms de un documento. El formulario  
padre deber tener un men Archivo con las opciones de Nuevo, Cerrar, Abrir, Guardar, Guardar  
Como, Salir. (Ya se ver cmo Abrir y Guardar archivos). 
1.Modificar el ejercicio anterior para que la barra de estado se muestre en la parte superior y aparezcan los  
iconos de Cortar, Copiar, Pegar del directorio ...\toolbar3\open-up.bmp, ...\toolbar3\save-up.bmp,  
...\toolbar3\cut-up.bmp, ...\toolbar3\copy-up.bmp, ...\toolbar3\pste-up.bmp, ...\toolbar3\open-mds.bmp,  
...\toolbar3\save-mds.bmp, ...\toolbar3\cut-mds.bmp, ...\toolbar3\copy-mds.bmp,  
...\toolbar3\pste-mds.bmp, 




7. 1.- TIPOS DE ACCESO A FICHEROS EN VISUAL BASIC. 
Los archivos proporcionan una manera de almacenar informacin a largo plazo. Visual Basic ofrece  
tres formas de acceder a los datos: 
Archivo secuencial. Archivo de texto plano. Se lee una lnea cada vez. Cada lnea podr  
ser tan larga como quiera. Cuando se empieza a leer un archivo secuencial, se empieza  
por la primera lnea y se contina con la siguiente hasta llegar al final. Este tipo de datos  
no suele ser el adecuado para almacenar grandes series de nmeros porque se  
almacenan en forma de cadena de caracteres. Ejemplos: archivos TXT 
Archivo aleatorio. Su contenido puede ser ledo y escrito en el orden que se necesite.  
Todas las lneas deben ser del mismo tamao. Asumiremos que est formado por un  
conjunto de registros de la misma longitud. Cada registro individual se identifica con un  
nico nmero y puede ser ledo, escrito o actualizado. Ejemplos: archivos que simulen  
bases de datos. 
Archivo binario. Es una coleccin de bytes o secuencia numerada de caracteres,  
independientemente de la estructura del mismo. Ofrecen la posibilidad de almacenar los  
datos como se quiera, aunque para poder acceder a ellos, es necesario conocer cmo  
fueron escritos. Ejemplos: archivos EXE 
7.2.- ARCHIVOS DE ACCESO SECUENCIAL. 
ABRIR ARCHIVOS SECUENCIALES 
La instruccin Open (abrir) le dice a Visual Basic a qu archivo debe acceder. La sintaxis es: 
Open NombreDeArchivo For {Input | Output| Append} As #NmeroDeArchivo 
donde Input indica si se quiere leer del archivo, Output si se quiere escribir de l, Append si se  
quiere aadir informacin al final del fichero y, NumeroDeArchivo es un nmero entre 1 y 255. Si se  
trata de abrir para lectura un archivo que no existe, se producir un error. Si se abre para escritura  
Visual Basic crear un nuevo archivo, reemplazando cualquier archivo con ese nombre. Si no se sabe  
qu nmero de archivo est libre, se utilizar el siguiente cdigo: 
NumArchivo = FreeFile 
Open NomArch For {Input | Output} As #NumArchivo 
CERRAR ARCHIVOS SECUENCIALES 
Despus de trabajar con un archivo, se debe cerrar con la instruccin Close, cuya sintaxis es: 
Close #NmeroDeArchivo 
Si la intruccin Close se utiliza sin poner NumeroDeArchivo, se cerrarn todos los ficheros abiertos. 
LEER DE ARCHIVOS SECUENCIALES 
Para leer de un archivo secuencial se utilizar la instruccin Line Input que permite leer una lnea  
cada vez y que tiene la sintaxis: 
Line Input #NmeroDeArchivo, VariableDeCadena 
o bien se utilizarn las rdenes: 
Input #NmeroDeArchivo, VariableDeCadena 
VariableDeCadena = Input(NmCaracteres, #NmeroDeArchivo) 
donde la ltima instruccin, permite leer un nmero determinado de caracteres y, est limitado a  
ficheros de 32.767 bytes mximo. 
La funcin EOF (Fin De Fichero) indica cundo se acaba un archivo. A esta funcin hay que  
facilitarle el nmero de archivo correspondiente y, devolver True si se ha ledo toda la informacin  
del archivo. La funcin LOF (Longitud De Archivo) indica la longitud de un archivo. 
Por tanto, para leer de un archivo de acceso secuencial se seguirn los pasos: 
1.Abrir el fichero para lectura con: Open NombreDeArchivo For Input As  
#NmeroDeArchivo 
1.Leer los datos del fichero utilizando las sentencias: Line Input #NmeroDeArchivo,  
VariableDeCadena; o bien Input #NmeroDeArchivo, VariableDeCadena; o bien  
VariableDeCadena = Input$ NmCaracteres, #NmeroDeArchivo 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
ESCRIBIR EN ARCHIVOS SECUENCIALES 
Para escribir en un archivo secuencial, utilizaremos las instrucciones Print o Write con la sintaxis: 
Print #NmeroDeArchivo [, expresin [{ , | ; } expresin] ...] [{ , | ; }] 
Write #NmeroDeArchivo [, expresin [{ , | ; } expresin] ...] [{ , | ; }] 
Write y Print son diferentes. Write inserta comas entre los distintos items a escribir en el fichero. Si  
se desean conservar los valores de un archivo abierto para escritura, se tendr que abrir en modo  
Append y no Output. 
Por tanto, para escribir en un archivo de acceso secuencial se seguirn los pasos: 
1.Abrir el fichero para escritura con: Open NombreDeArchivo For Output As  
#NmeroDeArchivo 
1.Escribir los datos en el fichero utilizando la sentencia: Print #NmeroDeArchivo, expresiones 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
EJERCICIOS: 
1.Modificar el ejercicio del Editor para que se pueda grabar o recuperar el texto de un archivo. debe  
aparecer un nuevo formulario en el que el usuario introducir el nombre del fichero a grabar o recuperar,  
incluida la ruta. Se deben controlar los posiblers errores que aparezcan al intentar acceder a un archivo  
que no exista. 
1.Modificar el ejercicio anterior para que el usuario pueda escoger la unidad, directorio y nombre del  
fichero a recuperar. 
7.3.- ARCHIVOS DE ACCESO ALEATORIO. 
ABRIR Y CERRAR ARCHIVOS ALEATORIOS 
Modificaremos la instruccin Open (abrir) con la sintaxis: 
Open NombreDeArchivo For Random As #NmeroDeArchivo Len = LongitudDelRegistro 
En un archivo de acceso aleatorio, se puede leer o escribir sin tener que cerrar cada vez.. Se debe  
facilitar el nmero de bytes que se deben leer o escribir. Para cerrar un archivo aleatorio, se utilizar  
Close como si fuera un archivo secuencial. 
LEER Y ESCRIBIR DE ARCHIVOS ALEATORIOS 
Para leer y escribir de un archivo aleatorio, utilizaremos las instrucciones Get y Put respectivamentes,  
con las sintaxis: 
Get #NmeroDeArchivo, [NmeroDeRegistro] , Variable 
Put #NmeroDeArchivo, [NmeroDeRegistro] , Variable 
Get lee del archivo y almacena los datos en la variable, mientras que Put escribe el contenido de la  
variable en el archivo. 
Por tanto, para leer / escribir en un archivo de acceso aleatorio, se seguirn los pasos: 
1.Abrir el fichero para acceso aleatorio con: Open NombreDeArchivo For Random As  
#NmeroDeArchivo Len = LongitudRegistro 
1.Escribir los datos en el fichero utilizando la sentencia: Put #NmeroDeArchivo,  
[NmeroDeRegistro] , Variable o bien leer los datos del archivo con la sentencia: Get  
#NmeroDeArchivo, [NmeroDeRegistro] , Variable 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
UTILIZAR LA INSTRUCCIN SEEK # 
La intruccin Seek puede ser extremadamente til porque indica la siguiente posicin a leer o escribir  
de un fichero abierto. La sintaxis es la siguiente: 
Seek #NmeroDeArchivo, posicion 
donde posicion indica el siguiente registro a leer o escribir. Por ejemplo la sentencia: 
Get #1, QueRegistro, Datos(QueRegistro) 
es equivalente a las sentencias: 
Seek #1, QueRegistro 
Get #1,, Datos(QueRegistro) 
7.4.- ARCHIVOS DE ACCESO BINARIO. 
ABRIR Y CERRAR ARCHIVOS BINARIOS 
En este tipo de ficheros los datos no siguen ningn orden, por lo que acceder a ellos es complejo. Los  
pasos que se debern seguir para escribir en un archivo binario son: 
1.Abrir el fichero para acceso binario con: Open NombreDeArchivo For Binary As  
#NmeroDeArchivo 
1.Escribir los datos en el fichero utilizando la sentencia: Put #NmeroDeArchivo, [posicin] ,  
Variable o bien leer los datos del archivo con la sentencia: Get #NmeroDeArchivo,  
[NmeroDeRegistro] , Variable 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
7.5.- ACCESO A UNA BASE DE DATOS. 
EL CONTROL DATOS 
Utilizando un control Data, podremos comunicarnos con una base de datos para editar, visualizar y  
actualizar uno o ms registros. Visual Basic permite comunicarse con bases de datos creadas con  
Microsoft Access, Microsoft Fox Pro, Borland Paradox, Borland dBase. 
Los mtodos que se pueden utilizar con un control de datos son: MoveFirst, para posicionarse en el  
primer registro. MovePrevious, para posicionarse en el registro anterior. MoveLast, para  
posicionarse en el ltimo registro. MoveNext, para posicionarse en el registro siguiente. Refresh, la  
base de datos se abre para ser utilizada o, se cierra y se vuelve a abrir si ya estaba abierta. AddNew,  
aadir un nuevo registro. Update, se escriben todos los campos editados en la base de datos. Delete,  
elimina el registro actual. 
Las propiedades importantes de este control son: Connect (conexin). Esta propiedad especifica el  
formato de la base de datos. Los valores que se pueden utilizar son: cadena vaca para formato  
Access, "foxpro 2.5;", "paradox;", y "dbase iv;". DatabaseName (nombre de la base de datos) Sirve  
para identificar al archivo de base de datos. RecordSource (fuente del registro). Indica de dnde se  
obtienen los datos. Exclusive (exclusiva). Determina el tipo de acceso, monousuario (True) o  
multiusuario (False). ReadOnly (solo lectura). Determina el modo de acceso. 
Cada vez que se cambie el valor de una propiedad, debe ejecutarse el mtodo Refresh. Otras  
propiedades que se podrn consultar son: BOF (comienzo del archivo) esta propiedad es True si el  
registro actual es el primero. EOF (final del archivo) que estar a True cuando el registro actual sea  
el ltimo. 
Un objeto Dynaset es un conjunto dinmico de registros. Cada conjunto de registros tiene asignado  
una coleccin Fields por defecto (conjunto de objetos Field, cada uno de los cuales define un campo  
de la base de datos). La propiedad por defecto para un objeto Field, es Value, que contiene el valor  
del campo que representa para el registro actual.para acceder a un miembro individual de una  
coleccin, puede hacerlo a travs de un ndice o utilizando el nombre del campo. P.e. la sentencia  
Print Data1.RecordSet(0) es equivalente, suponiendo que el campo 0 es Ttulo, a las sentencias: 
Print Data1.RecordSet.Fields(0) 
Print Data1.RecordSet.Fields("> 
Transferencia interrumpida! 
Data1.RecordSet.Fields("Ttulo").Value 
Tambin tiene asociada una propiedad Count que dice cuntos objetos estn contenidos en el objeto  
Dynaset. 
Para poder realizar modificaciones en una base de datos, sta tiene que ser actualizable, es decir, la  
propiedad ReadOnly tiene que estar establecida a False y la propiedad Updatable a True. Para  
saber si una base de datos es actualizable, escribiremos el cdigo: 
Actualizable = True 
'Verificar si la base de datos es actualizable 
If (Data1.ReadOnly = True Or Data1.Recordset.Updatable = False) Then 
Actualizable = False 'Base de datos no actualizable 
End If 
Para verificar si un determinado campo es actualizable, el cdigo necesario es: 
'Verificar si el campo(0) es actualizable 
If (Data1.Recordset.Fields(0).Attributes And DB_UPDATABLEFIELD) = 0 Then 
Actualizable = False 'Campo de datos no actualizable 
End If 
La propiedad Attributes indica los atributos de un campo. Para saber si un campo tiene un  
determinado atributo, se har un And con el valor del atributo a verificar. Las constantes DB_...  
estn definidas en el fichero ...\vb\dataconstant.txt 
Algunos eventos que se producen en un control de datos son: 
Reposition. Se produce despus de que un determinado registro pase a ser el registro  
actual. Su sintaxis es Sub Data1_Reposition() 
Validate. Se produce justo antes de que un determinado registro pase a ser el registro  
actual. Ocurre antes de una operacin Update, Delete o Close. Su sintaxis es Sub  
Data1_Validate(Action As Integer, Save As Integer). Para saber la causa que origin  
el suceso Validate, habr que examinar el parmetro Action. Este parmetro se  
corresponde con el tipo de operacin que caus este suceso. Los valores que puede  
tomar se pueden localizar en el fichero ...\vb\constant.txt y empiezan por  
DATA_ACTION... El parmetro Save toma el valor True si cualquier control ligado al  
control de datos cambia. Para saber qu control ha cambiado, habr que evaluar la  
propiedad DataChanged de cada uno de ellos. Durante este suceso, no se podrn  
utilizar los mtodos Move.... En su lugar se utilizar el parmetro Action. 
UTILIZADES ADICIONALES 
Las utilidades adicionales que se pueden utilizar en aplicaiones complejas son: 
Control de transacciones. Una transaccin es una serie de cambios que se quieren hacer sobre  
una base de datos con la posibilidad de deshacerlos. Las tres sentencias de Visual Basic para  
realizar transacciones son: BeginTrans, CommitTrans y RollBack. La forma de utilizarlas lo  
veremos en un ejemplo. 
BeginTrans 
Criterio = "Ttulo Like '*1 Edicin*'" 
Data1.Recorset.FindFirst Criterio 
Do While Not Data1.Recordset.NoMatch 
If Not Data1.Recordset.NoMatch Then 
Data1.Recordset.Delete 'Borrar registro 
RegsBorrados = RegsBorrados + 1 
End If 
Data1.Recorset.FindNext Criterio 
Loop 
If RegsBorrados = 0 Then 
RollBack 
Exit Sub 
End If 
Msg = "Est seguro que desea borrar " & RegsBorrados & " registros?" 
If MsgBox(Msg, 17, "Borrar registros?") <>1 Then 
RollBack 'Deshacer los cambios 
Else 
CommitTrans 'Borrar Registros 
End If 
Mtodos UpdateRecord, que guarda valores contenidos en los controles ligados  
correspondientes al registro actual. Su ejecucin no provoca el suceso Update. Y  
UpdateControls, que actualiza los controles ligados con los valores del registro actual. Ambos  
mtodos ejecutan sus acciones sin cambiar de registro actual. 
Suceso Error, que se produce si ocurre un error en tiempo de ejecucin. til para controlar los  
errores. Su sintaxis es: Sub Data1_Error(DataErr As Integer, Response As Integer), donde  
DataErr es el n de error y Response es la respuesta que se desea tomar: 0 continuar, 1  
visualizar mensaje (valor por defecto) 
7.6.- UTILIZACIN DE LOS FICHEROS .INI 
Muchas veces cuando se escribe una aplicacin, se deseara recordar algunas variables de la ltima  
vez que se ejecut la aplicacin. Este tipo de informacin se almacena en los ficheros ini.  
Afortunadamente, Windows proporciona un editor de texto ASCII para leer y escribir ficheros de  
este tipo. Existen dos clases de cadenas de perfil: pblicas y privadas. Las pblicas se almacenan en  
el archivo Win.ini. las cadenas privadas se incluyen en ficheros con un nombre dado por el  
programador, con extensin .ini. Nosotros deberamos introducir cadenas de perfil de tipo privado. Por  
ejemplo: si escribimos una aplicacin MiEjemplo.Exe, podramos utilizar un archivo privado  
C:\WINDOWS\MIEJEMPLO.INI. 
Para leer y escribir en ficheros ini, se necesita conocer tres cosas: 
1.El nombre del fichero. 
1.El nombre de la seccin donde aparece. 
1.La palabra de acceso para el valor. 
Por ejemplo, el fichero MiEjemplo.ini se parecer a: 
[Nombre del usuario] 'Esta es la seccin 
UltimoNombre = Lopez 'UltimoNombre es la palabra de acceso 
Existen tres funciones que se pueden utilizar en ficheros .ini privados: 
GetPrivateProfileString 
GetPrivateProfileInt 
WritePrivateProfileString 
Estas funciones son parte de la API de Windows. Son fucniones externas a Visual Basic, por lo que  
deben ser declaradas en la seccin general de declaraciones de un formulario del proyecto Visual, o  
en la seccin de declaraciones de un mdulo y declaradas como pblicos. 





7. 1.- TIPOS DE ACCESO A FICHEROS EN VISUAL BASIC. 
Los archivos proporcionan una manera de almacenar informacin a largo plazo. Visual Basic ofrece  
tres formas de acceder a los datos: 
Archivo secuencial. Archivo de texto plano. Se lee una lnea cada vez. Cada lnea podr  
ser tan larga como quiera. Cuando se empieza a leer un archivo secuencial, se empieza  
por la primera lnea y se contina con la siguiente hasta llegar al final. Este tipo de datos  
no suele ser el adecuado para almacenar grandes series de nmeros porque se  
almacenan en forma de cadena de caracteres. Ejemplos: archivos TXT 
Archivo aleatorio. Su contenido puede ser ledo y escrito en el orden que se necesite.  
Todas las lneas deben ser del mismo tamao. Asumiremos que est formado por un  
conjunto de registros de la misma longitud. Cada registro individual se identifica con un  
nico nmero y puede ser ledo, escrito o actualizado. Ejemplos: archivos que simulen  
bases de datos. 
Archivo binario. Es una coleccin de bytes o secuencia numerada de caracteres,  
independientemente de la estructura del mismo. Ofrecen la posibilidad de almacenar los  
datos como se quiera, aunque para poder acceder a ellos, es necesario conocer cmo  
fueron escritos. Ejemplos: archivos EXE 
7.2.- ARCHIVOS DE ACCESO SECUENCIAL. 
ABRIR ARCHIVOS SECUENCIALES 
La instruccin Open (abrir) le dice a Visual Basic a qu archivo debe acceder. La sintaxis es: 
Open NombreDeArchivo For {Input | Output| Append} As #NmeroDeArchivo 
donde Input indica si se quiere leer del archivo, Output si se quiere escribir de l, Append si se  
quiere aadir informacin al final del fichero y, NumeroDeArchivo es un nmero entre 1 y 255. Si se  
trata de abrir para lectura un archivo que no existe, se producir un error. Si se abre para escritura  
Visual Basic crear un nuevo archivo, reemplazando cualquier archivo con ese nombre. Si no se sabe  
qu nmero de archivo est libre, se utilizar el siguiente cdigo: 
NumArchivo = FreeFile 
Open NomArch For {Input | Output} As #NumArchivo 
CERRAR ARCHIVOS SECUENCIALES 
Despus de trabajar con un archivo, se debe cerrar con la instruccin Close, cuya sintaxis es: 
Close #NmeroDeArchivo 
Si la intruccin Close se utiliza sin poner NumeroDeArchivo, se cerrarn todos los ficheros abiertos. 
LEER DE ARCHIVOS SECUENCIALES 
Para leer de un archivo secuencial se utilizar la instruccin Line Input que permite leer una lnea  
cada vez y que tiene la sintaxis: 
Line Input #NmeroDeArchivo, VariableDeCadena 
o bien se utilizarn las rdenes: 
Input #NmeroDeArchivo, VariableDeCadena 
VariableDeCadena = Input(NmCaracteres, #NmeroDeArchivo) 
donde la ltima instruccin, permite leer un nmero determinado de caracteres y, est limitado a  
ficheros de 32.767 bytes mximo. 
La funcin EOF (Fin De Fichero) indica cundo se acaba un archivo. A esta funcin hay que  
facilitarle el nmero de archivo correspondiente y, devolver True si se ha ledo toda la informacin  
del archivo. La funcin LOF (Longitud De Archivo) indica la longitud de un archivo. 
Por tanto, para leer de un archivo de acceso secuencial se seguirn los pasos: 
1.Abrir el fichero para lectura con: Open NombreDeArchivo For Input As  
#NmeroDeArchivo 
1.Leer los datos del fichero utilizando las sentencias: Line Input #NmeroDeArchivo,  
VariableDeCadena; o bien Input #NmeroDeArchivo, VariableDeCadena; o bien  
VariableDeCadena = Input$ NmCaracteres, #NmeroDeArchivo 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
ESCRIBIR EN ARCHIVOS SECUENCIALES 
Para escribir en un archivo secuencial, utilizaremos las instrucciones Print o Write con la sintaxis: 
Print #NmeroDeArchivo [, expresin [{ , | ; } expresin] ...] [{ , | ; }] 
Write #NmeroDeArchivo [, expresin [{ , | ; } expresin] ...] [{ , | ; }] 
Write y Print son diferentes. Write inserta comas entre los distintos items a escribir en el fichero. Si  
se desean conservar los valores de un archivo abierto para escritura, se tendr que abrir en modo  
Append y no Output. 
Por tanto, para escribir en un archivo de acceso secuencial se seguirn los pasos: 
1.Abrir el fichero para escritura con: Open NombreDeArchivo For Output As  
#NmeroDeArchivo 
1.Escribir los datos en el fichero utilizando la sentencia: Print #NmeroDeArchivo, expresiones 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
EJERCICIOS: 
1.Modificar el ejercicio del Editor para que se pueda grabar o recuperar el texto de un archivo. debe  
aparecer un nuevo formulario en el que el usuario introducir el nombre del fichero a grabar o recuperar,  
incluida la ruta. Se deben controlar los posiblers errores que aparezcan al intentar acceder a un archivo  
que no exista. 
1.Modificar el ejercicio anterior para que el usuario pueda escoger la unidad, directorio y nombre del  
fichero a recuperar. 
7.3.- ARCHIVOS DE ACCESO ALEATORIO. 
ABRIR Y CERRAR ARCHIVOS ALEATORIOS 
Modificaremos la instruccin Open (abrir) con la sintaxis: 
Open NombreDeArchivo For Random As #NmeroDeArchivo Len = LongitudDelRegistro 
En un archivo de acceso aleatorio, se puede leer o escribir sin tener que cerrar cada vez.. Se debe  
facilitar el nmero de bytes que se deben leer o escribir. Para cerrar un archivo aleatorio, se utilizar  
Close como si fuera un archivo secuencial. 
LEER Y ESCRIBIR DE ARCHIVOS ALEATORIOS 
Para leer y escribir de un archivo aleatorio, utilizaremos las instrucciones Get y Put respectivamentes,  
con las sintaxis: 
Get #NmeroDeArchivo, [NmeroDeRegistro] , Variable 
Put #NmeroDeArchivo, [NmeroDeRegistro] , Variable 
Get lee del archivo y almacena los datos en la variable, mientras que Put escribe el contenido de la  
variable en el archivo. 
Por tanto, para leer / escribir en un archivo de acceso aleatorio, se seguirn los pasos: 
1.Abrir el fichero para acceso aleatorio con: Open NombreDeArchivo For Random As  
#NmeroDeArchivo Len = LongitudRegistro 
1.Escribir los datos en el fichero utilizando la sentencia: Put #NmeroDeArchivo,  
[NmeroDeRegistro] , Variable o bien leer los datos del archivo con la sentencia: Get  
#NmeroDeArchivo, [NmeroDeRegistro] , Variable 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
UTILIZAR LA INSTRUCCIN SEEK # 
La intruccin Seek puede ser extremadamente til porque indica la siguiente posicin a leer o escribir  
de un fichero abierto. La sintaxis es la siguiente: 
Seek #NmeroDeArchivo, posicion 
donde posicion indica el siguiente registro a leer o escribir. Por ejemplo la sentencia: 
Get #1, QueRegistro, Datos(QueRegistro) 
es equivalente a las sentencias: 
Seek #1, QueRegistro 
Get #1,, Datos(QueRegistro) 
7.4.- ARCHIVOS DE ACCESO BINARIO. 
ABRIR Y CERRAR ARCHIVOS BINARIOS 
En este tipo de ficheros los datos no siguen ningn orden, por lo que acceder a ellos es complejo. Los  
pasos que se debern seguir para escribir en un archivo binario son: 
1.Abrir el fichero para acceso binario con: Open NombreDeArchivo For Binary As  
#NmeroDeArchivo 
1.Escribir los datos en el fichero utilizando la sentencia: Put #NmeroDeArchivo, [posicin] ,  
Variable o bien leer los datos del archivo con la sentencia: Get #NmeroDeArchivo,  
[NmeroDeRegistro] , Variable 
1.Cerrar el archivo con la sentencia: Close #NmeroDeArchivo 
7.5.- ACCESO A UNA BASE DE DATOS. 
EL CONTROL DATOS 
Utilizando un control Data, podremos comunicarnos con una base de datos para editar, visualizar y  
actualizar uno o ms registros. Visual Basic permite comunicarse con bases de datos creadas con  
Microsoft Access, Microsoft Fox Pro, Borland Paradox, Borland dBase. 
Los mtodos que se pueden utilizar con un control de datos son: MoveFirst, para posicionarse en el  
primer registro. MovePrevious, para posicionarse en el registro anterior. MoveLast, para  
posicionarse en el ltimo registro. MoveNext, para posicionarse en el registro siguiente. Refresh, la  
base de datos se abre para ser utilizada o, se cierra y se vuelve a abrir si ya estaba abierta. AddNew,  
aadir un nuevo registro. Update, se escriben todos los campos editados en la base de datos. Delete,  
elimina el registro actual. 
Las propiedades importantes de este control son: Connect (conexin). Esta propiedad especifica el  
formato de la base de datos. Los valores que se pueden utilizar son: cadena vaca para formato  
Access, "foxpro 2.5;", "paradox;", y "dbase iv;". DatabaseName (nombre de la base de datos) Sirve  
para identificar al archivo de base de datos. RecordSource (fuente del registro). Indica de dnde se  
obtienen los datos. Exclusive (exclusiva). Determina el tipo de acceso, monousuario (True) o  
multiusuario (False). ReadOnly (solo lectura). Determina el modo de acceso. 
Cada vez que se cambie el valor de una propiedad, debe ejecutarse el mtodo Refresh. Otras  
propiedades que se podrn consultar son: BOF (comienzo del archivo) esta propiedad es True si el  
registro actual es el primero. EOF (final del archivo) que estar a True cuando el registro actual sea  
el ltimo. 
Un objeto Dynaset es un conjunto dinmico de registros. Cada conjunto de registros tiene asignado  
una coleccin Fields por defecto (conjunto de objetos Field, cada uno de los cuales define un campo  
de la base de datos). La propiedad por defecto para un objeto Field, es Value, que contiene el valor  
del campo que representa para el registro actual.para acceder a un miembro individual de una  
coleccin, puede hacerlo a travs de un ndice o utilizando el nombre del campo. P.e. la sentencia  
Print Data1.RecordSet(0) es equivalente, suponiendo que el campo 0 es Ttulo, a las sentencias: 
Print Data1.RecordSet.Fields(0) 
Print Data1.RecordSet.Fields("> 
Transferencia interrumpida! 
Data1.RecordSet.Fields("Ttulo").Value 
Tambin tiene asociada una propiedad Count que dice cuntos objetos estn contenidos en el objeto  
Dynaset. 
Para poder realizar modificaciones en una base de datos, sta tiene que ser actualizable, es decir, la  
propiedad ReadOnly tiene que estar establecida a False y la propiedad Updatable a True. Para  
saber si una base de datos es actualizable, escribiremos el cdigo: 
Actualizable = True 
'Verificar si la base de datos es actualizable 
If (Data1.ReadOnly = True Or Data1.Recordset.Updatable = False) Then 
Actualizable = False 'Base de datos no actualizable 
End If 
Para verificar si un determinado campo es actualizable, el cdigo necesario es: 
'Verificar si el campo(0) es actualizable 
If (Data1.Recordset.Fields(0).Attributes And DB_UPDATABLEFIELD) = 0 Then 
Actualizable = False 'Campo de datos no actualizable 
End If 
La propiedad Attributes indica los atributos de un campo. Para saber si un campo tiene un  
determinado atributo, se har un And con el valor del atributo a verificar. Las constantes DB_...  
estn definidas en el fichero ...\vb\dataconstant.txt 
Algunos eventos que se producen en un control de datos son: 
Reposition. Se produce despus de que un determinado registro pase a ser el registro  
actual. Su sintaxis es Sub Data1_Reposition() 
Validate. Se produce justo antes de que un determinado registro pase a ser el registro  
actual. Ocurre antes de una operacin Update, Delete o Close. Su sintaxis es Sub  
Data1_Validate(Action As Integer, Save As Integer). Para saber la causa que origin  
el suceso Validate, habr que examinar el parmetro Action. Este parmetro se  
corresponde con el tipo de operacin que caus este suceso. Los valores que puede  
tomar se pueden localizar en el fichero ...\vb\constant.txt y empiezan por  
DATA_ACTION... El parmetro Save toma el valor True si cualquier control ligado al  
control de datos cambia. Para saber qu control ha cambiado, habr que evaluar la  
propiedad DataChanged de cada uno de ellos. Durante este suceso, no se podrn  
utilizar los mtodos Move.... En su lugar se utilizar el parmetro Action. 
UTILIZADES ADICIONALES 
Las utilidades adicionales que se pueden utilizar en aplicaiones complejas son: 
Control de transacciones. Una transaccin es una serie de cambios que se quieren hacer sobre  
una base de datos con la posibilidad de deshacerlos. Las tres sentencias de Visual Basic para  
realizar transacciones son: BeginTrans, CommitTrans y RollBack. La forma de utilizarlas lo  
veremos en un ejemplo. 
BeginTrans 
Criterio = "Ttulo Like '*1 Edicin*'" 
Data1.Recorset.FindFirst Criterio 
Do While Not Data1.Recordset.NoMatch 
If Not Data1.Recordset.NoMatch Then 
Data1.Recordset.Delete 'Borrar registro 
RegsBorrados = RegsBorrados + 1 
End If 
Data1.Recorset.FindNext Criterio 
Loop 
If RegsBorrados = 0 Then 
RollBack 
Exit Sub 
End If 
Msg = "Est seguro que desea borrar " & RegsBorrados & " registros?" 
If MsgBox(Msg, 17, "Borrar registros?") <>1 Then 
RollBack 'Deshacer los cambios 
Else 
CommitTrans 'Borrar Registros 
End If 
Mtodos UpdateRecord, que guarda valores contenidos en los controles ligados  
correspondientes al registro actual. Su ejecucin no provoca el suceso Update. Y  
UpdateControls, que actualiza los controles ligados con los valores del registro actual. Ambos  
mtodos ejecutan sus acciones sin cambiar de registro actual. 
Suceso Error, que se produce si ocurre un error en tiempo de ejecucin. til para controlar los  
errores. Su sintaxis es: Sub Data1_Error(DataErr As Integer, Response As Integer), donde  
DataErr es el n de error y Response es la respuesta que se desea tomar: 0 continuar, 1  
visualizar mensaje (valor por defecto) 
7.6.- UTILIZACIN DE LOS FICHEROS .INI 
Muchas veces cuando se escribe una aplicacin, se deseara recordar algunas variables de la ltima  
vez que se ejecut la aplicacin. Este tipo de informacin se almacena en los ficheros ini.  
Afortunadamente, Windows proporciona un editor de texto ASCII para leer y escribir ficheros de  
este tipo. Existen dos clases de cadenas de perfil: pblicas y privadas. Las pblicas se almacenan en  
el archivo Win.ini. las cadenas privadas se incluyen en ficheros con un nombre dado por el  
programador, con extensin .ini. Nosotros deberamos introducir cadenas de perfil de tipo privado. Por  
ejemplo: si escribimos una aplicacin MiEjemplo.Exe, podramos utilizar un archivo privado  
C:\WINDOWS\MIEJEMPLO.INI. 
Para leer y escribir en ficheros ini, se necesita conocer tres cosas: 
1.El nombre del fichero. 
1.El nombre de la seccin donde aparece. 
1.La palabra de acceso para el valor. 
Por ejemplo, el fichero MiEjemplo.ini se parecer a: 
[Nombre del usuario] 'Esta es la seccin 
UltimoNombre = Lopez 'UltimoNombre es la palabra de acceso 
Existen tres funciones que se pueden utilizar en ficheros .ini privados: 
GetPrivateProfileString 
GetPrivateProfileInt 
WritePrivateProfileString 
Estas funciones son parte de la API de Windows. Son fucniones externas a Visual Basic, por lo que  
deben ser declaradas en la seccin general de declaraciones de un formulario del proyecto Visual, o  
en la seccin de declaraciones de un mdulo y declaradas como pblicos. 





INTRODUCCION A LOS GRAFICOS 
9.1.- FUNDAMENTOS DE LOS GRFICOS. ESCALAS DE LA PANTALLA. 
INTRODUCCIN. 
Lo que se puede hacer con las sentencias grficas, depende de los controladores que  
Windows emplee para controlar la pantalla y la impresora. Sin embargo, el uso de estos  
controladores es automtico. A menos que se establezca la propiedad AutoRedraw del  
formulario a True, ser necesario gestionar el volver a dibujar los grficos. Cuando  
esta propiedad est a True, se crea una copia del objeto en memoria para poder  
reproducir automticamente los dibujos pintados con mtodos grficos cuando la  
ventana cambia de tamao o es ocultada total o parcialmente por otra ventana. Esta  
operacin tiene un coste de memoria. Si la propiedad tiene un valor False, los grficos  
no sern reproducidos. Visual Basic activa el suceso Paint cada vez que se visualiza un  
formulario o una parte nueva del mismo. Si la propiedad ClipControls, que determina si  
los mtodos grficos contenidos en un procedimiento conducido por el suceso Paint  
perteneciente a un objeto, repintan el objeto entero o solo la parte que se vuelve a  
visualizar. Si est a False y AutoRedraw a False, Visual Basic vuelve a pintar slo el  
rea que se muestra nueva. Slo se llama al procedimiento Paint cuando la propiedad  
AutoRedraw est a False. 
EJEMPLOS: 
1. 
Sub Form_Load() 
Print "Por favor, Haz clic para una demostracin de AutoRedraw" 
Print "Estas dos lneas permanecern en la pantalla despus de hacer doble clic" 
End Sub 
Sub Form_Click() 
AutoRedraw = False 
Cls 
Print : Print : Print 
Print "Pero esta lnea desaparecer despus del doble clic" 
End Sub 
Sub Form_DblClick() 
Cls 
End Sub 
2.Crear un nuevo formulario que tenga dos controles picture : uno con la propiedad  
ClipControls establecida a True y el otro a False. Cuando se ejecute este  
proyecto, se deber arrastrar algn formulario hasta tapar parcialmente los  
crculos que aparecern en los cuadros de imagen. Al retirarlo de nuevo, el color  
del crculo de Picture1 se cambia totalmente y, el de Picture2, cambia slo en la  
parte que se expone nuevamente. 
Sub Picture1_Paint() 
Dim color As Long 
Picture1.ScaleMode = 3 
color = &HFFFFFF * Rnd 
Picture1.FillStyle = 0 
Picture1.FillColor = color 
Picture1.Circle (43, 41), 30, color 
End Sub 
Sub Picture2_Paint() 
Dim color As Long 
Picture2.ScaleMode = 3 
color = &HFFFFFF * Rnd 
Picture2.FillStyle = 0 
Picture2.FillColor = color 
Picture2.Circle (43, 41), 30, color 
End Sub 
El mtodo Refresh obliga a un refresco inmediato del formulario o del control. Este  
procedimiento se utiliza normalmente en el procedimiento Form_Resize para volver a  
presentar cualquier grfico que se haya calculado en el procedimiento Paint. Para  
guardar los grficos que se han dibujado en un formulario o caja de figuras se utiliza  
la orden : 
SavePicture [NombreObjeto.] Image, NombreArchivo 
ESCALAS DE LA PANTALLA. 
La escala por omisin para los formularios y cajas de figuras viene medida en Twips. El  
tamao por omisin de un formulario en una VGA normal es de 7.485 Twips de largo por  
4.425 Twips de ancho. Veamos un ejemplo de coordenadas posibles en el formulario. 
COORDENADAS  
POSICIN  
(0,0)  
Esquina superior izquierda  
(7485,0)  
Esquina superior derecha  
(0,4425)  
Esquina inferior izquierda  
(7485,4425)  
Esquina inferior derecha  
(3742,2212)  
Aproximadamente en el centro 
Para cambiar la unidad de medida se utiliza la propiedad ScaleMode. 
EJEMPLO 
Simularemos el movimiento de un botn superponiendo diferentes dibujos  
del mismo. Se necesita un botn de comando con sus valores por omisin  
(hacer doble clic sobre la herramienta) 
Sub Command1_Click() 
'Movimiento de un cuadrado simulando un paseo aleatorio 
Dim x As Single, y As Single 
Dim i As Integer 
Randomize 
Form1.ScaleMode = 3 'Unidad de medida Pixels 
x = Form1.ScaleWidth / 2 
y = Form1.ScaleHeight / 2 
For i = 0 To 50 
xmove = 3 * Rnd 
ymove = 2 * Rnd 
If Rnd < 0.5 Then 
x = x + xmove 
y = y + ymove 
Else 
x = x - xmove 
y = y - ymove 
End If 
If x < 0 Or x > ScaleWidth Or y < 0 Or y > ScaleHeight Then 
'No hacer nada 
Else 
Command1.Move x, y 
End If 
Next i 
End Sub 
ESCALAS PERSONALIZADAS. 
El mtodo Scale establece un nuevo sistema de coordenadas para los formularios y las  
cajas de figuras que se pueden usar con cualquiera de los mtodos grficos. Su  
sintaxis es : 
[objeto.] Scale (x1, y1)-(x2, y2) 
donde x1 e y1 se corresponden con ScaleLeft y ScaleTop y x2 e y2 con las sumas  
ScaleWidth + ScaleLeft y ScaleHeight + ScaleTop respectivamente. P.e. 
Scale (-320,100)-(320,-100) 
establece el nuevo sistema de coordenadas en el que las coordenadas de la esquina  
superior izquierda es (-320,100) y las de la esquina inferior derecha es (320,-100). La  
sintaxis del mtodo Scale es : 
Scale (Xizquierda, Yarriba)- (Xderecha, Yabajo) 
Si se establece Scale sin coordenadas, se restablecern las coordenadas por omisin. 
Otra forma de establecer coordenadas personalizadas consiste en establecer las  
coordenadas de la esquina superior izquierda de la forma en la que se deben medir las  
escalas vertical y horizontal, utilizando las propiedades ScaleLeft, ScaleTop,  
ScaleWidth, y ScaleHeight. 
EJEMPLO 
(0,0)  
 
(1,0)  
 
ScaleLeft = 0  
 
 
 
 
ScaleHeight = -1  
 
 
 
 
ScaleWidth = 1  
 
 
 
 
ScaleTop = 0  
(0,-1)  
 
(1,-1)  
 

(-40,40)  
 
(40,40)  
 
ScaleLeft = -40  
 
 
 
 
ScaleHeight = -80  
 
l  
 
 
ScaleWidth = 80  
 
(0,0)  
 
 
ScaleTop = 40  
 
 
 
 
 
(-40,-40)  
 
(40,-40)  
 
Scale (-40,40)-(40,-40) 
Para dibujar lneas se utiliza el mtodo Line, cuya sintaxis es : 
Line (ColumnaInicial, FilaInicial)-(ColumnaFinal, FilaFinal), CdigoColor 
Visual Basic recuerda el ltimo punto referenciado y sus coordenadas estn guardadas  
en las variables CurrentX y CurrentY, de forma que, para dibujar a continuacin de  
este punto se utiliza : 
Line -(ColumnaFinal, FilaFinal), CdigoColor 
EJEMPLO 
Programa que dibuja la ecuacin y = x2 - 3x + 12 en el dominio -10 <= x <= 10 
Function FdeX(ByVal x As Single) As Single 
FdeX = (x ^ 2) - (x * 3) + 12 
End Function 
Sub Form_Paint() 
Dim x As Single 
'Configura la pantalla 
Cls 
Scale (-150, 150)-(150, -150) 'Sistema de coordenadas cartesianas estndar 
'Dibujar los ejes 
Line (-150, 0)-(150, 0) 
Line (0, -150)-(0, 150) 
CurrentX = -10 
CurrentY = FdeX(-10) 
For x = -10 To 10 
Line -(x, FdeX(x)) 'Dibujar la lnea desde la ltima posicin conocida 
Next x 
End Sub 
9. 2.- COLORES Y PIXELS. 
COLORES. 
Se puede utilizar la funcin RGB cuya sintaxis es: 
RGB (CantidadRojo, CantidadVerde, CantidadAzul) 
Siendo cada cantidad un entero entre 0 y 255 aunque tambin se podr incluir al  
proyecto el archivo Constant.Txt y utilizar los cdigos all definidos. 
Otra funcin que se puede utilizar es QBColor con la sintaxis : 
QBColor (CdigoColor) 
donde CdigoColor es un entero entre 0 y 15 
EJEMPLO 
Para dibujar los ejes del ejemplo anterior de color verde se modificarn las  
lneas siguientes: 
Line (-150, 0)-(150, 0) 
Line (0, -150)-(0, 150) 
por estas otras 
Line (-150, 0)-(150, 0), RGB(0,255,0) 
Line (0, -150)-(0, 150), RGB(0,255,0) 
CONTROL DE PIXELES. 
La sintaxis para dibujar un pixel es : 
PSet (Columna, Fila)[, Cdigocolor] 
Si se exceden los lmites de la pantalla, se obtendr un error de desbordamiento. Si se  
dibuja un punto fuera del formulario, Visual Basic guarda la posicin si la propiedad  
AutoRedraw est a True. Si luego el formulario se maximiza, se dibujar el punto. 
EJEMPLOS 
1.Trazado de una lnea mediante Pset con un pequeo recorte. 
Sub Form_Click() 
Dim i As Integer 
AutoRedraw = True 
For i = 0 To 5000 
PSet (3742, i) 'Dibujar una lnea vertical 
Next i 
For i = 0 To 7485 
PSet (i, 3500) 'Dibujar una lnea horizontal 
Next i 
End Sub 
2.Vamos a construir un pequeo TeleSketch, para lo que necesitaremos utilizar el  
suceso KeyDown para detectar las teclas del cursor. Cuando el usuario se  
desplaza con las teclas de cursor, se van iluminando los pixeles por los que pasa.  
Se necesitarn un formulario para el rea de dibujo con la propiedad  
AutoRedraw a True. Se necesita aadir el archivo Constant.Txt. 
Dim AlturaPixel As Single, AnchuraPixel As Single 
Dim XPunto As Single, YPunto As Single 
Sub Form_Load() 
AutoRedraw = True 
ScaleMode = 3 'Pixels 
AlturaPixel = ScaleHeight 
AnchuraPixel = ScaleWidth 
XPunto = AnchuraPixel / 2 
YPunto = AlturaPixel / 2 
End Sub 
Sub Form_Resize() 
AlturaPixel = ScaleHeight 
AnchuraPixel = ScaleWidth 
End Sub 
Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 
Dim sino As Integer 
Select Case KeyCode 
Case Key_Left 
If XPunto <= 0 Then 
XPunto = 0 
Else 
XPunto = XPunto - 1 
End If 
Case Key_Right 
If XPunto >= AnchuraPixel Then 
XPunto = AnchuraPixel 
Else 
XPunto = XPunto + 1 
End If 
Case Key_Up 
If YPunto <= 0 Then 
YPunto = 0 
Else 
YPunto = YPunto - 1 
End If 
Case Key_Down 
If YPunto >= AlturaPixel Then 
YPunto = AlturaPixel 
Else 
YPunto = YPunto + 1 
End If 
Case Key_End 
sino = MsgBox("Ests seguro de que quieres terminar", 4) 
If sino = 6 Then End 'Clic en si 
Case Else 
Beep 
End Select 
PSet (XPunto, YPunto) 
End Sub 
3.Simulacin de la explosin de una estrella dibujando lneas aleatorias en colores  
aleatorios, desde el centro de la pantalla. Se utiliza una escala personalizada  
donde (0,0) es el centro de la pantalla. Puesto que el nmero de pixels en el  
tamao por omisin de formulario es de 491 de ancho por 268 de alto, (-245,134)  
es la esquina superior izquierda y (245,134) la esquina inferior derecha. 
Sub Form_Click() 
Dim i As Integer, CodColor As Integer 
Dim Columna As Single, Fila As Single 
Randomize 
Cls 
Scale (-245, 134)-(245, -134) 
For i = 1 To 100 
Columna = 245 * Rnd 
If Rnd < 0.5 Then Columna = -Columna 
Fila = 134 * Rnd 
If Rnd < 0.5 Then Fila = -Fila 
CodColor = 15 * Rnd 
Line (0, 0)-(Columna, Fila), QBColor(CodColor) 
Next i 
End Sub 
En ocasiones resulta til utilizar coordenadas relativas, en las que cada punto viene  
definido por cunto de lejos est del ltimo punto referenciado. P.e. 
PSet (12,100) 
PSet Step(50,10) 
el nuevo punto ser (62,110) o lo que es lo mismo, (12+50,100+10) 
EJEMPLO 
Crear un formulario con una caja de imgenes. Este proyecto dibujar en el  
formulario y en la caja, las curvas correspondientes a la funcin sen(x) y  
cos(x) para valores comprendidos entre 0 y 6.3. El sistema de coordenadas  
que se define permite mostrar valores de x entre 0 y 6.3 y, valores de y  
entre -1 y 1. Si se establece la propiedad AutoRedraw a False y, al ejecutar  
el propyecto, el formulario se minimza, al restauralo, las curvas no sern  
dibujadas. 
Sub Curvas() 
'Parmetros para el formulario 
ScaleLeft = 0 
ScaleTop = 1 
ScaleWidth = 6.3 
ScaleHeight = -2 
DrawWidth = 2 'Grosor de la lnea 
FontSize = 18 'Tamao de los caracteres 
'Coordenadas del punto central del formulario 
cx = ScaleWidth / 2 + ScaleLeft 
cy = ScaleHeight / 2 + ScaleTop 
Cls 
msg = "Curvas" 
'Coordenadas para escribir msg centrado 
CurrentX = cx - TextWidth(msg) / 2 
CurrentY = cy - TextHeight(msg) / 2 
ForeColor = QBColor(2) 'Color verde 
Print msg 
ForeColor = QBColor(0) 'Color negro 
'Parmetros para la imagen 
Picture1.Scale (0, 1)-(6.3, -1) 
Picture1.Cls 
Picture1.CurrentX = cx - Picture1.TextWidth(msg) / 2 
Picture1.CurrentY = cy - Picture1.TextHeight(msg) / 2 
Picture1.ForeColor = QBColor(2) 
Picture1.Print msg 
Picture1.ForeColor = QBColor(0) 
'Dibujar curvas 
For x = 0 To 6.3 Step 0.05 
yc = Cos(x) 
ys = Sin(x) 
PSet (x, yc): Picture1.PSet (x, yc) 'Coseno 
PSet (x, ys): Picture1.PSet (x, ys) 'Seno 
Next x 
End Sub 
Sub Form_Click() 
Curvas 
End Sub 
ANCHURA Y ESTILO DE DIBUJO. 
Para cambiar el grosor de los puntos o de las lneas, se utiliza la propiedad DrawWidth,  
cuya forma de empleo es : 
Objeto.DrawWidth = Tamao% 
El ajuste de esta propiedad se mide en pixels. 
Para cambiar el estilo de la lnea, la propiedad a utilizar es DrawStyle, que se ver  
modificada cuando DrawWidth sea 1. 
Para rellenar las cajas o crculos, se modificar las propiedades FillStyle y FillColor. 
EJEMPLOS 
1.Demostracin de la propiedad DrawWidth 
Sub Form_Click() 
WindowState = 2 'Maximizar 
Dim i As Integer 
For i = 1 To 10 
DrawWidth = i 
Line (0, i * ScaleHeight / 12)-(ScaleWidth - 15 * TextWidth("D"), i * ScaleHeight / 12) 
Print "DrawWidth = ", i 
Next i 
End Sub 
2.Dibujar cajas anidadas. 
Sub Form_Click() 
Dim i As Integer 
Scale (0, 0)-(639, 199) 
For i = 1 To 65 Step 5 
Line (5 * i, i)-(639 - 5 * i, 199 - i), , B 'Dibujar una caja 
Next i 
End Sub 
3.Demostracin que no emplea lneas interiores. 
Sub Form_Click() 
WindowState = 2 
DrawWidth = 10 
Line (100, 100)-(ScaleWidth / 2, ScaleHeight / 2), , B 
Line (ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth - 100, ScaleHeight - 100), , B 
End Sub 
4.Demostracin empleando lneas interiores para hacer que los lmites de la caja  
queden la mitad dentro y la otra mitad fuera. 
Sub Form_Click() 
WindowState = 2 
DrawStyle = 6 
DrawWidth = 10 
Line (100, 100)-(ScaleWidth / 2, ScaleHeight / 2), , B 
Line (ScaleWidth / 2, ScaleHeight / 2)-(ScaleWidth - 100, ScaleHeight - 100), , B 
End Sub 
5.Modificacin del ejemplo 2 para que las cajas se rellenen. 
Sub Form_Click() 
Dim i As Integer 
Scale (0, 0)-(639, 199) 
For i = 1 To 65 Step 5 
CodigoColor = QBColor(i Mod 16) 'Dibujar siguiendo el orden de los colores 
Line (5 * i, i)-(639 - 5 * i, 199 - i), CodigoColor, BF 
Next i 
End Sub 
6.Demostracin de FillStyle 
Sub Form_Click() 
Dim i As Integer 
Scale (0, 0)-(25, 25) 
For i = 0 To 7 
FillStyle = i 
Line (0, 3 * i)-(4, 3 * (i + 0.8)), , B 
CurrentX = 4.1 
CurrentY = 3 * i + 0.5 
Print "Este est hecho con FillStyle #"; i 
Next i 
End Sub 
7.Este proyecto crea una tabla de informacin sobre algunos artculos. 
Private Sub Form_Load() 
AutoRedraw = -1 
Print: Print: Print 
Print Tab(12); "Artculo"; Tab(32); "Precio" 
'Tab indica la posicin donde se desea que comience la impresin de 
'una determinada expresin 
Print 
Print Tab(12); "Garbanzos"; Tab(32); 500 
Print Tab(12); "Lentejas"; Tab(32); 300 
Print Tab(12); "Manzanas"; Tab(32); 400 
Print Tab(12); "Pltanos"; Tab(32); 200 
DrawWidth = 2 
Line (700, 350)-(3650, 1950), , B 
Line (700, 880)-(3650, 880) 
End Sub 
9.3.- CRCULOS, ELIPSES Y GRFICOS DE SECTORES. 
CRCULOS. 
Para describir un crculo se dar su centro y su radio y la funcin que dibuja los  
crculos es : 
Circle (Centro), Radio, CdigoColor 
EJEMPLO 
Dibujar crculos anidados 
Sub Form_Click() 
Static CodColor As Integer 
Dim i As Single 
WindowState = 2 
Scale (-1, 1)-(1, -1) 
For i = 0.1 To 0.7 Step 0.5 
CodColor = 15 * Rnd 
Circle (0, 0), i, CodColor 
Next i 
End Sub 
Un sector es una parte de un grfico y un arco es el lmite exterior de un sector. Para dibujar un  
sector o un arco hay que decirle a Visual Basic dnde tiene que empezar y dnde tiene que  
terminar, para lo que se tendr que emplear los radianes como unidad de medida. Para transformar  
grados en radianes se multiplica por 180/p . Para dibujar un arco de circunferencia comenzando  
en el punto dado en radianes en AnguloInicial y terminando en AnguloFinal, se utilizar : 
Circle (Xrad, Yrad), Radio, CdigoColor, AnguloInicial, AnguloFinal 
Para obtener un sector se usan signos negativos. 
EJEMPLO 
Dibujaremos un sector y un arco. 
Sub Form_Click() 
Pi = 4 * Atn(1) 'Calcular el valor de Pi 
Scale (-1, 1)-(1, -1) 
Circle (-0.4, 0), 0.5, , -Pi / 4, -3 * Pi / 4 'Dibujar el sector 
Circle (0.4, 0), 0.5, , Pi / 4, 3 * Pi / 4 'Dibujar el arco 
End Sub 
ELIPSES. 
Para dibujar elipses se modificar el mtodo Circle de la siguiente manera : 
Circle [Paso] (Xcentro, Ycentro), radio,,,, aspecto 
Si el parmetro aspecto es menor que 1, el radio se toma en la direccin de las  
columnas y la elipse tendr su eje menor en direccin vertical. 
EJEMPLOS 
1.- Sub Form_Click() 
Scale (-2, 2)-(2, -2) 
Static I As Single 
Cls 
Circle (0, 0), 0.5, , , , I + 0.1 
CurrentX = -2 
CurrentY = 2 
Print "Esta es la relacin de aspecto "; Format$(I + 0.1, "#.#"); 
Print ". Haga clic para ver el siguiente tamao de elipse" 
I = I + 0.1 
End Sub 
2.- Dibujaremos un crculo, una elipse y un crculo con un sector  
desplazado. 
Sub Form_Load() 
Pi = 4 * Atn(1) 'Definir el valor de Pi 
C1 = RGB(0, 0, 255) 'Azul 
C2 = RGB(0, 255, 0) 'Verde 
C3 = RGB(255, 0, 0) 'Rojo 
AutoRedraw = -1 
ScaleMode = 3 'Pixels 
Circle (60, 70), 30, C1 'Crculo 
Circle (150, 70), 30, C2, , , 5 / 11 'Elipse 
Circle (240, 70), 30, C3, -Pi / 2, -2 * Pi 'Sector 
Circle Step(5, -5), 30, C1, -2 * Pi, -Pi / 2 'Sector 
End Sub 
3.- Rellenaremos el crculo, la elipse y el crculo con un sector  
desplazado del ejemplo anterior. 
Sub Form_Load() 
Pi = 4 * Atn(1) 'Definir el valor de Pi 
C1 = RGB(0, 0, 255) 'Azul 
C2 = RGB(0, 255, 0) 'Verde 
C3 = RGB(255, 0, 0) 'Rojo 
AutoRedraw = -1 
ScaleMode = 3 'Pixels 
FillStyle = 0 
FillColor = C1 
Circle (60, 70), 30, C1 'Crculo 
FillColor = C2 
Circle (150, 70), 30, C2, , , 5 / 11 'Elipse 
FillColor = C3: FillStyle = 4 
Circle (240, 70), 30, C3, -Pi / 2, -2 * Pi 'Sector 
FillColor = C1: FillStyle = 5 
Circle Step(5, -5), 30, C1, -2 * Pi, -Pi / 2 'Sector 
End Sub 
4.- Simulacin de una pelota rodando sobre una lnea. 
Sub Form_Click() 
D = 100 'Radio de la pelota 
BackColor = RGB(255, 255, 255) 'Blanco 
ForeColor = RGB(0, 0, 255) 'Azul 
CY = ScaleHeight / 2 
'Lnea sobre la que rueda la pelota 
Line (0, CY + D)-(ScaleWidth, CY + D), QBColor(2) 
FillStyle = 0 'Color slido 
FillColor = ForeColor 'Color pelota 
DrawMode = 10 
'Animacin 
For I = 0 To ScaleWidth Step 30 
Circle (I, CY), D 'Dibujar la pelota 
For retar = 0 To 1000 
Next retar 'Control de velocidad 
Circle (I, CY), D 'Borrar la pelota 
Next I 
End Sub 
5.- Simulacin de una pelota que rebota al chocar contra una  
barrera. 
Sub Form_Click() 
ScaleMode = 3 'Pixels 
D = 5 'Radio de la pelota 
BackColor = QBColor(15) 'Blanco 
ForeColor = QBColor(1) 'Azul 
CX = ScaleWidth / 4 * 3 
CY = ScaleHeight / 2 
'Barrera sobre la que rebota la pelota 
Line (CX, 10)-(CX + 20, ScaleHeight - 10), QBColor(2), BF 
FillStyle = 0 'Color slido 
FillColor = ForeColor 'Color pelota 
DrawMode = 10 
'Animacin. Mover la pelota. Si choca, rebota 
direccion = 1 '1=derecha, -1=izquierda 
i = 3 
Do While (i > 3 Or direccion = 1) 
Circle (i, CY), D 'Dibujar la pelota 
'Point da el color de la barrera cuando hay contacto. Devuelve el color RGB 
' de un punto
If Point(i + 6, CY) <> BackColor Then direccion = -1
For retar = 0 To 300 
Next retar 'Control velocidad 
Circle (i, CY), D 'Borrar pelota 
i = i + direccion 
Loop
End Sub
