You are on page 1of 117

Programacin con Visual Basic:

Para todo docente es importante el manejo de un Lenguaje de Programacin


porque esto nos permite disear nuestro propio material didctico de acuerdo a
las necesidades curriculares y a las caractersticas propias de nuestro alumnado
para la construccin del conocimiento significativo.
Para aquellos que no tienen experiencia en Programacin, les sugerimos que se
bajen el archivo Introduccin donde encontrarn las explicaciones bsicas, para
los que tienen alguna experiencia comenzamos con algunos ejercicios sencillos,
luego iremos agregando otros de mayor complejidad.
Labels Transparentes

Da Felz: Arrastrar y Soltar

Crucigrama

Productos:Arrastrar y Soltar

Animacin con PictureClip

Ordenar: Arrastrar y Soltar

Sumas Aleatorias

Control Animation

Sucesin de Imgenes

Objeto Printer

Particionando una Imgen

Barra de Herramientas

Cubos: Arrastrar y Soltar

Animacin Transparente

Ejercicio N 1: Partes de la Computadora.

Abrimos el programa Visual


Basic seleccionamos Nuevo
proyecto y comenzamos a
trabajar.

Este ejercicio muestra un truco muy sencillo pero de gran utilidad. A veces
tenemos una imagen total que queremos particionar, en este caso la
computadora, que nos permite subdividirla en tres partes : monitor, teclado,
gabinete. Esto por cdigo sera muy complejo pero usando el control Label en su
modo transparente y con el Caption vaco, o sea sin etiqueta nos permite
subdividir la imagen y que sus partes respondan a el evento Click por separado,
provocando una respuesta distinta.
En el formulario podemos ver la Label dibujada sobre el monitor, todava opaca
como viene por defecto, luego sobre el gabinete est transparente pero con el
Caption , tambin por defecto en este caso : Label2. Y en el teclado donde est
posicionado el cursor en cambio est transparente. De acuerdo a la parte que
seleccionemos: en una cuarta Label se nos mostrar el texto correspondiente, en
el caso del formulario : "Teclado".
En este ejercicio tenemos una Image, con su Propiedad Stretch a True, lo que
nos permite agrandar un icono al tamao deseado. Y cuatro Labels, tres
transparentes para subdividir la Image y una opaca para mostrar la parte
seleccionada, y un Botn de Salida.
El Cdigo de este ejercicio es el siguiente:
Private Sub Command1_Click()
End ' Cierre de la aplicacin

End Sub
Private Sub Label2_Click() 'El evento Click modifica el titulo de 'label1
Label1.caption = "Monitor"
End Sub
Private Sub Label3_Click()
Label1.caption = "Gabinete"
End Sub
Private Sub Label4_Click()
Label1.caption = "Teclado"
End Sub

Ejercicio N 2: Crucigrama.
Comenzamos un nuevo proyecto.
Con este ejercicio queremos
sugerir una ejemplo de
crucigrama que cada uno podr
adaptar a los contenidos
requeridos. Tambin a partir de
aqu podramos elaborar un
Ahorcado.
El crucigrama est armado con cuadros de texto o sea controles Text,
encerrados dentro de un control frame, este control tiene la nica finalidad de
agrupar y contener otros controles, ordenando la interactividad de una manera
visual. Otros dos controles Frame agrupan las opciones vertical y horizontal.
Conteniendo controles CheckBox que al ser seleccionados hacen la correccin
de las letras ingresadas en las cajas de texto. El ingreso de las mismas se hace
en tiempo de ejecucin a travs del teclado.
A la derecha vemos unos controles Picture vacos que se cargaran con imgenes
que muestren por ejemplo una cara sonriente si la palabra es correcta o seria si
no lo es, o cualquier otro tipo de imagen .Podemos llamar a esta imagen con la
funcin LoadPicture desde cualquier parte de nuestro disco rgido. Y un botn
con el icono de Hijitus indica la Salida y cierre del programa.
Ac tendremos que crear por cdigo una estructura condicional que controle si la
entrada de datos es correcta o no.
El cdigo es el siguiente:
Private Sub Command1_Click()
End
End Sub
Private Sub Check1_Click()
If Text1.Text = "L" And Text2.Text = "O" And Text3.Text= "R" And Text4.Text ="O"
then ' este cdigo debe ir todo en un mismo regln y 'chequea si se escribi una

de las palabras correctas. Ciudado con los 'nombres de los Controles porque
seguramente Ustedes no tendrn la 'misma numeracin que yo. (Otra aclaracin
cuando usamos el carcter ' 'indicamos que todo lo que sigue es un comentario,
por lo tanto la 'computadora no lo ejecuta lo saltea, no es cdigo).
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda
Else 'Sino
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub
Private Sub Check2_Click()
If Text2.Text = "O" And Text5.Text ="R" And Text9.Text ="O" then
Image2.Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda
Else 'Sino
Image2. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub
Private Sub Check3_Click()
If Text7.Text = "R" And Text8.Text ="A" And Text9.Text ="T" And Text4.Text ="O"
And Text10.Text ="N" then
Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda Else 'Sino
Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub

Ejercicio N 3: Animacin del Osito.

Para esta animacin usamos un control especial que no est en la Caja de


Controles estndar , para incluirlo vamos a Proyecto , Componentes y all
seleccionamos Microsoft PictureClip Control y al aceptar , este se incluir
en la Caja de Controles. Permanecer invisible en tiempo de ejecucin por
lo tanto volcaremos su imagen en un control Picture comn que
dibujaremos en el Formulario y dejamos vaco. En el formulario dibujamos
un control Picture vaco sin Picture, con el fondo blanco y sin borde o sea
con la propiedad Borderstyle a None. Luego dibujamos el PictureClip con
las propiedades Col a 1 y Row a 9 , y agregamos un Timer control
fundamental en todo tipo de animacin. El Timer es un cronmetro que
repite una accin (hace un Bucle) o sentencia en Visual Basic de manera
automtica e infinita, hasta que lo desactivamos o cerramos el programa.
El control PictureClip es una grilla que despliega los distintos frames de la
animacin que podemos ver en la imagen a la izquierda. Pueden grabar
esta imagen y usarla en la propiedad picture para el ejercicio. Estos frames
o cuadros de animacin tienen un ndice en esta imagen de 0 a 8.

Aqu tambin usamos el Mtodo Move para desplazar la imagen del Oso.
El cdigo de cada procedimiento es el siguiente:
Option Explicit
Dim A As Integer 'declaramos a como variable entera
Private Sub Form_Load()
A = 9 ' Inicializamos la variable en 9.
End Sub
Private Sub Timer_Timer()
A=A-1
If A = 0 then A = 8 'Al llegar al frame 0 vuelve a empezar
Picture1.Picture = PictureClip1.GraphicCell(A)
Picture1.Move Picture1.Left + 50, Picture1.Top + 50 'Mueve en diagonal
End Sub
Comenzamos con una variable = 9 porque los frames del osito deben disminuir y
no aumentar sino d la impresin de caminar al revs.
Una propiedad fundamental del PictureClip es la GraphicCell ya que ella
automatiza la divisin de la grilla(imagen total) en partes(frames).
En este caso en el Move usamos los dos argumentos el Left y el Top de la imagen
, propiedades que indican la ubicacin de sta en relacin al borde izquierdo
(coordenada x) y al borde superior (coordenada y). Lo que permitir que el oso se
mueva en diagonal.
En la explicacin slo est detallado el movimiento del oso, en el formulario
vemos agregadas otros controles Line e Image simulando una calle, un semforo

y una seal de Stop, como para darles una idea de lo que podran agregar a la
escena.

Ejercicio N 4: Sumas.

Este ejercicio elige en forma


Aleatoria dos nmeros y los
despliega en dos Labels para que
el alumno luego, introduzca el
valor correcto de la suma de
ambos en un TextBox . Si est
bien le aparecer la carita
sonriente y sino la de disgusto.
Luego volvern a aparecer otros
dos nmeros para que siga
sumando.

El botn Aplicar permite hacer la


correccin mediante un
Condicional. Algunos de estos
temas son comunes a otros
ejercicios. Por lo tanto nos
centraremos en las funciones
nuevas.

La funcin Rnd nos permite cargar en una variable un nmero aleatorio que en
este caso definimos como entero Int (de Integer) y de 0 a 10.
Num1 = int( Rnd * 10)
Repetimos el procedimiento para Num2, el segundo sumando de nuestra cuenta.
Para que realmente sea aleatorio debemos incorporar la sentencia Randomize en
el Procedimiento Load del Formulario.
Otra funcin que utilizamos es Val que transforma una cadena de caracteres, en
este caso el contenido de un Text en un valor numrico.
Resultado = Val ( Text1.Text)
Y luego con un condicional y el operador de suma + controlamos si el resultado
es correcto:
If resultado = Int(num1) + Int(num2) then...
En el caso de resolver bien la cuenta pasa a cargar otros dos nmeros , iniciando
una nueva cuenta. Pero necesitamos una espera en la aplicacin. Esto lo
hacemos por cdigo con un bucle que asociado al reloj del sistema crea una
pausa en la aplicacin. Para esto creamos un Procedimiento llamado Pausa.
Posicionados en la ventana de cdigo , vamos a Tools/ Herramientas, Add
Procedure/ Agregar Procedimiento, y en la ventana que se nos abre elegimos un
Name para el mismo en este caso = Pausa y luego con los botones de opcin
seleccionamos: Sub y Private. Damos el Aceptar y se cierra la ventana. Ahora
veremos en nuestra ventana de cdigo un nuevo Procedimiento llamado Pausa.
Incluido dentro de los procedimientos del objeto General. Luego lo llamaremos

desde otra parte del programa con la sentencia Call.


Para mayor claridad vamos al cdigo:
Option Explicit
Dim num1, num2, resultado As Integer
Private Sub pausa() ' este el procedimiento creado por nosotros
Dim comenzar
Dim controlar
comenzar = Timer
Do Until controlar > = comenzar + 1.5 ' este es el bucle de espera
controlar = Timer
DoEvents ' esta sentencia evita un bucle egoista
Loop
End Sub
Private Sub Command1_Click()
num1 = Int(Rnd * 10) 'elige un nmero aleatorio
num2 = Int(Rnd * 10) 'elige un nmero aleatorio
Text1.Text = ""
Label1.Caption = num1
Label2.Caption = num2
Text1.SetFocus ' ubica el foco del cursor en el control Text1
Command2.Enabled = False
Image1.Picture = Nothing 'vaca el contenido de la imagen
End Sub
Private Sub Command2_Click()
Command2.Enabled = False
resultado = Val(Text1.Text)
If resultado = Int(num1) + Int(num2) Then
Image1.Picture = Picture1.Picture
Call pausa ' llama al procedimiento que creamos como Pausa
Call Command1_Click 'este procedimiento llama a otra suma

Else
Image1.Picture = Picture2.Picture
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
Randomize
num1 = Int(Rnd * 10)'al cargarse el programa ya aparece una cuenta
num2 = Int(Rnd * 10)
Text1.Text = ""
Label1.Caption = num1'se vuelcan las variables en las Labels
Label2.Caption = num2
Command2.Enabled = False'el botn aplicar est desactivado
End Sub
Private Sub Text1_Change()
Command2.Enabled = True'al cambiar el texto se activa Aplicar
End Sub

Ejercicio N 5: Torero.

Este ejercicio muestra una


sucesin de Imgenes al estilo un
show de diapositivas .Las
imgenes las cargamos en
controles Image a la izquierda del
formulario invisibles, para luego
convocarlas por cdigo y
desplegarlas en la Image central,
sta si con su propiedad visible =
True.

La sucesin de imgenes la
realiza un control Timer asociado
a un contador , cada imagen se
relaciona con un texto que
desplegamos en una Label
colocada debajo de la imagen
central. Al llegar el contador a 12
se detiene la sucesin y se
muestra una Label con los
nombres de los creadores de la
aplicacin.
La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicacin,
para esto inicializa la variable A = 0 y pone el Timer nuevamente en
funcionamiento.
El cdigo de los principales procedimientos es el siguiente:
Option explicit
Dim A as Integer
Private Sub Label3_Click() ' esta es la label de reiniciar
Timer1.enabled = True
A=0
Label2.caption = "Lo primero es la coleta..."
Label4.visible = False ' oculta a los Autores
End Sub
Private Sub Timer1_Timer()
A=A+1
If A = 3 then
Image13.Picture= Image1.Picture
Label2.caption = "Y los tirantes despus..."
ElseIf A = 4 then
Image13.Picture = Image5.Picture
Label2.caption = "enseguida la corbata..."
Elseif A = 5 Then ' Y as las distintas opciones de Imgenes y de Texto.
Label4.Visible = True ' muestra los Autores
Timer1.enabled = False ' desactiva el Timer
End If
End Sub
Controlen el orden de las Imgenes de acuerdo a su propia aplicacin, y los

textos siguientes son:


"Y una faja de chip..."
"El chaleco hay que ensancharlo ..."
"la chaquetilla est bien..."
"Una cinta desatada..."
"Un beso ardiente ...dos...tres..."
"Mezcla de llanto y de juego y un rezo de ella por l..."
"Dios mo que vuelva zano! Si muere, muero tambin!
La sintaxis de los textos se mantiene como en las fotos originales.

Ejercicio N 6: Sistema Solar.

Este ejercicio es similar al de las


partes de la computadora. Una
Imagen grande es particionada a
travs de Labels transparentes
que nos permiten en este caso
identificar cada planeta por
separado.
Al pasar el puntero del mouse sobre el planeta este cambia por una manito lo que
nos indica que es posible una interaccin. Y al clickear sobre el mismo despliega
en la Label inferior el nombre del planeta.
Vamos a centrarnos en las novedades que aporta este ejercicio en relacin al
N1. Primero : podemos cambiar el puntero del mouse: Para esto en la propiedad
MousePointer y MouseIcon de cada Label transparente haremos cierta
modificaciones.
MousePointer = 99 (Custome) ' O sea la opcin personalizada.
MouseIcon = Seleccionamos de la carpeta Icons o de otra en especial el Icono
que queremos mostrar.
Segundo : Vemos en la Imagen Inferior que muestra la Aplicacin en ejecucin,
dos botones : uno de Imprimir y otro de Salir, que en realidad no son Botones
porque su forma es ovalada. Estos son Controles Shape de forma ovalada . Como
el Control Shape es puramente decorativo y no responde a ningn Evento ,
entonces aqu tambin con un pequeo truco , le colocamos una Label
transparente sobre la Shape con la propiedad Caption = Imprimir o Salir y ahora
s la Label responde al Evento Click.
Tercero: En la Shape Imprimir , al clickear sobre ella imprimimos el Formulario en
tiempo de ejecucin. El cdigo es:
Private Sub Label13_Click()
Form1.PrintForm
End Sub

Ejercicio N 7: Cubos.

Este ejercicio y los tres


siguientes usan en sus
procedimientos el Drageo o Drag
and Drop , que significa arrastrar
y soltar y nos va a permitir mover
un objeto en tiempo de ejecucin
de un lugar a otro del formulario.
Este tipo de ejercicios es muy til
para los docentes que trabajan
con los ms pequeos.
Usamos tres controles Picture cargando en cada uno de ellos un icono que les
guste. Y en la propiedad Dragmode de cada picture elegimos la opcin Automatic
, la numero 1. Esto permitir mover los controles. Pero para que realmente se
desplacen debemos agregar al procedimiento Form_DragDrop el siguiente
cdigo:
Private Sub DragDrop ( Source as control, X as Single, Y as Single)
Source.Move x, y
End Sub
Dentro de los argumentos entre parntesis vemos Source que quiere decir
origen, o sea el control de origen y esto es muy importante porque quiere decir
que no hace falta que especifiquemos que picture estamos moviendo o
arrastrando y soltando , el procedimiento lo registra de por s, y lo que debemos
actualizarle son las nuevas coordenadas que leer el procedimiento a travs de x,
y. Aqu usamos un mtodo ya conocido el Move. Al correr el programa podemos
clickear sobre una de las figuras y manteniendo el botn izquierdo del mouse
apretado arrastrarla a la nueva posicin que deseamos y luego soltarla.

Ejercicio N 8: Da Feliz.

Este ejercicio de drageo utiliza


tambin imgenes que pueden
desplegarse en controles picture
o image . En este caso son
Images con su propiedad stretch
a true lo que permite usar iconos
y poder agrandarlos.

La Image1 la carita fea tiene la propiedad DragMode en 1 : Automtica. Y en la


propiedad DragIcon tiene cargado el mismo icono para que cuando la
arrastremos no se vea una ventana vaca. Pero ahora el procedimiento usado es
el DragOver que detecta cuando pasamos por encima de un control determinado.
En este caso es el cesto o la Image2 . Y el objetivo es que al arrastrar la carita fea
sobre el cesto esta desaparezca, simulando que la estamos tirando dentro del
cesto. Entonces el cdigo indicado ser:
Private Sub Image2_DragOver (...)
Image1.visible = False
End Sub

Esto hace que al pasar la Image1


sobre la Image2 la primera se
vuelva invisible lo que simula que
la hemos tirado dentro del cesto.
En tiempo de ejecucin se ver
de la siguiente manera :

Ejercicio N 9: Compra de Productos.

En este ejercicio arrastramos las


imgenes del telfono, reloj y
filmadora, como si hiciramos
una compra virtual sobre la
calculadora y el valor del total, se
va incrementando haciendo la
cuenta de lo que gastamos.
Los controles son cuatro Image , el botn que borra el total a pagar. Una caja de
texto que muestra el total y las dems son Labels indicativas.
Cuando arrastramos la imagen vamos a observar que no drageamos un
rectngulo o ventana vaca sino iconos que coinciden con la imagen elegida,
para eso a cada imagen le cargamos su icono correspondiente en la propiedad
DragIcon. No olvidarse poner la propiedad DragMode en 1. El cdigo es el
siguiente:
Dim total as integer ' Declaramos en la parte General la variable.
Private Sub Command1_Click()
Text1.text = "" ' vacimos la caja de texto.
Total = 0 ' reiniciamos la variable a 0.
End Sub
Private Sub Image4_dragDrop (...) ' En imagen de la calculadora.
If Source = Image1 then ' Aqu testeamos la imagen de origen.
Total = total + 260
Elseif Source = Image2 then
Total = total + 300
Elseif Source = Image3 then
Total = total + 1400
End if

Text1.text = total
End Sub
Ac vemos la importancia del argumento Source como control de origen, porque
nos permite testear en el condicional a que imagen nos estamos refiriendo.

Ejercicio N 10: Ordenar de Menor a Mayor.

Este ejercicio usa el Drageo para


que los alumnos ordenen los
nmeros de Menor a Mayor.

Tenemos 3 Labels que muestran los nmeros a ordenar y otras 3 Labels que
recibirn los nmeros drageados de las Labels anteriores. Y dos Botones El de
Nmeros que a travs del procedimiento Azar elige tres nmeros aleatorios para
cada label con la funcin Randomize y el Botn Corregir que chequea que estn
ordenados realmente de menor a mayor. La Label7 muestra un "Bien" o un "Mal",
de acuerdo a si el orden es correcto o no. El cdigo es el siguiente:
Dim N1, N2, N3 as Integer ' declaramos las variables en General.
Private Sub Command1_Click() ' Este es el botn Nmeros
Label4.caption = ""
Label5.caption = ""
Label6.caption = "" ' vaciamos los nmeros ordenados
Label1.visible = True
Label2.visible = True
Label3.visible = True ' volvemos visibles las Label que drageamos.
Call Azar ' Convocamos al procedimiento creado en General.
End Sub
Private Sub Azar() ' creamos un procedimiento llamado Azar
N1= int(Rnd * 10) + 1 ' elige un nmero aleatorio de 1 a 10
N2= int(Rnd * 10) +1
N3= int(Rnd * 10) +1
If N1 <> N2 And N2 <> N3 And N1 <> N3 then 'controla que no haya 2 nmeros
iguales. Usamos los operadores <> y And.
Label1.caption = N1 ' volcamos los valores de las variables en las labels.

Label2.caption = N2
Label3.caption = N3
Else
Exit Sub ' Si uno de los nmeros se repite sale de la Rutina y vuelve a llamarse al
procedimiento Azar desde el Botn 1.
End If
End Sub
Private Command2_Click () ' Este es el Botn Corregir.
If Val(Label4.Caption) < Val(Label5.Caption) And Val(Label5.Caption) <
Val(Label6.caption) Then ' Este condicional que controla el orden de los nmeros
debe ir en una sola lnea.
Label7.Caption = "Bien"
Else
Label7.caption= "Mal"
End If
End Sub
Private Sub Form_Load()
Randomize ' Reinicia la funcion Rnd
Call Azar ' llama al procedimiento Azar.
Private Sub Label4_DragDrop(..)
Label4.Caption = Source ' La label que recibe el control de Origen toma el caption
de este Origen.
Source.visible = False ' oculta el control de origen una vez drageado.
End Sub
Este cdigo de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y
recordemos modificar su Dragmode a 1.
En tiempo de ejecucin luego de
arrastrar las Labels 1 2 y 3 sobre
las 4 5 y 6 y clickear en Corregir
veremos una pantalla similar a la
siguiente:

Ejercicio N 11: Control para Animacin

Una manera sencilla de desplegar


una animacin es con el control
Animation, este control no es
standard por lo tanto lo debemos
traer de Componentes del grupo
Microsoft Windows Common
Controls-2 5.0 o 5.0

Y por cdigo le vamos a asociar un archivo Avi sin sonido porque sino no lo
carga , en este caso llamado FileCopy que se encuentra en el mismo directorio
del proyecto por eso usamos App.Path que quiere decir el camino o ruta de la
aplicacin.
Y con open abrimos, stop detenemos y play ejecutamos y close cerramos.
Private Sub Command1_Click()
Animation1.Close
Unload Me
End Sub

Private Sub Form_Load()


Animation1.Stop
Animation1.Close
Animation1.Open App.Path & "\FileCopy.AVI"
Animation1.Play
End Sub
El ejercicio puede bajarse de Aqu.

Ejercicio N 12: Imprimiendo con Printer.

En este formulario desplegamos


datos en cajas de texto y a travs
del Boton Imprimir vamos a darle
salida a estos datos por la
Impresora que el sistema tenga
por defecto. Para esto usamos el
objeto Printer, que nos permite
controlar el texto, cambiar su
aspecto, tamao, tipo y color de
la fuente y coordenadas.

Private Sub Command1_Click()


Printer.Orientation = 1

' La orientacin del papel es vertical


Printer.FontSize = 12
'Tamao de la letra
Printer.Print
'Un rengln en blanco o salto de carro
Printer.Print
Printer.Print
Printer.Print Tab(15); Label1.Caption; Tab(30); Text1.Text
'Aqu damos la orden de impresin del caption de la label1 a 15 espacios 'del
margen izquerdo y luego a 30 espacios del margen izquierdo el 'contenido del
texto.
Printer.Print
Printer.Print
Printer.Print Tab(15); Label2.Caption; Tab(30); Text2.Text
Printer.Print
Printer.Print
Printer.Print Tab(15); Label3.Caption; Tab(30); Text3.Text
Printer.Print
Printer.Print
Printer.Print
Printer.Print Tab(15); Label4.Caption; Tab(30); Text4.Text
Printer.Print
Printer.Print
Printer.Print Tab(15); Label5.Caption; Tab(30); Text5.Text
Printer.Print
Printer.Print
Printer.Print Tab(15); Label6.Caption; Tab(30); Text6.Text
Printer.EndDoc
'damos por terminada la impresin
End Sub
Este ejercicio nos permite de una manera simple poder distribuir la impresin de
forma personalizada.

Ejercicio N 13: Una Barra de Herramientas.

Este ejercicio nos permite


mostrar una barra de
herramientas al clsico estilo
Windows.

Usando el control Toolbar y el control ImageList para desplegar las imgenes en


los botones de la barra de herramientas, tambin nos permite crear una barra de
status con tres paneles, compuesta por tres paneles. Estos controles forman
parte de Microsoft Windows Common Controls 5.0 que debemos agregar de
Componentes en la versin profesional de Visual Basic 5.
Luego de crear sobre el Formulario la barra de status, con el botn derecho del
mouse seleccionamos propiedades y all en la pestaa paneles vamos eligiendo
cuantos queremos y cual ser su mensaje.
En el control ImageList seleccionamos con el botn derecho del mouse
propiedades y cargamos las imgenes que componen este repositorio de
imgenes para luego por cdigo relacionarlas con los botones de la ToolBar.
Private Sub Form_Load()
Toolbar1.ImageList = ImageList1
'en el procedimiento load asociamos el control Imagelist a la Toolbar
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
Select Case Button.Key
Case Is = "camara"
MsgBox "Esto es una camara"
Set Image1.Picture = ImageList1.ListImages(1).Picture
Case Is = "dibujo"
MsgBox "Eso es para dibujar"
Set Image1.Picture = ImageList1.ListImages(2).Picture
Case Is = "nuevo"
MsgBox "Esto abre un archivo nuevo"
Set Image1.Picture = ImageList1.ListImages(3).Picture
Case Is = "abrir"
MsgBox "Esto abre un archivo existente"

Set Image1.Picture = ImageList1.ListImages(4).Picture


Case Is = "imprimir"
MsgBox "Esto Imprime"
Set Image1.Picture = ImageList1.ListImages(5).Picture
End Select
End Sub
En el procedimiento click de laToolbar mediante un Select Case asociamos cada
botn a una imagen distinta de la ImageList y al cliquear desencadenamos la
funcin MsgBox que nos identifica el botn al que nos referimos. Aqu juega un
papel importante la propiedad Key que identifica a la imagen, como nica y no
puede repetirse.
La sentencia Set determina la asociacin entre los controles, fijndola.

Ejercicio N 14: Una Animacin Transparente.


Uno de los temas ms queridos
relacionados con la
programacin para nosotros es el
tema de las Animaciones. Poco a
Poco vamos a ir desarrollando
ejercicios que vayan
perfeccionando y mostrando
distintas formas de crear
animaciones en Visual Basic. Las
que vimos hasta ahora usando el
mtodo Move , el control
PictureClip, y las secuencias de
images o pictures activadas con
un Timer, son las formas ms
primitivas y sencillas de
animacin.
Hoy sumamos el Mtodo PaintPicture que dibuja una imagen sobre un fondo ,
pero al combinar mediante las constantes SRCAND y SRCINVERT dos versiones
de la imagen: la mscara y el sprite o animacin en s permite trasparentar el
fondo.
En este caso vamos a desplegar la animacin sobre un control Picture con una
imagen de fondo, pero podemos hacerlo sobre el formulario y cargar en este una
imagen. Lo que debemos tener en cuenta es que el objeto sobre el que se
despliega la animacin debe estar la propiedad ScaleMode en Pixel y no en Twips
como lo es por defecto.
Las constantes para desplegar mtodos grficos como SRCAnd y SRCINvert
deben declararse en la parte General del Formulario. Pueden copiarse a mano o a
travs del Visor de Apis.
Usamos dos controles PictureClip uno para la mscar y otro para el Sprite (Ver
Controles favoritos: PictureClip). Un Timer para desplegar la secuencia de los
frames que componen la grilla en este caso la imagen completa del perro se
compone de 4 columnas y 1 fila. Y un CommandButton que regula el inicio y fin
de la animacin.
Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest

Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR dest


Const SRCCOPY = &HCC0020 ' (DWORD) dest = origen
Private Sub Command1_Click()
If Command1.Caption = "Animacin" Then
Timer1.Enabled = True
Picture1.Refresh
'esta propiedad Refresh es muy importante ya que refresca el fondo para
'cambiar de cuadro en la secuencia.
Command1.Caption = "Detener"
Else
Timer1.Enabled = False
Command1.Caption = "Animacin"
End If
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
PictureClip1.Cols = 4
PictureClip1.Rows = 1
PictureClip2.Cols = 4
PictureClip2.Rows = 1
'Es mejor determinar la composicin de la grilla por cdigo ya que a veces 'al
salir del programa el control Pictureclip no retiene los valores de la 'ventana de
propiedades y vuele a su 1 a 1 por defecto.
End Sub
Private Sub Timer1_Timer()
Picture1.Refresh
Dim x As Single, y As Single
Static imagenactual As Integer
Static xactual As Integer

If imagenactual > 3 Then imagenactual = 0


If imagenactual < 0 Then imagenactual = 0
If xactual > 500 Then xactual = 0
If xactual < 0 Then xactual = 0
'Estos condicionales regulan la secuencia de los cuadros de la animacin,
'reinicindola y el movimiento cuando se escapa de la picture 'posicionndose
otra vez al comienzo del margen izquierdo.
Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , ,
SRCAND 'esta sintaxis debe estar en un solo rengln
Picture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , ,
SRCINVERT 'esta sintaxis debe estar en un solo rengln
imagenactual = imagenactual + 1
'avanza un cuadro la secuencia
xactual = xactual + 20
' se mueve 20 pixels a la derecha.
End Sub
Los ejercicios N 14, 15 y 16 pueden bajarse desde Aqu
Si deseas bajarte una versin comprimida de los Ejercicios clickea en
Ejercicios1,Ejercicios2 y Ejercicios3 pero recuerda que son archivos con
extensin .zip debers copiarlos y luego descomprimirlos con el Winzip, si no lo
tienes bjalo de www.winzip.com.

Volver a la Pgina principal

Volver a Ejercicios

Ms Ejercicios:
Internet: WebBrowser

Barra de Porcentaje

Navegador Simple

Control Tab

Dibujar: Coordenadas x, y

Control Anigif

Varios Formularios

Control Transicin

Sonidos Wave y Midi

Juego usando Click

Vnculos entre controles

Animacin Transparente

Contrasea

Array de palabras

Esqueleto: Arrastrar y Soltar

Uso del Timer

Editor de Men

Mtodo PaintPicture

Mtodo Print

Animacin de un Conejo

Ejecutar un .Avi

Mtodo Draw

Encuesta: Uso de Rnd

Scrollbar y cdigo ASCII

Array de controles

Simulacin

Abrir un .txt y un .rtf

Alarma: Timer

Rompecabezas: Arrastrar y Soltar

Mtodo Grfico: PSet

ScrollBar

Mtodos Line y Circle

Ejercicio N 15: Internet

Este ejercicio nos permite


mediante un evento click sobre
un botn conectarnos con un
sitio web determinado,
incorporando el control
WebBrowser, este control no es
estndar y lo debemos traer de
Componentes, Microsoft Internet
Control.

Private Sub Command1_Click()


WebBrowser1.Navigate "http://www.yahoo.com"
'WebBrowser1.GoHome
End Sub
La propiedad Navigate del control WebBrowser es el nos permite navegar hacia
un sitio web, estando conectados a nuestro servidor, obviamente, la otra
propiedad alternativa GoHome nos conecta con la pgina predeterminada de
Inicio.
Este control nos resulta muy til cuando queremos que los alumnos consulten
determinados sitios, antes visitados por nosotros, y as evitamos navegaciones
intiles o peligrosas por sus contenidos.

Ejercicio N 16: Un Navegador.


Otro ejercicio usando el control
WebBrowser, en este caso
creamos un Navegador muy
simple. Con el control Toolbar
asociado al ImageList creamos
una barra de herramientas, esto
ya lo hemos visto en otros
ejercicios. Por lo tanto nos
centraremos en otras
propiedades del WebBrowser.
Una caja de texto contiene la URL o direccin del sitio a visitar. Y una barra de
estado o StatusBar dividida en tres paneles despliega: un mensaje, la hora y la
fecha respectivamente.
El cdigo es el siguiente:
Private Sub Command1_Click() ' este control est oculto
If Text1.Text <> "" Then
WebBrowser1.Navigate Text1.Text
If WebBrowser1.Visible = False Then
WebBrowser1.Visible = True
End If
End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then 'equivale a la tecla Enter
Command1_Click
End If
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
Select Case Button.Key
Case "back" 'se identifica por la Key
On Error Resume Next
WebBrowser1.GoBack 'Retrocede
Case "forward"
On Error Resume Next
WebBrowser1.GoForward 'Adelanta
Case "home"
Text1.Text = "http://www.geocities.com/SiliconValley/Garage/6472"
Command1_Click
Case "refresh"
WebBrowser1.Refresh 'actualiza o refrezca
Case "stop"
WebBrowser1.Stop 'detiene la bsqueda
End Select
End Sub
Private Sub WebBrowser1_DownloadBegin()
StatusBar1.Panels(1).Text = "Cargando Pgina..."
End Sub
Private Sub WebBrowser1_DownloadComplete()
StatusBar1.Panels(1).Text = "Listo"
End Sub

Ejercicio N 17: Dibujar

Con este ejercicio podrn los


alumnos dibujar en tiempo de
ejecucin. Podemos agregarles
una paleta de colores similar al
Paint.

En caso de imprimir el dibujo es necesario que la propiedad del Formulario


Autoredraw est a True para que el formulario se refresque e imprima el dibujo
realizado.
Dim draw As Boolean 'declaramos una variable buleana
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
draw = True 'estamos dibujando
CurrentX = X' carga en la variable la ubicacin en la coordenada X
CurrentY = Y' carga en la variable la ubicacin en la coordenada Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If draw Then Line -(X, Y) ' si la variable draw esta a verdadera 'dibuja cada uno de
los puntos.
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
draw = False 'la variable draw a falsa detiene el dibujo
End Sub
Los ejercicios N 17, 18 y 19 pueden bajarlos de Aqu.

Ejercicio N 18: Relacionar varios formularios.


A pedido de varios seguidores de nuestra pgina vamos a integrar en un solo
proyecto varios formularios. El proyecto se compone de 5 formularios:
Presentacin, Planetas, Informacin, Evaluacin y Crditos.
Retomando un ejercicio simple ya
explicado el N 7 El Sistema
Solar, vamos a agregarle una
primera pantalla de presentacin
con distintos botones o labels
que nos vinculan a los otros
formularios:
La label Planetas nos muestra el formulario del ejercicio N7 con los distintos
planetas y el procedimiento Clic de cada label transparente nos vincula a una

Base de Datos previamente armada con el Data Jet, el motor para Base de Datos
de Visual Basic 5 o con Access, donde tendremos la informacin referente a cada
planeta, en este caso: el nombre del planeta, su distancia al sol en km. y la
cantidad de satlites (El proyecto final est incompleto, Uds. pueden completarlo
como les resulte ms conveniente).

Al hacer Clic sobre uno de los


planetas se nos abre la siguiente
pantalla:

El cdigo que nos vincula a la base de datos convocada por un control Data que
se encuentra invisible en el formulario de Informacin es el siguiente:
Private Sub Label12_Click() 'Esta label corresponde al planeta 'Jpiter
Label2.Caption = "Jpiter"
Form2.Data1.Recordset.MoveFirst 'mueve el puntero al comienzo
Form2.Data1.Recordset.Move 1 ' y luego un lugar al registro 'correspondiente en
la Base de datos Planetas
Form2.Picture1.Picture = Form2.ImageList1.ListImages(2).Picture
Form2.Show
End Sub
Para desplegar la imagen del planeta usamos un control ImageList que tiene
cargadas, en este caso solo dos imgenes: la Tierra y Jpiter.
La posicin del registro depende del orden que le dieron a los planetas en los
registros de la Base de datos.
Ustedes pueden agregar oros campos que desplieguen ms informacin y labels
indicativas de dichos campos.
Luego tenemos el Formulario evaluacin que a travs de la funcin InputBox le
hace al alumno dos preguntas: Una sobre el nombre del planeta y otra sobre la
cantidad de satlites que posee.

El formulario de evaluacin se
asemeja al siguiente:

Y el cdigo es:
Private Sub Picture1_Click() 'imagen de Jpiter

planeta = InputBox("Qu planeta es este?", "Planetas")


If UCase(planeta) = "JPITER" Then
contar = contar + 1
Label2.Caption = contar
End If
satelite = InputBox("Cuntos satlites tiene?", "Planetas")
If satelite = "16" Then
contar = contar + 1
Label2.Caption = contar
Picture1.Enabled = False
End If
End Sub
Tambin incluimos una variable contar para que nos sume puntos con las
respuestas correctas, y las variables planeta y satlite que guardan las
respuestas del InputBox. Esta variables deben ser declaradas en la parte general
del formulario.
Para cerrar tenemos el formulario crditos donde se indica el nombre del
programador y el botn Salir que cierra la aplicacin. La navegacin entre un
formulario y otro se realiza mediante los mtodos Show: Mostrar y Hide: Ocultar.
Primero se muestra el formulario vinculado y luego se oculta el que est activo.
Ejemplo:
Private Sub Label1_Click()
Form3.Show
Form5.Hide
End Sub
Ustedes pueden vincular distintos formularios con distintos ejercicios, imgenes,
animaciones o videos o simplemente informacin escrita.
El proyecto final (incompleto) puede bajarse de Aqu.

Ejercicio N 19: Combinando sonidos.

El siguiente ejercicio muestra


como usar el control multimedia
para desplegar sonidos de tipo
Midi o Wave e incluso poder
superponer un sonido a otro:

Cuando se abre el formulario se ejecuta el archivo Midi y si nosotros hacemos


Clic sobre el botn Wave escuchamos los gritos de Tarzan por encima de la
msica de fondo que se sigue ejecutando. Esto nos resulta til para ciertas
aplicaciones donde queremos dejar una msica de fondo, o entretenimientos que
combinan sonidos.
Private Sub Command2_Click() 'Botn wave
MMControl2.Command = "Prev"
MMControl2.DeviceType = "WaveAudio" 'establece el tipo de 'sonido
MMControl2.filename = App.Path & "\Tarzan.wav"' muestra el 'camino
MMControl2.Command = "Open" 'lo abre
MMControl2.Command = "Play" ' lo ejecuta
End Sub
Private Sub Command3_Click() ' Botn Midi
MMControl1.Command = "Prev"
MMControl1.DeviceType = "Sequencer"' tipo de sonido
MMControl1.filename = App.Path & "\Thefinal.mid" 'camino
MMControl1.Command = "Open" 'lo abre
MMControl1.Command = "Play" lo ejecuta
End Sub
Debemos traer de Componentes el control Multimedia y poner todos sus botones
a falsos e invisibles. Luego asociamos por cdigo a cada control el archivo
correspondiente, en este caso uno para el archivo Midi y otro para el Wave.
Determinamos que tipo de dispositivo es y explicitamos su camino, lo abrimos y
luego ejecutamos. No olvidarse el Open primero y luego el Play.
Private Sub Form_Unload(Cancel As Integer)
MMControl1.Command = "Close" 'lo cierra
MMControl2.Command = "Close" 'lo cierra
End Sub
Al descargar el formulario es fundamental cerrarlos para recuperar recursos del
sistema.
El ejercicio completo puede bajarse de Aqu

Ejercicio N 20: Vnculos.


Este ejercicio lo hemos armado a pedido de un visitante colombiano, Luis,
docente en Informtica. Y nos permite vincular una palabra con una imagen
especfica dentro del contenido desplegado en una Label.

Usamos como truco una label


transparente superpuesta sobre
la palabra que recibe el evento
click y que se vincula a la imagen.
El programa en ejecucin es
similar a esta imagen:

Sobre la palabra comida y animal tenemos superpuesta una label con la letra en
azul para que muestre la posible interactividad, tambin cambiamos el puntero
del mouse a una manito cuando pasa por sobre las palabras. Y al hacer click
cambia el contenido de la Image en su propiedad picture. El cdigo del evento
click de la primer label es:
Private Sub Label2_Click()
Image1.Picture = Picture2.Picture
Label4.Caption = "Una rica hamburguesa"
End Sub
Como vemos el cdigo es muy sencillo. El ejercicio completo lo pueden bajar de
Aqu.

Ejercicio N 21: Contrasea.


Varios visitantes nos han pedido algn ejercicio que use una contrasea para
entrar a un programa. Aqu va un ejemplo. Vamos a usar la funcin InputBox que
al abrir una ventana con una caja de texto nos permite ingresar la contrasea.
Si no queremos usar la funcin
podemos reemplazarla por el uso
de un pequeo formulario
diseado a nuestro gusto con una
caja de texto. El programa se ve
as:
Y el cdigo del evento click del Botn Acceso al Sistema es el siguiente:
Dim nombreusuario As String
Dim contrasea As String
nombreusuario = InputBox("Introduzca su Nombre")
contrasea = InputBox("Introduzca CONTRASEA")
If UCase(nombreusuario) = "LAURA" And LCase(contrasea) = "secreto" Then
MsgBox "BIENVENIDA LAURA! Preparada para trabajar con tu PC?"
Image1.Visible = True
ElseIf UCase(nombreusuario) = "MIRTA" And LCase(contrasea) = "duende"
Then

MsgBox "BIENVENIDA MIRTA AL SISTEMA! A trabajar no te duermas!"


Image1.Visible = True
Else
MsgBox "ACCESO DENEGADO"
End If
Adems de darnos el acceso con un saludo despliega una imagen en un control
Image, en caso de no ser la contrasea o el nombre del usuario el indicado nos
niega el acceso. Pueden bajar el ejercicio de Aqu.

Ejercicio N 22: Esqueleto.

Bueno, ustedes ya conocen el


mtodo de arrastrar y soltar, pero
como a nosotros nos gusta
mucho, hemos armado este
pequeo ejercicio, para armar un
esqueleto con sus distintas
partes. Espero los motive para
usarlo adaptndolo a otras
imgenes.
El cdigo ejemplo para una de las image que recibe la imagen del crneo
arrastrado es:
Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single)
If Source = Image9 Then
Image1.Picture = Image9.Picture
Image9.Visible = False
Label1.Caption = "Correcto!"
Label2.Caption = "Craneo"
Beep
Else
Label1.Caption = "Incorrecto!"
End If
Call fin
End Sub
El procedimiento fin es el que testea si esta es la ltima pieza colocada y su
cdigo es:
Private Sub fin()
If Image9.Visible = False And Image10.Visible = False And Image11.Visible = False

And Image12.Visible = False And Image13.Visible = False And Image14.Visible =


False And Image15.Visible = False And Image16.Visible = False Then
Beep
Label2.Caption = ""
Label1.Caption = "Ganaste!"
End If
End Sub
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 23: Editor de men.


En este ejercicio vamos a usar el
Editor de men de Visual Basic,
que nos permite crear un men
con las caractersticas de
windows. Para poder activarlo
debemos estar en la ventana de
formulario u objeto, no en la de
cdigo. Mediante botones de
opcin vamos a hacer visibles o
invisibles los mens que hemos
diseado, en este caso el tema
ser platos de comida y los
mens sern sobre: Platos fros,
calientes y postres. El programa
ejecutado se v as:

Posicionados en la ventana
formulario activamos el Editor
mediante el cono
y cuando
se abre la ventana vamos
configurado los distintos item del
men como se ve en la siguiente
imagen:

Aqu hay dos propiedades muy importantes, el caption del men que ser el ttulo
que aparezca en el men y el name del men, el caption puede estar vaco pero el
name no, Y vamos anidando los submens que queremos incorporar, como lo
muestra la imagen, para desplegar un submen hacemos click en next y en la
flecha hacia la derecha para hacer una sangra que indica los subtemas del
men. Cada integrante del men responde a un solo evento que es el Click. Para
probarlo podemos agregar el siguiente cdigo en el evento click de cada men:
MnuFiambres_Click()
MsgBox "haz hecho click en la opcin bandeja de Fiambres"
End Sub.
Esto no est includo en el ejercicio, pero puede agregarle cualqier evento para

testear el funcionamiento. En relacin al cdigo que hace visible u oculta un tipo


de men , agregamos un botn que aplica o ejecuta la opcin de opcin
seleccionada con el siguiente cdigo en el evento click del botn Aplicar:
Private Sub Command1_Click()
If Option1 Then ' mostrar men de Entradas
mnuEntradas.Visible = True
mnuCalientes.Visible = False
mnuPostres.Visible = False
ElseIf Option2 Then ' mostrar men Platos Calientes
mnuEntradas.Visible = False
mnuCalientes.Visible = True mnuPostres.Visible = False
Else
mnuEntradas.Visible = False
mnuCalientes.Visible = False
mnuPostres.Visible = True
End If
End Sub
este cdigo relaciona mediante un condicional el men que debe mostrarse y
oculta los restantes. En el procedimiento Load del formulario incluimos el
siguiente cdigo, que oculta los mens:
Private Sub Form_Load()
mnuEntradas.Visible = False
mnuCalientes.Visible = False
mnuPostres.Visible = False
End Sub
El cdigo del ejercicio puede bajarse de Aqu.

Ejercicio N 24: Print en el Form.


En este ejercicio usamos un Select case pero de una manera novedosa, ya que
nos permite seleccionar los colores del arco iris, sin enumerar las opciones
vlidas, sino poniendo todas en una sola lnea de cdigo. Al hacer click en el
formulario se abre un inputBox que nos pregunta qu color compone el arco
iris?, y al introducir un texto y hacer click en aceptar, con la intruccin Print nos
da salida por el formulario un mensaje que incluye al color elegido.

El mensaje puede ser: lo siento


ese color no pertenece al arco iris
o, s este color pertenece al arco
iris. En tiempo de ejecucin el
programa se ve as:
Private Sub Form_Click()
Dim msg As String, titulo As String
Dim color As String, colorArco As String
Beep
msg = "Introduzca un color."
titulo = " Cuestionario del Arco Iris."
color = InputBox(msg, titulo)
colorArco = LCase(color)
Select Case colorArco
Case "rojo", "naranja", "amarillo", "verde", "azul", "morado"
Print "S, el color "; color; " est en m Arco Iris."
Case Else
Print "Lo siento, pero el color "; color; " no est en m Arco Iris."
End Select
End Sub
El cdigo del ejercicio completo puede bajarse de Aqu.

Ejercicio N 25: Control Multimedia.


Para poder ejecutar un archivo AVI usamos el Control MCI, es un control
multimedia que ya usamos para ejecutar archivos MIDI en otro ejercicio, y que
debemos traer de componentes.

Lo original de este ejercicio es


que el archivo al ejecutarse no lo
hace en otra ventana, sino en un
control Picture.

El cdigo es el siguiente:
Private Sub video()
MMControl1.DeviceType = "AVIVideo"

MMControl1.filename = App.Path & "\ugachaka.Avi"


MMControl1.Command = "open"
MMControl1.hWndDisplay = Picture1.hWnd
MMControl1.Command = "play"
End Sub
Private Sub Command1_Click()
Call video
End Sub
Primero creamos un procedimiento llamado video y all volcamos las
indicaciones de la ejecucin, pero Atencin! Usamos la propiedad Handle
Window para manipular en que objeto se ejecuta el avi. Windows identifica as
que queremos que se despliegue en la picture, a traves de la propiedad hWnd del
control multimedia y de hWnd del control Picture.
El cdigo completo sin el AVI puede bajarse de Aqu.

Ejercicio N 26: Encuesta Graciosa.


Este ejercicio lo podemos hacer y
llevar, su arranque al trabajo y
preguntarle a nuestros colegas, o
compaeros si Est conforme
con el sueldo que gana. Como
damos por supuesto que la
mayora va a contestarnos que
No, hicimos un pequeo chiste ,
ya que al querer hacer Click en el
Botn de No, este se nos
escapar.
El cdigo es el siguiente:
Private Sub Command1_Click()
End
End Sub
Private Sub Command2_Click()
MsgBox "Sufre el mismo mal que millones de Argentinos!!"
End Sub
Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Command2.Move CInt(Rnd * (Width - Command2.Width)), CInt(Rnd * (Height Command2.Height))
End Sub
Con el Botn Si: salimos del programa y al querer hacer click en el botn: No, se

mueve aleatoriamente a una nueva posicin entre las medidas de ancho y alto del
formulario.
El cdigo del ejercicio pueden bajarlo de Aqu.

Ejercicio N 27: Temperaturas.

En este ejercicio, simplemente


entramos en tiempo de ejecucin
una temperatura para cada da de
la semana y luego haciendo click
en los botones: Alta, Media y Baja
, devuelve los valores en otras
cajas de texto. El cdigo es el
siguiente:
Option Explicit
Dim alta As Single
Dim dia As Integer
Dim baja As Single
Dim media As Single
Private Sub Command1_Click() ' mostrar el valor ms alto de los textbox() en el
text Alta
alta = Text1(0).Text
For dia = 1 To 6
If Text1(dia).Text > alta Then
alta = Text1(dia).Text
End If
Next dia
Text2.Text = alta
End Sub
Private Sub Command2_Click() 'calcular la ms baja y lo muestra en el
Text1(0).Text
For dia = 1 To 6
If Text1(dia).Text < baja Then
baja = Text1(dia).Text
End If
Next dia

Text3.Text = baja
End Sub
Private Sub
Command3_Click() 'calcula la media de los contenidos de text1()
Dim total As Single
Dim promedio As Single
total = 0
For dia = 0 To 6
total = total + Text1(dia)
Next dia
promedio = total / 7
Text4.Text = Format(promedio, "##.##") 'formato con dos decimales
End Sub
Private Sub Command4_Click()
For dia = 0 To 6
Text1(dia).Text = ""
Next dia
Text1(0).SetFocus
End Sub
Private Sub Command5_Click()
End
End Sub
Usando estructuras de repeticin For Next, calculamos los valores de alta y baja,
luego para la media sacamos por divisin el promedio.
El cdigo completo del ejercicio podemos bajarlo de Aqu.

Ejercicio N 28: Texto y RTF.


En este Ejercicio vamos a ver como hacemos para directamente desplegar un
texto ya copiado y grabado en un archivo con extensin TXT, que podemos tipear
en cualquier editor como el NotePad, por ejemplo y otro texto con formato RTF
(Rich Text File, o sea archivo de texto enriquecido) . Este formato puede grabarse
en el Word, vamos a grabar como... y all seleccionamos RTF.

Se llama texto enriquecido


porque permite incluir distintos
tipos de letras, colores y tamaos
o sea ms variantes en su
formato. Y el control que vamos a
usar para desplegar este texto
con formato RTF es el
RichTextBox 8es un control no
estndar, por lo tanto debemos
traerlo de Componentes), para el
texto comn o sea con formato
TXT, usaremos un TextBox de la
caja de herramientas estandar. El
formulario tendr el siguiente
aspecto:
Tenemos dos controles para desplegar el texto: un Text1 y un RichTextBox1, y
dos botones en cuyos eventos Click se desplegarn por cdigo los archivos
mencionados en los controles de texto. Primero debemos crear un archivo en el
NotePad o en el Word y grabarlo como TXT y otro con variacines en el tipo,
color y tamao de la letra y grabarlo como rtf. Luego abrimos visual y en creamos
un nuevo proyecto grabandolo en el mismo directorio y carpeta que tenemos los
archivos: txt y rtf. El cdigo de cada botn es el siguiente:
Option Explicit 'Esta expresin nos fuerza a declarar las variables.
Private Sub Command1_Click() 'Este boton es el que carga el 'archivo TXT
Dim pepe As String 'Declaramos una variable para identificar el 'archivo
Dim renglon As String 'Esta variable guardar el tamao de 'cada rengln del
archivo
renglon = Chr(13) & Chr(10) ' corta a otra lnea
Text1.Text = "" Open App.Path & "\rtf.txt"
For Input As #1' Abre (Open) y da 'entrada (Input) el archivo 'ubicado en el mismo
directorio y carpeta en que est la 'aplicacin. App.path significa en la ruta actual
de la'aplicacin. 'Sino hay que indicar cual es el Path.
While Not EOF(1) ' esto realiza un bucle o sea repite la accin 'hasta que se llegue
al final del archivo 1 (End of File)
Line Input #1, pepe$ ' le da entrada a la linea 1 del archivo Text1.Text = Text1.Text
& pepe & renglon 'concatena con & el 'texto del archivo y el tamao del regln.
Wend 'repite las ordenes en tanto la condicin es verdadera, en 'este caso hasta
tanto no termine el texto del archivo.
Close #1 ' cierra el archivo al terminar de cargarlo.
End Sub
Private Sub Command2_Click()
RichTextBox1.LoadFile (App.Path & "\rtf.rtf") 'como podemos 'ver con el Control
RichTextBox es ms sencillo el manejo de 'archivos, con la sentencia LoadFile se
carga el archivo 'indicando el camino para encontrarlo.
El cdigo completo puede bajarse de Aqu.

Ejercicio N 29: Rompecabezas.


En este ejercicio armaremos un rompecabezas con las partes del esqueleto de un
gato.
Los procedimientos usados ya
son conocidos: Dragear y soltar,
uso de un Control PictureClip y
de arrays de Imagenes para
cargar las partes del
rompecabezas.La imagen de la
aplicacin se parece a la
siguiente:
Option Explicit
Private Sub Command1_Click()'el boton Salir cierra el programa
End
End Sub
Private Sub Command2_Click() 'este boton corrige si estan bien 'colocadas las
imagenes. Debe escribirse todo el cdigo 'seguido o cortarlo usando el under _
If Picture1.Picture = Image1(2).Picture And Picture2.Picture = Image1(1).Picture
And Picture3.Picture = Image1(5).Picture And Picture4.Picture = Image1(0).Picture
And Picture5.Picture = Image1(4) And Picture6.Picture = Image1(3).Picture Then
Picture1.Visible = False
Picture2.Visible = False
Picture3.Visible = False
Picture4.Visible = False
Picture5.Visible = False
Picture6.Visible =
False Image2.Visible = True 'carga otra imagen oculta que 'muestra un gato
completo
Else 'sino es correcto vaca las imagenes para reiniciar el 'armado del
rompecabezas.
Picture1.Picture = Nothing
Picture2.Picture = Nothing
Picture3.Picture = Nothing
Picture4.Picture = Nothing
Picture5.Picture = Nothing
Picture6.Picture = Nothing
End If

End Sub
Private Sub Form_Activate()' al cargarse el form y pasar a estar 'activo carga las
celdas o partes en que dividimos la imagen con 'el PictureClip.
Image1(0).Picture = PictureClip1.GraphicCell(3) Image1(1).Picture =
PictureClip1.GraphicCell(1) Image1(2).Picture = PictureClip1.GraphicCell(0)
Image1(3).Picture = PictureClip1.GraphicCell(5) Image1(4).Picture =
PictureClip1.GraphicCell(4) Image1(5).Picture = PictureClip1.GraphicCell(2)
End Sub
Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
Picture1.Picture = Source
End Sub
Private Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single)
'carga las imagenes de origen al soltarlas
Picture2.Picture = Source
End Sub Private Sub Picture3_DragDrop(Source As Control, X As Single, Y As
Single)
Picture3.Picture = Source
End Sub
Private Sub
Picture4_DragDrop(Source As Control, X As Single, Y As Single)
Picture4.Picture = Source
End Sub
Private Sub Picture5_DragDrop(Source As Control, X As Single, Y As Single)
Picture5.Picture = Source
End Sub
Private Sub
Picture6_DragDrop(Source As Control, X As Single, Y As Single)
Picture6.Picture = Source
End Sub
El cdigo completo puede bajarse de Aqu.

Ejercicio N 30: Uso del Scrollbar.


Usaremos en este ejercicio dos Scrollbar horizontales para modificar el valor de
la propiedad QBColor que muestra 16 colores, con valores de 0 a 15, estos

valores estarn asociados a la ubicacin de la pestaa del Scroll y se mostrarn


en dos cajas de texto.

De acuerdo a su valor este


determinar el color del fondo del
formulario, y del tipo de un terce
control Text. La aplicacin se as:

Aqu tambin debemos prestar atencin a la propiedad Value, Y a los


procedimientos Change y Scroll, que testean cuando se modifica el valor de la
barra horizontal. Tambin debemos determinar los valores de las propiedades
Min y Max en este caso, a 0 la primera y 15 la segunda y dejamos el LargeChange
o sea el largo del cambio, a 1. El cdigo es el siguiente:
Option Explicit
HScroll1_Change()
Text1.Text = HScroll1.Value
Text3.BackColor = QBColor(HScroll1.Value)
End Sub
Private Sub
HScroll1_Scroll()
Text1.Text = HScroll1.Value
Text3.BackColor = QBColor(HScroll1.Value)
End Sub
Private Sub
HScroll2_Change()
Text2.Text = HScroll2.Value
Text3.ForeColor = QBColor(HScroll2.Value)
End Sub
Private Sub
HScroll2_Scroll()
Text2.Text = HScroll2.Value
Text3.ForeColor = QBColor(HScroll2.Value)
End Sub
El cdigo completo puede bajarse de Aqu.

Ejercicio N 31: Barra de Porcentaje.

Este ejercicio nos permite hacer


una Barra de progreso al estilo
windows, donde nos muestra el
porcentaje cubierto.El formulario
tiene el siguiente aspecto:
Los controles que usamos son un Botn que activa el proceso y una picture que
va cambiando su color a medida que el porcentaje aumenta.El cdigo es el
siguiente:
Private Sub Command1_Click()
Picture1.ForeColor = RGB(0, 0, 255) 'color azul
For i = 0 To 100 'un bucle que llama al procedimiento 'actualizaprogress
actualizaprogress Picture1, i
Call pausa 'procedimiento de espera
Next i
End Sub
Private Sub actualizaprogress(pb As Control, ByVal percent)
Dim num$ ' porcentaje
'el autoredraw de la picture debe estar a = true
pb.Cls
pb.ScaleWidth = 100
pb.DrawMode = 10
num$ = Format(percent, "##") + "%" 'calcula el porcentaje
pb.FontSize = 18
pb.CurrentX = 50 - pb.TextWidth(num$) / 2
pb.CurrentY = (pb.ScaleHeight - pb.TextHeight(num$)) / 2
pb.Print num$ 'imprime en la picture el porcentaje
pb.Line (0, 0)-(percent, pb.ScaleHeight), , BF 'dibuja el 'rectangulo
pb.Refresh 'actualiza la picture
End Sub
Private Sub pausa() 'procedimiento que detiene la aplicacin 'un segundo
Dim controlar
Dim comenzar

comenzar = Timer
Do Until controlar >= comenzar + 0.2
controlar = Timer
DoEvents
Loop
End Sub
El cdigo completo puede bajarse de Aqu.

Ejercicio N 32: Control Tab.

El control Tab o ficha con pestaa


debemos traerlo de Componentes
y se llama Microsoft Tabbed
Dialog Control 5.0. Este control
nos permite ordenar la
informacion de una tabla de una
base de datos en distintas fichas,
a las que accedemos por la
eleccin de una de sus pestaas.
El formulario se ve as:

Esta aplicacin tiene adems del Tab control un Data control que conecta con la
base de datos que elijamos, y dentro del control tab tenemos controles Text y
Labels para desplegar la informacin, como ya hemos hecho en otros ejercicios
con Base de Datos. No hay cdigo escrito, ya que las conecciones a la tabla
estan hechas directamente a travs de la ventana Propiedades. Tener en cuenta
las propiedades: DataBasename, y los controles Text que desplieguen los
campos elejidos.
La Aplicacin puede bajarse de Aqu.

Ejercicio N 33: Control AniGif.


Esta aplicacin que hace muy poco, solo muestra un gato moviendo los ojos y la
cola, activa un gif animado usando un Control llamado AniGif, que consegu en
Internet. Puede conseguirse una demo del control y en caso de querer adoptarlo
hay que comprarlo.
En el archivo zipeado de la
Aplicacin se incluye el control
Anigif.OCX, Es conveniente que
lo copien en el System de
Windows, si despues quieren
traerlo desde Componentes. el
formulario se ve as.
La aplicacin con el control pueden bajarse de Aqu.

Ejercicio N 34: Transicin.

En este ejercicio vamos a usar un


ActiveX que permite hacer efctos
de transicin entre varias
imagenes, es un shareware,
bajado de Internet, muy fcil de
usar. El form se ve as:

El cdigo es el siguiente:
Option Explicit
Public pc, i As Integer
Private Sub Command1_Click()
Do
DoEvents
TransFX1.Effect = i
TransFX1.Start
Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg")
pc = pc + 1: If pc > 3 Then pc = 1 i = i + 1: If i = 13 Then i = 1 Loop
End Sub
Private Sub
Command2_Click()
End
End Sub
Private Sub Form_Load()
pc = 1
i=1
Set TransFX1.PicTarget = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg")
Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc + 1) & ".jpg")
End Sub
Las propiedades principales son: PicTarget que es la primera imagen que carga y
PicBuffer las siguientes, como minimo debemos tener 2 imagenes , pero
podemos cargar varias ms. Y el mtodo Start que lo inicia, podramos usar un
timer pero en este caso es un bucle el que repite la operacin pasando entre los
15 efectos posibles que permite el control.

Por cualquier duda incluyo el archivo de Ayuda del creador del activeX. Los
archivos con el control pueden bajarse de Aqu.

Ejercicio N 35: Ranita.

Este ejercicio es un juego muy


simple que al hacer click en los
insectos, si estan prximos a la
rana, sta simula comerlos y
suma un puntaje.

Los insectos se mueven en forma aleatoria mediante un random y los ojos de la


ranita tienen una animacin, donde se abren y cierran, adems de los controles
Images, tenemos dos labels transparentes, una que muestra el puntaje y otra que
resetea la aplicacin. Y el sonido est activado usando la API sndPlaySound de
windows.
El cdigo es el siguiente:
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA"
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1 ' reproduccin asncrona
Const SND_NODEFAULT = &H2 ' silencio no predeterminado, si no se encuentra
sonido
Private ret As Integer
Private contar As Integer
Private a As Integer
Private b As Integer
Private tiempo As Integer
Private Sub pausa()
Dim comenzar
Dim controlar
comenzar = Timer
Do Until controlar >= comenzar + 1
controlar = Timer
DoEvents

Loop
End Sub
Private Sub Form_Load()
Randomize b = 0
End Sub
Private Sub Image6_Click(Index As Integer) Image6(Index).Visible = False
b = b + 10
If Image6(Index).Left >= 2600 Then
Image7.Visible = True
ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASYNC Or
SND_NODEFAULT)
ElseIf Image6(Index).Left <= 2600 Then
Image8.Visible = True
ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASYNC Or
SND_NODEFAULT)
End If
Call pausa
Image7.Visible = False
Image8.Visible = False
Label1.Caption = "Puntaje =" & b
Call ganar
Call perder
End Sub
Private Sub Label2_Click()
Unload Me
Me.Show
End Sub
Private Sub Timer1_Timer()
contar = contar + 1
If contar = 1 Then
Image1.Picture = Image3.Picture

Image2.Picture = Image3.Picture
ElseIf contar = 2 Then
Image1.Picture = Image4.Picture
Image2.Picture = Image4.Picture
ElseIf contar = 3 Then
Image1.Picture = Image3.Picture
Image2.Picture = Image3.Picture
ElseIf contar = 4 Then
Image1.Picture = Image5.Picture
Image2.Picture = Image5.Picture
contar = 0
End If
End Sub
Private Sub
Timer2_Timer()
Dim x As Integer, y As Integer
For a = 0 To 9
Image6(a).Move CInt(Rnd * (Width - Image6(a).Width)), CInt(Rnd * (Height - 1600))
Next a
End Sub
Private Sub ganar()
If b = 100 Then
Label1.Caption = "GANASTE!!"
ret = sndPlaySound(App.Path & "\Fanfare.wav", SND_ASYNC Or
SND_NODEFAULT)
End If
End Sub
Private Sub perder()
If tiempo = 60 Then
Timer1.Enabled = False

Timer2.Enabled = False
Timer3.Enabled = False
Label1.Caption = "Perdiste!!"
ret = sndPlaySound(App.Path & "\desapa.wav", SND_ASYNC Or
SND_NODEFAULT)
End If
End Sub
Private Sub
Timer3_Timer() tiempo = tiempo + 1
Call perder
End Sub
Como vemos creamos tres procedimientos personalizados, ganar, perder y
pausa. El ejercicio completo puede bajarse de Aqu.

Ejercicio N 36: Patos.

Este es otro ejemplo de


animacin usando el mtodo
PaintPicture combinado con el
control pictureClip y aplicando
las constantes grficas que
permiten transparentar el fondo.

Option Explicit
Const SRCAND = &H8800C6
Const SRCINVERT = &H660046
Private Sub Form_Load()
PictureClip1.Rows = 3
PictureClip1.Cols = 3
PictureClip2.Rows = 3
PictureClip2.Cols = 3
End Sub
Private Sub Timer1_Timer()
Form1.Refresh
Dim x As Single, y As Single

Static imagenactual As Integer


Static imagenactual1 As Integer
Static xactual As Integer
Static xactual1 As Integer
If imagenactual > 5 Then
imagenactual = 3
If imagenactual < 2 Then
imagenactual = 2
If imagenactual1 > 2 Then
imagenactual1 = 0
If imagenactual1 < 0 Then
imagenactual1 = 0
If xactual > 1000 Then
xactual = 10
If xactual < 0 Then
xactual = 10
If xactual1 > 1000 Then
xactual = 1000
If xactual1 <= 0 Then
xactual1 = 1000
Form1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 120, , , , , , ,
SRCAND
Form1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 120, , , , , , ,
SRCINVERT
Form1.PaintPicture PictureClip2.GraphicCell(imagenactual1), xactual1, 250, , , , , ,
, SRCAND
Form1.PaintPicture PictureClip1.GraphicCell(imagenactual1), xactual1, 250, , , , , ,
, SRCINVERT
imagenactual = imagenactual + 1
imagenactual1 = imagenactual1 + 1
xactual = xactual + 100
xactual1 = xactual1 - 100

End Sub
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 37: Qu ves?.


Este es un juego de mesa pero en
su version digital. Declaramos un
array con un nmero determinado
de palabras que seran elegidas al
azar, para que no se repita
siempre el mismo orden, la
subrutina que usamos es similar
al del juego memoria, luego en un
control de texto ingresamos la
palabra indicada y
automticamente nos da un punto
si es correcta.
El cdigo es el siguiente:
Option Explicit
Dim numero(1 To 20) As Integer
Dim I As Integer
Dim a As Integer
Dim J As Integer
Dim idxtemp As Integer
Dim s As Integer
Private Sub azar()
Static temparray(1 To 20) As Integer
Randomize
For I = 1 To 20 temparray(I) = I
Next I
Top = 20
For I = 1 To 20
idxtemp = Int(Top * Rnd + 1)
numero(I) = temparray(idxtemp)
For J = idxtemp To Top - 1
temparray(J) = temparray(J + 1)
Next J

Top = Top - 1
'Print numero(I)
Next I
End Sub
Private Sub Command1_Click()
If I > 1 Then
Label1.Caption = numero(I - 1)
Call mostrar
I=I-1
Else
Call azar
End If
End Sub
Private Sub
Command3_Click()
End
End Sub
Private Sub Command4_Click()
Text1.Text = ""
Text1.SetFocus
End Sub
Private Sub
Form_Activate()
Text1.SetFocus
End Sub
Private Sub
Form_Load()
Randomize
Call azar
Call Command1_Click

End Sub
Private Sub mostrar()
Select Case Label1
Case 1
Command2.Picture = Image1(0).Picture
Case 2
Command2.Picture = Image1(1).Picture
Case 3
Command2.Picture = Image1(2).Picture
Case 4
Command2.Picture = Image1(3).Picture
Case 5
Command2.Picture = Image1(4).Picture
Case 6
Command2.Picture = Image1(5).Picture
Case 7
Command2.Picture = Image1(6).Picture
Case 8
Command2.Picture = Image1(7).Picture
Case 9
Command2.Picture = Image1(8).Picture
Case 10
Command2.Picture = Image1(9).Picture
Case 11
Command2.Picture = Image1(10).Picture
Case 12
Command2.Picture = Image1(11).Picture
Case 13
Command2.Picture = Image1(12).Picture
Case 14

Command2.Picture = Image1(13).Picture
Case 15
Command2.Picture = Image1(14).Picture
Case 16
Command2.Picture = Image1(15).Picture
Case 17
Command2.Picture = Image1(16).Picture
Case 18
Command2.Picture = Image1(17).Picture
Case 19
Command2.Picture = Image1(18).Picture
Case 20
Command2.Picture = Image1(19).Picture
End Select
End Sub
Private Sub
Text1_Change()
Call corregir
End Sub
Private Sub corregir()
Static puntos As Integer
Select Case Label1
Case 1
If UCase(Text1.Text) = "CARAMBOLA" Then
puntos = puntos + 1
Case 2
If UCase(Text1.Text) = "APRESADO" Then
puntos = puntos + 1
Case 3
If UCase(Text1.Text) = "APRENDER" Then

puntos = puntos + 1
Case 4
If UCase(Text1.Text) = "CAJN" Then
puntos = puntos + 1
Case 5
If UCase(Text1.Text) = "CAMPAA" Then
puntos = puntos + 1
Case 6
If UCase(Text1.Text) = "CANOSO" Then
puntos = puntos + 1
Case 7
If UCase(Text1.Text) = "CARAC" Then
puntos = puntos + 1
Case 8
If UCase(Text1.Text) = "CASINO" Then
puntos = puntos + 1
Case 9
If UCase(Text1.Text) = "CORAZONADA" Then
puntos = puntos + 1
Case 10
If UCase(Text1.Text) = "CUCHARITA" Then
puntos = puntos + 1
Case 11
If UCase(Text1.Text) = "DEMONIO" Then
puntos = puntos + 1
Case 12
If UCase(Text1.Text) = "DEPORTE" Then
puntos = puntos + 1
Case 13
If UCase(Text1.Text) = "DIARIO" Then

puntos = puntos + 1
Case 14
If UCase(Text1.Text) = "DUENDE" Then
puntos = puntos + 1
Case 15
If UCase(Text1.Text) = "AUSTRALIA" Then
puntos = puntos + 1
Case 16
If UCase(Text1.Text) = "FLORENCIA" Then
puntos = puntos + 1
Case 17
If UCase(Text1.Text) = "INGENIO" Then
puntos = puntos + 1
Case 18
If UCase(Text1.Text) = "REINO" Then
puntos = puntos + 1
Case 19
If UCase(Text1.Text) = "VATICANO" Then
puntos = puntos + 1
Case 20
If UCase(Text1.Text) = "SOLDADO" Then
puntos = puntos + 1
End Select
Label2.Caption = "PUNTOS: " & puntos If puntos >= 20 Then
Label2.Caption = "Ganaste!"
End If
End Sub
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 38: Love.

Esta es una simple animacin


hecha con un Timer y una
secuencia de imgenes, pero muy
simptica que simula una tarjeta
animada. Su cdigo es:
Option Explicit
Dim a As Integer
Private Sub Command1_Click()
End
End Sub
Private Sub Timer1_Timer()
a=a+1
If a >= 7 Then
a=0
Picture1.Picture = Image1(a).Picture
End Sub
La aplicacin completa puede bajarse de Aqu.

Ejercicio N 39: Mosaico de Fondo


Muchas veces queremos
desplegar en un fondo una
imagen pequea repetidas veces.
En este ejercicio vamos a lograrlo
creando un procedimiento de tipo
pblico en un modulo con
extensin .bas y luego lo
convocamos desde el Formulario
en el procemiento Click de un
array de imagenes, que se
encuentran dentro de un Frame o
Recuadro para su eleccin.
El cdigo para el Mdulo es:
Option Explicit
Public Sub TileBitmap(Source As Object, _ Destination As Object)
Dim Y As Integer
Dim X As Integer 'Ejecuta dos bucles anidados que repiten en el 'fondo la imagen
hasta cubrirla
For Y = 0 To

Destination.ScaleHeight _ Step Source.ScaleHeight


For X = 0 To
Destination.ScaleWidth Step _ Source.ScaleWidth
Destination.PaintPicture _ Source.Picture, X, Y
Next 'X
Next 'Y
End Sub
Usamos el Mtodo PaintPicture ya conocido en nuestras animaciones, para
copiar la imagen en el fondo del formulario. En un bucle anidado For Next que
repite el ancho y el alto de la imagen.
Luego lo convocamos desde el Formulario en el Click de un Array de imagenes,
que muestran distintas opciones de dibujo:
Private Sub picSource_Click(Index As Integer)
'Toma la imagen del array de controles y la copia en el formulario 'como un
mosaico repetido.
TileBitmap picSource(Index), Me
End Sub
Convoca al procedimiento pblico del Mdulo y lo vuelca en el Formulario activo
o sea Me.
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 40: Un Conejo Animado.

Este ejercicio lo enva una de mis


seguidoras de Visual Basic,
alumna del profesorado de
Informtica: Nora Vila. Gracias.
Tenemos en el formulario cinco
controles: dos PictureClip para
cargar las grillas del Sprite y su
mscara, dos botones que
activan y desactivan el Timer y un
Timer para repetir la secuencia
del conejo caminando.
El cdigo es el siguiente:
Option Explicit
Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const
SRCINVERT = &H660046 ' (DWORD) dest = origen XOR 'dest
Dim cone As Integer
Dim a As Integer

Private Sub Command1_Click()


Timer1.Enabled = True End
Sub Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Form_Load()
PictureClip1.Cols = 6
PictureClip1.Rows = 1
PictureClip2.Cols = 6
PictureClip2.Rows = 1
End Sub
Private Sub Timer1_Timer()
Picture1.Refresh
Static x, y, i As Integer
cone = cone + 1
If cone >= 6 Then cone = 0
Picture1.PaintPicture PictureClip1.GraphicCell(cone), x, 50, , , , , , , SRCAND ' para
la mascara Picture1.PaintPicture PictureClip2.GraphicCell(cone), x, 50, , , , , , ,
SRCINVERT ' para la imagen(animacin)
x = x + 60
If x >= 570 Then x = 0
End If
End Sub
El ejercicio completo puede bajarse de Aqu. Gracias Nora.

Ejercicio N 41: Mtodo Draw.


Otra manera de realizar una
animacin transparente es
usando el Mtodo Draw. En este
ejercicio usamos una Picture con
el paisaje para desplegar dos
imagenes del hombrecito, en
distinta posicin desplegadas en
un Control ImageList, que posee
la propiedad MaskColor y nos va
a permitir transparentar el fondo
blanco del dibujo, al
superponerse al paisaje.

Esta animacin podemos activarla manualmente con el Click de un botn o,


automticamente con el Click de otro botn que activa a su vez un Timer.
Veamos el cdigo:
Private Sub Command1_Click()'el botn Automtico
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Static flag As Integer
Timer1.Enabled = False
flag = flag + 1
If flag > 2 Then
flag = 1
End If
Picture1.Refresh ' refresca el fondo de la Picture
' El metodo draw en accion
ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent
End Sub
Private Sub Timer1_Timer()
Static flag As Integer
flag = flag + 1 If flag > 2
Then flag = 1
End If
Picture1.Refresh
' El mtodo draw en accin
ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent
End Sub
El mtodo Refresh refresca la imagen de la Picture donde se ejecuta el Mtodo
Draw. Los argumentos de este mtodo son el controlador de contexto de
dispositivo (HDC) del objeto que lo recibe o sea la Picture1.hDC, su ubicacin en
las coordenadas x, y, y el estilo grfico transparente correspondiente al valor del
color de la propiedad MaskColor del ImageList.
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 42: ScrollBar y Cdigo ASCII

Option Explicit
Private Sub HScroll1_Change()
Label3.Caption =
Format$(HScroll1.Value)
Label4.Caption =
Chr$(HScroll1.Value)
End Sub
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 43: Simulacin

Este ejercicio de simulacin


contiene un listado de posibles
palabras contenidas dentro de la
respuesta a las preguntas de un
Psiclogo virtual, y simula esta
relacin en un dilogo entre
doctor y paciente.
El Los controles son: una label que indica que debemos contesar la pregunta y
luego hacer click en la imagen del doctor. Una label que despliega las preguntas
que hace el doctor y una caja de texto enriquecido osea un RichTextBox donde
debemos ingresar nosotros las respuestas. Ademas tenemos oculto un control
list que carga la lista de palabras claves. El cdigo es el siguiente:
Option Explicit
Dim contar As Integer
Dim palabra As Integer
Dim frase As String
Dim pepe As String
Dim a As Integer Private
Sub pausa()
Dim comenzar
Dim chequeo
comenzar = Timer
Do Until chequeo >= comenzar + 1
chequeo = Timer
DoEvents
Loop
End Sub

Private Sub Command1_Click()


End
End Sub
Private Sub Form_Activate()
RichTextBox1.SetFocus
End Sub
Private Sub Form_Load()
Randomize
Call frasedoctor
List1.AddItem "tu"
List1.AddItem "te"
List1.AddItem "pienso"
List1.AddItem "bien"
List1.AddItem "regular"
List1.AddItem "que"
List1.AddItem "quiero"
List1.AddItem "deprimido"
List1.AddItem "sin"
List1.AddItem "dificil"
List1.AddItem "esperar"
List1.AddItem "necesito"
List1.AddItem "por que?"
List1.AddItem "se"
List1.AddItem "adios"
List1.AddItem "odio"
List1.AddItem "amor"
List1.AddItem "asesino"
List1.AddItem "matar"
List1.AddItem "grosero"
List1.AddItem "no puedo"

List1.AddItem "fracaso"
List1.AddItem "nunca"
List1.AddItem "infeliz"
'Text1.Text = List1.List(3)
End Sub Private
Sub frasedoctor()
frase = Int(Rnd * 8)
Select Case frase
Case 0
Label1.Caption = "Cmo est Ud.?"
Case 1
Label1.Caption = "Cul es su estado de nimo?"
Case 2
Label1.Caption = "Tuvo Ud. una infancia feliz?"
Case 3
Label1.Caption = "Es feliz con el medio que lo rodea?"
Case 4
Label1.Caption = "Tiene problemas para relacionarse?"
Case 5
Label1.Caption = "Odia Ud. a su padre?"
Case 6
Label1.Caption = "Cree que no lo comprenden?"
Case 7
Label1.Caption = "Yo no estoy seguro de entenderlo"
End Select
End Sub
Private Sub respuestadoctor()
palabra = 0
If palabra >= 0 Then
For a = 0 To 24

pepe = List1.List(a) palabra = RichTextBox1.Find(pepe, palabra + 1, , 2) pepe =


RichTextBox1.SelText
Next a
End If
'Print pepe
RichTextBox1.Text = ""
Call respuestapaciente
End Sub
Private Sub
Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call respuestadoctor
End Sub
Private Sub
RichTextBox1_Click()
RichTextBox1.Text = ""
End Sub
Private Sub respuestapaciente()
Select Case pepe
Case "tu"
Label1.Caption = "No hablemos de mi."
Case "te"
Label1.Caption = "Dejemos de hablar de mi."
Case "pienso"
Label1.Caption = "Por qu piensa eso?"
Case "bien"
Label1.Caption = " Me alegra, cunteme sobre Ud."
Case "regular"
Label1.Caption = "Entiendo, Cuenteme sobre Ud."
Case "que"
Label1.Caption = "Por qu pregunta Ud.?"

Case "quiero"
Label1.Caption = "Por qu quiere usted eso?"
Case "deprimido"
Label1.Caption = "Qu lo deprime?"
Case "sin"
Label1.Caption = "Entiendo. Cree que lo puede remediar?"
Case "por que"
Label1.Caption = "Recuerde, la terapia es buena para Ud."
Case "dificil"
Label1.Caption = "No se preocupe, ya cambiarn las cosas."
Case "esperar"
Label1.Caption = "Tenga algo de paciencia."
Case "necesito"
Label1.Caption = "Todos necesitamos cosas."
Case "se"
Label1.Caption = "Como sabe Ud. eso?"
Case "odio"
Label1.Caption = "El odio nunca conduce a nada bueno"
Case "amor"
Label1.Caption = "Es importante amar"
Case "asesino"
Label1.Caption = "No me gusta la gente que mata"
Case "matar"
Label1.Caption = "No esta bien matar"
Case "grosero"
Label1.Caption = "No esta bien que me hable as!"
Case "no puedo"
Label1.Caption = "No sea negativo, sea positivo"
Case "fracaso"
Label1.Caption = " Debe luchar por el exito"

Case "nunca"
Label1.Caption = "No sea negativo, sea positivo"
Case "infeliz"
Label1.Caption = "Por que es infeliz?"
Case "adios"
Label1.Caption = "Le enviar la factura. Gracias."
RichTextBox1.Locked = True
Beep
Call pausa
End Case
Else
Call frasedoctor
End Select
End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 44: Alarma


El siguiente ejercicio nos permite crear un recordatorio de tareas, mientras
estamos trabajando con la computadora y tenemos este programa activado,
podemos quedarnos tranquilos de que nos avisa a determinada hora, si estamos
en una clase nos permite programar el tiempo de tarea de los alumnos, por
ejemplo. En tiempo de ejecucin se ve as:
En el formulario tenemos una
label para el ttulo y una picture
que muestra el icono de un reloj,
luego dos cajas de texto donde
debemos ingresar la hora del
aviso y el texto del mensaje y dos
botones uno para cancelar y el
otro para activar la aplicacin,
obvamente usamos un timer que
chequea si la hora ya es la
indicada.
Al cumplirse la condicin despliega un MsgBox con el mensaje que ingresamos,
y mientras se mantiene minimizada la aplicacin para que podamos seguir
trabjando con otros programas.
El cdigo es :
Option Explicit
Dim recordar As String

Dim horaActual As Date


Private Sub Command1_Click()
Timer1.Enabled = True
Me.WindowState = 1
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub
Form_Activate()
Text1.SetFocus
End Sub
Private Sub
Timer1_Timer()
horaActual = Format(Time, "hh:mm")
If horaActual >= Text1.Text Then
Beep
recordar = MsgBox(Text2.Text, vbInformation, "Alarma")
Timer1.Enabled = False
Form1.WindowState = 0
End If
End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 45: Artista

E este es un ejercicio muy simple


que dibuja puntos en un
formulario. Vamos a empezar a
ver cierta funciones grficas de
visual basic. Lo importante para
que se salgan por impresora es
que la propiedad AutoRedraw del
formulario este a True. Sino no se
ven los puntos en la impresin.

El cdigo del ejercicio es:


Option Explicit
Private Sub Command1_Click()
Dim x As Integer
Dim y As Integer
Dim color As Integer
Dim i As Integer
For i = 1 To 20
x = Int(ScaleWidth * Rnd)
y = Int(ScaleHeight * Rnd)
color = Int(16 * Rnd)
PSet (x, y), QBColor(color)
Next
End Sub
Private Sub
Command2_Click()
Cls
End Sub
Private Sub Command3_Click()
Form1.PrintForm
End Sub
Private Sub Form_Load()
Randomize
End Sub

Como vemos usamos la funcin randomize para ubicar los puntos en forma
aleatoria en el formulario y un bucle For/Next que dibuja 20 puntos por cada click
que hacemos en el botn: Puntos, el otro botn borra con Cls lo dibujo o sea
limpia el form. El mtodo Pset (Point Set) dibuja los puntos combinada con
QBColor que le asigna un color. El formato de los puntos es Dot.
El ejercicio completo pueden bajarlo de AQU.

Ejercicio N 46: Figuras

En este ejercicio vamos a ver


otros mtodos grficos de Visual
Basic, que complementan el
Punto visto es el ejemplo anterior.
Veremos Crculos, Rectngulos y
Lneas. Abrimos un nuevo
formulario e insertamos 8
botones: 1)Borrar o Limpiar
Formulario, 2)Rectas,
3)Rectngulos, 4)Rect Rellenos,
5)Crculos, 6)Crculos Rellenos,
7)Puntos, y 8)Imprimir. En tiempo
de ejecucin se ve as:
La declaracin general de variables y el cdigo para cada botn es:
Option Explicit
Dim x, y, r As Integer
Dim x1 As Integer, y1 As Integer
Dim x2 As Integer, y2 As Integer
Dim color As Integer
Dim ccolor As Integer
Private Sub Command1_Click()'Botn Rectas
'puntos extremos y color aleatorio
x1 = Fix(Me.ScaleWidth * Rnd)
y1 = Fix(Me.ScaleHeight * Rnd)
x2 = Fix(Me.ScaleWidth * Rnd)
y2 = Fix(Me.ScaleHeight * Rnd)
color = Fix(16 * Rnd) Randomize
'trazar una recta
Line (x1, y1)-(x2, y2), QBColor(color) 'los dos primeros valores 'establecen un
punto extremo y los otros dos el otro punto extemo, 'entre ambos se dibuja la
recta.
End Sub

Private Sub Command2_Click() 'Botn Imprimir por Impresora.


Me.PrintForm
End Sub
Private Sub Command3_Click() 'Botn Rectngulo
x1 = Fix(Me.ScaleWidth * Rnd)
y1 = Fix(Me.ScaleHeight * Rnd)
x2 = Fix(Me.ScaleWidth * Rnd)
y2 = Fix(Me.ScaleHeight * Rnd)
color = Fix(16 * Rnd)'elige al azar un color
Randomize FillStyle = 1
'dibuja un cuadro(B)
Line (x1, y1)-(x2, y2), QBColor(color), B
End Sub
Private Sub Command4_Click() 'Botn Rectngulo relleno
x1 = Fix(Me.ScaleWidth * Rnd)
y1 = Fix(Me.ScaleHeight * Rnd)
x2 = Fix(Me.ScaleWidth * Rnd)
y2 = Fix(Me.ScaleHeight * Rnd)
color = Fix(16 * Rnd)Randomize
'dibuja un cuadro(B)
Line (x1, y1)-(x2, y2), QBColor(color), BF
End Sub
Private Sub Command5_Click() 'Borra o Limpia Formulario
Cls
End Sub
Private Sub Command6_Click() 'Botn Crculo relleno
'coordenadas del Centro, Radio y Color, aleatorias
x = Fix(Me.ScaleWidth * Rnd)
y = Fix(Me.ScaleHeight * Rnd)
r = Fix(1000 * Rnd)

color = Fix(16 * Rnd)


Randomize
FillStyle = 1'rellena el crculo
'dibuja una circunferencia
Circle (x, y), r, QBColor(color)
End Sub
Private Sub Command7_Click() 'Botn Crculo
x = Fix(Me.ScaleWidth * Rnd)
y = Fix(Me.ScaleHeight * Rnd)
r = Fix(1000 * Rnd)
color = Fix(16 * Rnd)
ccolor = Fix(16 * Rnd)
Randomize
FillStyle = 0
FillColor = QBColor(ccolor)
'dibuja una circunferencia
Circle (x, y), r, QBColor(color)
End Sub
Private Sub Command8_Click() 'Botn Puntos
Randomize
x = Fix(Me.ScaleWidth * Rnd)
y = Fix(Me.ScaleHeight * Rnd)
color = Fix(16 * Rnd)
PSet (x, y), QBColor(color) 'Dibuja Puntos
End Sub
Para dibujar las Rectas debemos indicarle dos valores de: x, e y para uno de los
puntos extremos y x1, Y1 para el otro luego con el mtodo Line dibuja una recta
que une ambos puntos. Cuando dibuja un rectngulo. Tambin necesita estos
valores pero para dibujar dos lneas rectas que luego repite en espejo para
formar una Box o Caja, y as aparece el cuadrado o rectngulo. Cuandoq
uqeremos que ese rectngulo este relleno la indicacin ser BF o sea Box Fill, o
Caja rellena. Para esto la propiedad FillStyle debe estar a True. Y con el Crculo
necesitamos un valor para x, y otro para y para establecer un punto que ser el
centro de la circunferencia y un valor para el radio. Para determinar los colores lo
hacemos usando un Randome y la funcin QBColor. El ejercicio completo puede
bajarse de Aqu.

Volver al Men Principal.

Volver a Ejercicios.

ltimos Ejercicios:
Promediando Notas

Sumar Matrices

Array de Controles

Impresin Multilnea

Ordenando una Tabla

Funcin Mid

TreeView

Movimiento

Efectos Visuales

Mtodo Line

Eventos con el Mouse

Manejo de Errores

Msica

Video

Clculo de inters

Arreglos

Texto3D

Carita

Ejercicio N 71: Promedio de Notas

Este ejercicio nos permite


ingresar una cantidad de
valores, por ejemplo las
notas de un alumno, y
luego obtener su
promedio. En el
formulario usamos cuatro
botones, dos cajas de
texto, y un ListBox, un
frame y tres Labels. El
cdigo es el siguiente:

Option Explicit
Dim Nota() As Single
Dim N As Integer 'Nmero total de notas.

Private Sub cmdBorrarNota_Click()


Dim i As Integer, NotaInd As Integer
NotaInd = List1.ListIndex + 1 'Asigna el orden del elemento de la lista a una
variable.
If List1.ListIndex = -1 Then 'Si no esta checheada la lista.
MsgBox "Haga click en la lista para borrar la nota"
Exit Sub
Else
List1.RemoveItem (List1.ListIndex) 'Borra de la Lista la Nota
Text1.Text = "" 'Limpia el texto.

'Eliminar la nota de indice (List1.ListIndex+1) y correr las notas


For i = NotaInd To N - 1
Nota(i) = Nota(i + 1)
Next i
N = N - 1 'actualizando nmero de notas por ser borrada una.
If N > 1 Then ReDim Preserve Nota(1 To N) 'Reajustando la dimensin del arreglo
notas
Text2.Text = ""
End If
End Sub
Private Sub cmdEntrarNota_Click()
If Text1.Text = "" Then 'Si no se han introducido nota.
MsgBox "No se ha introducido una nota"
Text1.SetFocus
Exit Sub
End If
N = N + 1 'Inicializa el conteo de las notas entradas.
ReDim Preserve Nota(1 To N) 'Redimesiona el arreglo.
Nota(N) = Text1.Text 'Asigna el valor al arreglo.
List1.AddItem (Nota(N)) 'Aade la nota a la lista.
cmdEntrarNota.Enabled = False
End Sub
Private Sub cmdPromedio_Click()
Dim Suma As Single
Dim Promedio As Single
Dim J As Integer
If N = 0 Then 'Si el nmero de notas es cero.
MsgBox "No existen valores para promediar"
Exit Sub
End If
Suma = 0
For J = 1 To N 'Suma todas las notas
Suma = Suma + Nota(J)
Next J
Promedio = Suma / N
Text2.Text = Promedio
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Activate()
Text1.SetFocus
End Sub
Private Sub Text1_Change()
cmdEntrarNota.Enabled = True
Text2.Text = ""
End Sub
Private Sub Text1_Click()
cmdEntrarNota.Enabled = True
End Sub
Private Sub Text1_GotFocus()
'Para Selelccionar el texto al hacer click en l.
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)

End Sub
Private Sub Text1_LostFocus()
If IsNumeric(Text1.Text) Then 'Chequea si el valor es numrico.
If Text1.Text <= 0 Then 'Chequea si es mayor que cero.
MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical
Text1.SetFocus 'Situa el foco en el TexBox Text1.
End If
Else 'Si no es numrico el dato.
MsgBox "El valor debe ser mayor que cero", vbCritical
Text1.SetFocus 'Situa el foco en el TexBox Text1.
End If
End Sub
El ejercicio completo puede bajarse de AQU.

Ejercicio N 72: Array de controles

Este ejercicio es muy


simple y nos muestra
como hacer un arreglo o
matrz de controles. en
este caso un array de
botones. Nos sirve de
introduccin al prximo
ejercico donde usaremos
un array de cajas de
texto. El cdigo es el
siguiente:
Private Sub Command1_Click(Index As Integer)
'Como es un array de controles. Al copiar el primer botn y pegarlo
'le decimos que s a la ventana que no dice si queremos crear
'un array de controles.
'A partir de ahora todos responden al mismo evento por eso los
'identificamos por la propiedad INDEX
Label1.Caption = "Hiciste Click en el Botn N " & Command1(Index).Caption
End Sub
El ejercicio completo puede bajarse de AQU.

Ejercicio N 73: Suma de Matrices

Este ejercicio lo hicimos


a pedido de uno de
nuestros visitantes. El
formulario consta de tres
Frames con arrays de
controles de cajas de
texto. El cdigo completo
es:

Private Sub txtA_Change(Index As Integer)


If IsNumeric(txtA(Index)) Then
txtC(Index) = Val(txtA(Index)) + Val(txtB(Index))
Else
txtC(Index) = "#######"

End If
End Sub
Private Sub txtB_Change(Index As Integer)
If IsNumeric(txtB(Index)) Then
txtC(Index) = Val(txtA(Index)) + Val(txtB(Index))
Else
txtC(Index) = "#######"
End If
End Sub
El ejercicio completo puede bajarse de AQU.

Ejercicio N 74: Impresin Multilnea

Este ejercicio nos permite


imprimir texto respetando
el corte de lnea. El
formulario contiene una
caja de texto con la
propiedad ScrollBar en
vertical y la propiedad
Multiline en True. Y dos
botones uno para dar
salida por impresora y el
otro para cerrar el
programa. El cdigo es el
siguiente:

Option Explicit
Dim i As Integer

Private Sub Command1_Click()


'X es 60 en este ejemplo
ImprimeLineas Text1, 60
End Sub
Private Sub ImprimeLineas(Texto As Object, Linea As Integer)
Dim Bloque As String
'Nmero de caracteres = NumC
'Nmero de Bloques= NumB
Dim NumC, NumB As Integer
NumC = Len(Texto.Text)
If NumC > Linea Then
NumB = NumC \ Linea
For i = 0 To NumB
Texto.SelStart = (Linea * 1)
Texto.SelLength = Linea
Bloque = Texto.SelText
Printer.Print Bloque
Next i
Else
Printer.Print Texto.Text
End If
Printer.EndDoc
End Sub
Private Sub Command2_Click()

End
End Sub
El ejercicio completo puede bajarse de AQU.

Ejercicio N 75: Ordenando una Tabla


Este ejercicio nos permite
ordenar los registros de
una tabla en forma
ascendente o
descendente. Los
registros se despliegan
en una grilla, y tambin
podemos seleccionar la
cantidad de registros que
queremos mostrar.
Obviamente
necesitaremos conexin
con una base de datos,
para lo que usaremos un
control data. El cdigo
es:
Dim tipo As Byte
Dim Orden As String

Private Sub Command1_Click()


Dim N As Long
DBGrid1.Visible = True
N = Text1.Text 'Para entrar el nmero de registros.
Select Case tipo
Case 1
Orden = "DESC"
Case 2
Orden = "ASC"
End Select
'Selecciona a partir de los ltimos.
Data1.RecordSource = "SELECT TOP " & N & " * " & _
"FROM Empleados " & _
"ORDER BY IdEmpleado " & Orden
Data1.Refresh
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
N=3
Text1.Text = 3
Oden = "ASC"
optAscendente_Click
End Sub
Private Sub optAscendente_Click()
If optAscendente.Value Then tipo = 1
DBGrid1.Visible = False
End Sub

Private Sub Option1_Click()


End Sub
Private Sub optDescendente_Click()
If optDescendente.Value Then tipo = 2
DBGrid1.Visible = False
End Sub
Private Sub Text1_Change()
DBGrid1.Visible = False
End Sub
Private Sub Text1_Click()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
Private Sub Text1_LostFocus()
If IsNumeric(Text1.Text) Then
If ((Text1.Text) >= 1 And (Text1.Text) <= 9) Then
N = Text1.Text
Else
MsgBox "El nmero de registros debe estar entre 1 y 9", vbInformation
Text1.SetFocus
End If
Else
MsgBox "Entre un valor numrico entre 1 y 9"
Text1.SetFocus
End If
End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 76: Funcin Mid

Este ejercicio nos permite


redondear un nmero
decimal, con la cantidad
de decimales que
deseemos. El cdigo es el
siguiente:
Dim Numero As Single
Dim Decimales As Long

Function RedondearNumero(ByVal Valor As Variant, ByVal Decimales As Integer)


As Double

Dim Numero1 As Double


Dim Numero2 As Double
Dim Numero3 As Double
Dim Numero4 As Double
Dim Frac As Double
Dim n As Byte
n = InStr(1, Text1.Text, ".") 'posicin en que se encuentra el punto decimal
n = Len(Mid(Text1.Text, n + 1)) 'longitud de la cadena de los decimales
If Decimales < n Then 'Si el dato de decimales es menor que el No. de decimales
del nmero

Frac = 10 ^ Decimales
Numero1 = Valor * Frac
Numero2 = Fix(Valor * -Frac) * -1
Numero3 = Numero1 - Numero2
If Numero3 >= 0.5 Then
Numero4 = Int(Numero1 * -1) * -1
Else
Numero4 = Fix(Numero1 * -1) * -1
End If
RedondearNumero = Numero4 / Frac
Else
RedondearNumero = Val(Valor)
End If
End Function
Private Sub Command1_Click()
Label1.Caption = RedondearNumero(Numero, Decimales)
End Sub
Private Sub Form_Load()
Numero = 35.347239
Decimales = 2
Text1.Text = Numero
Text2.Text = Decimales
End Sub
Private Sub Text1_Change()
If Text1.Text = "" Then Exit Sub
If IsNumeric(Text1.Text) Then
Numero = Text1.Text
Label1.Caption = RedondearNumero(Numero, Decimales)
Else
MsgBox "El nmero debe ser positivo", vbInformation
Text1.SetFocus
End If
End Sub
Private Sub Text2_Change()
If Text2.Text = "" Then
Label1.Caption = ""
Exit Sub
End If
If IsNumeric(Text2.Text) Then
Decimales = Text2.Text
Label1.Caption = RedondearNumero(Numero, Decimales)
Else
MsgBox "El nmero debe ser positivo", vbInformation
Text2.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48) Or (KeyAscii > 57) Then 'Para solo permitir nmeros del 0 al 9
If KeyAscii <> 8 Then KeyAscii = 0 'Para aceptar la tecla de retroceso
End If
End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 77: TreeView

Este ejercicio muestra el


uso de un control llamado
TreeView, que debemos
traer de componentes del
conjunto Microsoft
controles. Combinado
con un mapa de la Isla de
Cuba, para mostrar el
nombre de cada provincia
y su ubicacin. El cdigo
es:
Option Explicit
'Dibuja el nombre de Cuba en Relieve en el Formulario.
Function EnRelieve(nombre As Form, A$, x, y)
nombre.CurrentX = x
nombre.CurrentY = y
nombre.ForeColor = QBColor(15)
nombre.Print A$
nombre.CurrentX = x + 8
nombre.CurrentY = y + 10
nombre.ForeColor = QBColor(2)
nombre.Print A$
Form1.Show
End Function
Private Sub Form_Activate()
'Para dibujar en relieve en el formulario el nombre de Cuba.
Call EnRelieve(Form1, "Cuba", 6500, 400)
End Sub
Private Sub Form_Load()
' Este cdigo crea un rbol con objetos Node.
TreeView1.Style = tvwTreelinesPlusMinusText ' Estilo 6.
TreeView1.LineStyle = tvwRootLines 'Estilo de lnea 1.
' Agrega varios objetos Node.
Dim nodX As Node ' Crea variable.
'Nodo Principal con la Clave Provincia y el Nombre Provincias
Set nodX = TreeView1.Nodes.Add(, , "Provincia", "Provincias")
Set nodX = TreeView1.Nodes.Add(, , "MunicipioEspecial", "Municipio Especial")
Set nodX = TreeView1.Nodes.Add("MunicipioEspecial", tvwChild, "IslaJuventud",
"Isla de la Juventud")
'Nodos Secundarios con el nombre de las provincias.
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Pinar del Rio", "Pinar
del Rio")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "La Habana", "La
Habana")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciudad Habana",
"Ciudad Habana")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Matanzas", "Matanzas")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Villa Clara", "Villa
Clara")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Cienfuegos",
"Cienfuegos")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santi Spiritus", "Santi
Spiritus")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciego de Avila", "Ciego
de Avila")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Camaguey",
"Camaguey")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Las Tunas", "Las
Tunas")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Holguin", "Holguin")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Granma", "Granma")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santiago de Cuba",
"Santiago de Cuba")

Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Guantanamo",


"Guantanamo")
'Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Isla de la Juventud",
"Isla de la Juventud")
nodX.EnsureVisible ' Muestra todos los nodos.
End Sub
Private Sub mnuNuevo_Click()
lblPinarDelRio.Visible = False
lblLaHabana.Visible = False
lblCiudadHabana.Visible = False
lblMatanzas.Visible = False
lblVillaClara.Visible = False
lblCienfuegos.Visible = False
lblSantiSpiritus.Visible = False
lblCiegoDeAvila.Visible = False
lblCamaguey.Visible = False
lblLasTunas.Visible = False
lblHolguin.Visible = False
lblGranma.Visible = False
lblSantiagoDeCuba.Visible = False
lblGuantanamo.Visible = False
lblIslaJuventud.Visible = False
End Sub
Private Sub mnuSalir_Click()
End
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As Node)
Select Case Node
Case "Pinar del Rio"
lblPinarDelRio.Visible = True
Case "La Habana"
lblLaHabana.Visible = True
Case "Ciudad Habana"
lblCiudadHabana.Visible = True
Case "Matanzas"
lblMatanzas.Visible = True
Case "Villa Clara"
lblVillaClara.Visible = True
Case "Cienfuegos"
lblCienfuegos.Visible = True
Case "Santi Spiritus"
lblSantiSpiritus.Visible = True
Case "Ciego de Avila"
lblCiegoDeAvila.Visible = True
Case "Camaguey"
lblCamaguey.Visible = True
Case "Las Tunas"
lblLasTunas.Visible = True
Case "Holguin"
lblHolguin.Visible = True
Case "Granma"
lblGranma.Visible = True
Case "Santiago de Cuba"
lblSantiagoDeCuba.Visible = True
Case "Guantanamo"
lblGuantanamo.Visible = True
Case "Isla de la Juventud"
lblIslaJuventud.Visible = True
End Select

End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 78: Movimiento.

En esta aplicacin se
crean con el mtodo Line
por clculo matemtico,
las rectas de un recorrido
y un cono cargado en un
control Image se
desplaza, siguiendo el
recorrido de las rectas. El
cdigo es:
Option Explicit
Dim x, y, x1, x2, y1, y2, l, t, w, h, m, delta As Single
Dim I As Byte
Sub Mover()
For I = 1 To 4 'Lazo para las 4 rectas.
'Asigna las coordenas para cada una de las 4 rectas.Las Rectas son un arreglo.
x1 = Linea(I).x1
y1 = Linea(I).y1
x2 = Linea(I).x2
y2 = Linea(I).y2
x = x1 'Inicializando la x.
Do Until x >= x2
m = (y1 - y2) / (x1 - x2) 'pendiente de la recta.
y = y1 + m * (x - x1) 'Ecuacin de la recta.
l = x - w / 2 'Valor que toma image1.left
t = y - h / 2 'Valor que toma image1.top
Image1.Left = l 'Pasar los valores anteriores
Image1.Top = t 'para mover la imagen.
x = x + delta 'Incrementando la x.
Loop
Next I
Image1.Enabled = False 'Inhabilitarla para impedir que regrese a la posicin
inicial.
End Sub
Private Sub Form_Load()
'La variable delta se usa para incrementar la x.
delta = 0.05 'Incremento de delta inicial para la velocidad del movimiento
End Sub
Private Sub Image1_Click()
Label1.Visible = False
'Ancho y Alto de la imagen.
w = Image1.Width
h = Image1.Height
Call Mover
End Sub
Private Sub mnIniciar_Click()
Label1.Visible = True
Image1.Enabled = True 'habilitar la imagen
'Llevar la imagen a la posicin inicial.

Image1.Left = 420
Image1.Top = 3060
End Sub
Private Sub mnuSalir_Click()
End
End Sub
Private Sub optMediana_Click()
If optMediana.Value Then delta = 0.5
End Sub
Private Sub optPoca_Click()
If optPoca.Value Then delta = 0.05
End Sub
Private Sub optRapida_Click()
If optRapida.Value Then delta = 1
End Sub
El cdigo de la aplicacin puede bajarse de Aqu.

Ejercicio N 79: Efectos Visuales.

En este ejercicio vamos a


realizar por cdigo,
ciertos efectos especiales
aplicados a una imgen,
durante el proceso de
carga de la misma en un
control Picture. Para
estos efectos usamos el
mtodo PaintPicture. El
cdigo es el siguiente:

Private Sub Command1_Click()' Efecto estirado de la imagen


Dim i
For i = 1 To Picture1.ScaleWidth Step 3
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture1.ScaleWidth,
Picture1.ScaleHeight, 0, 0, i, Picture1.ScaleHeight, &HCC0020
Next i

End Sub
Private Sub Command2_Click()' Efecto persiana
Dim stripes As Integer
Dim i, j As Integer
Dim stripewidth As Integer
Picture2.Cls
stripewidth = 10
stripes = Fix(Picture1.ScaleWidth / stripewidth)
On Error Resume Next
For j = 1 To stripewidth
For i = 0 To stripes

Picture2.PaintPicture Picture1.Picture, i * stripewidth, 0, j, Picture1.ScaleHeight, i


* stripewidth, 0, j, Picture1.ScaleHeight, &HCC0020
Next
Next
End Sub
Private Sub Command3_Click()'Efecto barrido desde la derecha
Dim PWidth, PHeight As Integer
Dim i As Integer
pw = 1
ph = Picture1.ScaleHeight
For i = 1 To Picture1.ScaleWidth / 2
Picture2.PaintPicture Picture1.Picture, (Picture1.ScaleWidth - pw) / 2, 0, pw, ph,
(Picture1.ScaleWidth - pw) / 2, 0, pw, ph, &HCC0020
pw = pw + 2
Next i
End Sub
El cdigo completo del ejercicio puede bajarse de Aqu.

Ejercicio N 80: Mtodo Line.


En esta aplicacin
usando el mtodo Line
vamos a dibujar rectas, a
partir de un apretar el
botn izquierdo del
mouse, en el formulario
arrastramos el mouse y
hacemos un soltar el
botn izquierdo del
mouse, con lo que se
dibujara una lnea entre
los dos puntos,
marcados. En las labels
se muestran los valores
de las coordenadas, de a
cuerdo a la ubicacin del
puntero.
Dim CX As Integer
Dim CY As Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
CX = X
CY = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
Label1.Caption = X
Label2.Caption = Y
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Line (CX, CY)-(X, Y)

End Sub
El cdigo del ejercicio completo puede bajarse de Aqu.

Ejercicio N 81: Eventos con el Mouse.

En esta aplicacin vamos


a crear una pequea
aventura grfica. Consta
de dos formularios. En el
primero vamos a hacer
Click sobre ciertos
objetos que guardamos
en el Inventario y luego
en el segundo formulario,
hacemos Click en los
objetos del Inventario y
los colocamos en la
segunda pantalla, en los
lugares correctos. El
cdigo del primer
formulario es:

Option Explicit
Private Sub Image4_Click()
MousePointer = 99
MouseIcon = Image4
Image4.MouseIcon = Image4
Image4.Visible = False
End Sub
Private Sub Image6_Click()
MousePointer = 99
MouseIcon = Image6
Image6.MouseIcon = Image6
Image6.Visible = False
End Sub
Private Sub Image7_Click()
MousePointer = 99
MouseIcon = Image7
Image7.MouseIcon = Image7
Image7.Visible = False
End Sub
Private Sub Image8_Click()
MousePointer = 99
MouseIcon = Image8
Image8.MouseIcon = Image8
Image8.Visible = False
End Sub
Private Sub Image9_Click()
Form2.Show
Form1.Hide
End Sub
Private Sub mnuAyuda_Click()
MsgBox " Recog los objetos posibles y coloclos en el Inventario por Orden

Alfabtico, hacindo Click", , "Mini Aventura"


End Sub
Private Sub mnuReiniciar_Click()
Unload Form1
Unload Form2
Form1.Show
End Sub
Private Sub mnuSalir_Click()
End
End Sub
Private Sub Picture1_Click()
If MouseIcon = Image7 Then
Picture1 = Image7
MouseIcon = Nothing
Form2.Picture1.Picture = Image7
End If
End Sub
Private Sub Picture2_Click()
If MouseIcon = Image4 Then
Picture2 = Image4
MouseIcon = Nothing
Form2.Picture2.Picture = Image4
End If
End Sub
Private Sub Picture3_Click()
If MouseIcon = Image8 Then
Picture3 = Image8
MouseIcon = Nothing
Form2.Picture3.Picture = Image8
End If
End Sub
Private Sub Picture4_Click()
If MouseIcon = Image6 Then
Picture4 = Image6
MouseIcon = Nothing
Form2.Picture4.Picture = Image6
End If
End Sub

El cdigo del segundo


formulario es:
Option Explicit
Private Sub
Image5_Click()
If MouseIcon = Picture1
Then
Image5 = Picture1
MouseIcon = Nothing
Image5.MouseIcon =
Nothing
End If
Call corregir
End Sub

Private Sub Image6_Click()


If MouseIcon = Picture3 Then
Image6 = Picture3
MouseIcon = Nothing
Image6.MouseIcon = Nothing
End If
Call corregir
End Sub
Private Sub Image7_Click()
If MouseIcon = Picture4 Then
Image7 = Picture4
MouseIcon = Nothing
Image7.MouseIcon = Nothing
End If
Call corregir
End Sub
Private Sub Image8_Click()
If MouseIcon = Picture2 Then
Image8 = Picture2
MouseIcon = Nothing
Image8.MouseIcon = Nothing
End If
Call corregir
End Sub
Private Sub Image9_Click()
Form1.Show
Form2.Hide
End Sub
Private Sub mniSalir_Click()
End
End Sub
Private Sub mnuAtuda_Click()
MsgBox "Hac Click en los Objetos del Inventario y Coloclos en los lugares
correspondientes", , "Mini Aventura"
End Sub
Private Sub mnuReiniciar_Click()
Unload Form1
Unload Form2
Form1.Show
End Sub
Private Sub Picture1_Click()
MousePointer = 99
MouseIcon = Picture1
Picture1.MouseIcon = Picture1
Picture1.Visible = False
End Sub
Private Sub Picture2_Click()
MousePointer = 99
MouseIcon = Picture2
Picture2.MouseIcon = Picture2
Picture2.Visible = False
End Sub
Private Sub Picture3_Click()
MousePointer = 99
MouseIcon = Picture3

Picture3.MouseIcon = Picture3
Picture3.Visible = False
End Sub
Private Sub Picture4_Click()
MousePointer = 99
MouseIcon = Picture4
Picture4.MouseIcon = Picture4
Picture4.Visible = False
End Sub
Private Sub corregir()
If Image5 = Picture1 And Image8 = Picture2 And Image6 = Picture3 And Image7 =
Picture4 Then
Label2 = "Correcto!! Completaste la Mini Aventura"
End If
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 82: Manejo de Errores.

En este ejercicio vamos a


usar una pequea rutina
de control de Errores. El
objetivo es buscar en la
Unidad A, un archivo
determinado, en este
caso un .wmf, si no lo
encuentra despliega un
mensaje, codificado en la
rutina de Error.
El cdigo es:

Private Sub Command1_Click()


On Error GoTo ErrorDisco
Image1.Picture = LoadPicture("a:\prntout2.wmf")
Exit Sub
ErrorDisco:
If Err.Number = 71 Then
MsgBox ("Por Favor, Cierre la puerta de la unidad."), , "Disco no preparado"
Resume
Else
MsgBox ("Imposible localizar prntout2.wmf en A:\."), , "Archivo no encontrado"
Resume FinPrueba
End If
FinPrueba:
End Sub
El cdigo completo del ejercicio puede bajarse de Aqu.

Ejercicio N 83: Msica.

Este ejercicio permite


abrir archivos WAV,
ejecutados con el control
Multimedia y
seleccionados de las
carpetas del los distintos
dispositivos. El
Multimedia control debe
traerse desde proyecto,
Componentes para ser
agregado a la Caja de
Herramientas.
El cdigo completo es el siguiente:
Private Sub cmdInicio_Click()
Dim Extension As String
Busqueda = "." ' Busqueda hasta ".".
If InStr(1, File1.FileName, ".") Then 'Si encuentra el signo "."
'Comparacion
MiPos = InStr(File1.FileName, Busqueda) ' Regresa la posicin de ".".
Extension = Mid(File1.FileName, MiPos + 1) 'Escribe extensin cortado despues
del punto.
If Extension = "WAV" Or Extension = "wav" Then
MMControl1.FileName = Dir1.Path & "/" & File1.FileName
MMControl1.Command = "open"
MMControl1.Command = "play"
Else
MsgBox "Con esa extensin no puede oir esta musica," & _
"solo permite oir con extension WAV", vbInformation
End If
Else
Exit Sub
End If
End Sub
Private Sub cmdParar_Click()
MMControl1.Command = "stop"
MMControl1.Command = "close"
End Sub
Private Sub cmdPausa_Click()
MMControl1.Command = "pause"
End Sub
Private Sub Dir1_Change()
'Para que aparezcan slo los archivos de ese directorio.
File1.Path = Dir1.Path
End Sub
Private Sub Form_Load()
MMControl1.DeviceType = "waveaudio"
MMControl1.Command = "close"
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 84: Video.

Esta aplicacin similar a


la anterior, ejecuta videos
con el control Multimedia.
Seleccionandolos desde
las carpetas de los
directorios de los
distintos dispositivos.Su
cdigo es:

Private Sub cmdInicio_Click()


Dim Extension As String
Busqueda = "." ' Busqueda hasta ".".
If InStr(1, File1.FileName, ".") Then 'Si encuentra el signo "."
'Comparacion
MiPos = InStr(File1.FileName, Busqueda) ' Regresa la posicin de ".".
Extension = Mid(File1.FileName, MiPos + 1) 'Escribe extensin cortado despues
del punto.
If Extension = "AVI" Then
MMControl1.FileName = Dir1.Path & "/" & File1.FileName
MMControl1.Command = "open"
MMControl1.Command = "play"
Else
MsgBox "Con esa extensin no pueden ver videos," & _
"solo permite ver con extension avi", vbInformation
End If
Else
Exit Sub
End If
End Sub
Private Sub cmdParar_Click()
MMControl1.Command = "stop"
MMControl1.Command = "close"
End Sub
Private Sub cmdPausa_Click()
MMControl1.Command = "pause"
End Sub
Private Sub Dir1_Change()
'Para que aparezcan slo los archivos de ese directorio.
File1.Path = Dir1.Path
End Sub
Private Sub Form_Load()
MMControl1.DeviceType = "avivideo"
MMControl1.Command = "close"
MMControl1.hWndDisplay = Picture1.hWnd
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 85: Clculo de Inters.

En este ejercicio vamos a


calcular un inters de tipo
financiero, para esto
vamos a crear un Mdulo
con una funcin
especfica llamada:
CalcPago. Para crear el
Mdulo vamos a proyecto
: agregar Mdulo y all
codificamos y luego lo
grabamos con la
extensin .bas. Desde
esta aplicacin vamos a
usar un objeto OLE que
convoque a la aplicacin
Excel, del Office. El
cdigo del formulario es
el siguiente:

Option Explicit
Private Sub Command1_Click()
Dim cuotas As Currency
If Not CalcPago(CSng(Text1), Val(Text2), CSng(Text3), cuotas) Then
MsgBox "Qu escribiste!, No puedo calcular eso!!"
Else ' resultado satisfactorio
Picture1.Visible = True
Label4.Caption = Format(cuotas, " #,##0.00;($#,##0.00)")
End If
End Sub
El cdigo del Mdulo es:
Option Explicit
Public Function CalcPago(capital As Currency, ao As Integer, interes As Single,
cuota As Currency) As Boolean
On Error GoTo repararerror
'dimensiona la variable como objeto
Dim excelapp As Object
' el tipo de apliacin es Excel
Const hdExcelObject = "Excel.Application"
Screen.MousePointer = vbHourglass
CalcPago = False
' crea la aplicacin en Excel donde se realizar el Clculo
Set excelapp = CreateObject(hdExcelObject)
'llama al mtodo pmt de Excel
cuota = excelapp.Pmt((interes / 100) / 12, ao * 12, -1 * capital)
excelapp.quit
Set excelapp = Nothing
CalcPago = True
Screen.MousePointer = vbDefault
Exit Function
repararerror:

' determina el tipo de error


Select Case Err.Number
Case 429
MsgBox "Imposible crear un Aplicacin OLE con Excel." + vbCrLf + " Est seguro
de tener una Versin de Excel superior a la 5, y bien instalada?", vbCritical,
"Clculo de pago de Cuotas"
Case Else
MsgBox "Error #" + Str(Err.Number) + ":" + Err.Description + ".", vbCritical,
"Clculo de pago de Cuotas"
End Select
Screen.MousePointer = vbDefault
End Function
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 86: Texto 3 D.


En este ejercicio, vamos a
hacer un efecto de texto
en tres dimensiones,
creando dos
procedimientos: recuadro
y texto3d, usando las
coordenadas y el mtodo
Print. El cdigo es:
Option Explicit
Private Sub recuadro()
Dim i As Integer
Form1.ScaleMode = vbPixels
Form1.ForeColor = vbBlack
Const DrawWidth = 3
For i = DrawWidth - 1 To 6 * 6 Step 2
Form1.Line (i, i)-(Form1.ScaleWidth - 1 - i, Form1.ScaleHeight - 1 - i), , B
Next i
End Sub
Private Sub texto3d()
Dim X As Integer
Dim Y As Integer
X = 500
Y = 500
If Form1.ScaleMode <> vbTwips Then Form1.ScaleMode = vbTwips
Form1.ZOrder 0 'lo necesitamos para imprimir por arriba de lo existente
Form1.ForeColor = RGB(32, 32, 32) ' gris oscuro para las sombras
Form1.Font.Name = "Arial"
Form1.Font.Underline = True
Form1.FontSize = 38
Form1.CurrentX = X ' sita el cursor
Form1.CurrentY = Y
Form1.Print "Diseo y Programacin:"
Form1.CurrentX = 1500
Form1.Print "Mirta Echeverra"
Form1.ForeColor = RGB(255, 255, 255) 'blanco para resaltar
Form1.CurrentX = X - 35 ' coloca la zona a resaltar en la parte superior izquierda
Form1.CurrentY = Y - 45
Form1.Print "Diseo y Programacin:"
Form1.CurrentX = 1500
Form1.Print "Mirta Echeverra"
Form1.ForeColor = vbBlue

Form1.CurrentX = X - 25 ' imprime entre el resaltado y la sombra


Form1.CurrentY = Y - 35
Form1.Print "Diseo y Programacin:" ' imprime en azul
Form1.CurrentX = 1500
Form1.Print "Mirta Echeverra"
End Sub
Private Sub Form_Load()
Call texto3d
Call recuadro
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 87: Arreglos.

En este ejercicio vamos a


trabajar con arreglos ,
simularemos un juego de
cartas de dos caras, la
matriz o arreglo consta de
10 valores. No olvidena al
ejecutarlo seleccionar
una opcin para mostrar
las cartas, o secuencial o
aleatorio. El cdigo es el
siguiente:

En Option Explicit
Dim ladoA(1 To 10) As String
Dim ladoB(1 To 10) As String
Dim numcarta As Integer
Dim indice As Integer
Private Sub Command1_Click()
'mostrar el lado A de la carta siguiente.
'los botones de opcion seleccionan una carta secuencial o aleatoria
If Option1.Value = True Then
'incrementar el indice actual y comprobar si se encuentra dentro del intervalo de
1 a numcarta.
indice = indice + 1
If indice < 1 Or indice > numcarta Then
'si el indice est fuera del intrvalo, comenzar nuevamente.
indice = 1
End If
ElseIf Option2.Value = True Then
'carta aleatoria. indice aleatorio de 1 a numcaarta.
indice = Fix(numcarta * Rnd) + 1
End If
' mostrar el lado A y el nmero de carta, Borrar el lado B
Text3.Text = indice
Text1.Text = ladoA(indice)
Text2.Text = ""
' desactivar el botn lado A y activar el botn Lado B

Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
'mostrar el lado B de la tarjeta actual
Text2.Text = ladoB(indice)
'activa el boton lado A y desactiva lado B
Command1.Enabled = True
Command2.Enabled = False
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
' asignar valores a los arrays ladoA y ladoB
numcarta = 7
ladoA(1) = "Nihongo"
ladoB(1) = "Idioma Japons"
ladoA(2) = "Ohayo gozaimasu"
ladoB(2) = "Buenos Das"
ladoA(3) = "Kennichi wa"
ladoB(3) = "Hola o Buen Da"
ladoA(4) = "Konban wa"
ladoB(4) = "Buenas Tardes"
ladoA(5) = "Oyasumi nasai"
ladoB(5) = "Buenas Noches"
ladoA(6) = "Ja, mata ashita"
ladoB(6) = "Bien, nos veremos maana"
ladoA(7) = "Sayonara"
ladoB(7) = "Adis"
'activar el botn ladoA y desactivar el ladoB
Command1.Enabled = True
Command2.Enabled = False
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Ejercicio N 88: Carita.

Este ejercicio es una


nueva versin del juego
"Agrrame si puedes".
Donde debemos hacer
Clic en una carita que se
desplaza aleatoriamente
por el formulario, dejando
un recuadro de color a su
paso. El cdigo es el
siguiente:

Option Explicit
'Variables Globales
Dim puntaje As Integer
Dim contador As Integer
Dim dificultad As Integer
Dim menuchekeado As Menu
Private Sub Form_Load()
Call ComenzarJuego
End Sub
Private Sub mnuComenzar_Click()
Form1.Cls
Call DibujarPantalla
puntaje = 0
contador = 0
Timer1.Interval = dificultad
End Sub
Private Sub mnuDificil_Click()
dificultad = 500
menuchekeado.Checked = False
Set menuchekeado = mnuDificil
mnuDificil.Checked = True
End Sub
Private Sub mnuFacil_Click()
dificultad = 1000
menuchekeado.Checked = False
Set menuchekeado = mnuFacil
mnuFacil.Checked = True
End Sub
Private Sub mnuImposible_Click()
dificultad = 250
menuchekeado.Checked = False
Set menuchekeado = mnuImposible
mnuImposible.Checked = True
End Sub
Private Sub mnuModerado_Click()
dificultad = 700
menuchekeado.Checked = False
Set menuchekeado = mnuModerado
mnuModerado.Checked = True
End Sub
Private Sub mnusalir_Click()
Unload Form1
End Sub
Private Sub Picture1_Click()
If Timer1.Interval > 100 Then
Beep
puntaje = puntaje + 1
End If
End Sub
Private Sub Timer1_Timer()
Dim x As Integer, y As Integer
Dim BoxX As Integer, BoxY As Integer
x = Int(391 * Rnd + 20)

y = Int(231 * Rnd + 20)


BoxX = Picture1.Left
BoxY = Picture1.Top
Form1.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
Form1.Line (BoxX, BoxY)-(BoxX + 100, BoxY + 100), , BF
Picture1.Move x, y
puntaje = puntaje + 1
If puntaje = 30 Then
Timer1.Interval = 0
MsgBox "Su puntaje: " & puntaje, , "Agrrame si puedes!"
End If
End Sub
Private Sub ComenzarJuego()
dificultad = 500
mnuModerado.Checked = True
Set menuchekeado = mnuModerado
Randomize
Call DibujarPantalla
Call DibujarCara
End Sub
Private Sub DibujarPantalla()
Form1.ForeColor = vbBlack
Form1.Line (10, 10)-(517, 10)
Form1.Line (10, 10)-(10, 358)
Form1.Line (522, 5)-(522, 362)
Form1.Line (522, 362)-(5, 362)
Form1.ForeColor = vbWhite
Form1.Line (5, 5)-(522, 5)
Form1.Line (5, 5)-(5, 363)
Form1.Line (517, 10)-(517, 358)
Form1.Line (517, 358)-(10, 358)
End Sub
Private Sub DibujarCara()
Picture1.FillStyle = vbSolid
Picture1.FillColor = vbYellow
Picture1.Circle (48, 48), 45
Picture1.FillColor = vbBlack
Picture1.Circle (30, 35), 10
Picture1.Circle (65, 35), 10
Picture1.Circle (47, 55), 8
Picture1.DrawWidth = 2
Picture1.Circle (48, 50), 30, , 3.4, 6, 1#
End Sub
El cdigo completo de la Aplicacin puede bajarse de Aqu.

Volver al Men Principal

Volver a Ejercicios

Usando las API de Windows:


Sleep

SndPlaySound

MCIExecute(Sonido)

MCIExecute(Video)

Blend (Efecto Visual)

Ejercicio N 1: Sleep
Las API de Windows
(Application Programming
Interface) son funciones
automticas que ya trae
incorporadas el sistema
operativo Windows y que
podemos convocar para
programar en Visual Basic. De
esta manera ahorramos
recursos y programamos en un
nivel de mayor complejidad.
Para esta aplicacin vamos a trabajar con un control Image para el jeep y dos
array de controles para los camellos. La idea es que el auto avance hasta que se
encuentre con un camello all se detiene, hasta que el camello salga del paso y
luego contina hasta el prximo obstculo. Para esto vamos a usar la API Sleep
que nos permite hacer la pausa, con poca programacin y sin usar controles
extras, como un Timer. Las declaraciones de las API las vamos a traer del Visor
de API de Visual Basic y las copiamos en un Mdulo de extensin .bas que
agregamos desde Proyecto, agregar Mdulo. El cdigo es el siguiente:
Para el Mdulo:
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Para el Formulario:

Private Sub Form_Click()


Static x As Integer
x = 550 'Left del objeto.
For I = 1 To 4
picCarro.Move x 'Mueve el objeto hacia la izquierda.
Sleep 2000 'Llama a la API Sleep (2000 milisegundos = 2 segundo de pausa).
x = x + 900 'Incrementa el left.
Image1(a).Visible = False
Image2(a).Visible = True
a=a+1
If a = 8 Then a = 0
Next I
End Sub
El ejercicio con su cdigo completo puede bajarse de AQU.

Ejercicio N 2: SndPlaySound
En este ejercicio vamos a activar un sonido Wave, al terminar de cargarse un
Formulario, para esto vamos a usar la API SndPlaySound que ejecuta sonidos
Wave. La traemos desde el Visor de las API a la declaracin y la guardamos en un
Mdulo .bas como en el ejemplo anterior. Luego declaramos en el Formulario en
la parte de Declaraciones Generales una variable como entera llamada sonido. Y
la ejecutamos por cdigo en el procedimiento Activate del Formulario con la
siguiente sintxis:
sonido = App.Path(SndPlaySound & "\Sonido.wav")
En el archivo wav colocamos el nombre del sonido elegido y este debe estar en el
mismo directorio que el proyecto ya que estamos usando el objeto App de

Application.

Ejercicio N 3: MCIExecute (Sonido).

Esta aplicacin nos muestra


como ejecutar sonidos de tipo
Wave y Midi, con la Api:
MCIExecute. Reemplacen los
archivos Wave y Midid, por los
que ustedes deseen. El cdigo
es:
Option Explicit
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As
String) As Long
Private sonido
Private Sub Command1_Click()
sonido = mciExecute("Play c:\Thefinal.mid")
End Sub
Private Sub Command2_Click()
sonido = mciExecute("Play C:\egipto.wav")
End Sub
Private Sub Command3_Click()
sonido = mciExecute("Stop C:\Thefinal.mid")
sonido = mciExecute("Stop C:\egipto.wav")
End Sub
El cdigo competo puede bajarse de Aqu.

Ejercicio N 4: MCIExecute (Video).

Esta aplicacin permite


ejecutar un Video usando la
Api, MCIExecute. El cdigo es
el siguiente:

Option Explicit
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As
String) As Long
Private Sub Command1_Click()
Const sAVIFile As String = "c:\Filemove.avi"

'abrir un nuevo video


mciExecute "OPEN " + sAVIFile + " TYPE AVIVIDEO ALIAS kpdvideo STYLE
POPUP"
'determinar el tamao del video a desplegar
mciExecute "PUT kpdvideo WINDOW AT 306 290 180 40"
'determinar la velocidad del video
mciExecute "SET kpdvideo SPEED 600"
'ejecutar el video
mciExecute "PLAY kpdvideo WAIT"
'remover el video de la memoria
mciExecute "CLOSE kpdvideo"
End Sub

El cdigo competo puede bajarse de Aqu.

Ejercicio N 5: Blend.

Esta aplicacin muestra un


efecto de superposicin y
transparencia de dos
imgenes. El cdigo es:

Option Explicit
'Este proyecto requiere de dos controles Picture
'Cada control debe tener una imagen, ambas deben ser distintas
Const AC_SRC_OVER = &H0
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long,
ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long,
ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long,
ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any,
Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim BF As BLENDFUNCTION, lBF As Long
'Cambiar el modo grfico para que se mantenga la imagen
Picture1.AutoRedraw = True
Picture2.AutoRedraw = True
'usar pixels con la Api
Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
'asignar los parmetros
With BF
.BlendOp = AC_SRC_OVER

.BlendFlags = 0
.SourceConstantAlpha = 128
.AlphaFormat = 0
End With
'copia la funcin blend a una variable en memoria de tipo long
RtlMoveMemory lBF, BF, 4
'aplicar la Api desde la picture1 sobre la picture2
AlphaBlend Picture2.hdc, 50, 0, 100, 100, Picture1.hdc, 0, 0, Picture1.ScaleWidth,
Picture1.ScaleHeight, lBF
End Sub
El cdigo competo puede bajarse de Aqu.

Volver al Men Principal

Volver a Ejercicios

Ejercicios con Visual Basic 6:

MonthView y DtPicker : Calendario. Despliega Fecha y Hora


Validar un texto a travs del Procedimiento Validate
Crear Controles en tiempo de Ejecucin
ImageCombo: Despliega Listas incluyendo Imgenes
CoolBar: Barra que contiene otros Controles
Barra de Progreso
Barra de Estado
Pestaas que contienen otros Controles
ListView vinculada a una ImageList
TreeView vinculado a una ImageList
Control Chart para despliegue de Grficos
Grficos con Chart y una consulta SQL
Grficos con Chart y una planilla de Excel
Formulario de Datos: Asistente
DHTML: Hola Mundo
DHTML: Operaciones: Suma, Resta, Multiplicacin y Divisin

Ejercicio N 1: Nuevos Controles.


Estos dos
controles: el
MonthView y el
DTPicker son
controles
especiales que
trae la versin 6 y
que podemos
traer de
Componentes,
seleccionando

Microsoft
Windows
Common
Controls - 2 6.0, y
como vemos nos
despliegan hora y
fecha y un
calendario que
podemos
recorrer.
El ejercicio puede bajarse de Aqu.

Ejercicio N 2: Validar un texto.


El control caja de
Texto tiene ahora
en esta versin 6
un nuevo
procedimiento
que nos permite
controlar la
informacin que
se ingresa, y una
vez validada
recin pasar al
campo de texto
siguiente.
Prueben tratar de pasar a la caja de texto siguiente sin ingresar ningn dato con
la tecla Tab y vern que no lo permite.
El cdigo es:
Private Sub Text1_Validate(Cancel As Boolean)
If Text1.Text <> "MIRTA" Then
MsgBox "Debes tipear MIRTA en el primer texto para pasar al segundo.",
vbInformation, "Instrucciones"
Cancel = True
End If
End Sub
Private Sub Text2_Validate(Cancel As Boolean)
If Text2.Text <> "CONSUDEC" Then
MsgBox "Debes tipear CONSUDEC en el segundo texto para pasar al tercero.",
vbInformation, "Instrucciones"
Cancel = True
End If
End Sub
El ejercicio puede bajarse de Aqu.

Ejercicio N 3: Crear controles.

Ahora Visual
Basic nos
permite, crear
controles en
tiempo de
ejecucin sin
necesidad de
hacerlo dentro de
un array, a partir
del primero
creado en tiempo
de diseo.
El cdigo es:
Private WithEvents cmdmiboton As CommandButton
Private Sub cmdmiboton_Click()
cmdmiboton.Caption = "Me hiciste Clic!"
End Sub
Private Sub Label2_Click()
Set cmdmiboton = Controls.Add("VB.commandbutton", "Button")
With cmdmiboton
.Visible = True
.Width = 3000
.Caption = "Qu Sorpresa!!"
.Top = 3000
.Left = 1000
End With
Label2.Enabled = False
End Sub
Primero hacemos Click en la Label que crea el botn y luego con el Click del
botn cambiamos su propiedad Caption.
El ejercicio completo lo podemos bajar de Aqu.

Ejercicio N 4: ImageCombo.

Este nuevo
control pertenece
al grupo de
componentes:
Microsoft
Windows
Common
Controls 6.0. Y
nos permite
desplegar
imgenes adems
de texto en un
Combo
desplegable.

Private Sub Command1_Click()


Static i% 'un contador de numeros enteros
Static imgi% 'un indice para las imagenes del control ImageList
Dim comboimage As ComboItem 'variable de tipo objeto para 'declarar un
comboItem
'Agrega una referencia al objeto comboItem usando el metodo 'Add
Set comboimage = ImageCombo1.ComboItems.Add
'agrega un texto
ImageCombo1.ComboItems.Add , , "Soy el item N " & CStr(i%)
ImageCombo1.Text = "Soy el Item N " & CStr(i%) 'agrega un 'grafico
comboimage.Image = imgi% + 1 'controlar que no se exceda de 'la cantidad de
images del ImageList
If imgi% = ImageList1.ListImages.Count - 1 Then
imgi% = 0
Else imgi% = imgi% + 1
End If
'incrementa la variable
contadora i% = i% + 1
End Sub
Private Sub Form_Activate()
ImageCombo1.ImageList = ImageList1
End Sub
El ejercicio puede bajarse de Aqu.

Ejercicio N 5: Coolbar.
Este control
pertenece al
grupo Microsoft
Windows
Common
Controls 3 6.0, y
permite desplegar
una barra que
contenga otros
controles.
En este caso al hacer Click en el icono del Reloj despliega la hora. Estos
controles que se insertan dentro de la Coolbar pueden mantenerse flotantes o
fijos.
El cdigo es:
Private Sub Command1_Click()
Label1.Caption = Time
End Sub
Private Sub Form_Activate()
List1.AddItem "Chocolates"
List1.AddItem "Caramelos"
List1.AddItem "Chupetines"
List1.AddItem "Galletitas"
End Sub
En el caso de la Lista le agregamos distintos Items a travs del Mtodo AddItem
en tiempo de ejecucin.
El ejercicio puede bajarse de Aqu.

Ejercicio N 6: Barra de progreso.


Este ejercicio nos
muestra el uso de
una barra de
progreso que
podemos usar
mientras se
realiza la carga de
un archivo o en
otro momento de
espera hasta que
se complete una
tarea.
El cdigo es el siguiente:
Option Explicit

Private Sub cmdSalir_Click()


End
End Sub
Private Sub Form_Load() 'Inicializamos el timer para que este apagado
Timer1.Enabled = False
End Sub
Private Sub cmdComenzar_Click() 'Inicializamos la barra de progreso, y
comenzamos el Timer
Progreso.Value = 0
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer() 'Si el progreso todava no termina, seguir
aumentando Value hasta 100
With Progreso
If .Value < .Max Then
.Value = .Value + 1
Else 'Termino
MsgBox "Proceso Terminado", , "Barra de Progreso" 'Deshabilitamos el Timer
Timer1.Enabled = False
End If
End With
End Sub
Aqu usamos with para referirnos al control y no tener que repetir su nombre.
Esto es muy til cuando debemos modificar los valores de varias propiedades
por cdigo de un mismo control.
El ejercicio completo puede bajarse de AQU.

Ejercicio N 7: Barra de estado.


Un ejemplo de
como modificar
en tiempo de
ejecucin la Barra
de estado. En el
formulario
tenemos una caja
de texto donde
ingresamos el
texto a desplegar
y luego en el click
de un botn lo

asignamos al
panel de la barra
correspondiente.
El cdigo correspondiente es:
Private Sub cmdAceptar_Click()
StatusBar1.Panels("Texto").Text = txtPanel
End Sub
Como vemos es muy sencillo, para asignarle un valor al panel correspondiente
debemos identificarlo con el nombre del mismo, determinado en la ventana
propiedades, para tener acceso al mismo debemos hacer click con el boton
derecho sobre el control y alli podemos configurar los distintos paneles.
El ejercicio puede bajarse de AQU.

Ejercicio N 8: Pestaas.
Es comn usar el
control TabStrip
para mostrar
aplicaciones con
pestaas, sin
embargo es
mucho ms
potente el control
Tabbed Dialog ya
que cada panel
puede contener
otros controles,
esto facilita el
diseo y su
codificacin.
En el formulario dibujamos un control SStab traido de componentes y luego en
su primer pestaa dibujamos varias labels que nos vincularan con las otras
pestaas, donde se mostrar en una texto y en la otrs una imagen. El cdigo es el
siguiente:
Option Explicit
Private Sub Form_Load()
SSTab1.Tab = 0 'esto hace que se muestre el primer panel
End Sub
Private Sub
Label1_Click()
Text1.Text = "Aqui podemos cargar un texto con formato richtextbox, sobre el
Tema 1."
SSTab1.Tab = 1
End Sub

Private Sub Label4_Click()


Picture1.Picture = Picture2
SSTab1.Tab = 2
End Sub
Private Sub Label5_Click()
Text1.Text = "Aqui podemos cargar un texto con formato richtextbox, sobre el
Tema 2."
SSTab1.Tab = 1
End Sub
Private Sub Label6_Click()
Picture1.Picture = Picture3
SSTab1.Tab = 2
End Sub
Como vemos lo importante es la propiedad Tab y la asignacin del indice del
panel de l control que queremos mencionar.
El cdigo completo lo pueden bajar de AQU.

Ejercicio N 9: ListView.
Este control nos
permite desplegar
una lista de
archivos al estilo
el Explorador de
Windows. En este
caso los
agregamos a
traves del ingreso
de datos de cajas
de texto. Y
despliegan un
icono al azar
seleccionado de
un control
ImageList, que
hemos usado en
otros ejercicios.
El formulario,
permite a traves
del uso de
botones de
opcion
seleccionar que
modalidad
queremos que
tengan los
iconos.

El cdigo es el siguiente:
Option Explicit
Function NroAzar(Min As Integer, Max As Integer) As Integer
NroAzar = Int((Max - Min + 1) * Rnd + Min)
End Function
Private Sub cmdAgregar_Click()
Dim Nuevo As ListItem
Dim IndiceIcono As Integer
'Elegir un icono al azar para el elemento
IndiceIcono = NroAzar(1, ilIconos.ListImages.Count)
'Agregar el nuevo elemento, y asignarle el icono elegido
Set Nuevo = lvwPersonas.ListItems.Add(, , txtNombre, IndiceIcono, IndiceIcono)
Nuevo.SubItems(1) = txtEdad
Nuevo.SubItems(2) = txtSexo
Nuevo.SubItems(3) = txtTelefono
End Sub
Private Sub cmdEliminar_Click()
lvwPersonas.ListItems.Remove lvwPersonas.SelectedItem.Index
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub optVista_Click(Index As Integer)
'Cambiamos el tipo de vista en View
lvwPersonas.View = Index
End Sub
Elegimos un Icono al azar de un ImageList el texto lo ingresamos a traves de las
Cajas de Texto. Tenemos dos botones con la opcion de Agregar y de Borrar, los
ingresos. Y Botones de Opcion para seleccionar la propiedad View de la Lista
acorde al Indice del option Button. los iconos que se muestran en los
encabezados fueron asignados al ingresar el Nombre de las columnas y
asociando la propiedad Icon Index a los Iconos de la ImageList ilColumnas. o sea
que tenemos dos controles ImageList.

El codigo completo puede bajarse de AQU.

Ejercicio N 10: TreeView.

Este ejercicio
muestra un tipico
arbol de archivos
de windows con
su raz principal y
sus derivados.
Acompaado de
Iconos tomados
tambin de un
control ImageList.
El mtodo Add,
agrega un Nodo
al arbol de
Archivos.

El cdigo es:
Option Explicit
Private Sub Arbol_Click()
lblActual = Arbol.SelectedItem.Text
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
Dim i As Integer
Arbol.Nodes.Add , , "Raiz", "Nodo raiz", 1
For i = 1 To 3
Arbol.Nodes.Add "Raiz", tvwChild, "Hijo " & i, "Hijo " & i, (i + 1)
Next i
Arbol.Nodes.Add "Hijo 1", tvwChild, "Nieto 1", "Nieto 1", 5 Arbol.Nodes.Add
"Nieto 1", tvwNext, "Nieto 2", "Nieto 2", 6 Arbol.Nodes.Add "Nieto 1",
tvwPrevious, "Nieto 0", "Nieto 0", 7
End Sub
El ejercicio completo puede bajarse de Aqu.

Ejercicio N 11: Control Chart.

El control
Miscrosoft Chart
nos permite
desplegar
grficos
asociados a
determinados
datos que
podemos cargar
de otros archivos
como puede ser
una planilla de
Excel o una Base
de datos, o
determinarlos por
cdigo.
El control lo traemos de Componentes. Y al dibujarlo en el formulario vamos a ver
que contiene de manera predeterminada un grfico con datos apcrifos para
mostarnos su diseo.
Como organiza los datos: El control MSChart requiere que todos los datos se
organicen en filas y columnas. Adems requiere saber cuntos puntos de datos
habr en cada fila y columna que debe graficar. Por lo general se cuenta con una
columna de datos con mltiples filas (algo parecido a un alista de nmeros). Por
ejemplo: si se desean graficar las ventas de una empresa durante los ltimos
doce meses, contar con una sola columna(un ao) y doce filas(una por cada
mes). Si desea comparar los dos ltimos aos, tendr dos columnas (una por
cada ao) y doce filas(una por cada mes). Para poder organizar los datos usamos
las propieddaes ColumnCount y RowCount. En el ejemplo mencionado:
ColumnCount= 1
RowCount= 12
ChartType= 1 (vtChChartType2dBar)
Para agregar datos en tiempo de diseo: capturamos 12 cifras en tiempo de
diseo para poder apreciar el grfico. establecemos la propiedad AutoIncremente
a True y en la propiedad Data asignamos el valor 1, 2 o 3 para incrementar. Hagan
la prueba, de esa manera carga datos de manera automtica.
Vamos a hacer un primer ejercicio viendo las propiedades y siguiendo un poco el
ejemplo anterior:
Option Explicit
Dim data(1 To 5, 1 To 3) As String
Dim i As Integer
Dim m As Integer
Private Sub Form_Load()
Randomize
'Establece la cantidad de filas
MSChart1.RowCount = 3

'asigna la cantidad de columnas de color


MSChart1.ColumnCount = 3
'Puedo asignar un valor determinado a la columna de color de una fila en este
caso la verde.
MSChart1.Row = 3
MSChart1.Column = 2
MSChart1.data = 34
'Le cambia el texto a la Primer fila o row
MSChart1.Row = 1
MSChart1.RowLabel = "Primera Fila"
'Le cambio el texto a la etiqueta del color azul, teniendo la propiedad
ShowLegend a True
MSChart1.ShowLegend = True
MSChart1.Column = 3
MSChart1.ColumnLabel = "Azul"
'Le agrego un texto al pie del grafico
MSChart1.FootnoteText = "Este es el pie del grfico."
'Le agrego un Ttulo.
MSChart1.TitleText = "Grfico MSChart"
'Puedo cambiar el tipo de letra del titulo y del Pie de grafico
With MSChart1.Title.VtFont
.Name = "Arial"
.Style = VtFontStyleBold
.Effect = VtFontEffectUnderline
.Size = 14
.VtColor.Set 0, 0, 255
End With
With MSChart1.Footnote.VtFont
.Name = "arial"
.Style = VtFontStyleBold
.Effect = VtFontEffectUnderline

.Size = 10
.VtColor.Set 125, 150, 155
End With
'Con la propiedad ChartType podemos cambiar el tipo de grafico.
'Por ejemplo: vtChChartType3dBar: es un grafico de Barras en 3D.
'Tambien podemos crear un array de 2 dimensiones (una tabla) y graficarla.
For i = 1 To 5
For m = 1 To 3
data(i, m) = Rnd * 100
Next m
Next i
MSChart1.ChartData = data
End Sub

Ejercicio N 12: Grficos con Chart.


En este ejercicio
vamos a abrir una
tabla y a traves de
una consulta SQL
vamos a graficar
los datos de la
misma. La tabla
que usamos se
llama
books6.mdb y
esta incluida en el
codigo de los
ejercicios del
Control Chart.
En este ejercicio vamos a usar un menu que consta de Archivo: Grabar, Imprimir
y Salir.Un menu Edicion que copia al portapapeles y Un menu de Grficos que
despliega distintos tipos de graficos , uno de ellos a traves de la base de datos y
otros por cdigo.
Option Explicit
'debemos cargar la referencia Microsoft ActiveX data object 2.0 y el MSChart.
Private Sub Form_Load()
End Sub
Private Sub Form_Resize()
With MSChart1
.Left = 0

.Top = 0
.Width = Me.ScaleWidth
.Height = Me.ScaleHeight
End With
End Sub
Private Sub mnuArchivoGuardar_Click()
Dim strArchivoGuardar As String
strArchivoGuardar = App.Path & "\" & App.EXEName & ".bmp"
MSChart1.EditCopy
SavePicture Clipboard.GetData, strArchivoGuardar
MsgBox "El grfico ha sido guardado en " & strArchivoGuardar, vbInformation,
"Guardar Grfico"
End Sub
Private Sub mnuArchivoImprimir_Click()
MSChart1.EditCopy
Printer.PaintPicture Clipboard.GetData, 0, 0
Printer.NewPage
Printer.EndDoc
MsgBox "El grfico ha sido enviado para su impresin.", vbInformation, "Imprimir
grfico"
End Sub
Private Sub mnuArchivoSalir_Click()
Unload Me
End Sub
Private Sub mnuEdicionCopiar_Click()
MSChart1.EditCopy
MsgBox "El grfico se copiado a la memoria.", vbInformation, "Copia de grfico"
End Sub
Private Sub mnuGraficosBaseDatos_Click()
'abrimos una conexion a datos con el uso de un proveedor OLEDB 'cuidado con
la ruta donde esta la base de datos.

Dim cnn As New ADODB.Connection


Dim rst As New ADODB.Recordset
Dim strProveedor As String
Dim strOrigenDatos As String
Dim strSQL As String
strProveedor = "Microsoft.Jet.OLEDB.3.51"
strOrigenDatos = App.Path & "\books6.mdb"
strSQL = "SELECT Title, SUM(Sales) AS Ventas FROM BookSales GROUP BY
Title HAVING SUM(Sales) > 0"
cnn.Open "provider=" & strProveedor & "; Data Source=" & strOrigenDatos
rst.Open strSQL, cnn, adOpenStatic
With MSChart1
.ShowLegend = True
.chartType = VtChChartType2dBar
'esta linea carga los datos
Set .DataSource = rst
End With
End Sub
Private Sub mnuGraficosIncrAut_Click()
Dim intBucle As Integer
With MSChart1
.chartType = VtChChartType3dBar
.ColumnCount = 12 .RowCount = 12
.AutoIncrement = True
For intBucle = 1 To 144
.Data = intBucle
Next
.AllowDynamicRotation = True
.ShowLegend = True
End With

End Sub
Private Sub mnuGraficosMatriz_Click()
Dim avarDatos(0 To 3, 1 To 5) As Variant
Dim intCol As Integer
Dim intFila As Integer
'carga las leyendas y los datos
With MSChart1
.chartType = VtChChartType3dBar
.ColumnCount = 6
.RowCount = 12
'los bucles generan los datos de la matriz dimensionada como variant
For intCol = 1 To 5
For intFila = 1 To 3
If intCol = 1 Then
avarDatos(intFila, intCol) = "trim" & CStr(intFila + 1)
Else
avarDatos(intFila, intCol) = Int((50 - 10 + 1) * Rnd + 10)
End If
Next
Next
.ShowLegend = True
End With
'asigna los datos al control chart
MSChart1.ChartData = avarDatos
End Sub
Private Sub mnuGraficosPuntos_Click()
Dim intCol As Integer
Dim intFila As Integer
With MSChart1
.chartType = VtChChartType3dBar

.ColumnCount = 6
.RowCount = 12
For intCol = 1 To 6
For intFila = 1 To 12
.Column = intCol .Row = intFila
.Data = intCol * intFila
Next
Next .ShowLegend = True
End With
End Sub

Ejercicio N 13: Control Chart y Excel.


Vamos a usar
datos de una
planilla de Excel,
para generar un
grfico al
cargarse el
formulario que
contiene al
control MiSChart.
El cdigo es el
siguiente:
Option Explicit
' Coloque este cdigo en la seccin Declaraciones.
' Si utiliza Office 97, asegrese de establecer una
' referencia a Microsoft Excel 8.0 Object Library.
' Si utiliza Office 95, establezca una referencia a
' Microsoft Excel 5.0 Object Library y declare
' la variable como Worksheet.
Dim wkbObj As Workbook ' Declara una variable de objeto.
Private Sub Form_Load()
' Establece despus la variable con el mtodo
GetObject. Set wkbObj = GetObject _ (App.Path & "\pepe.xls")
Dim matrizDatos(1 To 6, 1 To 2)
Dim i As Integer For i = 1 To 6

' Los valores de la columna A llenan la primera serie de las ' matriz. Si estos
valores son cadenas, se convierten
' las etiquetas de las filas.
matrizDatos(i, 1) = wkbObj.Worksheets(1) _ .Range("A" & i + 1).Value
' Despus los valores de la columna B llenan la segunda.
matrizDatos(i, 2) = wkbObj.Worksheets(1) _ .Range("B" & i + 1).Value
Next i
MSChart1.ChartData = matrizDatos
End Sub
Los cdigos de los tres ltimos ejercicios que usan el Control Chart pueden
bajarse de AQU.

Ejercicio N 14: Formulario de Datos.


Visual Basic cuenta con una cantidad importante de Asistentes. Entre ellos el
asistente para la creacin de un Formulario de datos, osea un formulario que va a
mostrar datos de una Base de datos.
Para incorporar al Asistente vamos a Complementos, Administrador de
complementos y alli se nos abre una ventana desde donde podemos seleccionar
cualquiera de los Asistentes.
Seleccionamos
VB 6 Data Form
Wizard y
hacemos doble
click, o marcamos
en la casilla de
seleccin, para
qu se cargue.
Luego hacemos
Aceptar y al ir a
Complementos
veremos la
opcion de del
asistente incluida.
La seleccionamos
y se abrir una
ventanacon la
introduccin al
Asistente.
Pasamos a Siguiente, ya que aqu no podemos cargar la configuracin de ningn
perfil, porque no tenemos ninguna configuracin o plantilla grabada.

En esta pantalla
seleccionamos
qu tipo de base
de datos vamos a
usar, si una de
Access o de un
servidor remoto.
En este caso
elegimos Access.
Y pasamos a la
pantalla
siguiente.

En esta pantalla
si hacemos Click
en el botn
Examinar
podemos elegir la
base de datos
que vamos a
usar.

Aqu aparece una


lista de opciones,
que nos permite
elegir qu tipo de
formulario vamos
a crear y como
vamaos a mostrar
los datos.
Registro
individual: nos
mostrar registro
por registro.
Cuadrcula: lo
har en una grilla.
Maestro/Detalle:
relaciona dos
tablas.
FlexGrid mostrar: las tablas con sus resmenes y totales de los datos
existentes en la tabla y Chart lo har de manera grfica. Nosotros vamos a elegir
a manera de grilla o Cuadrcula.

En esta pantalla
seleccionamos la
tabla de la base
de datos. Y de
ella los campos
que queremos
mostrar. Los
seleccionamos y
con los botones
con flecha los
vamos pasando a
la lista de la
derecha. Si
queremos
ordenar los datos
por un campo
determinado lo
elegimos del
combo
desplegable.
Aqui hacemos
Click en
seleccionar todos
los botones o
elegimos solo
algunso. estos
nos permiten
navegar la grilla.
La pantalla
Siguiente nos
pregunta si
queremos
guardar esta
configuracin
como una
plantilla para
futuros
formularios.
Luego hacemos
Finalizar.
Al cerrase la
ventana del
Asistente
veremos en
nuestro proyecto
estndar un
nuevo formulario,
si no usamos el
primero o Form1
lo podemos
eliminar.
Posicionados en la ventana proyecto con el botn derecho tenemos la opcin de
eleminarlo. Y grabamos la aplicacin con el formulario que cre el asistente. Sino
lo usamos como formulario de presentacin. Como vemos en la ventana cdigo
el asistente, ya codific los botones de navegacin y de cierre de la Aplicacin.
El ejercicio completo podemos bajarlo de Aqu.

Ejercicio N 15: DHTML: Hola Mundo

Visual Basic en
su versin 6
cuenta con un
tipo de proyecto
que nos permite
crear un archivo
con extensin
html y por lo
tanto al
ejercutarlo, se
abre en el
navegador, para
esto crea una .dll
donde convierte
el codigo visual
basic a htm.
Como vemos en la imagen debemos elegir en proyecto Nuevo: Aplicacin DHTML
(Dinamic Html). Tenemos aqu tambin una caja de herramientas y una ventana
diseo y otra ventana cdigo aunque con ciertas modificaciones, en el nombre de
los objetos y en sus procedimientos. Vamos a hacer el tpico ejemplo de Hola
Mundo pero en este editor de cdigo HTML. La aplicacin en tiempo de ejecucin
abre una pgina web con las siguientes caractersticas:

Vamos a dibujar
un control image,
un botn y una
caja de texto,
modificamos sus
propiedades a
travs de la
ventana
propiedades, y
luego
codificamos en la
ventana cdigo,
la sintxis es la
siguiente:

Private Function Button1_onclick() As Boolean


Image1.border = 4
TextField1.Value = "Hola mundo"
End Function
Los procedimientos aqu se llamarn funciones. Y la caja de texto en lugar de
Caption tiene una propiedad llamada Value. Y la funcin no es Click sino onClick.

Ejercicio N 16: DHTML: Operaciones

Ahora vamos a
hacer una
calculadora
simple de
operaciones
matemticas.
Abrimos un
nuevo proyecto
DHTML y
dibujamos una
tabla con
etiquetas y cajas
de texto y cinco
botones. En
tiempo de
ejecucin se ve
como la imagen
de la izquierda. Y
la codificacin es
la siguiente:
Dim numero1 As Integer
Dim numero2 As Integer
Private Sub BaseWindow_onload()
TextField1.Select
End Sub
Private Function Button1_onclick() As Boolean
numero1 = TextField1.Value
numero2 = TextField2.Value
TextField3.Value = Val(numero1 + numero2)
End Function
Private Function Button2_onclick() As Boolean
numero1 = TextField1.Value
numero2 = TextField2.Value
TextField3.Value = Val(numero1 - numero2)
End Function
Private Function Button3_onclick() As Boolean
numero1 = TextField1.Value
numero2 = TextField2.Value
TextField3.Value = Val(numero1 * numero2)
End Function
Private Function Button4_onclick() As Boolean
numero1 = TextField1.Value
numero2 = TextField2.Value
TextField3.Value = Val(numero1 / numero2)
End Function
Private Function Button5_onclick() As Boolean
TextField1.Value = ""
TextField2.Value = ""
TextField3.Value = ""
End Function
Los dos ejercicios que usan el diseador de paginas web pueden bajarlos de
Aqu.

Volver al Men Principal.


Volver a Ejercicios.

You might also like