Vous êtes sur la page 1sur 178

Programación con Visual Basic:

Para todo docente es importante el manejo de un Lenguaje de Programación porque esto


nos permite diseñar nuestro propio material didáctico de acuerdo a las necesidades
curriculares y a las características propias de nuestro alumnado para la construcción del
conocimiento significativo.

Para aquellos que no tienen experiencia en Programación, les sugerimos que se bajen el
archivo Introducción donde encontrarán las explicaciones básicas, para los que tienen
alguna experiencia comenzamos con algunos ejercicios sencillos, luego iremos
agregando otros de mayor complejidad.

Ejercicios 1-14 (pg.2)


Labels Transparentes Día Felíz: Arrastrar y Soltar Crucigrama
Productos:Arrastrar y Soltar Animación con PictureClip Ordenar: Arrastrar y Soltar
Sumas Aleatorias Control Animation Sucesión de Imágenes Objeto Printer
Particionando una Imágen Barra de Herramientas Cubos: Arrastrar y Soltar
Animación Transparente

Más Ejercicios 15-46 (pg.23): Internet: WebBrowser


Barra de Porcentaje Navegador Simple Control Tab Dibujar: Coordenadas x, y
Control Anigif Varios Formularios Control Transición Sonidos Wave y Midi
Juego usando Click Vínculos entre controles Animación Transparente Contraseña
Array de palabras Esqueleto: Arrastrar y Soltar Uso del Timer Editor de Menú
Método PaintPicture Método Print Animación de un Conejo Ejecutar un .Avi
Método Draw Encuesta: Uso de Rnd Scrollbar y código ASCII Array de controles
Simulación Abrir un .txt y un .rtf Alarma: Timer Rompecabezas: Arrastrar y
Soltar Método Gráfico: PSet ScrollBar Métodos Line y Circle

Más Ejercicios 47-70 (pg.77): Berenjena: Arrastrar y


Soltar Slider Personalizado Traga Monedas: Función Aleatoria Slider Estándar
Protector de Pantalla Archivos MP3 Escritorio: Puntero del Mouse Impresión de
Texto Problema: Simulación Animada Funciones: Raíz y Azar Caza de Patos: Api
SndPlaySound Tabla:Arrastrar y Soltar Semáforo: Simulación Animada
Recipiente: Simulación Imprimir Imágen: Objeto Printer Ecuación: Grabar .txt
Procedimiento de Espera Password: Prop. Tag Pausa: Api Sleep Botones de
Opción Figuras: Drag & Drop Areas: Gráficos Función Mod Juego de Memoria

Últimos Ejercicios 71-88 (pg.150): Promediando


Notas Sumar Matrices Array de Controles Impresión Multilínea Ordenando una
Tabla Función Mid TreeView Movimiento Efectos Visuales Método Line
Eventos con el Mouse Manejo de Errores Música Video Cálculo de interés
Arreglos Texto3D Carita

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 código sería
muy complejo pero usando el control Label en su modo transparente y con el Caption
vacío, 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, todavía opaca como
viene por defecto, luego sobre el gabinete está transparente pero con el Caption ,
también 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 tamaño deseado. Y cuatro Labels, tres transparentes para
subdividir la Image y una opaca para mostrar la parte seleccionada, y un Botón de
Salida.

El Código de este ejercicio es el siguiente:

Private Sub Command1_Click()

End ' Cierre de la aplicación

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. También a partir de aquí podríamos 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 corrección de las letras ingresadas en las cajas de texto. El
ingreso de las mismas se hace en tiempo de ejecución a través del teclado.

A la derecha vemos unos controles Picture vacíos que se cargaran con imágenes 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 función LoadPicture
desde cualquier parte de nuestro disco rígido. Y un botón con el icono de Hijitus indica
la Salida y cierre del programa.

Acá tendremos que crear por código una estructura condicional que controle si la
entrada de datos es correcta o no.

El código 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 código debe ir todo en un mismo reglón y 'chequea si se escribió una de las
palabras correctas. Ciudado con los 'nombres de los Controles porque seguramente
Ustedes no tendrán la 'misma numeración que yo. (Otra aclaración cuando usamos el
carácter ' 'indicamos que todo lo que sigue es un comentario, por lo tanto la
'computadora no lo ejecuta lo saltea, no es código).

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: Animación del Osito.


Para esta animación usamos un control especial que no está en la Caja de
Controles estándar , 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 ejecución por lo tanto
volcaremos su imagen en un control Picture común que dibujaremos en el
Formulario y dejamos vacío. En el formulario dibujamos un control Picture vacío
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 animación. El Timer es
un cronómetro que repite una acción (hace un Bucle) o sentencia en Visual Basic
de manera automática e infinita, hasta que lo desactivamos o cerramos el
programa.

El control PictureClip es una grilla que despliega los distintos frames de la


animación 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 animación tienen un índice en esta imagen de 0 a 8.

Aquí también usamos el Método Move para desplazar la imagen del Oso.

El código 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 impresión de caminar al revés.
Una propiedad fundamental del PictureClip es la GraphicCell ya que ella automatiza la
división 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 ubicación de ésta en relación al borde izquierdo (coordenada
x) y al borde superior (coordenada y). Lo que permitirá que el oso se mueva en diagonal.

En la explicación sólo está detallado el movimiento del oso, en el formulario vemos


agregadas otros controles Line e Image simulando una calle, un semáforo y una señal de
Stop, como para darles una idea de lo que podrían agregar a la escena.

Ejercicio Nº 4: Sumas.

Este ejercicio elige en forma Aleatoria dos números 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 volverán a
aparecer otros dos números para que siga sumando.

El botón Aplicar permite hacer la corrección mediante un Condicional. Algunos de estos


temas son comunes a otros ejercicios. Por lo tanto nos centraremos en las funciones
nuevas.

La función Rnd nos permite cargar en una variable un número 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 función que utilizamos es Val que transforma una cadena de caracteres, en este
caso el contenido de un Text en un valor numérico.

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 números , iniciando una
nueva cuenta. Pero necesitamos una espera en la aplicación. Esto lo hacemos por
código con un bucle que asociado al reloj del sistema crea una pausa en la aplicación.
Para esto creamos un Procedimiento llamado Pausa. Posicionados en la ventana de
código , 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 opción seleccionamos: Sub y Private. Damos el Aceptar y se cierra la
ventana. Ahora veremos en nuestra ventana de código 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 código:

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 número aleatorio

num2 = Int(Rnd * 10) 'elige un número 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 'vacía 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 botón 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 sucesión de Imágenes al estilo un show de diapositivas .Las
imágenes las cargamos en controles Image a la izquierda del formulario invisibles, para
luego convocarlas por código y desplegarlas en la Image central, ésta si con su
propiedad visible = True.

La sucesión de imágenes 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 sucesión y se muestra una Label
con los nombres de los creadores de la aplicación.

La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicación, para esto
inicializa la variable A = 0 y pone el Timer nuevamente en funcionamiento.

El código 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 después..."

ElseIf A = 4 then

Image13.Picture = Image5.Picture

Label2.caption = "enseguida la corbata..."

Elseif A = 5 Then ' Y así las distintas opciones de Imágenes y de Texto.

Label4.Visible = True ' muestra los Autores

Timer1.enabled = False ' desactiva el Timer

End If

End Sub

Controlen el orden de las Imágenes de acuerdo a su propia aplicación, 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 mío que vuelva zano! ¡Si muere, muero también!

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 través 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 interacción. 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 relación al Nº1.
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 opción 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 Aplicación en ejecución, 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 ningún Evento , entonces aquí también con un
pequeño 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 ejecución. El código 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
ejecución de un lugar a otro del formulario. Este tipo de ejercicios es muy útil para los
docentes que trabajan con los más pequeños.

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 opción Automatic , la numero 1.
Esto permitirá mover los controles. Pero para que realmente se desplacen debemos
agregar al procedimiento Form_DragDrop el siguiente código:

Private Sub DragDrop ( Source as control, X as Single, Y as Single)

Source.Move x, y

End Sub

Dentro de los argumentos entre paréntesis 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 través de x, y. Aquí usamos un método ya
conocido el Move. Al correr el programa podemos clickear sobre una de las figuras y
manteniendo el botón izquierdo del mouse apretado arrastrarla a la nueva posición que
deseamos y luego soltarla.

Ejercicio Nº 8: Día Feliz.

Este ejercicio de drageo utiliza también imágenes 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 : Automática. Y en la propiedad
DragIcon tiene cargado el mismo icono para que cuando la arrastremos no se vea una
ventana vacía. 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 código 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 ejecución se verá de la
siguiente manera :

Ejercicio Nº 9: Compra de Productos.

En este ejercicio arrastramos las imágenes del teléfono, reloj y filmadora, como si
hiciéramos 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 botón que borra el total a pagar. Una caja de texto
que muestra el total y las demás son Labels indicativas.

Cuando arrastramos la imagen vamos a observar que no drageamos un rectángulo o


ventana vacía 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 código es el siguiente:

Dim total as integer ' Declaramos en la parte General la variable.


Private Sub Command1_Click()

Text1.text = "" ' vaciámos 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 números de Menor a
Mayor.

Tenemos 3 Labels que muestran los números a ordenar y otras 3 Labels que recibirán
los números drageados de las Labels anteriores. Y dos Botones El de Números que a
través del procedimiento Azar elige tres números aleatorios para cada label con la
función Randomize y el Botón Corregir que chequea que estén 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 código es el siguiente:

Dim N1, N2, N3 as Integer ' declaramos las variables en General.

Private Sub Command1_Click() ' Este es el botón Números


Label4.caption = ""

Label5.caption = ""

Label6.caption = "" ' vaciamos los números 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 número 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 números 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 números se repite sale de la Rutina y vuelve a llamarse al
procedimiento Azar desde el Botón 1.

End If

End Sub

Private Command2_Click () ' Este es el Botón Corregir.

If Val(Label4.Caption) < Val(Label5.Caption) And Val(Label5.Caption) <


Val(Label6.caption) Then ' Este condicional que controla el orden de los números debe ir
en una sola línea.

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 código de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y recordemos


modificar su Dragmode a 1.

En tiempo de ejecución 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 Animación

Una manera sencilla de desplegar una animación 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 código 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 aplicación.

Y con open abrimos, stop detenemos y play ejecutamos y close cerramos.

Private Sub Command1_Click()


Animation1.Close

Unload Me

End Sub

Private Sub Form_Load()

Animation1.Stop

Animation1.Close

Animation1.Open App.Path & "\FileCopy.AVI"

Animation1.Play

End Sub

El ejercicio puede bajarse de Aquí.

Ejercicio Nº 12: Imprimiendo con Printer.

En este formulario desplegamos datos en cajas de texto y a través 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, tamaño, tipo y color de la fuente y coordenadas. Private Sub Command1_Click()

Printer.Orientation = 1

' La orientación del papel es vertical

Printer.FontSize = 12

'Tamaño de la letra

Printer.Print

'Un renglón 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 impresión 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 impresión

End Sub

Este ejercicio nos permite de una manera simple poder distribuir la impresión de forma
personalizada.
Ejercicio Nº 13: Una Barra de Herramientas.

Este ejercicio nos permite mostrar una barra de herramientas al clásico estilo Windows.

Usando el control Toolbar y el control ImageList para desplegar las imágenes en los
botones de la barra de herramientas, también 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 versión
profesional de Visual Basic 5.

Luego de crear sobre el Formulario la barra de status, con el botón derecho del mouse
seleccionamos propiedades y allí en la pestaña paneles vamos eligiendo cuantos
queremos y cual será su mensaje.

En el control ImageList seleccionamos con el botón derecho del mouse propiedades y


cargamos las imágenes que componen este repositorio de imágenes para luego por
código 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 botón a


una imagen distinta de la ImageList y al cliquear desencadenamos la función MsgBox
que nos identifica el botón 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 asociación entre los controles, fijándola.

Ejercicio Nº 14: Una Animación Transparente.

Uno de los temas más queridos relacionados con la programación 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 método Move , el control PictureClip, y las secuencias
de images o pictures activadas con un Timer, son las formas más primitivas y sencillas
de animación.

Hoy sumamos el Método PaintPicture que dibuja una imagen sobre un fondo , pero al
combinar mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen:
la máscara y el sprite o animación en sí permite trasparentar el fondo.

En este caso vamos a desplegar la animación 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 animación debe
estar la propiedad ScaleMode en Pixel y no en Twips como lo es por defecto.
Las constantes para desplegar métodos gráficos como SRCAnd y SRCINvert deben
declararse en la parte General del Formulario. Pueden copiarse a mano o a través del
Visor de Apis.

Usamos dos controles PictureClip uno para la máscar 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 animación.

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 = "Animación" 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 = "Animación"

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 composición de la grilla por código 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 animación, 'reiniciándola


y el movimiento cuando se escapa de la picture 'posicionándose otra vez al comienzo del
margen izquierdo.

Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , ,


SRCAND 'esta sintaxis debe estar en un solo renglón

Picture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , ,


SRCINVERT 'esta sintaxis debe estar en un solo renglón

imagenactual = imagenactual + 1

'avanza un cuadro la secuencia

xactual = xactual + 20

' se mueve 20 pixels a la derecha.

End Sub

Los ejercicios Nº 14, 15 y 16 pueden bajarse desde Aquí

Si deseas bajarte una versión comprimida de los Ejercicios clickea en


Ejercicios1,Ejercicios2 y Ejercicios3 pero recuerda que son archivos con extensión .zip
deberás copiarlos y luego descomprimirlos con el Winzip, si no lo tienes bájalo de
www.winzip.com.
Más Ejercicios (15-46): Internet: WebBrowser Barra de
Porcentaje Navegador Simple Control Tab Dibujar: Coordenadas x, y Control
Anigif Varios Formularios Control Transición Sonidos Wave y Midi Juego
usando Click Vínculos entre controles Animación Transparente Contraseña
Array de palabras Esqueleto: Arrastrar y Soltar Uso del Timer Editor de Menú
Método PaintPicture Método Print Animación de un Conejo Ejecutar un .Avi
Método Draw Encuesta: Uso de Rnd Scrollbar y código ASCII Array de controles
Simulación Abrir un .txt y un .rtf Alarma: Timer Rompecabezas: Arrastrar y
Soltar Método Gráfico: PSet ScrollBar Métodos Line y Circle

Ejercicio Nº 15: Internet

Este ejercicio nos permite mediante un evento click sobre un botón conectarnos con un
sitio web determinado, incorporando el control WebBrowser, este control no es estándar
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 página 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 inútiles
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 dirección 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 código es el siguiente:

Private Sub Command1_Click() ' este control está oculto

If Text1.Text <> "" Then

WebBrowser1.Navigate Text1.Text

If WebBrowser1.Visible = False Then

WebBrowser1.Visible = True

End If

End If

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then 'equivale a la tecla Enter

Command1_Click

End If

End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)

Select Case Button.Key

Case "back" 'se identifica por la Key


On Error Resume Next

WebBrowser1.GoBack 'Retrocede

Case "forward"

On Error Resume Next

WebBrowser1.GoForward 'Adelanta

Case "home"

Text1.Text = "http://www.geocities.com/SiliconValley/Garage/6472"

Command1_Click

Case "refresh"

WebBrowser1.Refresh 'actualiza o refrezca

Case "stop"

WebBrowser1.Stop 'detiene la búsqueda

End Select

End Sub

Private Sub WebBrowser1_DownloadBegin()

StatusBar1.Panels(1).Text = "Cargando Página..."

End Sub

Private Sub WebBrowser1_DownloadComplete()

StatusBar1.Panels(1).Text = "Listo"

End Sub

Ejercicio Nº 17: Dibujar

Con este ejercicio podrán los alumnos dibujar en tiempo de ejecución. 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 ubicación en la coordenada X

CurrentY = Y' carga en la variable la ubicación en la coordenada Y

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As


Single)

If draw Then Line -(X, Y) ' si la variable draw esta a verdadera 'dibuja cada uno de los
puntos.

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

draw = False 'la variable draw a falsa detiene el dibujo

End Sub

Los ejercicios Nº 17, 18 y 19 pueden bajarlos de Aquí.

Ejercicio Nº 18: Relacionar varios formularios. A pedido de varios


seguidores de nuestra página vamos a integrar en un solo proyecto varios formularios.
El proyecto se compone de 5 formularios: Presentación, Planetas, Información,
Evaluación y Créditos.

Retomando un ejercicio simple ya explicado el Nº 7 El Sistema Solar, vamos a agregarle


una primera pantalla de presentación con distintos botones o labels que nos vinculan a
los otros formularios:

La label Planetas nos muestra el formulario del ejercicio Nº7 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 información referente a cada planeta, en este caso: el
nombre del planeta, su distancia al sol en km. y la cantidad de satélites (El proyecto final
está incompleto, Uds. pueden completarlo como les resulte más conveniente).

Al hacer Clic sobre uno de los planetas se nos abre la siguiente pantalla:

El código que nos vincula a la base de datos convocada por un control Data que se
encuentra invisible en el formulario de Información es el siguiente:

Private Sub Label12_Click() 'Esta label corresponde al planeta 'Júpiter

Label2.Caption = "Júpiter"

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 imágenes: la Tierra y Júpiter.

La posición 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 más información y labels
indicativas de dichos campos.

Luego tenemos el Formulario evaluación que a través de la función InputBox le hace al


alumno dos preguntas: Una sobre el nombre del planeta y otra sobre la cantidad de
satélites que posee.
El formulario de evaluación se asemeja al siguiente:

Y el código es:

Private Sub Picture1_Click() 'imagen de Júpiter

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

If UCase(planeta) = "JÚPITER" Then

contar = contar + 1

Label2.Caption = contar

End If

satelite = InputBox("¡Cuántos satélites tiene?", "Planetas")

If satelite = "16" Then

contar = contar + 1

Label2.Caption = contar

Picture1.Enabled = False

End If

End Sub

También incluimos una variable contar para que nos sume puntos con las respuestas
correctas, y las variables planeta y satélite que guardan las respuestas del InputBox.
Esta variables deben ser declaradas en la parte general del formulario.

Para cerrar tenemos el formulario créditos donde se indica el nombre del programador y
el botón Salir que cierra la aplicación. La navegación entre un formulario y otro se realiza
mediante los métodos 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, imágenes,
animaciones o videos o simplemente información escrita.

El proyecto final (incompleto) puede bajarse de Aquí.

Ejercicio Nº 19: Combinando sonidos.

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

Cuando se abre el formulario se ejecuta el archivo Midi y si nosotros hacemos Clic sobre
el botón Wave escuchamos los gritos de Tarzan por encima de la música de fondo que
se sigue ejecutando. Esto nos resulta útil para ciertas aplicaciones donde queremos
dejar una música de fondo, o entretenimientos que combinan sonidos.

Private Sub Command2_Click() 'Botón 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() ' Botón 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 código 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: Vínculos. Este ejercicio lo hemos armado a pedido de un


visitante colombiano, Luis, docente en Informática. Y nos permite vincular una palabra
con una imagen específica 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 ejecución 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, también 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 código 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 código es muy sencillo. El ejercicio completo lo pueden bajar de Aquí.
Ejercicio Nº 21: Contraseña. Varios visitantes nos han pedido algún
ejercicio que use una contraseña para entrar a un programa. Aquí va un ejemplo. Vamos
a usar la función InputBox que al abrir una ventana con una caja de texto nos permite
ingresar la contraseña.

Si no queremos usar la función podemos reemplazarla por el uso de un pequeño


formulario diseñado a nuestro gusto con una caja de texto. El programa se ve así:

Y el código del evento click del Botón Acceso al Sistema es el siguiente:

Dim nombreusuario As String

Dim contraseña As String

nombreusuario = InputBox("Introduzca su Nombre")

contraseña = InputBox("Introduzca CONTRASEÑA")

If UCase(nombreusuario) = "LAURA" And LCase(contraseña) = "secreto" Then

MsgBox "¡BIENVENIDA LAURA! ¿Preparada para trabajar con tu PC?"

Image1.Visible = True

ElseIf UCase(nombreusuario) = "MIRTA" And LCase(contraseña) = "duende" Then

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

Image1.Visible = True

Else

MsgBox "ACCESO DENEGADO"

End If

Además de darnos el acceso con un saludo despliega una imagen en un control Image,
en caso de no ser la contraseña 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 método de arrastrar y soltar, pero como a nosotros nos
gusta mucho, hemos armado este pequeño ejercicio, para armar un esqueleto con sus
distintas partes. Espero los motive para usarlo adaptándolo a otras imágenes.

El código ejemplo para una de las image que recibe la imagen del cráneo 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 código 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 características de windows. Para poder activarlo debemos estar en la
ventana de formulario u objeto, no en la de código. Mediante botones de opción vamos a
hacer visibles o invisibles los menús que hemos diseñado, en este caso el tema será
platos de comida y los menús serán sobre: Platos fríos, 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 título que
aparezca en el menú y el name del menú, el caption puede estar vacío pero el name no, Y
vamos anidando los submenús 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 sangría 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
código en el evento click de cada menú:

MnuFiambres_Click()
MsgBox "haz hecho click en la opción bandeja de Fiambres"

End Sub.

Esto no está incluído en el ejercicio, pero puede agregarle cualqier evento para testear el
funcionamiento. En relación al código que hace visible u oculta un tipo de menú ,
agregamos un botón que aplica o ejecuta la opción de opción seleccionada con el
siguiente código en el evento click del botón 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 código relaciona mediante un condicional el menú que debe mostrarse y oculta los
restantes. En el procedimiento Load del formulario incluimos el siguiente código, que
oculta los menús:

Private Sub Form_Load()

mnuEntradas.Visible = False

mnuCalientes.Visible = False

mnuPostres.Visible = False

End Sub

El código 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 válidas, sino poniendo todas en una sola línea de código.
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 intrucción
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 ejecución 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 código 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 código 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


ejecución, pero ¡Atención! 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 código 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 compañeros si Está conforme con el sueldo que gana. Como damos por
supuesto que la mayoría va a contestarnos que No, hicimos un pequeño chiste , ya que
al querer hacer Click en el Botón de No, este se nos escapará.

El código 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 Botón Si: salimos del programa y al querer hacer click en el botón: No, se mueve
aleatoriamente a una nueva posición entre las medidas de ancho y alto del formulario.

El código del ejercicio pueden bajarlo de Aquí.


Ejercicio Nº 27: Temperaturas.

En este ejercicio, simplemente entramos en tiempo de ejecución una temperatura para


cada día de la semana y luego haciendo click en los botones: Alta, Media y Baja ,
devuelve los valores en otras cajas de texto. El código 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 más 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 más 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 repetición For Next, calculamos los valores de alta y baja, luego
para la media sacamos por división el promedio.

El código 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 extensión 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
tamaños o sea más 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 estándar, por
lo tanto debemos traerlo de Componentes), para el texto común 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 desplegarán por código 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 variaciónes en el tipo, color y tamaño 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 código de cada botón es el
siguiente:

Option Explicit 'Esta expresión 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 tamaño de 'cada renglón del archivo

renglon = Chr(13) & Chr(10) ' corta a otra línea

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 'aplicación. App.path significa en la ruta actual de
la'aplicación. 'Sino hay que indicar cual es el Path.

While Not EOF(1) ' esto realiza un bucle o sea repite la acción '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 tamaño del reglón.
Wend 'repite las ordenes en tanto la condición 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 más sencillo el manejo de 'archivos, con la sentencia LoadFile se carga
el archivo 'indicando el camino para encontrarlo.

El código 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 aplicación 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 código '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 vacía 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 código 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 estarán
asociados a la ubicación de la pestaña del Scroll y se mostrarán 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 aplicación se así:

Aquí también debemos prestar atención a la propiedad Value, Y a los procedimientos


Change y Scroll, que testean cuando se modifica el valor de la barra horizontal. También
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
código 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 código 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 Botón que activa el proceso y una picture que va
cambiando su color a medida que el porcentaje aumenta.El código 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 aplicación 'un segundo

Dim controlar

Dim comenzar

comenzar = Timer

Do Until controlar >= comenzar + 0.2

controlar = Timer

DoEvents

Loop

End Sub

El código completo puede bajarse de Aquí.


Ejercicio Nº 32: Control Tab.

El control Tab o ficha con pestaña 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 elección de una de
sus pestañas. El formulario se ve así:

Esta aplicación tiene además 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 información, como ya hemos hecho en otros ejercicios con Base de Datos.
No hay código escrito, ya que las conecciones a la tabla estan hechas directamente a
través de la ventana Propiedades. Tener en cuenta las propiedades: DataBasename, y los
controles Text que desplieguen los campos elejidos.

La Aplicación puede bajarse de Aquí.

Ejercicio Nº 33: Control AniGif. Esta aplicación 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 Aplicación 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 aplicación con el control pueden bajarse de Aquí.
Ejercicio Nº 34: Transición.

En este ejercicio vamos a usar un ActiveX que permite hacer efctos de transición entre
varias imagenes, es un shareware, bajado de Internet, muy fácil de usar. El form se ve
así:

El código 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 más. Y el método Start que lo inicia, podríamos usar un timer pero en este
caso es un bucle el que repite la operación 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
próximos 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 animación, donde se abren y cierran, además de los controles Images,
tenemos dos labels transparentes, una que muestra el puntaje y otra que resetea la
aplicación. Y el sonido está activado usando la API sndPlaySound de windows.

El código 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 ' reproducción asíncrona

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 animación usando el método PaintPicture combinado con el
control pictureClip y aplicando las constantes gráficas 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


número 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 automáticamente nos da un
punto si es correcta.
El código 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) = "CAJÓN" Then

puntos = puntos + 1

Case 5

If UCase(Text1.Text) = "CAMPAÑA" 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 animación hecha con un Timer y una secuencia de imágenes, pero
muy simpática que simula una tarjeta animada. Su código 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 aplicación completa puede bajarse de Aquí.

Ejercicio Nº 39: Mosaico de Fondo

Muchas veces queremos desplegar en un fondo una imagen pequeña repetidas veces.
En este ejercicio vamos a lograrlo creando un procedimiento de tipo público en un
modulo con extensión .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 elección.
El código para el Módulo 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 Método 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 público del Módulo 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 envía una de mis seguidoras de Visual Basic, alumna del profesorado de
Informática: Nora Vila. Gracias. Tenemos en el formulario cinco controles: dos
PictureClip para cargar las grillas del Sprite y su máscara, dos botones que activan y
desactivan el Timer y un Timer para repetir la secuencia del conejo caminando.

El código 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(animación)

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: Método Draw.

Otra manera de realizar una animación transparente es usando el Método Draw. En este
ejercicio usamos una Picture con el paisaje para desplegar dos imagenes del
hombrecito, en distinta posición 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 animación podemos activarla manualmente con el Click de un botón o,


automáticamente con el Click de otro botón que activa a su vez un Timer. Veamos el
código:

Private Sub Command1_Click()'el botón Automático

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 método draw en acción

ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent

End Sub

El método Refresh refresca la imagen de la Picture donde se ejecuta el Método Draw. Los
argumentos de este método son el controlador de contexto de dispositivo (HDC) del
objeto que lo recibe o sea la Picture1.hDC, su ubicación en las coordenadas x, y, y el
estilo gráfico transparente correspondiente al valor del color de la propiedad MaskColor
del ImageList.

El ejercicio completo puede bajarse de Aquí.

Ejercicio Nº 42: ScrollBar y Código 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: Simulación

Este ejercicio de simulación contiene un listado de posibles palabras contenidas dentro


de la respuesta a las preguntas de un Psicólogo virtual, y simula esta relación en un
diálogo 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 código 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 = "¿Cómo está Ud.?"

Case 1

Label1.Caption = "¿Cuál 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, cuénteme 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 cambiarán 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 código 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 ejecución se ve
así:

En el formulario tenemos una label para el título 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 aplicación, obvamente
usamos un timer que chequea si la hora ya es la indicada.

Al cumplirse la condición despliega un MsgBox con el mensaje que ingresamos, y


mientras se mantiene minimizada la aplicación para que podamos seguir trabjando con
otros programas.

El código 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 código 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 gráficas 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 impresión.

El código 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 función 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
botón: Puntos, el otro botón borra con Cls lo dibujo o sea limpia el form. El método 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 métodos gráficos de Visual Basic, que
complementan el Punto visto es el ejemplo anterior. Veremos Círculos, Rectángulos y
Líneas. Abrimos un nuevo formulario e insertamos 8 botones: 1)Borrar o Limpiar
Formulario, 2)Rectas, 3)Rectángulos, 4)Rect Rellenos, 5)Círculos, 6)Círculos Rellenos,
7)Puntos, y 8)Imprimir. En tiempo de ejecución se ve así:

La declaración general de variables y el código para cada botón 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()'Botón 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() 'Botón Imprimir por Impresora.


Me.PrintForm

End Sub

Private Sub Command3_Click() 'Botón Rectángulo

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() 'Botón Rectángulo 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() 'Botón Círculo 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 círculo

'dibuja una circunferencia

Circle (x, y), r, QBColor(color)

End Sub

Private Sub Command7_Click() 'Botón Círculo

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() 'Botón 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 método Line dibuja una recta que une ambos
puntos. Cuando dibuja un rectángulo. También necesita estos valores pero para dibujar
dos líneas rectas que luego repite en espejo para formar una Box o Caja, y así aparece el
cuadrado o rectángulo. Cuandoq uqeremos que ese rectángulo este relleno la indicación
será BF o sea Box Fill, o Caja rellena. Para esto la propiedad FillStyle debe estar a True. Y
con el Círculo 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 función QBColor. El ejercicio completo puede bajarse
de Aquí.

Más Ejercicios (47-70): Berenjena: Arrastrar y Soltar


Slider Personalizado Traga Monedas: Función Aleatoria Slider Estándar Protector
de Pantalla Archivos MP3 Escritorio: Puntero del Mouse Impresión de Texto
Problema: Simulación Animada Funciones: Raíz y Azar Caza de Patos: Api
SndPlaySound Tabla:Arrastrar y Soltar Semáforo: Simulación Animada
Recipiente: Simulación Imprimir Imágen: Objeto Printer Ecuación: Grabar .txt
Procedimiento de Espera Password: Prop. Tag Pausa: Api Sleep Botones de
Opción Figuras: Drag & Drop Areas: Gráficos Función Mod Juego de Memoria

Ejercicio Nº 47: Berenjena

Este ejercicio tiene un código familiar para ustedes ya que hemos trabajado en ejercicios
anteriores el método DragDrop pero lo incluí por lo vistoso de las imágenes, es una
versión en Visual Basic de una aplicación hecha en Flash de Macromedia.

El código 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 Botón Apostar y se habilita el Botón Jugar, cuando nos pàrece hacemos Click
en el Botón Detener, y si las tres imagenes son iguales: ganamos sino perdimos, y
volvemos a intentarlo. En tiempo de ejecución se ve parecido a la imagen:

El código 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 ' reproducción asíncrona

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 botón Apostar

Source.Visible = False

Command2.Enabled = True 'habilita el Botón Jugar

End Sub

Private Sub Command2_Click() 'Botón Jugar

'Aquí usamos la API de windows para ejecutar el sonido


snd = sndPlaySound(App.Path & "\1toons1.wav", SND_ASYNC)

'Habilita el timer de la animación 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 animación. Inhabilita el botón Jugar y llama al procedimiento 'que elige al azar
los números

Timer1.Enabled = False

Command2.Enabled = False

Call azar 'llama al procedimiento Azar que eleige tres números

Command4.Enabled = False

End Sub

Private Sub Form_Load()

Randomize

End Sub

Private Sub Timer1_Timer()

'Animación 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 números 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 números 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 aplicación tenemos varios procedimientos creados : Azar, ganar y
dinero que eligen los tres numeros al azar que cargan las imágenes, 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 código completo puede bajarse de Aquí.

Ejercicio Nº 49: Protector de Pantalla

Este ejercicio muestra como hacer un protector de pantalla simple, que desplaza un
corazón 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 corazón y un


control Timer que controla la animación del corazón en la pantalla. El código 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 aplicación vamos a usar una API de window para mostrar y ocultar el puntero
del mouse, SHOWCURSOR, y tambien vamos a registrar un pequeño movimiento del
mouse para que se cierre el programa, asi como tocar una tecla. La animacion controla
en cuatro movimientos el desplazamiento del corazón en diagonal hasta llegar al borde,
y allí cambia la dirrección.

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 gráfica.

Tenemos una Label y tres Pictures, la 2 es la goma, la 3 el marcador (en el medio) y la 1


el lápiz. La idea es que al hacer click en el lápiz quede en el puntero del mouse y así
luego hacemos click en la label y aparece la palabra Tarea, como si la hubiésemos
escrito, luego dejamos el lápiz 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 código es:

Option Explicit

Private Sub Form_Click()

If MouseIcon = Picture1.Picture Then ' aqui volvemos al puntero estándar

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 lápiz 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 lápiz

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 código 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 animación ayuda al alumno a
buscar la respuesta adecuada. es un ejemplo de simulación. El código 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 código pueden bajarlo de AQUÍ.

Ejercicio Nº 52: Caza de Patos

Este es un típico 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 código 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 mniDía_Click()

mniDía.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()

mniDía.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 mniDía.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 código puede bajarse de Aquí sin los archivos de sonido.

Ejercicio Nº 53: Semáforo


Esta es una simulación del funcionamiento de un semáforo. No incluye ningún tipo de
interactividad es solo para observar cuando debe cruzarse la calle, viendo como lo hace
el hombrecito. El código 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 código 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 código del botón 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
interrupción en la ejecución del código de una Aplicación. Así se verá una animación que
muestra la aparición de las letras con un intérvalo. Usamos un bucle que toma el tiempo
desde el reloj del sistema. El código 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 código 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 código.

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 código 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 posición del cursor usamos una Api de
Windows que nos permite chequear la posición del cursor y para guardar el código
creamos un Módulo de tipo .bas El código es:

Option Explicit

Dim imagen As Integer

Dim Moviendo As Boolean

'Aquí establecemos las constantes de máximo y mínimo

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 código puede bajarse de AQUÍ.

Ejercicio Nº 58: Slider

Este es un control slider común donde codificamos los procedimientos Click y Change.
Usamos la función Format para darle forma al valor en centímetros. El código es el
siguiente:

Option Explicit

Private Sub Slider1_Change()

Label1.Caption = "Medida en Centímetros = " & Format(Slider1.Value, "#.00")

End Sub

Private Sub Slider1_Scroll()

Label1.Caption = "Medida en Centímetros = " & Format(Slider1.Value, "#.00")

End Sub

El código 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 código 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 duración 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 métodos graficos, como
líneas, rectángulos arcos y círculos. En el procedimiento Click del boton ingresamos el
siguiente código:

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 impresión Printer.EndDoc
'si queremos cambiar la letra
Printer.FontName = "Tahoma"

' para modificar el tamaño


Printer.FontSize = 14

' y aqui otras variaciones de estilo


With Printer
Printer.Print "Impresión 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 impresión Normal y Tamaño: 10"
End With

'para imprimir el número de página en el centro podemos usar el siguiente código


smensaje = "Página " & 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 gráficas 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 rectángulo
Printer.Line (3000, 4500)-(6000, 6000), vbBlue, B
'para un círculo
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 líneas hacia el centro del círculo.
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 Matemáticas


En este ejercicio veremos algunas funciones como la búsqueda de números al azar, raíz
de números 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 código es:

Option Explicit
Private Sub Command1_Click()'boton de número al azar
Dim azar As Integer
Randomize
azar = Int(10 * Rnd) + 1
Label3.Caption = azar
End Sub

Private Sub Command2_Click()'número 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()' raíz de un número


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 función que nos permite calcular un interes
compuesto, de una suma inicial de acuerdo al porcentaje de interés 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 función y una label para que nos devuelva el cálculo hecho. El código
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 código completo pueden bajarse de AQUÍ.

Ejercicio Nº 62: Tablas de Sumar


En esta tabla del uno, aplicable a los demas números y adaptable a otra operaciones de
resta, multiplicación o división. Tenemos una combinación de labels, imágenes, shapes
y checkbox con los que ha sido armada la aplicación. Su código 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 números 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
imgNiña.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 atrás 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 números 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
imgNiña.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 atrás 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
imgNiña.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 código completo puede bajarse de AQUÍ.

Ejercicio Nº 63: Recipiente

Con esta aplicación simulamos la animación 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 código 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 código completo puede bajarse de AQUÍ.

Ejercicio Nº 64: Ecuación de 2do. Grado


Este ejercicio utiliza funciones matemáticas como cálculo de raíz cuadrada. Y un control
especial CommonDialog que convoca a las ventanas estándar de Windows, que
asociados a los métodos Put y Get nos permiten Abrir y Guardar un fichero como txt. El
código 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 raíces 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 numérico
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 código completo puede bajarse de AQUÍ.

Ejercicio Nº 65: Clave de Seguridad


Hay muchas maneras de incluir en un ejercicio cierto control de seguridad a través de
una clave, o password, en esta aplicación se hace utilizando la propiedad tag del control
Text, donde se ingresa. El código 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 código completo puede bajarse de AQUÍ.

Ejercicio Nº 66: Servicio


Este ejercicio utiliza Botones de Opción y fue realizado a partir del pedido de un alumno
por mail. También integra: labels, caja de textos, botones y calcula el total del valor del
pedido de acuerdo a la opción seleccionada y la cantidad. Su código es el siguiente:
'Declaración 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
'Declaración 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 numérico.
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 numérico", 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 numérico.
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 numérico", 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 numérico.
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 numérico", 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 numérico.
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 numérico", 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 numérico.
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 numérico", 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 numérico.
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 numérico", vbCritical
txtSandwich.SetFocus
End If
End Sub

El ejercicio con su código completo puede bajarse de Aquí

Ejercicio Nº 67: Figuras

Este ejercicio de Arrastrar y Soltar muestra otra posibilidad de ejercitación visual para
niños. Las figuras vienen incluidas en el archivo zipeado, para facilitarles el trabajo.El
código 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 código completo puede bajarse de Aquí

Ejercicio Nº 68: Función Mod

Este ejercicio usa las funciónes Mod y Format que nos permiten dar formato al valor del
tiempo que muestra el cronómetro. Usamos una Label y tres botones para las acciones.
El código 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 código completo puede bajarse de Aquí

Ejercicio Nº 69: Areas

Este ejercicio calcula el área de distintas figuras geométricas. usamos el mismo


escenario que para la aplicación Ecuaciones de Segundo Grado.Su código 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 cálculo.
Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el cálculo.
lblB.Caption = "r="
picFigura.DrawStyle = 0 'Dibujar con líneas 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 círculo.
picFigura.Circle (x, y), 700 'Dibujar el círculo 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 fórmula.
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 líneas continuas.
'Dibuja las 4 líneas.
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 fórmula.
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 líneas continuas.
'Dibuja las 4 líneas.
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 líneas 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 fórmula
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 líneas continuas.
'Dibuja las 4 líneas.

picFigura.Line (500, 300)-(1900, 1400), , B 'Dibuja un cuadrado dando los vértices


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 fórmula.
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 líneas continuas
'Dibuja las 4 líneas.
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 líneas 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 fórmula
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 líneas continuas
Call CambiarLabels
'Dibuja las 4 líneas.
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 fórmula
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 fórmula.
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 líneas continuas.
Call CambiarLabels
'Dibuja las 3 líneas.
picFigura.Line (300, 1400)-(1600, 300)
picFigura.Line -(2100, 1400)
picFigura.Line -(300, 1400)
picFigura.DrawStyle = 2 'Dibujar la altura con líneas 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 fórmula
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 círculo.
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 cálculo.
Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el cálculo.
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 cálculo.
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 rectángulo.
Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo.
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 cálculo.
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 cálculo.
Call MostrarH 'Pone visible lblH y txtH.
Call Triangulo 'Dibuja el triángulo por código.
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 numérico.
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 numérico 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 numérico.
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 numérico 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 numérico.
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 numérico 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 código completo puede bajarse de AQUÍ.

Ejercicio Nº 70: Juego de Memoria

Este ejercicio es una nueva versión del juego de memoria que busca dos imágenes
iguales, para que vayan desapareciendo. Le hemos hecho una presentación (falta, está
en la pg. WEB) y luego el juego en sí. El código es el siguiente:

Para el formulario de presentación:

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 reconstrucción.
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 puntuación.
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 número aleatorio entre 0 y 7.


'para asignarlo a las figuras.
Dim iNumero 'Variable para los números aleatorios.

Do While True 'Continua generando mientras...


Randomize Timer 'Siembra en base al número de segundos desde media noche
iNumero = Int(8 * Rnd) 'Obtiene un número entre 0 y 7.
If InStr(Chequear, CStr(iNumero)) = 0 Then 'Si todavía no esta asignado
Chequear = Chequear & CStr(iNumero) 'lo añade a la cadena de revisión
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 máxima 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 revisión.
Call FigurasVisibles
Call VoltearImagen 'Voltea las figuras.
Call HabilitarTodos
picFigura(0).Tag = Figura(MezclarFiguras()) 'Llama a MezclarFiguras para
picFigura(1).Tag = Figura(MezclarFiguras()) 'un número aleatorio.
picFigura(2).Tag = Figura(MezclarFiguras()) 'lo usa como indice para asignar
picFigura(3).Tag = Figura(MezclarFiguras()) 'aleatoriamente imágenes 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 revisión vacía.

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 puntuación
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 código completo puede bajarse de AQUÍ.


Últimos Ejercicios (71-88): Promediando Notas
Sumar Matrices Array de Controles Impresión Multilínea Ordenando una Tabla
Función Mid TreeView Movimiento Efectos Visuales Método Line Eventos
con el Mouse Manejo de Errores Música Video Cálculo de interés Arreglos
Texto3D Carita

Ejercicio Nº 71: Promedio de Notas

Este ejercicio nos permite ingresar una cantidad de valores, por ejemplo las notas de un
alumno, y luego obtener su promedio. En el formulario usamos cuatro botones, dos
cajas de texto, y un ListBox, un frame y tres Labels. El código es el siguiente: Option
Explicit
Dim Nota() As Single
Dim N As Integer 'Número total de notas.

Private Sub cmdBorrarNota_Click()


Dim i As Integer, NotaInd As Integer
NotaInd = List1.ListIndex + 1 'Asigna el orden del elemento de la lista a una variable.
If List1.ListIndex = -1 Then 'Si no esta checheada la lista.
MsgBox "Haga click en la lista para borrar la nota"
Exit Sub
Else
List1.RemoveItem (List1.ListIndex) 'Borra de la Lista la Nota
Text1.Text = "" 'Limpia el texto.
'Eliminar la nota de indice (List1.ListIndex+1) y correr las notas
For i = NotaInd To N - 1
Nota(i) = Nota(i + 1)
Next i
N = N - 1 'actualizando número de notas por ser borrada una.

If N > 1 Then ReDim Preserve Nota(1 To N) 'Reajustando la dimensión del arreglo notas
Text2.Text = ""
End If
End Sub
Private Sub cmdEntrarNota_Click()
If Text1.Text = "" Then 'Si no se han introducido nota.
MsgBox "No se ha introducido una nota"
Text1.SetFocus
Exit Sub
End If
N = N + 1 'Inicializa el conteo de las notas entradas.
ReDim Preserve Nota(1 To N) 'Redimesiona el arreglo.
Nota(N) = Text1.Text 'Asigna el valor al arreglo.
List1.AddItem (Nota(N)) 'Añade la nota a la lista.
cmdEntrarNota.Enabled = False
End Sub

Private Sub cmdPromedio_Click()


Dim Suma As Single
Dim Promedio As Single
Dim J As Integer
If N = 0 Then 'Si el número de notas es cero.
MsgBox "No existen valores para promediar"
Exit Sub
End If
Suma = 0
For J = 1 To N 'Suma todas las notas
Suma = Suma + Nota(J)
Next J
Promedio = Suma / N
Text2.Text = Promedio
End Sub

Private Sub cmdSalir_Click()


End
End Sub

Private Sub Form_Activate()


Text1.SetFocus

End Sub

Private Sub Text1_Change()


cmdEntrarNota.Enabled = True
Text2.Text = ""
End Sub

Private Sub Text1_Click()


cmdEntrarNota.Enabled = True
End Sub

Private Sub Text1_GotFocus()


'Para Selelccionar el texto al hacer click en él.
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub

Private Sub Text1_LostFocus()


If IsNumeric(Text1.Text) Then 'Chequea si el valor es numérico.
If Text1.Text <= 0 Then 'Chequea si es mayor que cero.
MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical
Text1.SetFocus 'Situa el foco en el TexBox Text1.
End If
Else 'Si no es numérico el dato.
MsgBox "El valor debe ser mayor que cero", vbCritical
Text1.SetFocus 'Situa el foco en el TexBox Text1.
End If
End Sub

El ejercicio completo puede bajarse de AQUÍ.

Ejercicio Nº 72: Array de controles

Este ejercicio es muy simple y nos muestra como hacer un arreglo o matríz de controles.
en este caso un array de botones. Nos sirve de introducción al próximo ejercico donde
usaremos un array de cajas de texto. El código es el siguiente:

Private Sub Command1_Click(Index As Integer)


'Como es un array de controles. Al copiar el primer botón y pegarlo
'le decimos que sí a la ventana que no dice si queremos crear
'un array de controles.
'A partir de ahora todos responden al mismo evento por eso los
'identificamos por la propiedad INDEX
Label1.Caption = "Hiciste Click en el Botón Nº " & Command1(Index).Caption
End Sub

El ejercicio completo puede bajarse de AQUÍ.

Ejercicio Nº 73: Suma de Matrices

Este ejercicio lo hicimos a pedido de uno de nuestros visitantes. El formulario consta de


tres Frames con arrays de controles de cajas de texto. El código completo es: Private
Sub txtA_Change(Index As Integer)
If IsNumeric(txtA(Index)) Then
txtC(Index) = Val(txtA(Index)) + Val(txtB(Index))
Else
txtC(Index) = "#######"
End If
End Sub

Private Sub txtB_Change(Index As Integer)


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

El ejercicio completo puede bajarse de AQUÍ.

Ejercicio Nº 74: Impresión Multilínea

Este ejercicio nos permite imprimir texto respetando el corte de línea. El formulario
contiene una caja de texto con la propiedad ScrollBar en vertical y la propiedad Multiline
en True. Y dos botones uno para dar salida por impresora y el otro para cerrar el
programa. El código es el siguiente:

Option Explicit
Dim i As Integer

Private Sub Command1_Click()


'X es 60 en este ejemplo
ImprimeLineas Text1, 60
End Sub

Private Sub ImprimeLineas(Texto As Object, Linea As Integer)


Dim Bloque As String
'Número de caracteres = NumC
'Número de Bloques= NumB
Dim NumC, NumB As Integer
NumC = Len(Texto.Text)
If NumC > Linea Then
NumB = NumC \ Linea
For i = 0 To NumB
Texto.SelStart = (Linea * 1)
Texto.SelLength = Linea
Bloque = Texto.SelText
Printer.Print Bloque
Next i
Else
Printer.Print Texto.Text
End If
Printer.EndDoc
End Sub

Private Sub Command2_Click()


End
End Sub

El ejercicio completo puede bajarse de AQUÍ.

Ejercicio Nº 75: Ordenando una Tabla

Este ejercicio nos permite ordenar los registros de una tabla en forma ascendente o
descendente. Los registros se despliegan en una grilla, y también podemos seleccionar
la cantidad de registros que queremos mostrar. Obviamente necesitaremos conexión
con una base de datos, para lo que usaremos un control data. El código es:

Dim tipo As Byte


Dim Orden As String

Private Sub Command1_Click()


Dim N As Long
DBGrid1.Visible = True
N = Text1.Text 'Para entrar el número de registros.

Select Case tipo


Case 1
Orden = "DESC"
Case 2
Orden = "ASC"
End Select
'Selecciona a partir de los últimos.
Data1.RecordSource = "SELECT TOP " & N & " * " & _
"FROM Empleados " & _
"ORDER BY IdEmpleado " & Orden
Data1.Refresh
End Sub

Private Sub Command2_Click()


End
End Sub

Private Sub Form_Load()


N=3
Text1.Text = 3
Oden = "ASC"
optAscendente_Click
End Sub

Private Sub optAscendente_Click()


If optAscendente.Value Then tipo = 1
DBGrid1.Visible = False
End Sub

Private Sub Option1_Click()

End Sub

Private Sub optDescendente_Click()


If optDescendente.Value Then tipo = 2
DBGrid1.Visible = False
End Sub

Private Sub Text1_Change()


DBGrid1.Visible = False
End Sub

Private Sub Text1_Click()


Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub

Private Sub Text1_LostFocus()


If IsNumeric(Text1.Text) Then
If ((Text1.Text) >= 1 And (Text1.Text) <= 9) Then
N = Text1.Text
Else
MsgBox "El número de registros debe estar entre 1 y 9", vbInformation
Text1.SetFocus
End If
Else
MsgBox "Entre un valor numérico entre 1 y 9"
Text1.SetFocus
End If
End Sub

El código completo puede bajarse de AQUÍ.


Ejercicio Nº 76: Función Mid

Este ejercicio nos permite redondear un número decimal, con la cantidad de decimales
que deseemos. El código es el siguiente:

Dim Numero As Single


Dim Decimales As Long

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


Double

Dim Numero1 As Double


Dim Numero2 As Double
Dim Numero3 As Double
Dim Numero4 As Double
Dim Frac As Double
Dim n As Byte
n = InStr(1, Text1.Text, ".") 'posición en que se encuentra el punto decimal
n = Len(Mid(Text1.Text, n + 1)) 'longitud de la cadena de los decimales
If Decimales < n Then 'Si el dato de decimales es menor que el No. de decimales del
número
Frac = 10 ^ Decimales
Numero1 = Valor * Frac
Numero2 = Fix(Valor * -Frac) * -1
Numero3 = Numero1 - Numero2
If Numero3 >= 0.5 Then
Numero4 = Int(Numero1 * -1) * -1
Else
Numero4 = Fix(Numero1 * -1) * -1
End If
RedondearNumero = Numero4 / Frac
Else
RedondearNumero = Val(Valor)
End If
End Function

Private Sub Command1_Click()


Label1.Caption = RedondearNumero(Numero, Decimales)
End Sub

Private Sub Form_Load()


Numero = 35.347239
Decimales = 2
Text1.Text = Numero
Text2.Text = Decimales
End Sub
Private Sub Text1_Change()
If Text1.Text = "" Then Exit Sub
If IsNumeric(Text1.Text) Then
Numero = Text1.Text
Label1.Caption = RedondearNumero(Numero, Decimales)
Else
MsgBox "El número debe ser positivo", vbInformation
Text1.SetFocus
End If
End Sub

Private Sub Text2_Change()


If Text2.Text = "" Then
Label1.Caption = ""
Exit Sub
End If
If IsNumeric(Text2.Text) Then
Decimales = Text2.Text
Label1.Caption = RedondearNumero(Numero, Decimales)
Else
MsgBox "El número debe ser positivo", vbInformation
Text2.SetFocus
End If
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)


If (KeyAscii < 48) Or (KeyAscii > 57) Then 'Para solo permitir números del 0 al 9
If KeyAscii <> 8 Then KeyAscii = 0 'Para aceptar la tecla de retroceso
End If
End Sub

El código completo puede bajarse de AQUÍ.

Ejercicio Nº 77: TreeView

Este ejercicio muestra el uso de un control llamado TreeView, que debemos traer de
componentes del conjunto Microsoft controles. Combinado con un mapa de la Isla de
Cuba, para mostrar el nombre de cada provincia y su ubicación. El código es: Option
Explicit
'Dibuja el nombre de Cuba en Relieve en el Formulario.
Function EnRelieve(nombre As Form, A$, x, y)
nombre.CurrentX = x
nombre.CurrentY = y
nombre.ForeColor = QBColor(15)
nombre.Print A$
nombre.CurrentX = x + 8
nombre.CurrentY = y + 10
nombre.ForeColor = QBColor(2)
nombre.Print A$
Form1.Show
End Function
Private Sub Form_Activate()
'Para dibujar en relieve en el formulario el nombre de Cuba.
Call EnRelieve(Form1, "Cuba", 6500, 400)
End Sub

Private Sub Form_Load()


' Este código crea un árbol con objetos Node.
TreeView1.Style = tvwTreelinesPlusMinusText ' Estilo 6.
TreeView1.LineStyle = tvwRootLines 'Estilo de línea 1.

' Agrega varios objetos Node.


Dim nodX As Node ' Crea variable.
'Nodo Principal con la Clave Provincia y el Nombre Provincias
Set nodX = TreeView1.Nodes.Add(, , "Provincia", "Provincias")
Set nodX = TreeView1.Nodes.Add(, , "MunicipioEspecial", "Municipio Especial")
Set nodX = TreeView1.Nodes.Add("MunicipioEspecial", tvwChild, "IslaJuventud", "Isla de
la Juventud")
'Nodos Secundarios con el nombre de las provincias.
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Pinar del Rio", "Pinar del Rio")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "La Habana", "La Habana")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciudad Habana", "Ciudad
Habana")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Matanzas", "Matanzas")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Villa Clara", "Villa Clara")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Cienfuegos", "Cienfuegos")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santi Spiritus", "Santi
Spiritus")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciego de Avila", "Ciego de
Avila")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Camaguey", "Camaguey")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Las Tunas", "Las Tunas")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Holguin", "Holguin")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Granma", "Granma")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santiago de Cuba", "Santiago
de Cuba")
Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Guantanamo", "Guantanamo")
'Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Isla de la Juventud", "Isla de la
Juventud")
nodX.EnsureVisible ' Muestra todos los nodos.
End Sub

Private Sub mnuNuevo_Click()


lblPinarDelRio.Visible = False
lblLaHabana.Visible = False
lblCiudadHabana.Visible = False
lblMatanzas.Visible = False
lblVillaClara.Visible = False
lblCienfuegos.Visible = False
lblSantiSpiritus.Visible = False
lblCiegoDeAvila.Visible = False
lblCamaguey.Visible = False
lblLasTunas.Visible = False
lblHolguin.Visible = False
lblGranma.Visible = False
lblSantiagoDeCuba.Visible = False
lblGuantanamo.Visible = False
lblIslaJuventud.Visible = False
End Sub

Private Sub mnuSalir_Click()


End
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As Node)


Select Case Node
Case "Pinar del Rio"
lblPinarDelRio.Visible = True
Case "La Habana"
lblLaHabana.Visible = True
Case "Ciudad Habana"
lblCiudadHabana.Visible = True
Case "Matanzas"
lblMatanzas.Visible = True
Case "Villa Clara"
lblVillaClara.Visible = True
Case "Cienfuegos"
lblCienfuegos.Visible = True
Case "Santi Spiritus"
lblSantiSpiritus.Visible = True
Case "Ciego de Avila"
lblCiegoDeAvila.Visible = True
Case "Camaguey"
lblCamaguey.Visible = True
Case "Las Tunas"
lblLasTunas.Visible = True
Case "Holguin"
lblHolguin.Visible = True
Case "Granma"
lblGranma.Visible = True
Case "Santiago de Cuba"
lblSantiagoDeCuba.Visible = True
Case "Guantanamo"
lblGuantanamo.Visible = True
Case "Isla de la Juventud"
lblIslaJuventud.Visible = True

End Select

End Sub

El código completo puede bajarse de AQUÍ.

Ejercicio Nº 78: Movimiento.


En esta aplicación se crean con el método Line por cálculo matemático, las rectas de un
recorrido y un ícono cargado en un control Image se desplaza, siguiendo el recorrido de
las rectas. El código es: Option Explicit
Dim x, y, x1, x2, y1, y2, l, t, w, h, m, delta As Single
Dim I As Byte
Sub Mover()
For I = 1 To 4 'Lazo para las 4 rectas.
'Asigna las coordenas para cada una de las 4 rectas.Las Rectas son un arreglo.
x1 = Linea(I).x1
y1 = Linea(I).y1
x2 = Linea(I).x2
y2 = Linea(I).y2

x = x1 'Inicializando la x.
Do Until x >= x2
m = (y1 - y2) / (x1 - x2) 'pendiente de la recta.
y = y1 + m * (x - x1) 'Ecuación de la recta.
l = x - w / 2 'Valor que toma image1.left
t = y - h / 2 'Valor que toma image1.top

Image1.Left = l 'Pasar los valores anteriores


Image1.Top = t 'para mover la imagen.

x = x + delta 'Incrementando la x.
Loop
Next I
Image1.Enabled = False 'Inhabilitarla para impedir que regrese a la posición inicial.
End Sub

Private Sub Form_Load()


'La variable delta se usa para incrementar la x.
delta = 0.05 'Incremento de delta inicial para la velocidad del movimiento
End Sub

Private Sub Image1_Click()


Label1.Visible = False
'Ancho y Alto de la imagen.
w = Image1.Width
h = Image1.Height

Call Mover
End Sub

Private Sub mnIniciar_Click()


Label1.Visible = True
Image1.Enabled = True 'habilitar la imagen
'Llevar la imagen a la posición inicial.
Image1.Left = 420
Image1.Top = 3060
End Sub

Private Sub mnuSalir_Click()


End
End Sub

Private Sub optMediana_Click()


If optMediana.Value Then delta = 0.5
End Sub
Private Sub optPoca_Click()
If optPoca.Value Then delta = 0.05
End Sub

Private Sub optRapida_Click()


If optRapida.Value Then delta = 1
End Sub

El código de la aplicación puede bajarse de Aquí.

Ejercicio Nº 79: Efectos Visuales.

En este ejercicio vamos a realizar por código, ciertos efectos especiales aplicados a una
imágen, durante el proceso de carga de la misma en un control Picture. Para estos
efectos usamos el método PaintPicture. El código es el siguiente:

Private Sub Command1_Click()' Efecto estirado de la imagen


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

End Sub

Private Sub Command2_Click()' Efecto persiana

Dim stripes As Integer


Dim i, j As Integer
Dim stripewidth As Integer

Picture2.Cls
stripewidth = 10
stripes = Fix(Picture1.ScaleWidth / stripewidth)

On Error Resume Next


For j = 1 To stripewidth
For i = 0 To stripes
Picture2.PaintPicture Picture1.Picture, i * stripewidth, 0, j, Picture1.ScaleHeight, i *
stripewidth, 0, j, Picture1.ScaleHeight, &HCC0020
Next
Next
End Sub

Private Sub Command3_Click()'Efecto barrido desde la derecha

Dim PWidth, PHeight As Integer


Dim i As Integer
pw = 1
ph = Picture1.ScaleHeight

For i = 1 To Picture1.ScaleWidth / 2
Picture2.PaintPicture Picture1.Picture, (Picture1.ScaleWidth - pw) / 2, 0, pw, ph,
(Picture1.ScaleWidth - pw) / 2, 0, pw, ph, &HCC0020
pw = pw + 2
Next i
End Sub

El código completo del ejercicio puede bajarse de Aquí.

Ejercicio Nº 80: Método Line.

En esta aplicación usando el método Line vamos a dibujar rectas, a partir de un apretar
el botón izquierdo del mouse, en el formulario arrastramos el mouse y hacemos un soltar
el botón izquierdo del mouse, con lo que se dibujara una línea entre los dos puntos,
marcados. En las labels se muestran los valores de las coordenadas, de a cuerdo a la
ubicación del puntero. Dim CX As Integer
Dim CY As Integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As


Single)
CX = X
CY = Y

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As


Single)
Label1.Caption = X
Label2.Caption = Y
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line (CX, CY)-(X, Y)

End Sub

El código del ejercicio completo puede bajarse de Aquí.

Ejercicio Nº 81: Eventos con el Mouse.

En esta aplicación vamos a crear una pequeña aventura gráfica. Consta de dos
formularios. En el primero vamos a hacer Click sobre ciertos objetos que guardamos en
el Inventario y luego en el segundo formulario, hacemos Click en los objetos del
Inventario y los colocamos en la segunda pantalla, en los lugares correctos. El código
del primer formulario es: Option Explicit

Private Sub Image4_Click()


MousePointer = 99
MouseIcon = Image4
Image4.MouseIcon = Image4
Image4.Visible = False
End Sub

Private Sub Image6_Click()


MousePointer = 99
MouseIcon = Image6
Image6.MouseIcon = Image6
Image6.Visible = False
End Sub

Private Sub Image7_Click()


MousePointer = 99
MouseIcon = Image7
Image7.MouseIcon = Image7
Image7.Visible = False
End Sub

Private Sub Image8_Click()


MousePointer = 99
MouseIcon = Image8
Image8.MouseIcon = Image8
Image8.Visible = False
End Sub

Private Sub Image9_Click()


Form2.Show
Form1.Hide
End Sub

Private Sub mnuAyuda_Click()


MsgBox " Recogé los objetos posibles y colocálos en el Inventario por Orden Alfabético,
haciéndo Click", , "Mini Aventura"
End Sub

Private Sub mnuReiniciar_Click()


Unload Form1
Unload Form2
Form1.Show
End Sub

Private Sub mnuSalir_Click()


End
End Sub

Private Sub Picture1_Click()


If MouseIcon = Image7 Then
Picture1 = Image7
MouseIcon = Nothing
Form2.Picture1.Picture = Image7
End If
End Sub

Private Sub Picture2_Click()


If MouseIcon = Image4 Then
Picture2 = Image4
MouseIcon = Nothing
Form2.Picture2.Picture = Image4
End If
End Sub

Private Sub Picture3_Click()


If MouseIcon = Image8 Then
Picture3 = Image8
MouseIcon = Nothing
Form2.Picture3.Picture = Image8
End If
End Sub

Private Sub Picture4_Click()


If MouseIcon = Image6 Then
Picture4 = Image6
MouseIcon = Nothing
Form2.Picture4.Picture = Image6
End If
End Sub
El código del segundo formulario es:

Option Explicit

Private Sub Image5_Click()


If MouseIcon = Picture1 Then
Image5 = Picture1
MouseIcon = Nothing
Image5.MouseIcon = Nothing
End If
Call corregir
End Sub

Private Sub Image6_Click()


If MouseIcon = Picture3 Then
Image6 = Picture3
MouseIcon = Nothing
Image6.MouseIcon = Nothing
End If
Call corregir
End Sub

Private Sub Image7_Click()


If MouseIcon = Picture4 Then
Image7 = Picture4
MouseIcon = Nothing
Image7.MouseIcon = Nothing
End If
Call corregir
End Sub

Private Sub Image8_Click()


If MouseIcon = Picture2 Then
Image8 = Picture2
MouseIcon = Nothing
Image8.MouseIcon = Nothing
End If
Call corregir
End Sub
Private Sub Image9_Click()
Form1.Show
Form2.Hide
End Sub

Private Sub mniSalir_Click()


End
End Sub

Private Sub mnuAtuda_Click()


MsgBox "Hacé Click en los Objetos del Inventario y Colocálos en los lugares
correspondientes", , "Mini Aventura"
End Sub

Private Sub mnuReiniciar_Click()


Unload Form1
Unload Form2
Form1.Show
End Sub

Private Sub Picture1_Click()


MousePointer = 99
MouseIcon = Picture1
Picture1.MouseIcon = Picture1
Picture1.Visible = False
End Sub

Private Sub Picture2_Click()


MousePointer = 99
MouseIcon = Picture2
Picture2.MouseIcon = Picture2
Picture2.Visible = False
End Sub

Private Sub Picture3_Click()


MousePointer = 99
MouseIcon = Picture3
Picture3.MouseIcon = Picture3
Picture3.Visible = False
End Sub

Private Sub Picture4_Click()


MousePointer = 99
MouseIcon = Picture4
Picture4.MouseIcon = Picture4
Picture4.Visible = False
End Sub

Private Sub corregir()


If Image5 = Picture1 And Image8 = Picture2 And Image6 = Picture3 And Image7 = Picture4
Then
Label2 = "¡¡Correcto!! Completaste la Mini Aventura"
End If
End Sub

El código completo de la Aplicación puede bajarse de Aquí.


Ejercicio Nº 82: Manejo de Errores.

En este ejercicio vamos a usar una pequeña rutina de control de Errores. El objetivo es
buscar en la Unidad A, un archivo determinado, en este caso un .wmf, si no lo encuentra
despliega un mensaje, codificado en la rutina de Error.

El código es:

Private Sub Command1_Click()


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

El código completo del ejercicio puede bajarse de Aquí.


Ejercicio Nº 83: Música.

Este ejercicio permite abrir archivos WAV, ejecutados con el control Multimedia y
seleccionados de las carpetas del los distintos dispositivos. El Multimedia control debe
traerse desde proyecto, Componentes para ser agregado a la Caja de Herramientas.

El código completo es el siguiente:

Private Sub cmdInicio_Click()


Dim Extension As String
Busqueda = "." ' Busqueda hasta ".".
If InStr(1, File1.FileName, ".") Then 'Si encuentra el signo "."
'Comparacion
MiPos = InStr(File1.FileName, Busqueda) ' Regresa la posición de ".".
Extension = Mid(File1.FileName, MiPos + 1) 'Escribe extensión cortado despues del
punto.
If Extension = "WAV" Or Extension = "wav" Then
MMControl1.FileName = Dir1.Path & "/" & File1.FileName
MMControl1.Command = "open"
MMControl1.Command = "play"
Else
MsgBox "Con esa extensión no puede oir esta musica," & _
"solo permite oir con extension WAV", vbInformation
End If
Else
Exit Sub
End If
End Sub

Private Sub cmdParar_Click()


MMControl1.Command = "stop"
MMControl1.Command = "close"
End Sub

Private Sub cmdPausa_Click()


MMControl1.Command = "pause"
End Sub

Private Sub Dir1_Change()


'Para que aparezcan sólo los archivos de ese directorio.
File1.Path = Dir1.Path
End Sub
Private Sub Form_Load()
MMControl1.DeviceType = "waveaudio"
MMControl1.Command = "close"
End Sub

El código completo de la Aplicación puede bajarse de Aquí.

Ejercicio Nº 84: Video.

Esta aplicación similar a la anterior, ejecuta videos con el control Multimedia.


Seleccionandolos desde las carpetas de los directorios de los distintos dispositivos.Su
código es:

Private Sub cmdInicio_Click()


Dim Extension As String
Busqueda = "." ' Busqueda hasta ".".
If InStr(1, File1.FileName, ".") Then 'Si encuentra el signo "."
'Comparacion
MiPos = InStr(File1.FileName, Busqueda) ' Regresa la posición de ".".
Extension = Mid(File1.FileName, MiPos + 1) 'Escribe extensión cortado despues del
punto.
If Extension = "AVI" Then
MMControl1.FileName = Dir1.Path & "/" & File1.FileName
MMControl1.Command = "open"
MMControl1.Command = "play"
Else
MsgBox "Con esa extensión no pueden ver videos," & _
"solo permite ver con extension avi", vbInformation
End If
Else
Exit Sub
End If
End Sub

Private Sub cmdParar_Click()


MMControl1.Command = "stop"
MMControl1.Command = "close"
End Sub
Private Sub cmdPausa_Click()
MMControl1.Command = "pause"
End Sub

Private Sub Dir1_Change()


'Para que aparezcan sólo los archivos de ese directorio.
File1.Path = Dir1.Path
End Sub

Private Sub Form_Load()


MMControl1.DeviceType = "avivideo"
MMControl1.Command = "close"
MMControl1.hWndDisplay = Picture1.hWnd
End Sub

El código completo de la Aplicación puede bajarse de Aquí.

Ejercicio Nº 85: Cálculo de Interés.

En este ejercicio vamos a calcular un interés de tipo financiero, para esto vamos a crear
un Módulo con una función específica llamada: CalcPago. Para crear el Módulo vamos a
proyecto : agregar Módulo y allí codificamos y luego lo grabamos con la extensión .bas.
Desde esta aplicación vamos a usar un objeto OLE que convoque a la aplicación Excel,
del Office. El código del formulario es el siguiente:

Option Explicit

Private Sub Command1_Click()


Dim cuotas As Currency
If Not CalcPago(CSng(Text1), Val(Text2), CSng(Text3), cuotas) Then
MsgBox "¡Qué escribiste!, ¡¡No puedo calcular eso!!"
Else ' resultado satisfactorio
Picture1.Visible = True
Label4.Caption = Format(cuotas, " #,##0.00;($#,##0.00)")
End If
End Sub

El código del Módulo es:

Option Explicit

Public Function CalcPago(capital As Currency, año As Integer, interes As Single, cuota


As Currency) As Boolean

On Error GoTo repararerror


'dimensiona la variable como objeto
Dim excelapp As Object

' el tipo de apliación es Excel


Const hdExcelObject = "Excel.Application"
Screen.MousePointer = vbHourglass
CalcPago = False

' crea la aplicación en Excel donde se realizará el Cálculo


Set excelapp = CreateObject(hdExcelObject)

'llama al método pmt de Excel


cuota = excelapp.Pmt((interes / 100) / 12, año * 12, -1 * capital)
excelapp.quit
Set excelapp = Nothing
CalcPago = True
Screen.MousePointer = vbDefault
Exit Function

repararerror:
' determina el tipo de error
Select Case Err.Number
Case 429
MsgBox "Imposible crear un Aplicación OLE con Excel." + vbCrLf + " Está seguro de
tener una Versión de Excel superior a la 5, y bien instalada?", vbCritical, "Cálculo de
pago de Cuotas"
Case Else
MsgBox "Error #" + Str(Err.Number) + ":" + Err.Description + ".", vbCritical, "Cálculo de
pago de Cuotas"
End Select
Screen.MousePointer = vbDefault
End Function

El código completo de la Aplicación puede bajarse de Aquí.


Ejercicio Nº 86: Texto 3 D.

En este ejercicio, vamos a hacer un efecto de texto en tres dimensiones, creando dos
procedimientos: recuadro y texto3d, usando las coordenadas y el método Print. El
código es:

Option Explicit

Private Sub recuadro()


Dim i As Integer
Form1.ScaleMode = vbPixels
Form1.ForeColor = vbBlack
Const DrawWidth = 3
For i = DrawWidth - 1 To 6 * 6 Step 2
Form1.Line (i, i)-(Form1.ScaleWidth - 1 - i, Form1.ScaleHeight - 1 - i), , B
Next i
End Sub

Private Sub texto3d()


Dim X As Integer
Dim Y As Integer
X = 500
Y = 500
If Form1.ScaleMode <> vbTwips Then Form1.ScaleMode = vbTwips
Form1.ZOrder 0 'lo necesitamos para imprimir por arriba de lo existente
Form1.ForeColor = RGB(32, 32, 32) ' gris oscuro para las sombras
Form1.Font.Name = "Arial"
Form1.Font.Underline = True
Form1.FontSize = 38
Form1.CurrentX = X ' sitúa el cursor
Form1.CurrentY = Y
Form1.Print "Diseño y Programación:"
Form1.CurrentX = 1500

Form1.Print "Mirta Echeverría"


Form1.ForeColor = RGB(255, 255, 255) 'blanco para resaltar
Form1.CurrentX = X - 35 ' coloca la zona a resaltar en la parte superior izquierda
Form1.CurrentY = Y - 45
Form1.Print "Diseño y Programación:"
Form1.CurrentX = 1500

Form1.Print "Mirta Echeverría"


Form1.ForeColor = vbBlue
Form1.CurrentX = X - 25 ' imprime entre el resaltado y la sombra
Form1.CurrentY = Y - 35
Form1.Print "Diseño y Programación:" ' imprime en azul
Form1.CurrentX = 1500
Form1.Print "Mirta Echeverría"
End Sub

Private Sub Form_Load()


Call texto3d
Call recuadro
End Sub

El código completo de la Aplicación puede bajarse de Aquí.

Ejercicio Nº 87: Arreglos.

En este ejercicio vamos a trabajar con arreglos , simularemos un juego de cartas de dos
caras, la matriz o arreglo consta de 10 valores. No olvidena al ejecutarlo seleccionar una
opción para mostrar las cartas, o secuencial o aleatorio. El código es el siguiente:

En Option Explicit
Dim ladoA(1 To 10) As String
Dim ladoB(1 To 10) As String
Dim numcarta As Integer
Dim indice As Integer

Private Sub Command1_Click()


'mostrar el lado A de la carta siguiente.

'los botones de opcion seleccionan una carta secuencial o aleatoria


If Option1.Value = True Then
'incrementar el indice actual y comprobar si se encuentra dentro del intervalo de 1 a
numcarta.
indice = indice + 1
If indice < 1 Or indice > numcarta Then
'si el indice está fuera del intérvalo, comenzar nuevamente.
indice = 1
End If
ElseIf Option2.Value = True Then
'carta aleatoria. indice aleatorio de 1 a numcaarta.
indice = Fix(numcarta * Rnd) + 1
End If
' mostrar el lado A y el número de carta, Borrar el lado B
Text3.Text = indice
Text1.Text = ladoA(indice)
Text2.Text = ""

' desactivar el botón lado A y activar el botón Lado B


Command1.Enabled = False
Command2.Enabled = True
End Sub

Private Sub Command2_Click()


'mostrar el lado B de la tarjeta actual
Text2.Text = ladoB(indice)

'activa el boton lado A y desactiva lado B


Command1.Enabled = True
Command2.Enabled = False
End Sub

Private Sub Command3_Click()


End
End Sub

Private Sub Form_Load()


' asignar valores a los arrays ladoA y ladoB
numcarta = 7
ladoA(1) = "Nihon´go"
ladoB(1) = "Idioma Japonés"
ladoA(2) = "Ohayo gozaimasu"
ladoB(2) = "Buenos Días"
ladoA(3) = "Ken´nichi wa"
ladoB(3) = "Hola o Buen Día"
ladoA(4) = "Kon´ban wa"
ladoB(4) = "Buenas Tardes"
ladoA(5) = "Oyasumi nasai"
ladoB(5) = "Buenas Noches"
ladoA(6) = "Ja, mata ashita"
ladoB(6) = "Bien, nos veremos mañana"
ladoA(7) = "Sayonara"
ladoB(7) = "Adiós"

'activar el botón ladoA y desactivar el ladoB


Command1.Enabled = True
Command2.Enabled = False
End Sub

El código completo de la Aplicación puede bajarse de Aquí.


Ejercicio Nº 88: Carita.

Este ejercicio es una nueva versión del juego "Agárrame si puedes". Donde debemos
hacer Clic en una carita que se desplaza aleatoriamente por el formulario, dejando un
recuadro de color a su paso. El código es el siguiente:

Option Explicit

'Variables Globales
Dim puntaje As Integer
Dim contador As Integer
Dim dificultad As Integer
Dim menuchekeado As Menu

Private Sub Form_Load()


Call ComenzarJuego
End Sub

Private Sub mnuComenzar_Click()


Form1.Cls
Call DibujarPantalla
puntaje = 0
contador = 0
Timer1.Interval = dificultad
End Sub

Private Sub mnuDificil_Click()


dificultad = 500
menuchekeado.Checked = False
Set menuchekeado = mnuDificil
mnuDificil.Checked = True
End Sub

Private Sub mnuFacil_Click()


dificultad = 1000
menuchekeado.Checked = False
Set menuchekeado = mnuFacil
mnuFacil.Checked = True
End Sub
Private Sub mnuImposible_Click()
dificultad = 250
menuchekeado.Checked = False
Set menuchekeado = mnuImposible
mnuImposible.Checked = True
End Sub

Private Sub mnuModerado_Click()


dificultad = 700
menuchekeado.Checked = False
Set menuchekeado = mnuModerado
mnuModerado.Checked = True
End Sub

Private Sub mnusalir_Click()


Unload Form1
End Sub

Private Sub Picture1_Click()


If Timer1.Interval > 100 Then
Beep
puntaje = puntaje + 1
End If
End Sub

Private Sub Timer1_Timer()


Dim x As Integer, y As Integer
Dim BoxX As Integer, BoxY As Integer

x = Int(391 * Rnd + 20)


y = Int(231 * Rnd + 20)
BoxX = Picture1.Left
BoxY = Picture1.Top
Form1.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
Form1.Line (BoxX, BoxY)-(BoxX + 100, BoxY + 100), , BF
Picture1.Move x, y
puntaje = puntaje + 1
If puntaje = 30 Then
Timer1.Interval = 0
MsgBox "Su puntaje: " & puntaje, , "¡Agárrame si puedes!"
End If
End Sub

Private Sub ComenzarJuego()


dificultad = 500
mnuModerado.Checked = True
Set menuchekeado = mnuModerado
Randomize
Call DibujarPantalla
Call DibujarCara
End Sub

Private Sub DibujarPantalla()


Form1.ForeColor = vbBlack
Form1.Line (10, 10)-(517, 10)
Form1.Line (10, 10)-(10, 358)
Form1.Line (522, 5)-(522, 362)
Form1.Line (522, 362)-(5, 362)
Form1.ForeColor = vbWhite
Form1.Line (5, 5)-(522, 5)
Form1.Line (5, 5)-(5, 363)
Form1.Line (517, 10)-(517, 358)
Form1.Line (517, 358)-(10, 358)
End Sub

Private Sub DibujarCara()


Picture1.FillStyle = vbSolid
Picture1.FillColor = vbYellow
Picture1.Circle (48, 48), 45
Picture1.FillColor = vbBlack
Picture1.Circle (30, 35), 10
Picture1.Circle (65, 35), 10
Picture1.Circle (47, 55), 8
Picture1.DrawWidth = 2
Picture1.Circle (48, 50), 30, , 3.4, 6, 1#
End Sub

El código completo de la Aplicación puede bajarse de Aquí.

Vous aimerez peut-être aussi