Вы находитесь на странице: 1из 169

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

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

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.reocities.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

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.

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.

Ejercicio N 47: Berenjena


Este ejercicio tiene un cdigo
familiar para ustedes ya que
hemos trabajado en ejercicios
anteriores el mtodo
DragDrop pero lo inclu por lo
vistoso de las imgenes, es
una versin en Visual Basic
de una aplicacin hecha en
Flash de Macromedia.
El cdigo es el siguiente:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As
Single)
'Source.Move X, Y
Source.Move (X - Source.Width / 2), (Y - Source.Height / 2)
End Sub
El ejercicio puede bajarse de Aqu.

Ejercicio N 48: Traga Monedas

Esta es una version de las


maquinitas tragamonedas.
Arrastramos una moneda de
1$ sobre el Botn Apostar y
se habilita el Botn Jugar,
cuando nos prece hacemos
Click en el Botn Detener, y si
las tres imagenes son
iguales: ganamos sino
perdimos, y volvemos a
intentarlo. En tiempo de
ejecucin se ve parecido a la
imagen:

El cdigo es el siguiente:
Usamos la API de Windows sndPlaySound para activar el sonido.
Pueden copiarla de aqu textualmente o convocarla desde el Visor de
las API de Visual Basic.
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
Option Explicit
Dim snd As Integer
Dim a As Integer
Dim n1 As Integer
Dim n2 As Integer
Dim n3 As Integer
Private Sub Command1_DragOver(Source As Control, X As Single, Y
As Single, State As Integer)
'Dragea la moneda sobre el botn Apostar
Source.Visible = False
Command2.Enabled = True 'habilita el Botn Jugar
End Sub

Private Sub Command2_Click() 'Botn Jugar


'Aqu usamos la API de windows para ejecutar el sonido
snd = sndPlaySound(App.Path & "\1toons1.wav", SND_ASYNC)
'Habilita el timer de la animacin del tragamonedas
Timer1.Enabled = True
Command4.Enabled = True
End Sub
Private Sub Command3_Click()
'Salida del programa
Unload Me
End Sub
Private Sub Command4_Click()
'Detiene la animacin. Inhabilita el botn Jugar y llama al
procedimiento 'que elige al azar los nmeros
Timer1.Enabled = False
Command2.Enabled = False
Call azar 'llama al procedimiento Azar que eleige tres nmeros
Command4.Enabled = False
End Sub
Private Sub Form_Load()
Randomize
End Sub
Private Sub Timer1_Timer()
'Animacin pasando las imagenes de la tragamoneda
a = a + 1 If a = 1 Then

Image1.Picture = Picture1(0).Picture
Image2.Picture = Picture1(1).Picture
Image3.Picture = Picture1(2).Picture
End If
If a = 2 Then
Image1.Picture = Picture1(1).Picture
Image2.Picture = Picture1(2).Picture
Image3.Picture = Picture1(0).Picture
End If
If a = 3 Then
Image1.Picture = Picture1(2).Picture
Image2.Picture = Picture1(0).Picture
Image3.Picture = Picture1(1).Picture
a=0
End If
End Sub
Private Sub azar()
'Procedimiento que elige tres nmeros al azar correspondientes a
cada 'imagen
n1 = Int(Rnd * 3) + 1
n2 = Int(Rnd * 3) + 1
n3 = Int(Rnd * 3) + 1
Timer1.Enabled = False
Select Case n1
Case 1

Image1.Picture = Picture1(0).Picture
Case 2
Image1.Picture = Picture1(1).Picture
Case 3
Image1.Picture = Picture1(2).Picture
End Select
n1 = n1
Select Case n2
Case 1
Image2.Picture = Picture1(0).Picture
Case 2
Image2.Picture = Picture1(1).Picture
Case 3
Image2.Picture = Picture1(2).Picture
End Select
n2 = n2
Select Case n3
Case 1
Image3.Picture = Picture1(0).Picture
Case 2
Image3.Picture = Picture1(1).Picture
Case 3
Image3.Picture = Picture1(2).Picture
End Select

n3 = n3
'Llama al procedimiento que controla si los tres numeros elegidos al
azar son iguales.
Call ganar
End Sub
Private Sub ganar()
'Procedimiento que controla si los tres nmeros al azar son iguales
gan, sino perdi
Dim m As Integer
If n1 = n2 And n2 = n3 Then Label1.Caption = "Ganaste!!"
snd = sndPlaySound(App.Path & "\Cash2.wav", SND_ASYNC)
For m = 0 To 6
Image4(m).Visible = True
Next m
Else
Label1.Caption = "Perdiste!!"
snd = sndPlaySound(App.Path & "\NoTiempo.wav", SND_ASYNC)
End If
'llama al procedimiento que controla si se termin el dinero.
Call dinero
End Sub
Private Sub dinero()
' Procedimiento que Controla si se acab el dinero
If Image4(0).Visible = False And Image4(1).Visible = False And_
Image4(2).Visible = False And Image4(3).Visible = False And_
Image4(4).Visible = False And Image4(5).Visible = False And_
Image4(5).Visible = False Then

Label1.Caption = "Sin Dinero!!"


End If
End Sub
Como vemos en esta aplicacin tenemos varios procedimientos
creados : Azar, ganar y dinero que eligen los tres numeros al azar
que cargan las imgenes, ganar que controla si las tres imagenes
son iguales y dinero que controla que las monedas de 1$ se
agotaron. Y un Select Case que elige que imagen corresponde a
cada numero.
El cdigo completo puede bajarse de Aqu.

Ejercicio N 49: Protector de Pantalla

Este ejercicio muestra como


hacer un protector de pantalla
simple, que desplaza un
corazn en la pantalla. Este
archivo lo vamos a hacer en
VB y lo vamos a grabar con
extension .scr, para luego
copiarlo en el directorio de
Windows.

En el forrmulario insertamos un control PictureBox donde cargamos


el corazn y un control Timer que controla la animacin del corazn
en la pantalla. El cdigo es:
Option Explicit
Dim movimiento As Integer
Dim puntero As Integer
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As
Long) As Long
Private Sub Form_Click()
puntero = ShowCursor(-1)

End
End Sub
Private Sub Form_DblClick()
puntero = ShowCursor(-1)
End
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
puntero = ShowCursor(-1)
End
End Sub
Private Sub Form_Load()
If App.PrevInstance Then
End
puntero = ShowCursor(0)
movimiento = 3
End Sub
Private Sub
Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y
As Single)
Static X1 As Integer, Y1 As Integer
If X1 = 0 And Y1 = 0 Then
X1 = x
Y1 = y
Exit Sub
End If

If Abs(X1 - x) < 5 And Abs(Y1 - y) < 5 Then


X1 = x Y1 = y
Exit Sub
End If
puntero = ShowCursor(-1)
End
End Sub
Private Sub Timer1_Timer()
'1 hacia arriba y hacia la izquierda
'2 hacia arriba y a la derecha
'3 hacia abajo y a la derecha
'4 hacia abajo y a la izquierda
Select Case movimiento
Case 1
Picture1.Move Picture1.Left - 20, Picture1.Top - 20
If Picture1.Left <= 0 Then
movimiento = 2
ElseIf Picture1.Top <= 0 Then
movimiento = 4
End If
Case 2
Picture1.Move Picture1.Left + 20, Picture1.Top - 20
If Picture1.Left >= (Form1.Width - Picture1.Width) Then
movimiento = 1

ElseIf Picture1.Top <= 0 Then


movimiento = 3
End If
Case 3
Picture1.Move Picture1.Left + 20, Picture1.Top + 20
If Picture1.Left >= (Form1.Width - Picture1.Width) Then
movimiento = 4
ElseIf Picture1.Top >= (Form1.Height - Picture1.Height) Then
movimiento = 2
End If
Case 4
Picture1.Move Picture1.Left - 20, Picture1.Top + 20
If Picture1.Left <= 0 Then
movimiento = 3
ElseIf Picture1.Top >= (Form1.Height - Picture1.Height) Then
movimiento = 1
End If
End Select
End Sub
Para esta aplicacin vamos a usar una API de window para mostrar y
ocultar el puntero del mouse, SHOWCURSOR, y tambien vamos a
registrar un pequeo movimiento del mouse para que se cierre el
programa, asi como tocar una tecla. La animacion controla en cuatro
movimientos el desplazamiento del corazn en diagonal hasta llegar
al borde, y all cambia la dirreccin.
El archivo completo puede bajarse de Aqu.

Ejercicio N 50: Escritorio

Este ejercicio nos permite


jugar con el puntero del
mouse simulando un recoger
objetos, al estilo de una
aventura grfica.

Tenemos una Label y tres Pictures, la 2 es la goma, la 3 el marcador


(en el medio) y la 1 el lpiz. La idea es que al hacer click en el lpiz
quede en el puntero del mouse y as luego hacemos click en la label
y aparece la palabra Tarea, como si la hubisemos escrito, luego
dejamos el lpiz haciendo Click en el Formulario. Hacemos Click en
la goma y luego en la label y se borra la palabra Tarea. Hacemos
Click en el formulario y dejamos la goma. Y al hacer click en el
marcador y tenerlo en el puntero del mouse hacemos Click en la
Label y esta se vuelve roja, antes era color amarillo. El cdigo es:
Option Explicit
Private Sub Form_Click()
If MouseIcon = Picture1.Picture Then ' aqui volvemos al puntero
estndar
MousePointer = 0
Picture1.Visible = True
End If
If MouseIcon = Picture2.Picture Then
MousePointer = 0
Picture2.Visible = True
End If
If MouseIcon = Picture3.Picture Then
MousePointer = 0
Picture3.Visible = True
End If

End Sub
Private Sub
Label1_Click()
If MouseIcon = Picture1.Picture Then ' si el puntero es el lpiz la label
'muestra la palabra Tarea en su caption.
Label1.Caption = "Tarea"
End If
If MouseIcon = Picture2.Picture Then ' si el puntero es la goma borra
Tarea.
Label1.Caption = ""
Label1.BackColor = vbYellow ' fondo de la label amarillo
End If
If MouseIcon = Picture3.Picture Then ' si el puntero es el marcador el
fondo se vuelve 'rojo
Label1.Caption = ""
Label1.BackColor = VBred
End If
End Sub
Private Sub Picture1_Click()'carga el icono del lpiz
MouseIcon = Picture1.Picture
MousePointer = 99
Picture1.Visible = False
End Sub
Private Sub Picture2_Click()'carga el icono en el puntero de la goma
MouseIcon = Picture2.Picture
MousePointer = 99
Picture2.Visible = False

End Sub
Private Sub Picture3_Click()'carga el icono en el puntero del
marcador MouseIcon = Picture3.Picture
MousePointer = 99
Picture3.Visible = False
End Sub
El cdigo del ejercicio lo podes bajar de Aqu.

Ejercicio N 51: Problema

Este ejercicio nos muestra


como armar un problema
sobre la velocidad y la
distancia, ustedes podran
agregar otros problemas
similares. la animacin ayuda
al alumno a buscar la
respuesta adecuada. es un
ejemplo de simulacin. El
cdigo es:

Option Explicit
Dim paso As Integer
Dim i As Integer
Dim tramo1 As String
Dim tramo2 As String
Dim tramo3 As String
Dim tramo4 As String
Private Sub Label1_Click()
Label1.Tag = "si"

Label2.Tag = "no"
Label3.Tag = "no"
Label6.Caption = "A: 500 mts."
Label7.Caption = "B: 500 mts. al Oeste"
Label8.Caption = "C: 4000 mts."
Label9.Caption = "D: 1000 mts."
Timer1.Enabled = True
End Sub
Private Sub Label6_Click()
If Label1.Tag = "si" Then
Label5.Caption = "La respuesta Correcta es la C, porque la distancia
total recorrida es de 4000 mts."
Label5.Visible = True
End If
End Sub
Private Sub
Label7_Click()
If Label1.Tag = "si" Then
Label5.Caption = "La respuesta Correcta es la C, porque la distancia
total recorrida es de 4000 mts."
Label5.Visible = True
End If
End Sub
Private Sub Label8_Click()
If Label1.Tag = "si" Then
Label5.Caption = "La respuesta Correcta es la C, porque la distancia

total recorrida es de 4000 mts."


Label5.Visible = True
End If
End Sub
Private Sub Label9_Click()
If Label1.Tag = "si" Then
Label5.Caption = "La respuesta Correcta es la C, porque la distancia
total recorrida es de 4000 mts."
Label5.Visible = True
End If
End Sub
Private Sub Timer1_Timer()
If paso = 1 Then
Picture2.Move Picture2.Left - 100, Picture2.Top ElseIf paso = 2 Then
Picture2.Move Picture2.Left - 100, Picture2.Top ElseIf paso = 3 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 4 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 5 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 6 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 7 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 8 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 9 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 10 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 11 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 12 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 13 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 14 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 15 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 16 Then
Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 17 Then
Picture2.Move Picture2.Left - 58, Picture2.Top
tramo1 = " El tren se desplaza 1000 mts. al Oeste, "
Label4.Caption = tramo1
ElseIf paso = 18 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 19 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 20 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 21 Then Picture2.Move Picture2.Left + 150, Picture2.Top

ElseIf paso = 22 Then Picture2.Move Picture2.Left + 150, Picture2.Top


ElseIf paso = 23 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 24 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 25 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 26 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 28 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 29 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 30 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 31 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 32 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 33 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 34 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 35 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 36 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 37 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 38 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 39 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 40 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 41 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 42 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 43 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 44 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 45 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 46 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 47 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 48 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 49 Then Picture2.Move Picture2.Left + 150, Picture2.Top
ElseIf paso = 50 Then Picture2.Move Picture2.Left + 126, Picture2.Top
tramo2 = " 2000 mts al Este,"
Label4.Caption = Label4.Caption & tramo2
ElseIf paso = 51 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 52 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 53 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 54 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 55 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 56 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 57 Then Picture2.Move Picture2.Left - 150, Picture2.Top
ElseIf paso = 58 Then Picture2.Move Picture2.Left - 100, Picture2.Top
ElseIf paso = 59 Then Picture2.Move Picture2.Left - 60, Picture2.Top
tramo3 = " 500 mts. al Oeste, "
Label4.Caption = Label4.Caption & tramo3
ElseIf paso = 60 Then Picture2.Move Picture2.Left + 250, Picture2.Top
ElseIf paso = 61 Then Picture2.Move Picture2.Left + 250, Picture2.Top
ElseIf paso = 62 Then Picture2.Move Picture2.Left + 250, Picture2.Top
ElseIf paso = 63 Then Picture2.Move Picture2.Left + 250, Picture2.Top
ElseIf paso = 64 Then Picture2.Move Picture2.Left + 210, Picture2.Top
tramo4 = " y 500 mts al Este. Que distancia Recorri?"

Label4.Caption = Label4.Caption & tramo4 End If paso = paso + 1


End Sub
Pongo los condicionales en un solo renglon para ahorrar espacio,
ustedes corrigan la sintaxis y tambien pueden abreviar codigo
creando procedimientos que se repiten.
El cdigo pueden bajarlo de AQU.

Ejercicio N 52: Caza de Patos

Este es un tpico jueguito de


disparar o Shoot. con el
mouse debemos derribar los
patos y esto hace que
incrementemos el puntaje. He
omitido los sonidos para que
el archivo no sea tan pesado
pero ustedes pueden agregar
los que gusten. El cdigo es:

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 ' play asynchronously
Dim sonido As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer

Dim f As Integer
Dim g As Integer
Dim h As Integer
Dim i As Integer
Dim j As Integer
Dim patos As Integer
Dim patosin As Integer
Dim patosout As Integer
Private Sub Form_Load()
Randomize
End Sub
Private Sub mniDa_Click()
mniDa.Checked = True
mnuNoche.Checked = False
Form1.Picture = Image1.Picture
Timer1.Enabled = True
Timer3.Enabled = True
Timer5.Enabled = True
Timer7.Enabled = True
Timer9.Enabled = True
Timer4.Enabled = False
Timer2.Enabled = False
Timer6.Enabled = False
Timer8.Enabled = False

Timer10.Enabled = False
Picture6.Visible = False
Picture7.Visible = False
Picture1.Visible = False
Picture8.Visible = False
Picture9.Visible = False
End Sub Private Sub mnuNoche_Click()
mniDa.Checked = False
mnuNoche.Checked = True
Form1.Picture = Image2.Picture
Timer2.Enabled = True
Timer4.Enabled = True
Timer6.Enabled = True
Timer8.Enabled = True
Timer10.Enabled = True
Timer1.Enabled = False
Timer3.Enabled = False
Timer5.Enabled = False
Timer7.Enabled = False
Timer9.Enabled = False
Picture6.Visible = False
Picture7.Visible = False
Picture1.Visible = False
Picture8.Visible = False

Picture9.Visible = False
End Sub
Private Sub mnuNuevo_Click()
Picture1.Left = 0
Picture1.Top = 480
Picture6.Left = 1560
Picture6.Top = 1440
Picture7.Left = 480
Picture7.Top = 2760
Picture8.Left = 2400
Picture8.Top = 240
Picture9.Left = 2880
Picture9.Top = 2160
Picture1.Visible = True
Picture8.Visible = True
Picture6.Visible = True
If mniDa.Checked = True Then
Timer1.Enabled = True
Timer3.Enabled = True
Timer5.Enabled = True
Timer7.Enabled = True
Timer9.Enabled = True
ElseIf mnuNoche.Checked = True Then
Timer2.Enabled = True

Timer4.Enabled = True
Timer6.Enabled = True
Timer8.Enabled = True
Timer10.Enabled = True
End If
End Sub
Private Sub mnuSalir_Click()
End
End Sub
Private Sub Picture1_Click()
sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)
If Timer1.Enabled = True Then
Timer1.Enabled = False
Picture1.Picture = Picture3.Picture
Call pausa
Picture1.Visible = False
patosin = patosin + 1
Call final
Picture1.Picture = Picture2(0).Picture
ElseIf Timer2.Enabled = True Then
Timer2.Enabled = False
Picture1.Picture = Picture5.Picture
Call pausa
Picture1.Visible = False

patosin = patosin + 1
Call final
Picture1.Picture = Picture4(0).Picture
End If
End Sub
Private Sub Picture6_Click()
sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)
If Timer5.Enabled = True Then
Timer5.Enabled = False
Picture6.Picture = Picture3.Picture
Call pausa
Picture6.Visible = False
patosin = patosin + 1
Call final
Picture6.Picture = Picture2(0).Picture
ElseIf Timer6.Enabled = True Then
Timer6.Enabled = False
Picture6.Picture = Picture5.Picture
Call pausa
Picture6.Visible = False
patosin = patosin + 1
Call final
Picture6.Picture = Picture4(0).Picture
End If

End Sub
Private Sub Picture7_Click()
sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)
If Timer9.Enabled = True Then
Timer9.Enabled = False
Picture7.Picture = Picture3.Picture
Call pausa
Picture7.Visible = False
patosin = patosin + 1
Call final
Picture7.Picture = Picture2(0).Picture
ElseIf Timer10.Enabled = True Then
Timer10.Enabled = False
Picture7.Picture = Picture5.Picture
Call pausa
Picture7.Visible = False
patosin = patosin + 1
Call final
Picture7.Picture = Picture4(0).Picture
End If
End Sub
Private Sub Picture8_Click()
sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)
If Timer3.Enabled = True Then

Timer3.Enabled = False
Picture8.Picture = Picture3.Picture
Call pausa
Picture8.Visible = False
patosin = patosin + 1
Call final
Picture8.Picture = Picture2(0).Picture
ElseIf Timer4.Enabled = True Then
Timer4.Enabled = False
Picture8.Picture = Picture5.Picture
Call pausa
Picture8.Visible = False
patosin = patosin + 1
Call final
Picture8.Picture = Picture4(0).Picture
End If
End Sub
Private Sub Picture9_Click()
sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)
If Timer7.Enabled = True Then
Timer7.Enabled = False
Picture9.Picture = Picture3.Picture
Call pausa
Picture9.Visible = False

patosin = patosin + 1
Call final
Picture9.Picture = Picture2(0).Picture
ElseIf Timer8.Enabled = True Then
Timer8.Enabled = False
Picture9.Picture = Picture5.Picture
Call pausa
Picture9.Visible = False patosin = patosin + 1
Call final
Picture9.Picture = Picture4(0).Picture
End If
End Sub
Private Sub Timer1_Timer()
a=a+1
If a = 3 Then
a=0
Picture1.Picture = Picture2(a).Picture
Picture1.Visible = True
Dim r As Integer
r = Int(Rnd * 20)
Picture1.Move Picture1.Left + 200, Picture1.Top + r
End Sub
Private SubTimer10_Timer()
j = j + 1 If j = 3 Then

j=0
Picture7.Picture = Picture4(c).Picture
Picture7.Visible = True
Dim r As Integer
r = Int(Rnd * 30)
Picture7.Move Picture7.Left + 200, Picture7.Top - r
End Sub
Private Sub Timer2_Timer()
b = b + 1 If b = 3 Then b = 0
Picture1.Picture = Picture4(b).Picture
Picture1.Visible = True
Dim r As Integer
r = Int(Rnd * 20)
Picture1.Move Picture1.Left + 200, Picture1.Top + r
End Sub
Private Sub pausa()
Dim comenzar
Dim controlar
comenzar = Timer
Do Until controlar >= comenzar + 0.3
controlar = Timer
DoEvents
Loop
End Sub

Private Sub Timer3_Timer()


c=c+1
If c = 3 Then
c=0
Picture8.Picture = Picture2(c).Picture
Picture8.Visible = True
Picture8.Move Picture8.Left + 200, Picture8.Top
End Sub
Private Sub Timer4_Timer()
d = d + 1 If d = 3 Then
d=0
Picture8.Picture = Picture4(d).Picture
Picture8.Visible = True
Picture8.Move Picture8.Left + 200, Picture8.Top
End Sub
Private Sub Timer5_Timer()
e=e+1
If e = 3 Then
e=0
Picture6.Picture = Picture2(c).Picture
Picture6.Visible = True
Picture6.Move Picture6.Left + 200, Picture6.Top
End Sub
Private Sub Timer6_Timer()

f=f+1
If f = 3 Then
f=0
Picture6.Picture = Picture4(c).Picture
Picture6.Visible = True
Picture6.Move Picture6.Left + 200, Picture6.Top
End Sub
Private Sub Timer7_Timer()
g=g+1
If g = 3 Then
g=0
Picture9.Picture = Picture2(c).Picture
Picture9.Visible = True
Dim r As Integer
r = Int(Rnd * 30)
Picture9.Move Picture9.Left + 200, Picture9.Top - r
End Sub
Private Sub Timer8_Timer()
h=h+1
If h = 3 Then
h=0
Picture9.Picture = Picture4(c).Picture
Picture9.Visible = True
Dim r As Integer

r = Int(Rnd * 30)
Picture9.Move Picture9.Left + 200, Picture9.Top - r
End Sub
Private Sub Timer9_Timer()
i=i+1
If i = 3 Then
i=0
Picture7.Picture = Picture2(c).Picture
Picture7.Visible = True
Dim r As Integer
r = Int(Rnd * 30)
Picture7.Move Picture7.Left + 200, Picture7.Top - r
End Sub
Private Sub final()
Label1.Caption = " Cazaste: " & patosin
If patosin = 10 Then
Form2.Label1.Caption = " Felicitaciones !!! Eres un Buen Cazador."
sonido = sndPlaySound(App.Path & "\clarin.wav", SND_ASYNC)
Form2.Show 1
ElseIf patosin = 20 Then
Form2.Label1.Caption = " Felicitaciones !!! Eres un Muy Buen
Cazador."
sonido = sndPlaySound(App.Path & "\clarin.wav", SND_ASYNC)
Form2.Show 1
ElseIf patosin = 50 Then

Form2.Label1.Caption = " Felicitaciones !!! Eres un Excelente


Cazador."
sonido = sndPlaySound(App.Path & "\clarin.wav", SND_ASYNC)
Form2.Show 1
ElseIf patosin = 100 Then
Form2.Label1.Caption = " Felicitaciones !!! Eres el Mejor Cazador."
sonido = sndPlaySound(App.Path & "\clarin.wav", SND_ASYNC)
Form2.Show 1
End If
End Sub
El cdigo puede bajarse de Aqu sin los archivos de sonido.

Ejercicio N 53: Semforo

Esta es una simulacin del


funcionamiento de un
semforo. No incluye ningn
tipo de interactividad es solo
para observar cuando debe
cruzarse la calle, viendo como
lo hace el hombrecito. El
cdigo es:

Option Explicit
Private Sub pausa()
Dim comenzar
Dim controlar

comenzar = Timer
Do Until controlar >= comenzar + 2
controlar = Timer
DoEvents
Loop
End Sub
Private Sub Command1_Click()
End
End Sub
Private Sub Timer1_Timer()
Picture1.Move Picture1.Left, Picture1.Top + 150
'con el condicional controla el reposicionarse.
If Picture1.Top > 7000 Then
Picture1.Top = -300
Picture2.Move Picture2.Left, Picture2.Top + 150
If Picture2.Top > 6500 Then
Picture2.Top = -200 Picture4.Move
Picture4.Left, Picture4.Top + 150
If Picture4.Top > 6500 Then
Picture4.Top = -100 Picture5.Move
Picture5.Left, Picture5.Top + 150
If Picture5.Top > 6500 Then
Picture5.Top = -100
Picture9.Move Picture9.Left, Picture9.Top + 150

If Picture9.Top > 6500 Then


Picture9.Top = -100
Picture10.Move Picture10.Left, Picture10.Top + 150
If Picture10.Top > 6500 Then
Picture10.Top = -200
Picture11.Move Picture11.Left, Picture11.Top + 150
If Picture11.Top > 6500 Then
Picture11.Top = -300
Picture12.Move Picture12.Left, Picture12.Top + 150
If Picture12.Top > 6500 Then
Picture12.Top = -100
End Sub
Private Sub Timer2_Timer()
Picture3.Picture = Picture7.Picture
Timer1.Interval = 600
Call pausa
Picture3.Picture = Picture6.Picture
Timer1.Interval = 0
If Picture2.Top >= 4600 Then
Picture2.Visible = False
If Picture4.Top >= 4600 Then
Picture4.Visible = False
If Picture5.Top >= 4600 Then
Picture5.Visible = False

If Picture9.Top >= 4600 Then


Picture9.Visible = False
If Picture10.Top >= 4600 Then
Picture10.Visible = False
If Picture11.Top >= 4600 Then
Picture11.Visible = False
If Picture12.Top >= 4600 Then
Picture12.Visible = False
If Picture1.Top >= 4600 Then
Picture1.Visible = False Timer3.Enabled = True
Call pausa
Call pausa
Call pausa
Picture3.Picture = Picture7.Picture
Timer3.Enabled = False
Image1.Left = 1200
Timer1.Enabled = True
Timer1.Interval = 400
Picture1.Top = 1200
Picture1.Visible = True
Picture2.Top = 2880
Picture2.Visible = True
Picture4.Top = 2760
Picture4.Visible = True

Picture5.Top = 1680
Picture5.Visible = True
Picture9.Top = 120
Picture9.Visible = True
Picture10.Top = 0
Picture10.Visible = True
Picture11.Top = 4200
Picture11.Visible = True
Picture12.Top = 4440
Picture12.Visible = True
Call pausa
Picture3.Picture = Picture8.Picture
Timer1.Interval = 150
Call pausa
End Sub
Private Sub Timer3_Timer()
Image1.Move Image1.Left + 100
End Sub
El cdigo completo puede bajarse de Aqu.

Ejercicio N 54: Imprimir Imagen

Este ejercicio nos muestra


como usar el objeto Printer,
para darle salida por la
impresora a una imagen. El
cdigo del botn Imprimir es:

Private Sub Command1_Click()


Dim alto As Long
Dim ancho As Long
With Printer
.ScaleMode = vbTwips
alto = .ScaleHeight
ancho = .ScaleWidth
End With
alto = alto \ 2 - Picture1.ScaleHeight \ 2
ancho = ancho \ 2 - Picture1.ScaleWidth \ 2
Printer.PaintPicture Picture1.Picture, ancho, alto,
Picture1.ScaleWidth, Picture1.ScaleHeight
Printer.EndDoc
End Sub
El archivo completo puede bajarse de Aqu.

Ejercicio N 55: Pausa

En este ejercicio vamos a


crear un procedimiento
llamado Pausa para poder
hacer una interrupcin en la
ejecucin del cdigo de una
Aplicacin. As se ver una
animacin que muestra la
aparicin de las letras con un
intrvalo. Usamos un bucle
que toma el tiempo desde el
reloj del sistema. El cdigo
es:

Private Sub pausa()


Dim comenzar
Dim chequeo
comenzar = Timer
Do Until chequeo >= comenzar + 1
chequeo = Timer
DoEvents 'esto hace que windows escuche otras acciones
Loop
End Sub
Private Sub Form_Activate()
Call pausa 'llama al procedimiento
Label1.Visible = True
Call pausa
Label2.Visible = True
call pausa
Label3.Visible = True
Call pausa
Label4.Visible = True

Call pausa
Label5.Visible = True
End Sub
El cdigo puede bajarse de Aqu.

Ejercicio N 56: La API Sleep


Dim Aqu usamos una Api de
Windows para autmatiar esta
pausa o intervalo. Como
vemos esto nos evita usar el
Timer pero debemos
convocar a la Api desde el
Visor o copiando en
declaraciones generales el
cdigo.
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As
Long)
Private Sub Command1_Click()
Call Sleep(1000) Beep
Call Sleep(3000) Beep
End Sub
El cdigo puede bajarse de AQU.

Ejercicio N 57: Slider Especial

Este ejemplo nos muestra una


hermosa slider hecha a partir
de una imagen personalizada.
Como vamos a registrar la
posicin del cursor usamos
una Api de Windows que nos
permite chequear la posicin
del cursor y para guardar el
cdigo creamos un Mdulo de
tipo .bas El cdigo es:

Option Explicit
Dim imagen As Integer
Dim Moviendo As Boolean
'Aqu establecemos las constantes de mximo y mnimo
Const MaxSlider1 = 6
Const MinSlider1 = 1
Private Sub Form_Load()
Moviendo = False
lblMin = MinSlider1
lblMax = MaxSlider1
lblValor = MinSlider1
End Sub
Private Sub imgPuntero_MouseDown(Button As Integer, Shift As
Integer, X As Single, Y As Single)
Dim Cursor As POINTAPI
Dim Anterior As Long
Do 'Para que no lo actualize si no cambio
Anterior = Cursor.X

Moviendo = True
'Cargo la posicion del mouse
Call GetCursorPos(Cursor)
Cursor.X = Cursor.X - (Form1.Left / Screen.TwipsPerPixelX) imgPuntero.Width
'Si no cambio, y no sale de los bordes de la barra, entonces...
If (Anterior <> Cursor.X) And (Cursor.X >= imgBarra.Left) And
(Cursor.X + imgPuntero.Width <= imgBarra.Left + imgBarra.Width)
Then
imgPuntero.Left = Cursor.X
End If
lblValor = Int((imgPuntero.Left - imgBarra.Left) * (MaxSlider1 MinSlider1) / (imgBarra.Width - imgPuntero.Width)) + MinSlider1
Call mostrar
'Que haga los eventos para ver si hay MouseUp
DoEvents
Loop Until
Moviendo = False
End
Sub Private Sub imgPuntero_MouseUp(Button As Integer, Shift As
Integer, X As Single, Y As Single)
Moviendo = False
End Sub
Private Sub mostrar() If lblValor = 1 Then
Picture1.Picture = Image1(0).Picture
ElseIf lblValor = 3 Then
Picture1.Picture = Image1(1).Picture

ElseIf lblValor = 5 Then


Picture1.Picture = Image1(2).Picture
End If
End Sub
Modulo:
Option Explicit
Type POINTAPI X As Long Y As Long End Type
Declare Sub GetCursorPos Lib "User32" (lpPoint As POINTAPI)
El cdigo puede bajarse de AQU.

Ejercicio N 58: Slider

Este es un control slider


comn donde codificamos los
procedimientos Click y
Change. Usamos la funcin
Format para darle forma al
valor en centmetros. El
cdigo es el siguiente:

Option Explicit
Private Sub Slider1_Change()
Label1.Caption = "Medida en Centmetros = " & Format(Slider1.Value,
"#.00")
End Sub
Private Sub Slider1_Scroll()
Label1.Caption = "Medida en Centmetros = " & Format(Slider1.Value,
"#.00")

End Sub
El cdigo puede bajarse desde AQU.

Ejercicio N 59: Media Player MP3


En este ejercicio vamos a
ejecutar archivos MP3 usando
el control Media Player. Que
debemos traer de
componentes, y por supuesto
tenerlo instalado en nuestro
sistema a una de sus ltimas
versiones.

Los controles que usamos son: un Media palyer, los tres controles
tipicos para manipular archivos : DriveListBox, el DirListBox y el
FileListBox, dos botones y dos labels con un timer que daran cuenta
del tiempo total y parcial del archivo. El cdigo es:
Option Explicit
Dim Min As Integer
Dim Sec As Integer
Dim Nombrearchivo As String
Dim Abrirarchivo As Boolean

Private Sub Command2_Click()'Boton salir


End
End Sub

Private Sub Command4_Click()'Boton Abrir y cerrar el archivo MP3


With MediaPlayer1
If Not Abrirarchivo Then
.FileName = Nombrearchivo
.AutoStart = False
Command4.Caption = "Cerrar"
Else
.FileName = ""
Command4.Caption = "Abrir"
End If
End With
End Sub

Private Sub Dir1_Change()'selecciona el directorio


File1.FileName = Dir1.Path

End Sub

Private Sub File1_Click()'selecciona el archivo MP3


If Right(Dir1.Path, 1) = "\" Then
Nombrearchivo = Dir1.Path & File1.FileName
Else
Nombrearchivo = Dir1.Path & "\" & File1.FileName
End If
End Sub

Private Sub MediaPlayer1_OpenStateChange(ByVal OldState As


Long, ByVal NewState As Long)'mide el tiempo total de duracin del
archivo
Min = MediaPlayer1.Duration \ 60
Sec = MediaPlayer1.Duration - (Min * 60)
Label7.Caption = "Tiempo Total: " & Format(Min, "0#") & ":" &
Format(Sec, "0#")
Abrirarchivo = CBool(NewState)
End Sub
Private Sub Timer1_Timer()'con el timer actualiza la label de tiempo
'transcurrido
Min = MediaPlayer1.CurrentPosition \ 60
Sec = MediaPlayer1.CurrentPosition - (Min * 60)
If Min > 0 Or Sec > 0 Then
Label8.Caption = "Tiempo transcurrido: " & Format(Min, "0#") & ":" &
Format(Sec, "0#")
Else
Label8.Caption = "Tiempo transcurrido: 00:00"
End If
End Sub
Para que muestre solo los archivos MP3 en la propiedad Pattern del
FileListBox: ingresamos "*.MP3"

Ejercicio N 60: Objeto Printer

En este ejercicio vamos a


retomar el objeto Printer, que
alguna vez ya habiamos
trabajado para darle salida
por impresora, a un texto
determinado.

Ahora veremos modificaciones del tipo de letra, estilo y algunos


mtodos graficos, como lneas, rectngulos arcos y crculos. En el
procedimiento Click del boton ingresamos el siguiente cdigo:
Option Explicit
Dim smensaje As String
Dim HWidth As Integer
Dim HHeight As Integer

Private Sub Command1_Click()


Const pi = 3.141592654
'vamos a imprimir dos renglones con un saludo
Printer.Print "Hola soy Mirta"
Printer.Print "Estamos usando el Objeto Printer"
'si queremos imprimir en una nueva pagina usamos Printer.NewPage
'y para cerrar la impresin Printer.EndDoc
'si queremos cambiar la letra
Printer.FontName = "Tahoma"
' para modificar el tamao
Printer.FontSize = 14
' y aqui otras variaciones de estilo
With Printer
Printer.Print "Impresin Normal"
.FontBold = True
Printer.Print "Estamos imprimiendo en Negrita"
.FontItalic = True
Printer.Print "Estamos imprimiendo en Negrita y Cursiva"
.FontBold = False
.FontItalic = False
.FontSize = 10
Printer.Print "Volvemos a la impresin Normal y Tamao: 10"
End With
'para imprimir el nmero de pgina en el centro podemos usar el
siguiente cdigo
smensaje = "Pgina " & Printer.Page
HWidth = Printer.TextWidth(smensaje) / 2
HHeight = Printer.TextHeight(smensaje) / 2
Printer.CurrentX = Printer.ScaleWidth / 2 - HWidth
Printer.CurrentY = (Printer.ScaleHeight - HHeight) - 200
Printer.Print smensaje
'para imprimir funciones grficas con el objeto printer
'Line: necesitamos valores para las dos coordenadas de inicio y de
final de la recta
Printer.Line (4000, 2500)-(7000, 4000), vbRed
'usando la sintaxix B se convertira en un rectngulo
Printer.Line (3000, 4500)-(6000, 6000), vbBlue, B
'para un crculo

Printer.Circle (4000, 8000), 1000, vbGreen


'para un medio arco
Printer.Circle (8000, 8000), 1000, vbBlue, 0, pi
'si le damos valores negativos dibuja las lneas hacia el centro del
crculo.
Printer.Circle (4000, 12000), 1000, vbRed, -1, -pi
'y para una elipse
Printer.Circle (8000, 12000), 1000, vbBlue, , , 0.5
Printer.EndDoc
End Sub

Ejercicio N 61: Funciones Matemticas

En este ejercicio veremos


algunas funciones como la
bsqueda de nmeros al azar,
raz de nmeros y redondeo
de decimales. Usamos
botones para ejecutar las
funciones, cajas de texto para
ingresar valores y labels para
dar salida a los resultados.

El cdigo es:
Option Explicit
Private Sub Command1_Click()'boton de nmero al azar
Dim azar As Integer
Randomize
azar = Int(10 * Rnd) + 1
Label3.Caption = azar
End Sub
Private Sub Command2_Click()'nmero al azar entre dos valores
Dim azar As Integer
Dim rangomenor As Integer
Dim rangomayor As Integer
Randomize
rangomayor = CInt(Text2)
rangomenor = CInt(Text1)
azar = Int((rangomayor - rangomenor + 1) * Rnd + rangomenor)

Label4 = azar
End Sub
Private Sub Command3_Click()' raz de un nmero
Dim numero As Integer
Dim raiz As Integer
raiz = CInt(Text3)
numero = CInt(Text4)
Label5.Caption = numero ^ (1 / raiz)
End Sub
Private Sub Command4_Click()'redondeo de un decimal
Dim numero
Dim decimales As Integer
numero = Text6
decimales = CInt(Text5)
Label10.Caption = Round(numero, decimales)
End Sub
Private Sub Form_Activate()
Text1.SetFocus
End Sub

En este ejercicio vamos a


crear una funcin que nos
permite calcular un interes
compuesto, de una suma
inicial de acuerdo al
porcentaje de inters
ingresado y la cantidad de
cuotas en que se devuelva el
mismo.

Usamos tres labels informativas, y tres cajas de texto para ingresar


los valores, un boton para ejecutar la funcin y una label para que
nos devuelva el clculo hecho. El cdigo es:
Option Explicit
Dim capital As Currency
Dim interesmensual As Single
Dim cuotas As Long
Private Sub Command1_Click()
capital = Text1
interesmensual = Text2
cuotas = Text3
Label4.Caption = InteresCompuesto(capital, interesmensual, cuotas)

End Sub
Function InteresCompuesto(capital As Currency, interesmensual As
Single, cuotas As Long) As Currency
Dim i As Long
Dim total As Currency
total = capital
For i = 1 To cuotas
total = total + (total * (interesmensual))
Next i
InteresCompuesto = total - capital
End Function
Los ejercicios con su cdigo completo pueden bajarse de AQU.

Ejercicio N 62: Tablas de Sumar

En esta tabla del uno,


aplicable a los demas
nmeros y adaptable a otra
operaciones de resta,
multiplicacin o divisin.
Tenemos una combinacin de
labels, imgenes, shapes y
checkbox con los que ha sido
armada la aplicacin. Su
cdigo es el siguiente:

Dim Puntos As Byte


Public flag1 As Byte
Public flag2 As Byte

Private Sub ganar()


'Poner todas las imagenes invisibles
If ImageUno.Visible = False And ImageDos.Visible = False And
ImageTres.Visible = False _
And ImageCuatro.Visible = False And ImageCinco.Visible = False
And ImageSeis.Visible = False _
And ImageSiete.Visible = False And ImageOcho.Visible = False And
ImageNueve.Visible = False _
And ImageCero.Visible = False Then
For I = 1 To 300
Beep
Next I
lblRespuesta.Visible = True

lblRespuesta.ZOrder 0
lblRespuesta.Caption = "Muy bien resuelta la Tabla! FELICIDADES!"
End If
End Sub
Private Sub AniPushButton1_Click()
frmTablaDel_1.Hide
frmTablaSumaDel_2.Show
End Sub
Private Sub AniPushButton2_Click()
'Limpiar los resultados
img0.Picture = LoadPicture("")
img1.Picture = LoadPicture("")
img2.Picture = LoadPicture("")
img3.Picture = LoadPicture("")
img4.Picture = LoadPicture("")
img5.Picture = LoadPicture("")
img6.Picture = LoadPicture("")
img7.Picture = LoadPicture("")
img8.Picture = LoadPicture("")
img9.Picture = LoadPicture("")
'Poner los nmeros en la bola
ImageUno.Visible = True
ImageDos.Visible = True
ImageTres.Visible = True
ImageCuatro.Visible = True
ImageCinco.Visible = True
ImageSeis.Visible = True
ImageSiete.Visible = True
ImageOcho.Visible = True
ImageNueve.Visible = True
ImageCero.Visible = True
'Inicializar la propiedad Tag
img0.Tag = "vacia"
img1.Tag = "vacia"
img2.Tag = "vacia"
img2.Tag = "vacia"
img4.Tag = "vacia"
img5.Tag = "vacia"
img6.Tag = "vacia"
img7.Tag = "vacia"
img8.Tag = "vacia"
img9.Tag = "vacia"
'Limpiar los CheckBox y la imagenes
Check1.Caption = ""
Check1.Visible = False
imgConejo.Visible = False

Check2.Caption = ""
Check2.Value = 0
imgOsito.Visible = False
Check3.Caption = ""
Check3.Value = 0
imgPato.Visible = False
Check4.Caption = ""
Check4.Value = 0
imgGato.Visible = False
Check5.Caption = ""
Check5.Value = 0
imgBug.Visible = False
Check6.Caption = ""
Check6.Value = 0
imgNia.Visible = False
Check7.Caption = ""
Check7.Value = 0
imgOso.Visible = False
Check8.Caption = ""
Check8.Value = 0
imgAlce.Visible = False
Check9.Caption = ""
Check9.Value = 0
imgViejito.Visible = False
lblRespuesta.ZOrder 1 'pasar atrs el label
End Sub
Private Sub Check1_Click()
Check1.Value = 1
End Sub
Private Sub Check2_Click()
Check2.Value = 1
End Sub
Private Sub Check3_Click()
Check3.Value = 1
End Sub
Private Sub Check4_Click()
Check4.Value = 1
End Sub

Private Sub Check5_Click()


Check5.Value = 1
End Sub
Private Sub Check6_Click()
Check6.Value = 1
End Sub
Private Sub Check7_Click()
Check7.Value = 1
End Sub
Private Sub Check8_Click()
Check8.Value = 1
End Sub
Private Sub Check9_Click()
Check9.Value = 1
End Sub
Private Sub Command1_Click()
'Limpiar los resultados
img0.Picture = LoadPicture("")
img1.Picture = LoadPicture("")
img2.Picture = LoadPicture("")
img3.Picture = LoadPicture("")
img4.Picture = LoadPicture("")
img5.Picture = LoadPicture("")
img6.Picture = LoadPicture("")
img7.Picture = LoadPicture("")
img8.Picture = LoadPicture("")
img9.Picture = LoadPicture("")
'Poner los nmeros en la bola
ImageUno.Visible = True
ImageDos.Visible = True
ImageTres.Visible = True
ImageCuatro.Visible = True
ImageCinco.Visible = True
ImageSeis.Visible = True
ImageSiete.Visible = True
ImageOcho.Visible = True
ImageNueve.Visible = True
ImageCero.Visible = True
'Inicializar la propiedad Tag
img0.Tag = "vacia"
img1.Tag = "vacia"
img2.Tag = "vacia"
img2.Tag = "vacia"
img4.Tag = "vacia"
img5.Tag = "vacia"
img6.Tag = "vacia"

img7.Tag = "vacia"
img8.Tag = "vacia"
img9.Tag = "vacia"
'Limpiar los CheckBox y la imagenes
Check1.Caption = ""
Check1.Value = 0
imgConejo.Visible = False
Check2.Caption = ""
Check2.Value = 0
imgOsito.Visible = False
Check3.Caption = ""
Check3.Value = 0
imgPato.Visible = False
Check4.Caption = ""
Check4.Value = 0
imgGato.Visible = False
Check5.Caption = ""
Check5.Value = 0
imgBug.Visible = False
Check6.Caption = ""
Check6.Value = 0
imgNia.Visible = False
Check7.Caption = ""
Check7.Value = 0
imgOso.Visible = False
Check8.Caption = ""
Check8.Value = 0
imgAlce.Visible = False
Check9.Caption = ""
Check9.Value = 0
imgViejito.Visible = False
lblRespuesta.ZOrder 1 'pasar atrs el label
End Sub
Private Sub img0_DragDrop(Source As Control, X As Single, Y As
Single)
flag2 = 2
If TypeOf Source Is Image Then
If img0.Tag = "vacia" And Source.Tag = "cero" Then
img0.Picture = LoadPicture(App.Path & "\#0.ico")
img0.Tag = "Correcta"

Source.Visible = False
If flag1 = 1 And flag2 = 2 Then 'Chequea si estan colocados los dos
numeros
Check9.Caption = "Correcta"
Check9.Value = 1
imgViejito.Visible = True
End If

For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img0.Tag = "vacia" And Source.Tag <> "cero" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img1_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img1.Tag = "vacia" And Source.Tag = "dos" Then
img1.Picture = LoadPicture(App.Path & "\#2.ico")
img1.Tag = "Correcta"
Source.Visible = False
Check1.Caption = "Correcta"
Check1.Value = 1
Check1.Visible = True
imgConejo.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img1.Tag = "vacia" And Source.Tag <> "dos" Then
MsgBox "Esa suma es incorrecta"
End If
End If
End Sub
Private Sub img2_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img2.Tag = "vacia" And Source.Tag = "tres" Then
img2.Picture = LoadPicture(App.Path & "\#3.ico")
img2.Tag = "Correcta"
Source.Visible = False
Check2.Caption = "Correcta"
Check2.Value = 1
imgOsito.Visible = True
For I = 1 To 20
Beep

Next I
Call ganar
ElseIf img2.Tag = "vacia" And Source.Tag <> "tres" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img3_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img3.Tag = "vacia" And Source.Tag = "cuatro" Then
img3.Picture = LoadPicture(App.Path & "\#4.ico")
img3.Tag = "Correcta"
Source.Visible = False
Check3.Caption = "Correcta"
Check3.Value = 1
imgPato.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img3.Tag = "vacia" And Source.Tag <> "cuatro" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img4_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img4.Tag = "vacia" And Source.Tag = "cinco" Then
img4.Picture = LoadPicture(App.Path & "\#5.ico")
img4.Tag = "Correcta"
Source.Visible = False
Check4.Caption = "Correcta"
Check4.Value = 1
imgGato.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img4.Tag = "vacia" And Source.Tag <> "cinco" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img5_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img5.Tag = "vacia" And Source.Tag = "seis" Then
img5.Picture = LoadPicture(App.Path & "\#6.ico")
img5.Tag = "Correcta"

Source.Visible = False
Check5.Caption = "Correcta"
Check5.Value = 1
imgBug.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img5.Tag = "vacia" And Source.Tag <> "seis" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img6_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img6.Tag = "vacia" And Source.Tag = "siete" Then
img6.Picture = LoadPicture(App.Path & "\#7.ico")
img6.Tag = "Correcta"
Source.Visible = False
Check6.Caption = "Correcta"
Check6.Value = 1
imgNia.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img6.Tag = "vacia" And Source.Tag <> "siete" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img7_DragDrop(Source As Control, X As Single, Y As
Single)
If TypeOf Source Is Image Then
If img7.Tag = "vacia" And Source.Tag = "ocho" Then
img7.Picture = LoadPicture(App.Path & "\#8.ico")
img7.Tag = "Correcta"
Source.Visible = False
Check7.Caption = "Correcta"
Check7.Value = 1
imgOso.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img7.Tag = "vacia" And Source.Tag <> "ocho" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub

Private Sub img8_DragDrop(Source As Control, X As Single, Y As


Single)
If TypeOf Source Is Image Then
If img8.Tag = "vacia" And Source.Tag = "nueve" Then
img8.Picture = LoadPicture(App.Path & "\#9.ico")
img8.Tag = "Correcta"
Source.Visible = False
Check8.Caption = "Correcta"
Check8.Value = 1
imgAlce.Visible = True
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img8.Tag = "vacia" And Source.Tag <> "nueve" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
Private Sub img9_DragDrop(Source As Control, X As Single, Y As
Single)
flag1 = 1 'Bandera
If TypeOf Source Is Image Then
If img9.Tag = "vacia" And Source.Tag = "uno" Then
img9.Picture = LoadPicture(App.Path & "\#1.ico")
img9.Tag = "Correcta"
Source.Visible = False
If flag1 = 1 And flag2 = 2 Then 'Chequea si estan colocados los dos
numeros
Check9.Caption = "Correcta"
Check9.Value = 1
imgViejito.Visible = True
End If
For I = 1 To 20
Beep
Next I
Call ganar
ElseIf img9.Tag = "vacia" And Source.Tag <> "uno" Then
MsgBox "Esa suma es incorrecta", vbCritical
End If
End If
End Sub
El ejercicio con su cdigo completo puede bajarse de AQU.

Ejercicio N 63: Recipiente

Con esta aplicacin


simulamos la animacin de
llenar y vaciar un Tanque de
Agua. Para que funcione
correctamente este ejercicio,
deben tener el control
Gauge32 habilitado en su
sistema de Windows.
El cdigo es el siguiente:

Private Sub Form_Load()


VolumenInicial = 0
'Inicializar el volumen
Text1.Text = 0
End Sub
Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, x
As Single, y As Single)
'Para cerrar con el label el agua de la llave
Static VolumenInicial As Integer
Static VolumenFinal As Integer
VolumenFinal = 10 - Slider1.Value
If VolumenFinal < VolumenInicial Then
lblAgua.Visible = True 'Cerrar la llave.
VolumenInicial = VolumenFinal
Else
lblAgua.Visible = False 'Abrir la llave.
VolumenInicial = VolumenFinal
End If
'Pasar el valor del Slider al TextBox
Text1.Text = 10 - (Slider1.Value)
End Sub
Private Sub Text1_Change()
'Si esta vacio el TextBox esperar entrar datos.
If Text1.Text = "" Then
Slider1.Value = 10 - Val(Text1.Text)
Gauge1.Value = 0
Text1.SetFocus
Exit Sub
End If
'Chequear el rango en que puede encontrarse el volumen.
If (Text1.Text > 10 Or Text1.Text < 0) Then
Slider1.Value = 0
Gauge1.Value = 0
MsgBox "El volumen debe estar entre 0 y 10 litros."
Else
'Pasar los valores del TextBox al control Slider y al Gauge.
Slider1.Value = 10 - Val(Text1.Text)
Gauge1.Value = Val(Text1.Text)

End If
End Sub
Private Sub Text1_Click()
'Para marcar el texto
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
El ejercicio con su cdigo completo puede bajarse de AQU.

Ejercicio N 64: Ecuacin de 2do. Grado

Este ejercicio utiliza


funciones matemticas como
clculo de raz cuadrada. Y un
control especial
CommonDialog que convoca
a las ventanas estndar de
Windows, que asociados a los
mtodos Put y Get nos
permiten Abrir y Guardar un
fichero como txt. El cdigo
del ejercicio es el siguiente:
Dim a As Single, b As Single, c As Single 'Variable de los Datos
Dim x1 As Single, x2 As Single 'Variable de las respuestas
Dim del As Single 'Variable para los sumandos dentro del radical
Private Sub cmdCalcular_Click()
del = (b ^ 2 - 4 * a * c)
If del >= 0 Then 'Si las races son reales e iguales
x1 = (-b + Sqr(del)) / (2 * a)
x2 = (-b - Sqr(del)) / (2 * a)
txtX1.Text = Format(x1, "###,##0.00")
txtX2.Text = Format(x2, "###,##0.00")
Else 'Si son complejas
x1 = Format((-b) / (2 * a), "###,##0.00")
x2 = Format((Sqr(-del)) / (2 * a), "###,##0.00")
txtX1.Text = x1 & " + " & x2 & " i"
txtX2.Text = x1 & " - " & x2 & " i"
End If
End Sub
Private Sub cmdSalir_Click()
End

End Sub
Private Sub Form_Load()
'Inicializar las variables
a=1
b=2
c=1
'Inicializar las cajas de texto
txtA.Text = a
txtB.Text = b
txtC.Text = c
End Sub
Private Sub mnuAbrir_Click()
Dim Fichero As String 'Variable para el nombre del Fichero
CommonDialog1.Action = 1 'Ventana Abrir
Fichero = CommonDialog1.FileName
If Fichero = "" Then Exit Sub
Open Fichero For Random As #1 'Abrir el Fichero
'Tomar los valores del Fichero
Get #1, 1, a
Get #1, 2, b
Get #1, 3, c
Get #1, 4, x1
Get #1, 5, x2
Close #1
'Asignar los valores a las cajas de texto.
txtA.Text = a
txtB.Text = b
txtC.Text = c
cmdCalcular_Click 'Mandar a calcular
End Sub
Private Sub mnuSalvar_Click()
Dim Fichero As String
If Fichero = "" Then
mnuSalvarComo_Click
Exit Sub
End If
Open Fichero For Random As #1 'Abrir el Fichero.
'Guardar el valor de las variables en el Fichero.
Put #1, , a
Put #1, , b
Put #1, , c
Put #1, , x1
Put #1, , x2
Close (1)
End Sub
Private Sub mnuSalvarComo_Click()
Dim Fichero As String
CommonDialog1.Action = 2 'Abrir la ventana Salvar como.
Fichero = CommonDialog1.FileName

If Fichero = "" Then Exit Sub


Open Fichero For Random As #1 'Abrir el Fichero.
'Guardar el valor de las variables en el Fichero.
Put #1, , a
Put #1, , b
Put #1, , c
Put #1, , x1
Put #1, , x2
Close (1)
End Sub
Private Sub txtA_LostFocus()
If IsNumeric(txtA.Text) Then 'Si el dato es numrico
a = txtA.Text 'Asignar el valor del TextBox a la variable
Else
MsgBox "Valor incorrecto", vbInformation
txtA.SetFocus 'Poner el foco en el TextBox
End If
End Sub
Private Sub txtA_Change()
'Limpiar los resultados si hay un cambio de dato en el texto.
txtX1.Text = ""
txtX2.Text = ""
End Sub
Private Sub txtA_GotFocus()
'Seleccionar los textos
txtA.SelStart = 0
txtA.SelLength = Len(txtA.Text)
End Sub
Private Sub txtB_Change()
txtX1.Text = ""
txtX2.Text = ""
End Sub
Private Sub txtB_GotFocus()
txtB.SelStart = 0
txtB.SelLength = Len(txtB.Text)
End Sub
Private Sub txtB_LostFocus()
If IsNumeric(txtB.Text) Then
b = txtB.Text
Else
MsgBox "Valor incorrecto", vbInformation
txtB.SetFocus
End If
End Sub
Private Sub txtC_Change()
txtX1.Text = ""

txtX2.Text = ""
End Sub
Private Sub txtC_GotFocus()
txtC.SelStart = 0
txtC.SelLength = Len(txtC.Text)
End Sub
Private Sub txtC_LostFocus()
If IsNumeric(txtC.Text) Then
c = txtC.Text
Else
MsgBox "Valor incorrecto", vbInformation
txtC.SetFocus
End If
End Sub
El ejercicio con su cdigo completo puede bajarse de AQU.

Ejercicio N 65: Clave de Seguridad

Hay muchas maneras de


incluir en un ejercicio cierto
control de seguridad a travs
de una clave, o password, en
esta aplicacin se hace
utilizando la propiedad tag del
control Text, donde se
ingresa. El cdigo es:

Private Sub cmdAceptar_Click()


Static Intentos As Integer
Dim Espera As Long
If UCase(txtPassword.Text) = txtPassword.Tag Then
CandadoCerrado.Picture = CandadoAbierto.Picture
Image1.Visible = False
Refresh
Espera = Timer
'Espera 2 seg, muestra el formulario principal
While Espera + 2 > Timer
Wend
'Descarga esta forma
Unload frmClave
Form2.Show
Else
Intentos = Intentos + 1
If Intentos = 3 Then

MsgBox "Lo siento...Demasiados intentos", vbCritical, "Acceso


Negado"
txtPassword.SetFocus
End
Else
MsgBox "Presione OK e intente otra vez", vbInformation, "Clave
Incorrecta"
txtPassword.SelStart = 0
txtPassword.SelLength = Len(txtPassword)
txtPassword.SetFocus
End If
End If
End Sub
Private Sub cmdSalir_Click()
End
End Sub
El ejercicio con su cdigo completo puede bajarse de AQU.

Ejercicio N 66: Servicio

Este ejercicio utiliza Botones


de Opcin y fue realizado a
partir del pedido de un
alumno por mail. Tambin
integra: labels, caja de textos,
botones y calcula el total del
valor del pedido de acuerdo a
la opcin seleccionada y la
cantidad. Su cdigo es el
siguiente:

'Declaracin de las variables para el precio de cada una.


Dim Hamburguesa As Single
Dim HotDog As Single
Dim Sandwich As Single
Dim Gaseosa As Single
Dim Refresco As Single
Dim PapasFritas As Single
'Declaracin de variables para la cantidad de cada una.
Dim CantidadHamburguesa As Integer
Dim CantidadHotDog As Integer
Dim CantidadSandwich As Integer
Dim CantidadGaseosa As Integer
Dim CantidadRefresco As Integer
Dim CantidadPapasFritas As Integer

Private Sub cmdCalcular_Click()


'Multiplicando la cantidad por el precio y sumando para hallar el
total.
Total = (CantidadHamburguesa * Hamburguesa) + (CantidadHotDog *
HotDog) + _
(CantidadSandwich * Sandwich) + (CantidadGaseosa * Gaseosa) + _
(CantidadRefresco * Refresco) + (CantidadPapasFritas * PapasFritas)
lblTotal.Caption = "$ " & Total
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
'Inicializar las variables
'Precio de los productos
Hamburguesa = 20.5
HotDog = 19.25
Sandwich = 17.5
PapasFritas = 4.5
Refresco = 4
Gaseosa = 5
End Sub
Private Sub optOtroPedido_Click()
'Limpiar el label lblTotal.
lblTotal.Caption = ""
'Inicializar las variables.
CantidadHamburguesa = 0
CantidadGaseosa = 0
CantidadPapasFritas = 0
CantidadHotDog = 0
CantidadSandwich = 0
CantidadRefresco = 0
'Habilitar todas las cajas de texto para poder entrar datos en todas.
txtHamburguesa.Enabled = True
txtHotDog.Enabled = True
txtSandwich.Enabled = True
txtGaseosa.Enabled = True
txtRefresco.Enabled = True
txtPapasFritas.Enabled = True
'Limpiar todas las cajas de texto.
txtHamburguesa.Text = ""
txtHotDog.Text = ""
txtSandwich.Text = ""
txtGaseosa.Text = ""
txtRefresco.Text = ""
txtPapasFritas.Text = ""

End Sub
Private Sub optPedido1_Click()
'Hamburguesas,Gaseosa y Papas Fritas.
'Limpiar el label lblTotal.
lblTotal.Caption = ""
If optPedido1.Value Then 'si esta chequeado.
'Inicializar las variables.
CantidadHamburguesa = 1
CantidadGaseosa = 1
CantidadPapasFritas = 1
CantidadHotDog = 0
CantidadSandwich = 0
CantidadRefresco = 0
'Inicializar la caja de texto.
txtHamburguesa.Text = CantidadHamburguesa
txtGaseosa.Text = CantidadGaseosa
txtPapasFritas.Text = CantidadPapasFritas
'Habilitar las cajas de texto.
txtHamburguesa.Enabled = True
txtGaseosa.Enabled = True
txtPapasFritas.Enabled = True
'Deshabilitar las otras cajas de texto.
txtHotDog.Enabled = False
txtSandwich.Enabled = False
txtRefresco.Enabled = False
'Limpiar las otras cajas de texto.
txtHotDog.Text = ""
txtSandwich.Text = ""
txtRefresco.Text = ""
End If
End Sub
Private Sub optPedido2_Click()
'HotDog,Gaseosa y Papas Fritas.
'Limpiar el label lblTotal.
lblTotal.Caption = ""
If optPedido2.Value Then
'Inicializar las variables.
CantidadHotDog = 1
CantidadGaseosa = 1
CantidadPapasFritas = 1
CantidadHamburguesa = 0
CantidadSandwich = 0
CantidadRefresco = 0
'Inicializar la caja de texto.
txtHotDog.Text = CantidadHotDog

txtGaseosa.Text = CantidadGaseosa
txtPapasFritas.Text = CantidadPapasFritas
'Habilitar las cajas de texto.
txtHotDog.Enabled = True
txtGaseosa.Enabled = True
txtPapasFritas.Enabled = True
'Deshabilitar las otras cajas de texto.
txtHamburguesa.Enabled = False
txtSandwich.Text = False
txtRefresco.Text = False
'Limpiar las otras cajas de texto.
txtHamburguesa.Text = ""
txtSandwich.Text = ""
txtRefresco.Text = ""
End If
End Sub
Private Sub optPedido3_Click()
'Sanwich,Gaseosa y Papas Fritas.
'Limpiar el label lblTotal
lblTotal.Caption = ""
If optPedido3.Value Then
'Inicializar las variables
CantidadSandwich = 1
CantidadGaseosa = 1
CantidadPapasFritas = 1
CantidadHamburguesa = 0
CantidadHotDog = 0
CantidadRefresco = 0
'Inicializar la caja de texto
txtSandwich.Text = CantidadSandwich
txtGaseosa.Text = CantidadGaseosa
txtPapasFritas.Text = CantidadPapasFritas
'Habilitar las cajas de texto
txtSandwich.Enabled = True
txtGaseosa.Enabled = True
txtPapasFritas.Enabled = True
'Deshabilitar las otras cajas de texto.
txtHotDog.Enabled = False
txtHamburguesa.Enabled = False
txtRefresco.Enabled = False
'Limpiar las otras cajas de texto.
txtHotDog.Text = ""
txtHamburguesa.Text = ""
txtRefresco.Text = ""
End If

End Sub
Private Sub txtHamburguesa_Change()
'Limpiando el lblTotal.
lblTotal.Caption = ""
End Sub
Private Sub txtHamburguesa_GotFocus()
txtHamburguesa.SelStart = 0
txtHamburguesa.SelLength = Len(txtHamburguesa.Text)
End Sub
Private Sub txtHamburguesa_LostFocus()
If txtHamburguesa.Text = "" Then
CantidadHamburguesa = 0
Exit Sub
End If
If IsNumeric(txtHamburguesa.Text) Then 'Si es numrico.
If txtHamburguesa.Text > 0 Then 'Si es positivo.
CantidadHamburguesa = txtHamburguesa.Text 'Entonces asigna el
valor a la variable.
Else
MsgBox "Entre un valor positivo", vbCritical
txtHamburguesa.SetFocus
End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtHamburguesa.SetFocus
End If
End Sub
Private Sub txtGaseosa_Change()
lblTotal.Caption = ""
End Sub
Private Sub txtGaseosa_GotFocus()
'Para seleccionar el texto(igual en todos).
txtGaseosa.SelStart = 0
txtGaseosa.SelLength = Len(txtGaseosa.Text)
End Sub
Private Sub txtGaseosa_LostFocus()
If txtGaseosa.Text = "" Then
CantidadGaseosa = 0
Exit Sub
End If
If IsNumeric(txtGaseosa.Text) Then 'Si es numrico.
If txtGaseosa.Text > 0 Then 'Si es positivo.
CantidadGaseosa = txtGaseosa.Text 'Entonces asigna el valor a la
variable.
Else
MsgBox "Entre un valor positivo", vbCritical
txtGaseosa.SetFocus

End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtGaseosa.SetFocus
End If
End Sub
Private Sub txtHotDog_Change()
lblTotal.Caption = ""
End Sub
Private Sub txtHotDog_GotFocus()
txtHotDog.SelStart = 0
txtHotDog.SelLength = Len(txtHotDog.Text)
End Sub
Private Sub txtHotDog_LostFocus()
If txtHotDog.Text = "" Then
CantidadHotDog = 0
Exit Sub
End If
If IsNumeric(txtHotDog.Text) Then 'Si es numrico.
If txtHotDog.Text > 0 Then 'Si es positivo.
CantidadHotDog = txtHotDog.Text 'Entonces asigna el valor a la
variable.
Else
MsgBox "Entre un valor positivo", vbCritical
txtHotDog.SetFocus
End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtHotDog.SetFocus
End If
End Sub
Private Sub txtPapasFritas_Change()
lblTotal.Caption = ""
End Sub
Private Sub txtPapasFritas_GotFocus()
txtPapasFritas.SelStart = 0
txtPapasFritas.SelLength = Len(txtPapasFritas.Text)
End Sub
Private Sub txtPapasFritas_LostFocus()
If txtPapasFritas.Text = "" Then
CantidadPapasFritas = 0
Exit Sub
End If
If IsNumeric(txtPapasFritas.Text) Then 'Si es numrico.
If txtPapasFritas.Text > 0 Then 'Si es positivo.
CantidadPapasFritas = txtPapasFritas.Text 'Entonces asigna el valor
a la variable.

Else
MsgBox "Entre un valor positivo", vbCritical
txtPapasFritas.SetFocus
End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtPapasFritas.SetFocus
End If
End Sub
Private Sub txtRefresco_Change()
lblTotal.Caption = ""
End Sub
Private Sub txtRefresco_GotFocus()
txtRefresco.SelStart = 0
txtRefresco.SelLength = Len(txtRefresco.Text)
End Sub
Private Sub txtRefresco_LostFocus()
If txtRefresco.Text = "" Then
CantidadRefresco = 0
Exit Sub
End If
If IsNumeric(txtRefresco.Text) Then 'Si es numrico.
If txtRefresco.Text > 0 Then 'Si es positivo.
CantidadRefresco = txtRefresco.Text 'Entonces asigna el valor a la
variable.
Else
MsgBox "Entre un valor positivo", vbCritical
txtRefresco.SetFocus
End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtRefresco.SetFocus
End If
End Sub
Private Sub txtSandwich_Change()
lblTotal.Caption = ""
End Sub
Private Sub txtSandwich_GotFocus()
txtSandwich.SelStart = 0
txtSandwich.SelLength = Len(txtSandwich.Text)
End Sub
Private Sub txtSandwich_LostFocus()
If txtSandwich.Text = "" Then
CantidadSandwich = 0
Exit Sub
End If
If IsNumeric(txtSandwich.Text) Then 'Si es numrico.

If txtSandwich.Text > 0 Then 'Si es positivo.


CantidadSandwich = txtSandwich.Text 'Entonces asigna el valor a la
variable.
Else
MsgBox "Entre un valor positivo", vbCritical
txtSandwich.SetFocus
End If
Else
MsgBox "Entre un valor numrico", vbCritical
txtSandwich.SetFocus
End If
End Sub
El ejercicio con su cdigo completo puede bajarse de Aqu

Ejercicio N 67: Figuras

Este ejercicio de Arrastrar y


Soltar muestra otra
posibilidad de ejercitacin
visual para nios. Las figuras
vienen incluidas en el archivo
zipeado, para facilitarles el
trabajo.El cdigo es el
siguiente:

Private Sub Image10_DragDrop(Source As Control, X As Single, Y As


Single)
If Source = Image1 Then
Image10 = Image1
Image1.Visible = False
End If
End Sub
Private Sub Image11_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image2 Then
Image11 = Image2
Image2.Visible = False
End If
End Sub
Private Sub Image12_DragDrop(Source As Control, X As Single, Y As
Single)

If Source = Image3 Then


Image12 = Image3
Image3.Visible = False
End If
End Sub
Private Sub Image13_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image4 Then
Image13 = Image4
Image4.Visible = False
End If
End Sub
Private Sub Image14_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image5 Then
Image14 = Image5
Image5.Visible = False
End If
End Sub
Private Sub Image15_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image6 Then
Image15 = Image6
Image6.Visible = False
End If
End Sub
Private Sub Image16_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image7 Then
Image16 = Image7
Image7.Visible = False
End If
End Sub
Private Sub Image17_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image8 Then
Image17 = Image8
Image8.Visible = False
End If
End Sub
Private Sub Image18_DragDrop(Source As Control, X As Single, Y As
Single)
If Source = Image9 Then
Image18 = Image9
Image9.Visible = False
End If

End Sub
Private Sub Label3_Click()
End
End Sub
El ejercicio con su cdigo completo puede bajarse de Aqu

Ejercicio N 68: Funcin Mod

Este ejercicio usa las


funcines Mod y Format que
nos permiten dar formato al
valor del tiempo que muestra
el cronmetro. Usamos una
Label y tres botones para las
acciones. El cdigo es:

Dim I As Long 'Contador.


Dim Tiempo As String 'Tiempo total transcurrido.
Private Sub cmdDetener_Click()
Timer1.Interval = 0
End Sub
Private Sub cmdIniciar_Click()
I = 0 'Inicializar el contador.
Timer1.Interval = 0 'Detener el cronometro
lblCronometro.Caption = "" 'Limpiar la etiqueta
Timer1.Interval = 1 'Iniciar el cronometro
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Timer1_Timer()
I=I+1
Tiempo = Format(Int(I / 36000) Mod 24, "00") & ":" & _
Format(Int(I / 600) Mod 60, "00") & ":" & _
Format(Int(I / 10) Mod 60, "00") & ":" & _
Format(I Mod 10, "00")
lblCronometro.Caption = Tiempo
End Sub

El ejercicio con su cdigo completo puede bajarse de Aqu

Ejercicio N 69: Areas

Este ejercicio calcula el rea


de distintas figuras
geomtricas. usamos el
mismo escenario que para la
aplicacin Ecuaciones de
Segundo Grado.Su cdigo es:

Option Explicit
Dim Figura As String 'Identifica las figuras.
Dim B1 As Single 'Para la base mayor del trapecio.
Dim b As Single 'Para la base.
Dim h As Single 'Para la altura.
Dim Area As Single 'Para el rea
Const Pi = 3.1415 'constante
Sub Circulo()
Call Limpiar
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para
el clculo.
Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el
clculo.
lblB.Caption = "r="
picFigura.DrawStyle = 0 'Dibujar con lneas continuas.
fraDatos.Visible = True 'MostrarB1 los datos.
fraResultados.Visible = False 'OcultarB1 los resultados.
Dim x As Single, y As Single
x = picFigura.Width / 2
y = picFigura.Height / 2
picFigura.DrawWidth = 2 'Grueso del punto del centro.
picFigura.PSet (x, y) 'Poner un punto en el centro.
picFigura.DrawWidth = 1 'Restaurar el grueso para dibujar el crculo.
picFigura.Circle (x, y), 700 'Dibujar el crculo en el centro del Picture.
'Dibujar el radio.
picFigura.Line (x, y)-(600, 600)
'Colocar los letreros de la base.
picFigura.CurrentX = 1000
picFigura.CurrentY = 600
picFigura.Print "r"
'Situar la frmula.
picFormula.CurrentX = 25

picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print " rea = 3.14 x r ^ 2 "
End Sub
Sub Trapecio()
Call Limpiar
Call MostrarB1
Call MostrarH
Call CambiarLabels
picFigura.DrawStyle = 0 'Dibujar con lneas continuas.
'Dibuja las 4 lneas.
picFigura.Line (300, 1400)-(300, 300)
picFigura.Line -(1500, 300)
picFigura.Line -(2100, 1400)
picFigura.Line -(300, 1400)
'Colocar los letreros de altura.
picFigura.CurrentX = 100
picFigura.CurrentY = 700
picFigura.Print "h"
'Colocar los letreros de la base mayor.
picFigura.CurrentX = 1100
picFigura.CurrentY = 1450
picFigura.Print "B"
'Colocar los letreros de la base menor.
picFigura.CurrentX = 850
picFigura.CurrentY = 50
picFigura.Print "b"
'Situar la frmula.
picFormula.CurrentX = 50
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print "rea = (B + b)h / 2 "
End Sub
Sub CambiarLabels()
lblB.Caption = "b="
lblH.Caption = "h="
End Sub
Sub Rombo()
Call Limpiar
picFigura.DrawStyle = 0 'Dibujar con lneas continuas.
'Dibuja las 4 lneas.
picFigura.Line (500, 850)-(1050, 100)
picFigura.Line -(1700, 850)
picFigura.Line -(1050, 1600)
picFigura.Line -(500, 850)
picFigura.DrawStyle = 2 'Dibujar la diagonales con lneas
discontinuas.
'Dibujar diagonales
picFigura.Line (500, 850)-(1700, 850)
picFigura.Line (1050, 100)-(1050, 1600)

'Colocar los letreros de altura.


picFigura.CurrentX = 1200
picFigura.CurrentY = 650
picFigura.Print "d1"
'Colocar los letreros de la base.
picFigura.CurrentX = 1100
picFigura.CurrentY = 1050
picFigura.Print "d2"
'Situar la frmula
picFormula.CurrentX = 60
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print "rea = (d1 x d2) / 2 "
End Sub
Sub OcultarH() 'Oculta lblH y txtH.
lblH.Visible = False
txtH.Visible = False
End Sub
Sub MostrarH() 'Muestra lblH y txtH.
lblH.Visible = True
txtH.Visible = True
End Sub
Sub Cuadrado()
Call Limpiar
Call CambiarLabels
picFigura.DrawStyle = 0 'Dibujar con lneas continuas.
'Dibuja las 4 lneas.
picFigura.Line (500, 300)-(1900, 1400), , B 'Dibuja un cuadrado dando
los vrtices opuestos.
'Colocar los letreros de altura.
picFigura.CurrentX = 300
picFigura.CurrentY = 700
picFigura.Print "b"
'Colocar los letreros de la base.
picFigura.CurrentX = 1100
picFigura.CurrentY = 1450
picFigura.Print "b"
'Situar la frmula.
picFormula.CurrentX = 300
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print " rea = b ^ 2 "
End Sub
Sub Paralelogramo()
Call Limpiar
Call CambiarLabels
picFigura.DrawStyle = 0 'Dibujar con lneas continuas
'Dibuja las 4 lneas.
picFigura.Line (300, 1400)-(500, 300)

picFigura.Line -(2100, 300)


picFigura.Line -(1900, 1400)
picFigura.Line -(300, 1400)
'Dibujar la altura.
picFigura.DrawStyle = 2 'Dibujar con lneas punteadas la altura.
picFigura.Line (500, 300)-(500, 1400)
'Colocar los letreros de altura.
picFigura.CurrentX = 550
picFigura.CurrentY = 700
picFigura.Print "h"
'Colocar los letreros de la base.
picFigura.CurrentX = 1100
picFigura.CurrentY = 1450
picFigura.Print "b"
'Situar la frmula
picFormula.CurrentX = 300
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print " rea = b x h "
End Sub
Sub Rectangulo()
Call Limpiar
picFigura.DrawStyle = 0 'Dibujar con lneas continuas
Call CambiarLabels
'Dibuja las 4 lneas.
picFigura.Line (300, 1400)-(300, 300)
picFigura.Line -(2100, 300)
picFigura.Line -(2100, 1400)
picFigura.Line -(300, 1400)
'Colocar los letreros de altura.
picFigura.CurrentX = 100
picFigura.CurrentY = 700
picFigura.Print "h"
'Colocar los letreros de la base.
picFigura.CurrentX = 1100
picFigura.CurrentY = 1450
picFigura.Print "b"
'Situar la frmula
picFormula.CurrentX = 300
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print " rea = b x h "
End Sub
Sub Limpiar()
picFigura.Cls 'Limpiar el PictureBox para las figuras.
picFormula.Cls 'Limpiar PictureBox para la frmula.
End Sub
Sub OcultarB1() 'Oculta lblB1 y txtB1.
lblB1.Visible = False
txtB1.Visible = False

End Sub
Sub MostrarB1() 'Muestra lblB1 y txtB1.
lblB1.Visible = True
txtB1.Visible = True
End Sub
Sub Triangulo()
Call Limpiar
picFigura.DrawStyle = 0 'Dibujar con lneas continuas.
Call CambiarLabels
'Dibuja las 3 lneas.
picFigura.Line (300, 1400)-(1600, 300)
picFigura.Line -(2100, 1400)
picFigura.Line -(300, 1400)
picFigura.DrawStyle = 2 'Dibujar la altura con lneas continuas.
'Dibuja la altura
picFigura.Line (1600, 300)-(1600, 1400)
'Colocar los letreros de altura.
picFigura.CurrentX = 1450
picFigura.CurrentY = 900
picFigura.Print "h"
'Colocar los letreros de la base.
picFigura.CurrentX = 1300
picFigura.CurrentY = 1450
picFigura.Print "b"
'Situar la frmula
picFormula.CurrentX = 100
picFormula.CurrentY = 500
picFormula.FontBold = True
picFormula.FontSize = 12
picFormula.Print " rea=( b x h ) / 2"
End Sub
Private Sub cmdCalcular_Click()
fraResultados.Visible = True
Select Case Figura
Case "Triangulo"
Area = b * h / 2
Case "Paralelogramo"
Area = b * h
Case "Rectangulo"
Area = b * h
Case "Cuadrado"
Area = b ^ 2 'Usamos la misma variable b para el lado.
Case "Rombo"
Area = b * h / 2 'Usamos las mismas variables b y h para las
diagonales.Cambiamos las etiquetas a d1 y d2.
Case "Trapecio"
Area = (B1 + b) * h / 2
Case "Circulo"
Area = Pi * b ^ 2 'Usamos la variable b por el radio.Cambiamos la
etiqueta a r.
End Select
txtArea.Text = Area

End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
'Inicializar las variables.
h=1
b=2
B1 = 1
'Inicializar las cajas de texto.
txtB.Text = b
txtH.Text = h
txtB1.Text = B1
End Sub
Private Sub optCirculo_Click()
If optCirculo.Value Then
Figura = "Circulo"
Call Circulo 'Dibuja el crculo.
End If
End Sub
Private Sub optCuadrado_Click()
If optCuadrado.Value Then
Figura = "Cuadrado"
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para
el clculo.
Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el
clculo.
Call Cuadrado 'Dibuja el cuadrado.
fraDatos.Visible = True 'MostrarB1 los datos.
fraResultados.Visible = False 'OcultarB1 los resultados.
End If
End Sub
Private Sub optParalelogramo_Click()
If optParalelogramo.Value Then
Figura = "Paralelogramo"
Call Paralelogramo 'Dibuja el paralelogramo.
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para
el clculo.
Call MostrarH 'Pone visible lblH y txtH.
fraDatos.Visible = True 'MostrarB1 los datos
fraResultados.Visible = False 'OcultarB1 los resultados
End If
End Sub
Private Sub optRectangulo_Click()
If optRectangulo Then
Figura = "Rectangulo"
Call Rectangulo 'Dibuja el rectngulo.

Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para


el clculo.
Call MostrarH 'Pone visible lblH y txtH.
fraDatos.Visible = True 'MostrarB1 los datos.
fraResultados.Visible = False 'OcultarB1 los resultados.
End If
End Sub
Private Sub optRombo_Click()
If optRombo.Value Then
Figura = "Rombo"
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para
el clculo.
lblB.Caption = "d1=" 'Cambiar el valor del lblB.
lblH.Caption = "d2=" 'Cambiar el valor del lblH.
Call MostrarH 'Pone visible lblH y txtH.
Call Rombo 'Dibuja el rombo.
fraDatos.Visible = True 'MostrarB1 los datos.
fraResultados.Visible = False 'OcultarB1 los resultados.
End If
End Sub
Private Sub optTrapecio_Click()
If optTrapecio.Value Then
Figura = "Trapecio"
Call Trapecio 'Dibuja el trapecio.
fraDatos.Visible = True 'MostrarB1 los datos.
fraResultados.Visible = False 'OcultarB1 los resultados.
End If
End Sub
Private Sub optTriangulo_Click()
If optTriangulo.Value Then
Figura = "Triangulo"
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para
el clculo.
Call MostrarH 'Pone visible lblH y txtH.
Call Triangulo 'Dibuja el tringulo por cdigo.
fraDatos.Visible = True 'MostrarB1 los datos
fraResultados.Visible = False 'OcultarB1 los resultados
End If
End Sub
Private Sub txtB_LostFocus()
If IsNumeric(txtB.Text) Then 'Cheque si el valor es numrico.
If txtB.Text > 0 Then 'Chequea si es mayor que cero.
b = txtB.Text 'Asigna el valor del texto a la variable.
Else 'Si no cumple lo anterior.
MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical
txtB.SetFocus 'Situa el foco en el TexBox txtB.
End If
Else 'Si no es numrico el dato.
MsgBox "El valor debe ser mayor que cero", vbCritical
txtB.SetFocus 'Situa el foco en el TexBox txtB.

End If
End Sub
Private Sub txtB1_LostFocus()
If IsNumeric(txtB1.Text) Then 'Cheque si el valor es numrico.
If txtB1.Text > 0 Then 'Chequea si es mayor que cero.
B1 = txtB1.Text 'Asigna el valor del texto a la variable.
Else 'Si no cumple lo anterior.
MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical
txtB1.SetFocus 'Situa el foco en el TexBox txtB1.
End If
Else 'Si no es numrico el dato.
MsgBox "El valor debe ser mayor que cero", vbCritical
txtB1.SetFocus 'Situa el foco en el TexBox txtB1.
End If
End Sub
Private Sub txtH_LostFocus()
If IsNumeric(txtH.Text) Then 'Cheque si el valor es numrico.
If txtH.Text > 0 Then 'Chequea si es mayor que cero.
h = txtH.Text 'Asigna el valor del texto a la variable.
Else 'Si no cumple lo anterior.
MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical
txtH.SetFocus 'Situa el foco en el TexBox txtH.
End If
Else 'Si no es numrico el dato.
MsgBox "El valor debe ser mayor que cero", vbCritical
txtH.SetFocus 'Situa el foco en el TexBox txtH.
End If
End Sub
El cdigo completo puede bajarse de AQU.

Ejercicio N 70: Juego de Memoria

Este ejercicio es una nueva versin del juego de memoria que busca
dos imgenes iguales, para que vayan desapareciendo. Le hemos
hecho una presentacin y luego el juego en s. El cdigo es el
siguiente:

Para el formulario de presentacin:


Option Explicit
Dim a As Integer
Dim tiempo As Integer

Private Sub Timer1_Timer()


tiempo = tiempo + 1
If tiempo = 30 Then
Form1.Show
Unload Form2
End If
Picture7 = Picture8(a)
Picture7.Move Picture7.Left + 200, Picture7.Top + 100
If a >= 2 Then a = 0
Picture6 = Picture5(a)
Picture6.Move Picture6.Left - 200, Picture6.Top + 100
If a >= 2 Then a = 0
Picture1 = Picture2(a)
Picture1.Move Picture1.Left - 200, Picture1.Top - 100
If a >= 2 Then a = 0

Picture3 = Picture4(a)
Picture3.Move Picture3.Left + 200, Picture3.Top - 100
If a >= 2 Then a = 0
If tiempo = 5 Then
Label5.Visible = True
ElseIf tiempo = 7 Then
Label6.Visible = True
ElseIf tiempo = 11 Then
Label1.Visible = True
ElseIf tiempo = 13 Then
Label2.Visible = True
ElseIf tiempo = 15 Then
Label3.Visible = True
ElseIf tiempo = 16 Then
Label4.Visible = True
End If
a=a+1
End Sub
Para el segundo formulario:
Option Explicit
Public Bandera As Long 'Para contar las veces que se hace click
'sobre las figuras.
Dim Figura(8) As String 'Para guardar las figuras concordantes.
Dim Chequear As String 'Para contar las figuras durante la
reconstruccin.
Dim ctlPrimeraFigura As Control 'Variables de control para la primera
Dim ctlSegundaFigura As Control 'y el segunda figura.
Dim UnoMostrado As Boolean 'Para llevar la cuenta de los
mostrados.
Dim AmbosMostrados As Boolean
Dim Pares As Integer 'Lleva la cuenta de los pares.
Dim Segundos As Long 'Para llevar el tiempo.
Dim Puntuacion As Integer 'Para llevar la puntuacin.
Dim Inicio As Date
Dim I As Integer
Sub FigurasVisibles()
'Hace todas las Figuras visibles
For I = 1 To 16
picFigura(I - 1).Visible = True
Next I
End Sub
Sub VoltearImagen()
'Voltea las imagenes cargando al Picture picVoltear.
For I = 1 To 16
picFigura(I - 1).Picture = picVoltear.Picture
Next I

End Sub
Sub HabilitarTodos()
'Habilita todas las Figuras.
For I = 1 To 16
picFigura(I - 1).Enabled = True
Next I
End Sub
Sub Verificar() 'Para ver si las dos figuras son iguales.
Dim I As Single
If ctlPrimeraFigura.Tag = ctlSegundaFigura.Tag Then 'Si las figuras
coinciden
Pares = Pares + 1
For I = 1 To 10000 'para mostrar las dos figuras un tiempo.
ctlPrimeraFigura.Visible = False
ctlSegundaFigura.Visible = False
Next
If Pares = 8 Then 'Si se termin el juego.
Timer2.Enabled = False 'Inhabilitar el reloj.
lblTiempo.Caption = CStr(Abs(Segundos))
If Segundos < Puntuacion Then
MsgBox "Tiempo empleado: " & Segundos & " segundos " & Chr(10)
& "Puntuacion : " & CStr(Bandera), vbInformation
mnuIniciar_Click
End If
End If
Else
AmbosMostrados = True
End If
End Sub
Sub ChequearFigura() 'Chequea si es la primera o segunda figura
que se volteado.
If UnoMostrado Then 'si una figura esta visible.
Set ctlSegundaFigura = Screen.ActiveControl 'Activa la variable
control.
Call Verificar
UnoMostrado = False
Else
Set ctlPrimeraFigura = Screen.ActiveControl 'Activa la variable
control.
ctlPrimeraFigura.Enabled = False
UnoMostrado = True
End If
End Sub
Function MezclarFiguras() As Integer 'Genera un nmero aleatorio
entre 0 y 7.
'para asignarlo a las figuras.

Dim iNumero 'Variable para los nmeros aleatorios.


Do While True 'Continua generando mientras...
Randomize Timer 'Siembra en base al nmero de segundos desde
media noche
iNumero = Int(8 * Rnd) 'Obtiene un nmero entre 0 y 7.
If InStr(Chequear, CStr(iNumero)) = 0 Then 'Si todava no esta
asignado
Chequear = Chequear & CStr(iNumero) 'lo aade a la cadena de
revisin
Exit Do 'y lo devuelve.
End If
Loop 'En caso contrario, genera otro.
MezclarFiguras = iNumero
End Function
Private Sub Form_Load()
lblTiempo.Caption = ""
lblPuntuacion.Caption = ""
Segundos = 0
UnoMostrado = False
Puntuacion = 30000 'Como mxima a alcanzar.
'Inicializa el arreglo figuras.
Figura(0) = App.Path & "\" & "Babs.ico"
Figura(1) = App.Path & "\" & "Dalmat.ico"
Figura(2) = App.Path & "\" & "Bird4.ico"
Figura(3) = App.Path & "\" & "Cow.ico"
Figura(4) = App.Path & "\" & "Fish1.ico"
Figura(5) = App.Path & "\" & "Cat3.ico"
Figura(6) = App.Path & "\" & "Butterf3.ico"
Figura(7) = App.Path & "\" & "Bear1.ico"
mnuIniciar_Click 'Hacer click en el menu Inicio.
End Sub
Private Sub Frame1_MouseMove(Button As Integer, Shift As Integer,
X As Single, Y As Single)
'Si ambas no son iguales se mantiene desplegadas un momento
mientras no se mueva el mouse.
If AmbosMostrados Then
ctlPrimeraFigura.Enabled = True 'Habilita los controles.
ctlPrimeraFigura.Picture = picVoltear.Picture 'Los voltea.
ctlSegundaFigura.Picture = picVoltear.Picture
AmbosMostrados = False
End If
End Sub
Private Sub mnuIniciar_Click()
Inicio = Now 'Iniciar el tiempo.

MousePointer = 11 'reloj de arena.


Chequear = "" 'Vacia la cadena de revisin.
Call FigurasVisibles
Call VoltearImagen 'Voltea las figuras.
Call HabilitarTodos
picFigura(0).Tag = Figura(MezclarFiguras()) 'Llama a MezclarFiguras
para
picFigura(1).Tag = Figura(MezclarFiguras()) 'un nmero aleatorio.
picFigura(2).Tag = Figura(MezclarFiguras()) 'lo usa como indice para
asignar
picFigura(3).Tag = Figura(MezclarFiguras()) 'aleatoriamente imgenes
del arreglo Figuras.
picFigura(4).Tag = Figura(MezclarFiguras())
picFigura(5).Tag = Figura(MezclarFiguras())
picFigura(6).Tag = Figura(MezclarFiguras())
picFigura(7).Tag = Figura(MezclarFiguras())
Chequear = "" 'Cadena de revisin vaca.
picFigura(8).Tag = Figura(MezclarFiguras())
picFigura(9).Tag = Figura(MezclarFiguras())
picFigura(10).Tag = Figura(MezclarFiguras())
picFigura(11).Tag = Figura(MezclarFiguras())
picFigura(12).Tag = Figura(MezclarFiguras())
picFigura(13).Tag = Figura(MezclarFiguras())
picFigura(14).Tag = Figura(MezclarFiguras())
picFigura(15).Tag = Figura(MezclarFiguras())
MousePointer = 0 'Devuelve el mousepointer a lo normal.
Segundos = 0 'Reajusta los segundos.
lblTiempo.Caption = ""
lblPuntuacion.Caption = "" 'Limpia la puntuacin
Timer2.Enabled = True 'Habilitar el reloj.
Bandera = 0 'Inicializa el contador Bandera.
End Sub
Private Sub mnuSalir_Click()
End
End Sub

Private Sub picFigura_Click(Index As Integer)


Bandera = Bandera + 1 'Aumentar el contador.
lblPuntuacion.Caption = Bandera 'Colocar su valor en el label.
picFigura(Index).Picture = LoadPicture(picFigura(Index).Tag) 'Cargar
la imagen.
Call ChequearFigura
End Sub
Private Sub Timer2_Timer()
Segundos = DateDiff("s", Inicio, Now) 'Asignar al label el tiempo
total.
lblTiempo.Caption = Int(Segundos)

End Sub
El cdigo completo puede bajarse de AQU.

Вам также может понравиться