Ejercicios Visual Basic

192
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

description

ejercicios

Transcript of Ejercicios Visual Basic

Ejercicio N 1: Partes de la Computadora.

Abrimos el programa Visual Basic seleccionamos Nuevo proyecto y comenzamos a trabajar.

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

Ejercicio N 2: Crucigrama.

Comenzamos un nuevo proyecto.Con este ejercicio queremos sugerir una ejemplo de crucigrama que cada uno podr adaptar a los contenidos requeridos. Tambin a partir de aqu podramos elaborar un Ahorcado.

El crucigrama est armado con cuadros de texto o sea controles Text, encerrados dentro de un control frame, este control tiene la nica finalidad de agrupar y contener otros controles, ordenando la interactividad de una manera visual. Otros dos controles Frame agrupan las opciones vertical y horizontal. Conteniendo controles CheckBox que al ser seleccionados hacen la correccin de las letras ingresadas en las cajas de texto. El ingreso de las mismas se hace en tiempo de ejecucin a travs del teclado.A la derecha vemos unos controles Picture vacos que se cargaran con imgenes que muestren por ejemplo una cara sonriente si la palabra es correcta o seria si no lo es, o cualquier otro tipo de imagen .Podemos llamar a esta imagen con la funcin LoadPicture desde cualquier parte de nuestro disco rgido. Y un botn con el icono de Hijitus indica la Salida y cierredel programa.Ac tendremos que crear por cdigo una estructura condicional que controle si la entrada de datos es correcta o no.El cdigo es el siguiente:Private Sub Command1_Click()EndEnd SubPrivate Sub Check1_Click()If Text1.Text = "L" And Text2.Text = "O" And Text3.Text= "R" And Text4.Text ="O" then ' este cdigo debe ir todo en un mismo regln y 'chequea si se escribi una de las palabras correctas. Ciudado con los 'nombres de los Controles porque seguramente Ustedes no tendrn la 'misma numeracin que yo. (Otra aclaracin cuando usamos el carcter ' 'indicamos que todo lo que sigue es un comentario, por lo tanto la 'computadora no lo ejecuta lo saltea, no es cdigo).Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita lindaElse 'SinoImage1. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita feaEnd SubPrivate Sub Check2_Click()If Text2.Text = "O" And Text5.Text ="R" And Text9.Text ="O" thenImage2.Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita lindaElse 'SinoImage2. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita feaEnd SubPrivate Sub Check3_Click()If Text7.Text = "R" And Text8.Text ="A" And Text9.Text ="T" And Text4.Text ="O" And Text10.Text ="N" thenImage3. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda Else 'SinoImage3. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita feaEnd Sub

Ejercicio N 3: Animacin del Osito.

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

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

Ejercicio N 4: Sumas.

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

El botn Aplicar permite hacer la correccin mediante un Condicional. Algunos de estos temas son comunes a otros ejercicios. Por lo tanto nos centraremos en las funciones nuevas.

La funcin Rnd nos permite cargar en una variable un nmero aleatorio que en este caso definimos como entero Int (de Integer) y de 0 a 10.Num1 = int( Rnd * 10)Repetimos el procedimiento para Num2, el segundo sumando de nuestra cuenta. Para que realmente sea aleatorio debemos incorporar la sentencia Randomize en el Procedimiento Load del Formulario.Otra funcin que utilizamos es Val que transforma una cadena de caracteres, en este caso el contenido de un Text en un valor numrico.Resultado = Val ( Text1.Text)Y luego con un condicional y el operador de suma + controlamos si el resultado es correcto:If resultado = Int(num1) + Int(num2) then...En el caso de resolver bien la cuenta pasa a cargar otros dos nmeros , iniciando una nueva cuenta. Pero necesitamos una espera en la aplicacin. Esto lo hacemos por cdigo con un bucle que asociado al reloj del sistema crea una pausa en la aplicacin. Para esto creamos un Procedimiento llamado Pausa. Posicionados en la ventana de cdigo , vamos a Tools/ Herramientas, Add Procedure/ Agregar Procedimiento, y en la ventana que se nos abre elegimos un Name para el mismo en este caso = Pausa y luego con los botones de opcin seleccionamos: Sub y Private. Damos el Aceptar y se cierra la ventana. Ahora veremos en nuestra ventana de cdigo un nuevo Procedimiento llamado Pausa. Incluido dentro de los procedimientos del objeto General. Luego lo llamaremos desde otra parte del programa con la sentencia Call.Para mayor claridad vamos al cdigo:Option ExplicitDim num1, num2, resultado As IntegerPrivate Sub pausa() ' este el procedimiento creado por nosotrosDim comenzarDim controlarcomenzar = TimerDo Until controlar > = comenzar + 1.5 ' este es el bucle de esperacontrolar = TimerDoEvents ' esta sentencia evita un bucle egoistaLoopEnd SubPrivate Sub Command1_Click()num1 = Int(Rnd * 10) 'elige un nmero aleatorionum2 = Int(Rnd * 10) 'elige un nmero aleatorioText1.Text = ""Label1.Caption = num1Label2.Caption = num2Text1.SetFocus ' ubica el foco del cursor en el control Text1Command2.Enabled = FalseImage1.Picture = Nothing 'vaca el contenido de la imagenEnd SubPrivate Sub Command2_Click()Command2.Enabled = Falseresultado = Val(Text1.Text)If resultado = Int(num1) + Int(num2) ThenImage1.Picture = Picture1.PictureCall pausa ' llama al procedimiento que creamos como PausaCall Command1_Click 'este procedimiento llama a otra sumaElseImage1.Picture = Picture2.PictureEnd IfEnd SubPrivate Sub Command3_Click()Unload MeEnd SubPrivate Sub Form_Load()Randomizenum1 = Int(Rnd * 10)'al cargarse el programa ya aparece una cuentanum2 = Int(Rnd * 10)Text1.Text = ""Label1.Caption = num1'se vuelcan las variables en las LabelsLabel2.Caption = num2Command2.Enabled = False'el botn aplicar est desactivadoEnd SubPrivate Sub Text1_Change()Command2.Enabled = True'al cambiar el texto se activa AplicarEnd Sub

Ejercicio N 5: Torero.

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

La sucesin de imgenes la realiza un control Timer asociado a un contador , cada imagen se relaciona con un texto que desplegamos en una Label colocada debajo de la imagen central. Al llegar el contador a 12 se detiene la sucesin y se muestra una Label con los nombres de los creadores de la aplicacin.

La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicacin, para esto inicializa la variable A = 0 y pone el Timer nuevamente en funcionamiento.El cdigo de los principales procedimientos es el siguiente:Option explicitDim A as IntegerPrivate Sub Label3_Click() ' esta es la label de reiniciarTimer1.enabled = TrueA = 0Label2.caption = "Lo primero es la coleta..."Label4.visible = False ' oculta a los AutoresEnd SubPrivate Sub Timer1_Timer()A = A + 1If A = 3 thenImage13.Picture= Image1.PictureLabel2.caption = "Y los tirantes despus..."ElseIf A = 4 thenImage13.Picture = Image5.PictureLabel2.caption = "enseguida la corbata..."Elseif A = 5 Then ' Y as las distintas opciones de Imgenes y de Texto.Label4.Visible = True ' muestra los AutoresTimer1.enabled = False ' desactiva el TimerEnd IfEnd SubControlen el orden de las Imgenes de acuerdo a su propia aplicacin, y los textos siguientes son:"Y una faja de chip...""El chaleco hay que ensancharlo ...""la chaquetilla est bien...""Una cinta desatada...""Un beso ardiente ...dos...tres...""Mezcla de llanto y de juego y un rezo de ella por l...""Dios mo que vuelva zano! Si muere, muero tambin!La sintaxis de los textos se mantiene como en las fotos originales.

Ejercicio N 6: Sistema Solar.

Este ejercicio es similar al de las partes de la computadora. Una Imagen grande es particionada a travs de Labels transparentes que nos permiten en este caso identificar cada planeta por separado.

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

Ejercicio N 7: Cubos.

Este ejercicio y los tres siguientes usan en sus procedimientos el Drageo o Drag and Drop , que significa arrastrar y soltar y nos va a permitir mover un objeto en tiempo de ejecucin de un lugar a otro del formulario. Este tipo de ejercicios es muy til para los docentes que trabajan con los ms pequeos.

Usamos tres controles Picture cargando en cada uno de ellos un icono que les guste. Y en la propiedad Dragmode de cada picture elegimos la opcin Automatic , la numero 1. Esto permitir mover los controles. Pero para que realmente se desplacen debemos agregar al procedimiento Form_DragDrop el siguiente cdigo:Private Sub DragDrop ( Source as control, X as Single, Y as Single)Source.Move x, yEnd SubDentro de los argumentos entre parntesis vemos Source que quiere decir origen, o sea el control de origen y esto es muy importante porque quiere decir que no hace falta que especifiquemos que picture estamos moviendo o arrastrando y soltando , el procedimiento lo registra de por s, y lo que debemos actualizarle son las nuevas coordenadas que leer el procedimiento a travs de x, y. Aqu usamos un mtodo ya conocido el Move. Al correr el programa podemos clickear sobre una de las figuras y manteniendo el botn izquierdo del mouse apretado arrastrarla a la nueva posicin que deseamos y luego soltarla.

Ejercicio N 8: Da Feliz.

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

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

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

Ejercicio N 9: Compra de Productos.

En este ejercicio arrastramos las imgenes del telfono, reloj y filmadora, como si hiciramos una compra virtual sobre la calculadora y el valor del total, se va incrementando haciendo la cuenta de lo que gastamos.

Los controles son cuatro Image , el botn que borra el total a pagar. Una caja de texto que muestra el total y las dems son Labels indicativas.Cuando arrastramos la imagen vamos a observar que no drageamos un rectngulo o ventana vaca sino iconos que coinciden con la imagen elegida, para eso a cada imagen le cargamos su icono correspondiente en la propiedad DragIcon. No olvidarse poner la propiedad DragMode en 1. El cdigo es el siguiente:Dim total as integer ' Declaramos en la parte General la variable.Private Sub Command1_Click()Text1.text = "" ' vacimos la caja de texto.Total = 0 ' reiniciamos la variable a 0.End SubPrivate Sub Image4_dragDrop (...) ' En imagen de la calculadora.If Source = Image1 then ' Aqu testeamos la imagen de origen.Total = total + 260Elseif Source = Image2 thenTotal = total + 300Elseif Source = Image3 thenTotal = total + 1400End ifText1.text = totalEnd SubAc vemos la importancia del argumento Source como control de origen, porque nos permite testear en el condicional a que imagen nos estamos refiriendo.

Ejercicio N 10: Ordenar de Menor a Mayor.

Este ejercicio usa el Drageo para que los alumnos ordenen los nmeros de Menor a Mayor.

Tenemos 3 Labels que muestran los nmeros a ordenar y otras 3 Labels que recibirn los nmeros drageados de las Labels anteriores. Y dos Botones El de Nmeros que a travs del procedimiento Azar elige tres nmeros aleatorios para cada label con la funcin Randomize y el Botn Corregir que chequea que estn ordenados realmente de menor a mayor. La Label7 muestra un "Bien" o un "Mal", de acuerdo a si el orden es correcto o no. El cdigo es el siguiente:Dim N1, N2, N3 as Integer ' declaramos las variables en General.Private Sub Command1_Click() ' Este es el botn NmerosLabel4.caption = ""Label5.caption = ""Label6.caption = "" ' vaciamos los nmeros ordenadosLabel1.visible = TrueLabel2.visible = TrueLabel3.visible = True ' volvemos visibles las Label que drageamos.Call Azar ' Convocamos al procedimiento creado en General.End SubPrivate Sub Azar() ' creamos un procedimiento llamado AzarN1= int(Rnd * 10) + 1 ' elige un nmero aleatorio de 1 a 10N2= int(Rnd * 10) +1N3= int(Rnd * 10) +1If N1 N2 And N2 N3 And N1 N3 then 'controla que no haya 2 nmeros iguales. Usamos los operadores y And.Label1.caption = N1 ' volcamos los valores de las variables en las labels.Label2.caption = N2Label3.caption = N3ElseExit Sub ' Si uno de los nmeros se repite sale de la Rutina y vuelve a llamarse al procedimiento Azar desde el Botn 1.End IfEnd SubPrivate Command2_Click () ' Este es el Botn Corregir.If Val(Label4.Caption) < Val(Label5.Caption) And Val(Label5.Caption) < Val(Label6.caption) Then ' Este condicional que controla el orden de los nmeros debe ir en una sola lnea.Label7.Caption = "Bien"ElseLabel7.caption= "Mal"End IfEnd SubPrivate Sub Form_Load()Randomize ' Reinicia la funcion RndCall 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 SubEste cdigo de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y recordemos modificar su Dragmode a 1.

En tiempo de ejecucin luego de arrastrar las Labels 1 2 y 3 sobre las 4 5 y 6 y clickear en Corregir veremos una pantalla similar a la siguiente:

Ejercicio N 11: Control para Animacin

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

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

Private Sub Command1_Click()Animation1.CloseUnload MeEnd SubPrivate Sub Form_Load()Animation1.StopAnimation1.CloseAnimation1.Open App.Path & "\FileCopy.AVI"Animation1.PlayEnd Sub

Ejercicio N 12: Imprimiendo con Printer.

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

Private Sub Command1_Click()Printer.Orientation = 1' La orientacin del papel es verticalPrinter.FontSize = 12'Tamao de la letraPrinter.Print'Un rengln en blanco o salto de carroPrinter.PrintPrinter.PrintPrinter.Print Tab(15); Label1.Caption; Tab(30); Text1.Text'Aqu damos la orden de impresin del caption de la label1 a 15 espacios 'del margen izquerdo y luego a 30 espacios del margen izquierdo el 'contenido del texto.Printer.PrintPrinter.PrintPrinter.Print Tab(15); Label2.Caption; Tab(30); Text2.TextPrinter.PrintPrinter.PrintPrinter.Print Tab(15); Label3.Caption; Tab(30); Text3.TextPrinter.PrintPrinter.PrintPrinter.PrintPrinter.Print Tab(15); Label4.Caption; Tab(30); Text4.TextPrinter.PrintPrinter.PrintPrinter.Print Tab(15); Label5.Caption; Tab(30); Text5.TextPrinter.PrintPrinter.PrintPrinter.Print Tab(15); Label6.Caption; Tab(30); Text6.TextPrinter.EndDoc'damos por terminada la impresinEnd SubEste ejercicio nos permite de una manera simple poder distribuir la impresin de forma personalizada.

Ejercicio N 13: Una Barra de Herramientas.

Este ejercicio nos permite mostrar una barra de herramientas al clsico estilo Windows.

Usando el control Toolbar y el control ImageList para desplegar las imgenes en los botones de la barra de herramientas, tambin nos permite crear una barra de status con tres paneles, compuesta por tres paneles. Estos controles forman parte de Microsoft Windows Common Controls 5.0 que debemos agregar de Componentes en la versin profesional de Visual Basic 5.Luego de crear sobre el Formulario la barra de status, con el botn derecho del mouse seleccionamos propiedades y all en la pestaa paneles vamos eligiendo cuantos queremos y cual ser su mensaje.En el control ImageList seleccionamos con el botn derecho del mouse propiedades y cargamos las imgenes que componen este repositorio de imgenes para luego por cdigo relacionarlas con los botones de la ToolBar.Private Sub Form_Load()Toolbar1.ImageList = ImageList1'en el procedimiento load asociamos el control Imagelist a la ToolbarEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)Select Case Button.KeyCase Is = "camara"MsgBox "Esto es una camara"Set Image1.Picture = ImageList1.ListImages(1).PictureCase Is = "dibujo"MsgBox "Eso es para dibujar"Set Image1.Picture = ImageList1.ListImages(2).PictureCase Is = "nuevo"MsgBox "Esto abre un archivo nuevo"Set Image1.Picture = ImageList1.ListImages(3).PictureCase Is = "abrir"MsgBox "Esto abre un archivo existente"Set Image1.Picture = ImageList1.ListImages(4).PictureCase Is = "imprimir"MsgBox "Esto Imprime"Set Image1.Picture = ImageList1.ListImages(5).PictureEnd SelectEnd SubEn el procedimiento click de laToolbar mediante un Select Case asociamos cada botn a una imagen distinta de la ImageList y al cliquear desencadenamos la funcin MsgBox que nos identifica el botn al que nos referimos. Aqu juega un papel importante la propiedad Key que identifica a la imagen, como nica y no puede repetirse.La sentencia Set determina la asociacin entre los controles, fijndola.

Ejercicio N 14: Una Animacin Transparente.

Uno de los temas ms queridos relacionados con la programacin para nosotros es el tema de las Animaciones. Poco a Poco vamos a ir desarrollando ejercicios que vayan perfeccionando y mostrando distintas formas de crear animaciones en Visual Basic. Las que vimos hasta ahora usando el mtodo Move , el control PictureClip, y las secuencias de images o pictures activadas con un Timer, son las formas ms primitivas y sencillas de animacin.

Hoy sumamos el Mtodo PaintPicture que dibuja una imagen sobre un fondo , pero al combinar mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen: la mscara y el sprite o animacin en s permite trasparentar el fondo.En este caso vamos a desplegar la animacin sobre un control Picture con una imagen de fondo, pero podemos hacerlo sobre el formulario y cargar en este una imagen. Lo que debemos tener en cuenta es que el objeto sobre el que se despliega la animacin debe estar la propiedad ScaleMode en Pixel y no en Twips como lo es por defecto.Las constantes para desplegar mtodos grficos como SRCAnd y SRCINvert deben declararse en la parte General del Formulario. Pueden copiarse a mano o a travs del Visor de Apis.Usamos dos controles PictureClip uno para la mscar y otro para el Sprite (Ver Controles favoritos: PictureClip). Un Timer para desplegar la secuencia de los frames que componen la grilla en este caso la imagen completa del perro se compone de 4 columnas y 1 fila. Y un CommandButton que regula el inicio y fin de la animacin.Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND destConst SRCINVERT = &H660046 ' (DWORD) dest = origen XOR destConst SRCCOPY = &HCC0020 ' (DWORD) dest = origenPrivate Sub Command1_Click()If Command1.Caption = "Animacin" ThenTimer1.Enabled = TruePicture1.Refresh'esta propiedad Refresh es muy importante ya que refresca el fondo para 'cambiar de cuadro en la secuencia.Command1.Caption = "Detener"ElseTimer1.Enabled = FalseCommand1.Caption = "Animacin"End IfEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub Form_Load()PictureClip1.Cols = 4PictureClip1.Rows = 1PictureClip2.Cols = 4PictureClip2.Rows = 1'Es mejor determinar la composicin de la grilla por cdigo ya que a veces 'al salir del programa el control Pictureclip no retiene los valores de la 'ventana de propiedades y vuele a su 1 a 1 por defecto.End SubPrivate Sub Timer1_Timer()Picture1.RefreshDim x As Single, y As SingleStatic imagenactual As IntegerStatic xactual As IntegerIf imagenactual > 3 Then imagenactual = 0If imagenactual < 0 Then imagenactual = 0If xactual > 500 Then xactual = 0If xactual < 0 Then xactual = 0'Estos condicionales regulan la secuencia de los cuadros de la animacin, 'reinicindola y el movimiento cuando se escapa de la picture 'posicionndose otra vez al comienzo del margen izquierdo.Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCAND 'esta sintaxis debe estar en un solo renglnPicture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCINVERT 'esta sintaxis debe estar en un solo renglnimagenactual = imagenactual + 1'avanza un cuadro la secuenciaxactual = xactual + 20' se mueve 20 pixels a la derecha.End Sub

Ejercicio N 15: Internet

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

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

Ejercicio N 16: Un Navegador.

Otro ejercicio usando el control WebBrowser, en este caso creamos un Navegador muy simple. Con el control Toolbar asociado al ImageList creamos una barra de herramientas, esto ya lo hemos visto en otros ejercicios. Por lo tanto nos centraremos en otras propiedades del WebBrowser.

Una caja de texto contiene la URL o direccin del sitio a visitar. Y una barra de estado o StatusBar dividida en tres paneles despliega: un mensaje, la hora y la fecha respectivamente.El cdigo es el siguiente:Private Sub Command1_Click() ' este control est ocultoIf Text1.Text "" ThenWebBrowser1.Navigate Text1.TextIf WebBrowser1.Visible = False ThenWebBrowser1.Visible = TrueEnd IfEnd IfEnd SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then 'equivale a la tecla EnterCommand1_ClickEnd IfEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)Select Case Button.KeyCase "back" 'se identifica por la KeyOn Error Resume NextWebBrowser1.GoBack 'RetrocedeCase "forward"On Error Resume NextWebBrowser1.GoForward 'AdelantaCase "home"Text1.Text = "http://www.reocities.com/SiliconValley/Garage/6472"Command1_ClickCase "refresh"WebBrowser1.Refresh 'actualiza o refrezcaCase "stop"WebBrowser1.Stop 'detiene la bsquedaEnd SelectEnd SubPrivate Sub WebBrowser1_DownloadBegin()StatusBar1.Panels(1).Text = "Cargando Pgina..."End SubPrivate Sub WebBrowser1_DownloadComplete()StatusBar1.Panels(1).Text = "Listo"End Sub

Ejercicio N 17: Dibujar

Con este ejercicio podrn los alumnos dibujar en tiempo de ejecucin. Podemos agregarles una paleta de colores similar al Paint.

En caso de imprimir el dibujo es necesario que la propiedad del Formulario Autoredraw est a True para que el formulario se refresque e imprima el dibujo realizado.Dim draw As Boolean 'declaramos una variable buleanaPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)draw = True 'estamos dibujandoCurrentX = X' carga en la variable la ubicacin en la coordenada XCurrentY = Y' carga en la variable la ubicacin en la coordenada YEnd SubPrivate 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 SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)draw = False 'la variable draw a falsa detiene el dibujoEnd Sub

Ejercicio N 18: Relacionar varios formularios.

A pedido de varios seguidores de nuestra pgina vamos a integrar en un solo proyecto varios formularios. El proyecto se compone de 5 formularios: Presentacin, Planetas, Informacin, Evaluacin y Crditos.

Retomando un ejercicio simple ya explicado el N 7 El Sistema Solar, vamos a agregarle una primera pantalla de presentacin con distintos botones o labels que nos vinculan a los otros formularios:

La label Planetas nos muestra el formulario del ejercicio N7 con los distintos planetas y el procedimiento Clic de cada label transparente nos vincula a una Base de Datos previamente armada con el Data Jet, el motor para Base de Datos de Visual Basic 5 o con Access, donde tendremos la informacin referente a cada planeta, en este caso: el nombre del planeta, su distancia al sol en km. y la cantidad de satlites (El proyecto final est incompleto, Uds. pueden completarlo como les resulte ms conveniente).

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

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

El formulario de evaluacin se asemeja al siguiente:

Y el cdigo es:Private Sub Picture1_Click() 'imagen de Jpiterplaneta = InputBox("Qu planeta es este?", "Planetas")If UCase(planeta) = "JPITER" Thencontar = contar + 1Label2.Caption = contarEnd Ifsatelite = InputBox("Cuntos satlites tiene?", "Planetas")If satelite = "16" Thencontar = contar + 1Label2.Caption = contarPicture1.Enabled = FalseEnd IfEnd SubTambin incluimos una variable contar para que nos sume puntos con las respuestas correctas, y las variables planeta y satlite que guardan las respuestas del InputBox. Esta variables deben ser declaradas en la parte general del formulario.Para cerrar tenemos el formulario crditos donde se indica el nombre del programador y el botn Salir que cierra la aplicacin. La navegacin entre un formulario y otro se realiza mediante los mtodos Show: Mostrar y Hide: Ocultar. Primero se muestra el formulario vinculado y luego se oculta el que est activo. Ejemplo:Private Sub Label1_Click()Form3.ShowForm5.HideEnd SubUstedes pueden vincular distintos formularios con distintos ejercicios, imgenes, animaciones o videos o simplemente informacin escrita.

Ejercicio N 19: Combinando sonidos.

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

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

Ejercicio N 20: Vnculos.

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

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

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

Ejercicio N 21: Contrasea.

Varios visitantes nos han pedido algn ejercicio que use una contrasea para entrar a un programa. Aqu va un ejemplo. Vamos a usar la funcin InputBox que al abrir una ventana con una caja de texto nos permite ingresar la contrasea.

Si no queremos usar la funcin podemos reemplazarla por el uso de un pequeo formulario diseado a nuestro gusto con una caja de texto. El programa se ve as:

Y el cdigo del evento click del Botn Acceso al Sistema es el siguiente:Dim nombreusuario As StringDim contrasea As Stringnombreusuario = InputBox("Introduzca su Nombre")contrasea = InputBox("Introduzca CONTRASEA")If UCase(nombreusuario) = "LAURA" And LCase(contrasea) = "secreto" ThenMsgBox "BIENVENIDA LAURA! Preparada para trabajar con tu PC?"Image1.Visible = TrueElseIf UCase(nombreusuario) = "MIRTA" And LCase(contrasea) = "duende" ThenMsgBox "BIENVENIDA MIRTA AL SISTEMA! A trabajar no te duermas!"Image1.Visible = TrueElseMsgBox "ACCESO DENEGADO"End IfAdems de darnos el acceso con un saludo despliega una imagen en un control Image, en caso de no ser la contrasea o el nombre del usuario el indicado nos niega el acceso. Pueden bajar el ejercicio deAqu.

Ejercicio N 22: Esqueleto.

Bueno, ustedes ya conocen el mtodo de arrastrar y soltar, pero como a nosotros nos gusta mucho, hemos armado este pequeo ejercicio, para armar un esqueleto con sus distintas partes. Espero los motive para usarlo adaptndolo a otras imgenes.

El cdigo ejemplo para una de las image que recibe la imagen del crneo arrastrado es:Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single)If Source = Image9 ThenImage1.Picture = Image9.PictureImage9.Visible = FalseLabel1.Caption = "Correcto!"Label2.Caption = "Craneo"BeepElseLabel1.Caption = "Incorrecto!"End IfCall finEnd SubEl procedimiento fin es el que testea si esta es la ltima pieza colocada y su cdigo es:Private Sub fin()If Image9.Visible = False And Image10.Visible = False And Image11.Visible = False And Image12.Visible = False And Image13.Visible = False And Image14.Visible = False And Image15.Visible = False And Image16.Visible = False ThenBeepLabel2.Caption = ""Label1.Caption = "Ganaste!"End IfEnd SubEl ejercicio completo puede bajarse deAqu.

Ejercicio N 23: Editor de men.

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

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

Aqu hay dos propiedades muy importantes, el caption del men que ser el ttulo que aparezca en el men y el name del men, el caption puede estar vaco pero el name no, Y vamos anidando los submens que queremos incorporar, como lo muestra la imagen, para desplegar un submen hacemos click en next y en la flecha hacia la derecha para hacer una sangra que indica los subtemas del men. Cada integrante del men responde a un solo evento que es el Click. Para probarlo podemos agregar el siguiente cdigo en el evento click de cada men:MnuFiambres_Click()MsgBox "haz hecho click en la opcin bandeja de Fiambres"End Sub.Esto no est includo en el ejercicio, pero puede agregarle cualqier evento para testear el funcionamiento. En relacin al cdigo que hace visible u oculta un tipo de men , agregamos un botn que aplica o ejecuta la opcin de opcin seleccionada con el siguiente cdigo en el evento click del botn Aplicar:Private Sub Command1_Click()If Option1 Then ' mostrar men de EntradasmnuEntradas.Visible = TruemnuCalientes.Visible = FalsemnuPostres.Visible = FalseElseIf Option2 Then ' mostrar men Platos CalientesmnuEntradas.Visible = FalsemnuCalientes.Visible = True mnuPostres.Visible = FalseElsemnuEntradas.Visible = FalsemnuCalientes.Visible = FalsemnuPostres.Visible = TrueEnd IfEnd Subeste cdigo relaciona mediante un condicional el men que debe mostrarse y oculta los restantes. En el procedimiento Load del formulario incluimos el siguiente cdigo, que oculta los mens:Private Sub Form_Load()mnuEntradas.Visible = FalsemnuCalientes.Visible = FalsemnuPostres.Visible = FalseEnd SubEl cdigo del ejercicio puede bajarse deAqu.

Ejercicio N 24: Print en el Form.

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

El mensaje puede ser: lo siento ese color no pertenece al arco iris o, s este color pertenece al arco iris. En tiempo de ejecucin el programa se ve as:

Private Sub Form_Click()Dim msg As String, titulo As StringDim color As String, colorArco As StringBeepmsg = "Introduzca un color."titulo = " Cuestionario del Arco Iris."color = InputBox(msg, titulo)colorArco = LCase(color)Select Case colorArcoCase "rojo", "naranja", "amarillo", "verde", "azul", "morado"Print "S, el color "; color; " est en m Arco Iris."Case ElsePrint "Lo siento, pero el color "; color; " no est en m Arco Iris."End SelectEnd SubEl cdigo del ejercicio completo puede bajarse deAqu.

Ejercicio N 25: Control Multimedia.

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

Lo original de este ejercicio es que el archivo al ejecutarse no lo hace en otra ventana, sino en un control Picture.

El cdigo es el siguiente:Private Sub video()MMControl1.DeviceType = "AVIVideo"MMControl1.filename = App.Path & "\ugachaka.Avi"MMControl1.Command = "open"MMControl1.hWndDisplay = Picture1.hWndMMControl1.Command = "play"End SubPrivate Sub Command1_Click()Call videoEnd SubPrimero creamos un procedimiento llamado video y all volcamos las indicaciones de la ejecucin, pero Atencin! Usamos la propiedad Handle Window para manipular en que objeto se ejecuta el avi. Windows identifica as que queremos que se despliegue en la picture, a traves de la propiedad hWnd del control multimedia y de hWnd del control Picture.El cdigo completo sin el AVI puede bajarse deAqu.

Ejercicio N 26: Encuesta Graciosa.

Este ejercicio lo podemos hacer y llevar, su arranque al trabajo y preguntarle a nuestros colegas, o compaeros si Est conforme con el sueldo que gana. Como damos por supuesto que la mayora va a contestarnos que No, hicimos un pequeo chiste , ya que al querer hacer Click en el Botn de No, este se nos escapar.

El cdigo es el siguiente:Private Sub Command1_Click()EndEnd SubPrivate Sub Command2_Click()MsgBox "Sufre el mismo mal que millones de Argentinos!!"End SubPrivate 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 SubCon el Botn Si: salimos del programa y al querer hacer click en el botn: No, se mueve aleatoriamente a una nueva posicin entre las medidas de ancho y alto del formulario.El cdigo del ejercicio pueden bajarlo deAqu.

Ejercicio N 27: Temperaturas.

En este ejercicio, simplemente entramos en tiempo de ejecucin una temperatura para cada da de la semana y luego haciendo click en los botones: Alta, Media y Baja , devuelve los valores en otras cajas de texto. El cdigo es el siguiente:

Option ExplicitDim alta As SingleDim dia As IntegerDim baja As SingleDim media As SinglePrivate Sub Command1_Click() ' mostrar el valor ms alto de los textbox() en el text Altaalta = Text1(0).TextFor dia = 1 To 6If Text1(dia).Text > alta Thenalta = Text1(dia).TextEnd IfNext diaText2.Text = altaEnd SubPrivate Sub Command2_Click() 'calcular la ms baja y lo muestra en el Text1(0).TextFor dia = 1 To 6If Text1(dia).Text < baja Thenbaja = Text1(dia).TextEnd IfNext diaText3.Text = bajaEnd SubPrivate SubCommand3_Click() 'calcula la media de los contenidos de text1()Dim total As SingleDim promedio As Singletotal = 0For dia = 0 To 6total = total + Text1(dia)Next diapromedio = total / 7Text4.Text = Format(promedio, "##.##") 'formato con dos decimalesEnd SubPrivate Sub Command4_Click()For dia = 0 To 6Text1(dia).Text = ""Next diaText1(0).SetFocusEnd SubPrivate Sub Command5_Click()EndEnd SubUsando estructuras de repeticin For Next, calculamos los valores de alta y baja, luego para la media sacamos por divisin el promedio.El cdigo completo del ejercicio podemos bajarlo deAqu.

Ejercicio N 28: Texto y RTF.

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

Se llama texto enriquecido porque permite incluir distintos tipos de letras, colores y tamaos o sea ms variantes en su formato. Y el control que vamos a usar para desplegar este texto con formato RTF es el RichTextBox 8es un control no estndar, por lo tanto debemos traerlo de Componentes), para el texto comn o sea con formato TXT, usaremos un TextBox de la caja de herramientas estandar. El formulario tendr el siguiente aspecto:

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

Ejercicio N 29: Rompecabezas.

En este ejercicio armaremos un rompecabezas con las partes del esqueleto de un gato.

Los procedimientos usados ya son conocidos: Dragear y soltar, uso de un Control PictureClip y de arrays de Imagenes para cargar las partes del rompecabezas.La imagen de la aplicacin se parece a la siguiente:

Option ExplicitPrivate Sub Command1_Click()'el boton Salir cierra el programaEndEnd SubPrivate Sub Command2_Click() 'este boton corrige si estan bien 'colocadas las imagenes. Debe escribirse todo el cdigo 'seguido o cortarlo usando el under _If Picture1.Picture = Image1(2).Picture And Picture2.Picture = Image1(1).Picture And Picture3.Picture = Image1(5).Picture And Picture4.Picture = Image1(0).Picture And Picture5.Picture = Image1(4) And Picture6.Picture = Image1(3).Picture ThenPicture1.Visible = FalsePicture2.Visible = FalsePicture3.Visible = FalsePicture4.Visible = FalsePicture5.Visible = FalsePicture6.Visible =False Image2.Visible = True 'carga otra imagen oculta que 'muestra un gato completoElse 'sino es correcto vaca las imagenes para reiniciar el 'armado del rompecabezas.Picture1.Picture = NothingPicture2.Picture = NothingPicture3.Picture = NothingPicture4.Picture = NothingPicture5.Picture = NothingPicture6.Picture = NothingEnd IfEnd SubPrivate 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 SubPrivate Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)Picture1.Picture = SourceEnd SubPrivate Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single)'carga las imagenes de origen al soltarlasPicture2.Picture = SourceEnd Sub Private Sub Picture3_DragDrop(Source As Control, X As Single, Y As Single)Picture3.Picture = SourceEnd SubPrivate SubPicture4_DragDrop(Source As Control, X As Single, Y As Single)Picture4.Picture = SourceEnd SubPrivate Sub Picture5_DragDrop(Source As Control, X As Single, Y As Single)Picture5.Picture = SourceEnd SubPrivate SubPicture6_DragDrop(Source As Control, X As Single, Y As Single)Picture6.Picture = SourceEnd SubEl cdigo completo puede bajarse deAqu.

Ejercicio N 30: Uso del Scrollbar.

Usaremos en este ejercicio dos Scrollbar horizontales para modificar el valor de la propiedad QBColor que muestra 16 colores, con valores de 0 a 15, estos valores estarn asociados a la ubicacin de la pestaa del Scroll y se mostrarn en dos cajas de texto.

De acuerdo a su valor este determinar el color del fondo del formulario, y del tipo de un terce control Text. La aplicacin se as:

Aqu tambin debemos prestar atencin a la propiedad Value, Y a los procedimientos Change y Scroll, que testean cuando se modifica el valor de la barra horizontal. Tambin debemos determinar los valores de las propiedades Min y Max en este caso, a 0 la primera y 15 la segunda y dejamos el LargeChange o sea el largo del cambio, a 1. El cdigo es el siguiente:Option ExplicitHScroll1_Change()Text1.Text = HScroll1.ValueText3.BackColor = QBColor(HScroll1.Value)End SubPrivate SubHScroll1_Scroll()Text1.Text = HScroll1.ValueText3.BackColor = QBColor(HScroll1.Value)End SubPrivate SubHScroll2_Change()Text2.Text = HScroll2.ValueText3.ForeColor = QBColor(HScroll2.Value)End SubPrivate SubHScroll2_Scroll()Text2.Text = HScroll2.ValueText3.ForeColor = QBColor(HScroll2.Value)End SubEl cdigo completo puede bajarse deAqu.

Ejercicio N 31: Barra de Porcentaje.

Este ejercicio nos permite hacer una Barra de progreso al estilo windows, donde nos muestra el porcentaje cubierto.El formulario tiene el siguiente aspecto:

Los controles que usamos son un Botn que activa el proceso y una picture que va cambiando su color a medida que el porcentaje aumenta.El cdigo es el siguiente:Private Sub Command1_Click()Picture1.ForeColor = RGB(0, 0, 255) 'color azulFor i = 0 To 100 'un bucle que llama al procedimiento 'actualizaprogressactualizaprogress Picture1, iCall pausa 'procedimiento de esperaNext iEnd SubPrivate Sub actualizaprogress(pb As Control, ByVal percent)Dim num$ ' porcentaje'el autoredraw de la picture debe estar a = truepb.Clspb.ScaleWidth = 100pb.DrawMode = 10num$ = Format(percent, "##") + "%" 'calcula el porcentajepb.FontSize = 18pb.CurrentX = 50 - pb.TextWidth(num$) / 2pb.CurrentY = (pb.ScaleHeight - pb.TextHeight(num$)) / 2pb.Print num$ 'imprime en la picture el porcentajepb.Line (0, 0)-(percent, pb.ScaleHeight), , BF 'dibuja el 'rectangulopb.Refresh 'actualiza la pictureEnd SubPrivate Sub pausa() 'procedimiento que detiene la aplicacin 'un segundoDim controlarDim comenzarcomenzar = TimerDo Until controlar >= comenzar + 0.2controlar = TimerDoEventsLoopEnd SubEl cdigo completo puede bajarse deAqu.

Ejercicio N 32: Control Tab.

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

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

Ejercicio N 33: Control AniGif.

Esta aplicacin que hace muy poco, solo muestra un gato moviendo los ojos y la cola, activa un gif animado usando un Control llamado AniGif, que consegu en Internet. Puede conseguirse una demo del control y en caso de querer adoptarlo hay que comprarlo.

En el archivo zipeado de la Aplicacin se incluye el control Anigif.OCX, Es conveniente que lo copien en el System de Windows, si despues quieren traerlo desde Componentes. el formulario se ve as.

La aplicacin con el control pueden bajarse deAqu.

Ejercicio N 34: Transicin.

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

El cdigo es el siguiente:Option ExplicitPublic pc, i As IntegerPrivate Sub Command1_Click()DoDoEventsTransFX1.Effect = iTransFX1.StartSet 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 LoopEnd SubPrivate SubCommand2_Click()EndEnd SubPrivate Sub Form_Load()pc = 1i = 1Set TransFX1.PicTarget = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg")Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc + 1) & ".jpg")End SubLas propiedades principales son: PicTarget que es la primera imagen que carga y PicBuffer las siguientes, como minimo debemos tener 2 imagenes , pero podemos cargar varias ms. Y el mtodo Start que lo inicia, podramos usar un timer pero en este caso es un bucle el que repite la operacin pasando entre los 15 efectos posibles que permite el control.Por cualquier duda incluyo el archivo de Ayuda del creador del activeX. Los archivos con el control pueden bajarse deAqu.

Ejercicio N 35: Ranita.

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

Los insectos se mueven en forma aleatoria mediante un random y los ojos de la ranita tienen una animacin, donde se abren y cierran, adems de los controles Images, tenemos dos labels transparentes, una que muestra el puntaje y otra que resetea la aplicacin. Y el sonido est activado usando la API sndPlaySound de windows.El cdigo es el siguiente:Option ExplicitPrivate Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As LongConst SND_ASYNC = &H1 ' reproduccin asncronaConst SND_NODEFAULT = &H2 ' silencio no predeterminado, si no se encuentra sonidoPrivate ret As IntegerPrivate contar As IntegerPrivate a As IntegerPrivate b As IntegerPrivate tiempo As IntegerPrivate Sub pausa()Dim comenzarDim controlarcomenzar = TimerDo Until controlar >= comenzar + 1controlar = TimerDoEventsLoopEnd SubPrivate Sub Form_Load()Randomize b = 0End SubPrivate Sub Image6_Click(Index As Integer) Image6(Index).Visible = Falseb = b + 10If Image6(Index).Left >= 2600 ThenImage7.Visible = Trueret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASYNC Or SND_NODEFAULT)ElseIf Image6(Index).Left 5 Thenimagenactual = 3If imagenactual < 2 Thenimagenactual = 2If imagenactual1 > 2 Thenimagenactual1 = 0If imagenactual1 < 0 Thenimagenactual1 = 0If xactual > 1000 Thenxactual = 10If xactual < 0 Thenxactual = 10If xactual1 > 1000 Thenxactual = 1000If xactual1 = 6 Then cone = 0Picture1.PaintPicture PictureClip1.GraphicCell(cone), x, 50, , , , , , , SRCAND ' para la mascara Picture1.PaintPicture PictureClip2.GraphicCell(cone), x, 50, , , , , , , SRCINVERT ' para la imagen(animacin)x = x + 60If x >= 570 Then x = 0End IfEnd Sub

El ejercicio completo puede bajarse deAqu.Gracias Nora.

Ejercicio N 41: Mtodo Draw.

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

Esta animacin podemos activarla manualmente con el Click de un botn o, automticamente con el Click de otro botn que activa a su vez un Timer. Veamos el cdigo:Private Sub Command1_Click()'el botn AutomticoTimer1.Enabled = TrueEnd SubPrivate Sub Command2_Click()Static flag As IntegerTimer1.Enabled = Falseflag = flag + 1If flag > 2 Thenflag = 1End IfPicture1.Refresh ' refresca el fondo de la Picture' El metodo draw en accionImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparentEnd SubPrivate Sub Timer1_Timer()Static flag As Integerflag = flag + 1 If flag > 2Then flag = 1End IfPicture1.Refresh' El mtodo draw en accinImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparentEnd SubEl mtodo Refresh refresca la imagen de la Picture donde se ejecuta el Mtodo Draw. Los argumentos de este mtodo son el controlador de contexto de dispositivo (HDC) del objeto que lo recibe o sea la Picture1.hDC, su ubicacin en las coordenadas x, y, y el estilo grfico transparente correspondiente al valor del color de la propiedad MaskColor del ImageList.

El ejercicio completo puede bajarse deAqu.

Ejercicio N 42: ScrollBar y Cdigo ASCII

Option ExplicitPrivate Sub HScroll1_Change()Label3.Caption = Format$(HScroll1.Value)Label4.Caption = Chr$(HScroll1.Value)End Sub

El ejercicio completo puede bajarse deAqu.

Ejercicio N 43: Simulacin

Este ejercicio de simulacin contiene un listado de posibles palabras contenidas dentro de la respuesta a las preguntas de un Psiclogo virtual, y simula esta relacin en un dilogo entre doctor y paciente.

El Los controles son: una label que indica que debemos contesar la pregunta y luego hacer click en la imagen del doctor. Una label que despliega las preguntas que hace el doctor y una caja de texto enriquecido osea un RichTextBox donde debemos ingresar nosotros las respuestas. Ademas tenemos oculto un control list que carga la lista de palabras claves. El cdigo es el siguiente:Option ExplicitDim contar As IntegerDim palabra As IntegerDim frase As StringDim pepe As StringDim a As Integer PrivateSub pausa()Dim comenzarDim chequeocomenzar = TimerDo Until chequeo >= comenzar + 1chequeo = TimerDoEventsLoopEnd SubPrivate Sub Command1_Click()EndEnd SubPrivate Sub Form_Activate()RichTextBox1.SetFocusEnd SubPrivate Sub Form_Load()RandomizeCall frasedoctorList1.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 PrivateSub frasedoctor()frase = Int(Rnd * 8)Select Case fraseCase 0Label1.Caption = "Cmo est Ud.?"Case 1Label1.Caption = "Cul es su estado de nimo?"Case 2Label1.Caption = "Tuvo Ud. una infancia feliz?"Case 3Label1.Caption = "Es feliz con el medio que lo rodea?"Case 4Label1.Caption = "Tiene problemas para relacionarse?"Case 5Label1.Caption = "Odia Ud. a su padre?"Case 6Label1.Caption = "Cree que no lo comprenden?"Case 7Label1.Caption = "Yo no estoy seguro de entenderlo"End SelectEnd SubPrivate Sub respuestadoctor()palabra = 0If palabra >= 0 ThenFor a = 0 To 24pepe = List1.List(a) palabra = RichTextBox1.Find(pepe, palabra + 1, , 2) pepe = RichTextBox1.SelTextNext aEndIf'Print pepeRichTextBox1.Text = ""Call respuestapacienteEnd SubPrivate SubImage1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Call respuestadoctorEnd SubPrivate SubRichTextBox1_Click()RichTextBox1.Text = ""End SubPrivate Sub respuestapaciente()Select Case pepeCase "tu"Label1.Caption = "No hablemos de mi."Case "te"Label1.Caption = "Dejemos de hablar de mi."Case "pienso"Label1.Caption = "Por qu piensa eso?"Case "bien"Label1.Caption = " Me alegra, cunteme sobre Ud."Case "regular"Label1.Caption = "Entiendo, Cuenteme sobre Ud."Case "que"Label1.Caption = "Por qu pregunta Ud.?"Case "quiero"Label1.Caption = "Por qu quiere usted eso?"Case "deprimido"Label1.Caption = "Qu lo deprime?"Case "sin"Label1.Caption = "Entiendo. Cree que lo puede remediar?"Case "por que"Label1.Caption = "Recuerde, la terapia es buena para Ud."Case "dificil"Label1.Caption = "No se preocupe, ya cambiarn las cosas."Case "esperar"Label1.Caption = "Tenga algo de paciencia."Case "necesito"Label1.Caption = "Todos necesitamos cosas."Case "se"Label1.Caption = "Como sabe Ud. eso?"Case "odio"Label1.Caption = "El odio nunca conduce a nada bueno"Case "amor"Label1.Caption = "Es importante amar"Case "asesino"Label1.Caption = "No me gusta la gente que mata"Case "matar"Label1.Caption = "No esta bien matar"Case "grosero"Label1.Caption = "No esta bien que me hable as!"Case "no puedo"Label1.Caption = "No sea negativo, sea positivo"Case "fracaso"Label1.Caption = " Debe luchar por el exito"Case "nunca"Label1.Caption = "No sea negativo, sea positivo"Case "infeliz"Label1.Caption = "Por que es infeliz?"Case "adios"Label1.Caption = "Le enviar la factura. Gracias."RichTextBox1.Locked = TrueBeepCall pausaEnd CaseElseCall frasedoctorEnd SelectEnd SubEl cdigo completo puede bajarse deAQU.

Ejercicio N 44: Alarma

El siguiente ejercicio nos permite crear un recordatorio de tareas, mientras estamos trabajando con la computadora y tenemos este programa activado, podemos quedarnos tranquilos de que nos avisa a determinada hora, si estamos en una clase nos permite programar el tiempo de tarea de los alumnos, por ejemplo. En tiempo de ejecucin se ve as:

En el formulario tenemos una label para el ttulo y una picture que muestra el icono de un reloj, luego dos cajas de texto donde debemos ingresar la hora del aviso y el texto del mensaje y dos botones uno para cancelar y el otro para activar la aplicacin, obvamente usamos un timer que chequea si la hora ya es la indicada.

Al cumplirse la condicin despliega un MsgBox con el mensaje que ingresamos, y mientras se mantiene minimizada la aplicacin para que podamos seguir trabjando con otros programas.El cdigo es :Option ExplicitDim recordar As StringDim horaActual As DatePrivate Sub Command1_Click()Timer1.Enabled = TrueMe.WindowState = 1End SubPrivate Sub Command2_Click()EndEnd SubPrivate SubForm_Activate()Text1.SetFocusEnd SubPrivate SubTimer1_Timer()horaActual = Format(Time, "hh:mm")If horaActual >= Text1.Text ThenBeeprecordar = MsgBox(Text2.Text, vbInformation, "Alarma")Timer1.Enabled = FalseForm1.WindowState = 0End IfEnd SubEl cdigo completo puede bajarse deAQU.

Ejercicio N 45: Artista

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

El cdigo del ejercicio es:Option ExplicitPrivate Sub Command1_Click()Dim x As IntegerDim y As IntegerDim color As IntegerDim i As IntegerFor i = 1 To 20x = Int(ScaleWidth * Rnd)y = Int(ScaleHeight * Rnd)color = Int(16 * Rnd)PSet (x, y), QBColor(color)NextEnd SubPrivate SubCommand2_Click()ClsEnd SubPrivate Sub Command3_Click()Form1.PrintFormEnd SubPrivate Sub Form_Load()RandomizeEnd SubComo vemos usamos la funcin randomize para ubicar los puntos en forma aleatoria en el formulario y un bucle For/Next que dibuja 20 puntos por cada click que hacemos en el botn: Puntos, el otro botn borra con Cls lo dibujo o sea limpia el form. El mtodo Pset (Point Set) dibuja los puntos combinada con QBColor que le asigna un color. El formato de los puntos es Dot.El ejercicio completo pueden bajarlo deAQU.

Ejercicio N 46: Figuras

En este ejercicio vamos a ver otros mtodos grficos de Visual Basic, que complementan el Punto visto es el ejemplo anterior. Veremos Crculos, Rectngulos y Lneas. Abrimos un nuevo formulario e insertamos 8 botones: 1)Borrar o Limpiar Formulario, 2)Rectas, 3)Rectngulos, 4)Rect Rellenos, 5)Crculos, 6)Crculos Rellenos, 7)Puntos, y 8)Imprimir. En tiempo de ejecucin se ve as:

La declaracin general de variables y el cdigo para cada botn es:Option ExplicitDim x, y, r As IntegerDim x1 As Integer, y1 As IntegerDim x2 As Integer, y2 As IntegerDim color As IntegerDim ccolor As IntegerPrivate Sub Command1_Click()'Botn Rectas'puntos extremos y color aleatoriox1 = 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 rectaLine (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 SubPrivate Sub Command2_Click() 'Botn Imprimir por Impresora.Me.PrintFormEnd SubPrivate Sub Command3_Click() 'Botn Rectngulox1 = 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 colorRandomize FillStyle = 1'dibuja un cuadro(B)Line (x1, y1)-(x2, y2), QBColor(color), BEnd SubPrivate Sub Command4_Click() 'Botn Rectngulo rellenox1 = 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), BFEnd SubPrivate Sub Command5_Click() 'Borra o Limpia FormularioClsEnd SubPrivate Sub Command6_Click() 'Botn Crculo relleno'coordenadas del Centro, Radio y Color, aleatoriasx = Fix(Me.ScaleWidth * Rnd)y = Fix(Me.ScaleHeight * Rnd)r = Fix(1000 * Rnd)color = Fix(16 * Rnd)RandomizeFillStyle = 1'rellena el crculo'dibuja una circunferenciaCircle (x, y), r, QBColor(color)End SubPrivate Sub Command7_Click() 'Botn Crculox = Fix(Me.ScaleWidth * Rnd)y = Fix(Me.ScaleHeight * Rnd)r = Fix(1000 * Rnd)color = Fix(16 * Rnd)ccolor = Fix(16 * Rnd)RandomizeFillStyle = 0FillColor = QBColor(ccolor)'dibuja una circunferenciaCircle (x, y), r, QBColor(color)End SubPrivate Sub Command8_Click() 'Botn PuntosRandomizex = Fix(Me.ScaleWidth * Rnd)y = Fix(Me.ScaleHeight * Rnd)color = Fix(16 * Rnd)PSet (x, y), QBColor(color) 'Dibuja PuntosEnd SubPara dibujar las Rectas debemos indicarle dos valores de: x, e y para uno de los puntos extremos y x1, Y1 para el otro luego con el mtodo Line dibuja una recta que une ambos puntos. Cuando dibuja un rectngulo. Tambin necesita estos valores pero para dibujar dos lneas rectas que luego repite en espejo para formar una Box o Caja, y as aparece el cuadrado o rectngulo. Cuandoq uqeremos que ese rectngulo este relleno la indicacin ser BF o sea Box Fill, o Caja rellena. Para esto la propiedad FillStyle debe estar a True. Y con el Crculo necesitamos un valor para x, y otro para y para establecer un punto que ser el centro de la circunferencia y un valor para el radio. Para determinar los colores lo hacemos usando un Randome y la funcin QBColor.El ejercicio completo puede bajarse deAqu.

Ejercicio N 47: Berenjena

Este ejercicio tiene un cdigo familiar para ustedes ya que hemos trabajado en ejercicios anteriores el mtodo DragDrop pero lo inclu por lo vistoso de las imgenes, es una versin en Visual Basic de una aplicacin hecha en Flash de Macromedia.

El cdigo es el siguiente:Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)'Source.Move X, YSource.Move (X - Source.Width / 2), (Y - Source.Height / 2)End SubEl ejercicio puede bajarse deAqu.

Ejercicio N 48: Traga Monedas

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

El cdigo es el siguiente:Usamos la API de Windows sndPlaySound para activar el sonido. Pueden copiarla de aqu textualmente o convocarla desde el Visor de las API de Visual Basic.Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As LongConst SND_ASYNC = &H1 ' reproduccin asncronaOption ExplicitDim snd As IntegerDim a As IntegerDim n1 As IntegerDim n2 As IntegerDim n3 As IntegerPrivate Sub Command1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)'Dragea la moneda sobre el botn ApostarSource.Visible = FalseCommand2.Enabled = True 'habilita el Botn JugarEnd SubPrivate Sub Command2_Click() 'Botn Jugar'Aqu usamos la API de windows para ejecutar el sonidosnd = sndPlaySound(App.Path & "\1toons1.wav", SND_ASYNC)'Habilita el timer de la animacin del tragamonedasTimer1.Enabled = TrueCommand4.Enabled = TrueEnd SubPrivate Sub Command3_Click()'Salida del programaUnload MeEnd SubPrivate Sub Command4_Click()'Detiene la animacin. Inhabilita el botn Jugar y llama al procedimiento 'que elige al azar los nmerosTimer1.Enabled = FalseCommand2.Enabled = FalseCall azar 'llama al procedimiento Azar que eleige tres nmerosCommand4.Enabled = FalseEnd SubPrivate Sub Form_Load()RandomizeEnd SubPrivate Sub Timer1_Timer()'Animacin pasando las imagenes de la tragamonedaa = a + 1 If a = 1 ThenImage1.Picture = Picture1(0).PictureImage2.Picture = Picture1(1).PictureImage3.Picture = Picture1(2).PictureEnd IfIf a = 2 ThenImage1.Picture = Picture1(1).PictureImage2.Picture = Picture1(2).PictureImage3.Picture = Picture1(0).PictureEnd IfIf a = 3 ThenImage1.Picture = Picture1(2).PictureImage2.Picture = Picture1(0).PictureImage3.Picture = Picture1(1).Picturea = 0End IfEnd SubPrivate Sub azar()'Procedimiento que elige tres nmeros al azar correspondientes a cada 'imagenn1 = Int(Rnd * 3) + 1n2 = Int(Rnd * 3) + 1n3 = Int(Rnd * 3) + 1Timer1.Enabled = FalseSelect Case n1Case 1Image1.Picture = Picture1(0).PictureCase 2Image1.Picture = Picture1(1).PictureCase 3Image1.Picture = Picture1(2).PictureEnd Selectn1 = n1Select Case n2Case 1Image2.Picture = Picture1(0).PictureCase 2Image2.Picture = Picture1(1).PictureCase 3Image2.Picture = Picture1(2).PictureEnd Selectn2 = n2Select Casen3Case 1Image3.Picture = Picture1(0).PictureCase 2Image3.Picture = Picture1(1).PictureCase 3Image3.Picture = Picture1(2).PictureEnd Selectn3 = n3'Llama al procedimiento que controla si los tres numeros elegidos al azar son iguales.Call ganarEnd SubPrivate Sub ganar()'Procedimiento que controla si los tres nmeros al azar son iguales gan, sino perdiDim m As IntegerIf n1 = n2 And n2 = n3 Then Label1.Caption = "Ganaste!!"snd = sndPlaySound(App.Path & "\Cash2.wav", SND_ASYNC)For m = 0 To 6Image4(m).Visible = TrueNext mElseLabel1.Caption = "Perdiste!!"snd = sndPlaySound(App.Path & "\NoTiempo.wav", SND_ASYNC)End If'llama al procedimiento que controla si se termin el dinero.Call dineroEnd SubPrivate Sub dinero()' Procedimiento que Controla si se acab el dineroIf 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 ThenLabel1.Caption = "Sin Dinero!!"End IfEnd SubComo vemos en esta aplicacin tenemos varios procedimientos creados : Azar, ganar y dinero que eligen los tres numeros al azar que cargan las imgenes, ganar que controla si las tres imagenes son iguales y dinero que controla que las monedas de 1$ se agotaron. Y un Select Case que elige que imagen corresponde a cada numero.El cdigo completo puede bajarse deAqu.

Ejercicio N 49: Protector de Pantalla

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

En el forrmulario insertamos un control PictureBox donde cargamos el corazn y un control Timer que controla la animacin del corazn en la pantalla. El cdigo es:Option ExplicitDim movimiento As IntegerDim puntero As IntegerPrivate Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As LongPrivate Sub Form_Click()puntero = ShowCursor(-1)EndEnd SubPrivate Sub Form_DblClick()puntero = ShowCursor(-1)EndEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer)puntero = ShowCursor(-1)EndEnd SubPrivate Sub Form_Load()If App.PrevInstance ThenEndpuntero = ShowCursor(0)movimiento = 3End SubPrivate SubForm_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)Static X1 As Integer, Y1 As IntegerIf X1 = 0 And Y1 = 0 ThenX1 = xY1 = yExit SubEnd IfIf Abs(X1 - x) < 5 And Abs(Y1 - y) < 5 ThenX1 = x Y1 = yExit SubEnd Ifpuntero = ShowCursor(-1)EndEnd SubPrivate 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 izquierdaSelect Case movimientoCase 1Picture1.Move Picture1.Left - 20, Picture1.Top - 20If Picture1.Left = (Form1.Height - Picture1.Height) Thenmovimiento = 2End IfCase 4Picture1.Move Picture1.Left - 20, Picture1.Top + 20If Picture1.Left = (Form1.Height - Picture1.Height) Thenmovimiento = 1End IfEnd SelectEnd SubPara esta aplicacin vamos a usar una API de window para mostrar y ocultar el puntero del mouse, SHOWCURSOR, y tambien vamos a registrar un pequeo movimiento del mouse para que se cierre el programa, asi como tocar una tecla. La animacion controla en cuatro movimientos el desplazamiento del corazn en diagonal hasta llegar al borde, y all cambia la dirreccin.El archivo completo puede bajarse deAqu.

Ejercicio N 50: Escritorio

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

Tenemos una Label y tres Pictures, la 2 es la goma, la 3 el marcador (en el medio) y la 1 el lpiz. La idea es que al hacer click en el lpiz quede en el puntero del mouse y as luego hacemos click en la label y aparece la palabra Tarea, como si la hubisemos escrito, luego dejamos el lpiz haciendo Click en el Formulario. Hacemos Click en la goma y luego en la label y se borra la palabra Tarea. Hacemos Click en el formulario y dejamos la goma. Y al hacer click en el marcador y tenerlo en el puntero del mouse hacemos Click en la Label y esta se vuelve roja, antes era color amarillo. El cdigo es:Option ExplicitPrivate Sub Form_Click()If MouseIcon = Picture1.Picture Then ' aqui volvemos al puntero estndarMousePointer = 0Picture1.Visible = TrueEnd IfIf MouseIcon = Picture2.Picture ThenMousePointer = 0Picture2.Visible = TrueEnd IfIf MouseIcon = Picture3.Picture ThenMousePointer = 0Picture3.Visible = TrueEnd IfEnd SubPrivate SubLabel1_Click()If MouseIcon = Picture1.Picture Then ' si el puntero es el lpiz la label 'muestra la palabra Tarea en su caption.Label1.Caption = "Tarea"End IfIf MouseIcon = Picture2.Picture Then ' si el puntero es la goma borra Tarea.Label1.Caption = ""Label1.BackColor = vbYellow ' fondo de la label amarilloEnd IfIf MouseIcon = Picture3.Picture Then ' si el puntero es el marcador el fondo se vuelve 'rojoLabel1.Caption = ""Label1.BackColor = VBredEnd IfEnd SubPrivate Sub Picture1_Click()'carga el icono del lpizMouseIcon = Picture1.PictureMousePointer = 99Picture1.Visible = FalseEnd SubPrivate Sub Picture2_Click()'carga el icono en el puntero de la goma MouseIcon = Picture2.PictureMousePointer = 99Picture2.Visible = FalseEnd SubPrivate Sub Picture3_Click()'carga el icono en el puntero del marcador MouseIcon = Picture3.PictureMousePointer = 99Picture3.Visible = FalseEnd SubEl cdigo del ejercicio lo podes bajar deAqu.

Ejercicio N 51: Problema

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

Option ExplicitDim paso As IntegerDim i As IntegerDim tramo1 As StringDim tramo2 As StringDim tramo3 As StringDim tramo4 As StringPrivate 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 = TrueEnd SubPrivate Sub Label6_Click()If Label1.Tag = "si" ThenLabel5.Caption = "La respuesta Correcta es la C, porque la distancia total recorrida es de 4000 mts."Label5.Visible = TrueEnd IfEnd SubPrivate SubLabel7_Click()If Label1.Tag = "si" ThenLabel5.Caption = "La respuesta Correcta es la C, porque la distancia total recorrida es de 4000 mts."Label5.Visible = TrueEnd IfEnd SubPrivate Sub Label8_Click()If Label1.Tag = "si" ThenLabel5.Caption = "La respuesta Correcta es la C, porque la distancia total recorrida es de 4000 mts."Label5.Visible = TrueEnd IfEnd SubPrivate Sub Label9_Click()If Label1.Tag = "si" ThenLabel5.Caption = "La respuesta Correcta es la C, porque la distancia total recorrida es de 4000 mts."Label5.Visible = TrueEnd IfEnd SubPrivate Sub Timer1_Timer()If paso = 1 ThenPicture2.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.Toptramo1 = " El tren se desplaza 1000 mts. al Oeste, "Label4.Caption = tramo1ElseIf 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 & tramo2ElseIf 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 & tramo3ElseIf 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 + 1End SubPongo los condicionales en un solo renglon para ahorrar espacio, ustedes corrigan la sintaxis y tambien pueden abreviar codigo creando procedimientos que se repiten.El cdigo pueden bajarlo deAQU.

Ejercicio N 52: Caza de Patos

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

Option ExplicitPrivate Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As LongConst SND_ASYNC = &H1 ' play asynchronouslyDim sonido As IntegerDim a As IntegerDim b As IntegerDim c As IntegerDim d As IntegerDim e As IntegerDim f As IntegerDim g As IntegerDim h As IntegerDim i As IntegerDim j As IntegerDim patos As IntegerDim patosin As IntegerDim patosout As IntegerPrivate Sub Form_Load()RandomizeEnd SubPrivate Sub mniDa_Click()mniDa.Checked = TruemnuNoche.Checked = FalseForm1.Picture = Image1.PictureTimer1.Enabled = TrueTimer3.Enabled = TrueTimer5.Enabled = TrueTimer7.Enabled = TrueTimer9.Enabled = TrueTimer4.Enabled = FalseTimer2.Enabled = FalseTimer6.Enabled = FalseTimer8.Enabled = FalseTimer10.Enabled = FalsePicture6.Visible = FalsePicture7.Visible = FalsePicture1.Visible = FalsePicture8.Visible = FalsePicture9.Visible = FalseEnd Sub Private Sub mnuNoche_Click()mniDa.Checked = FalsemnuNoche.Checked = TrueForm1.Picture = Image2.PictureTimer2.Enabled = TrueTimer4.Enabled = TrueTimer6.Enabled = TrueTimer8.Enabled = TrueTimer10.Enabled = TrueTimer1.Enabled = FalseTimer3.Enabled = FalseTimer5.Enabled = FalseTimer7.Enabled = FalseTimer9.Enabled = FalsePicture6.Visible = FalsePicture7.Visible = FalsePicture1.Visible = FalsePicture8.Visible = FalsePicture9.Visible = FalseEnd SubPrivate Sub mnuNuevo_Click()Picture1.Left = 0Picture1.Top = 480Picture6.Left = 1560Picture6.Top = 1440Picture7.Left = 480Picture7.Top = 2760Picture8.Left = 2400Picture8.Top = 240Picture9.Left = 2880Picture9.Top = 2160Picture1.Visible = TruePicture8.Visible = TruePicture6.Visible = TrueIf mniDa.Checked = True ThenTimer1.Enabled = TrueTimer3.Enabled = TrueTimer5.Enabled = TrueTimer7.Enabled = TrueTimer9.Enabled = TrueElseIf mnuNoche.Checked = True ThenTimer2.Enabled = TrueTimer4.Enabled = TrueTimer6.Enabled = TrueTimer8.Enabled = TrueTimer10.Enabled = TrueEnd IfEnd SubPrivate Sub mnuSalir_Click()EndEnd SubPrivate Sub Picture1_Click()sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)If Timer1.Enabled = True ThenTimer1.Enabled = FalsePicture1.Picture = Picture3.PictureCall pausaPicture1.Visible = Falsepatosin = patosin + 1Call finalPicture1.Picture = Picture2(0).PictureElseIf Timer2.Enabled = True ThenTimer2.Enabled = FalsePicture1.Picture = Picture5.PictureCall pausaPicture1.Visible = Falsepatosin = patosin + 1Call finalPicture1.Picture = Picture4(0).PictureEnd IfEnd SubPrivate Sub Picture6_Click()sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)If Timer5.Enabled = True ThenTimer5.Enabled = FalsePicture6.Picture = Picture3.PictureCall pausaPicture6.Visible = Falsepatosin = patosin + 1Call finalPicture6.Picture = Picture2(0).PictureElseIf Timer6.Enabled = True ThenTimer6.Enabled = FalsePicture6.Picture = Picture5.PictureCall pausaPicture6.Visible = Falsepatosin = patosin + 1Call finalPicture6.Picture = Picture4(0).PictureEnd IfEnd SubPrivate Sub Picture7_Click()sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)If Timer9.Enabled = True ThenTimer9.Enabled = FalsePicture7.Picture = Picture3.PictureCall pausaPicture7.Visible = Falsepatosin = patosin + 1Call finalPicture7.Picture = Picture2(0).PictureElseIf Timer10.Enabled = True ThenTimer10.Enabled = FalsePicture7.Picture = Picture5.PictureCall pausaPicture7.Visible = Falsepatosin = patosin + 1Call finalPicture7.Picture = Picture4(0).PictureEnd IfEnd SubPrivate Sub Picture8_Click()sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)If Timer3.Enabled = True ThenTimer3.Enabled = FalsePicture8.Picture = Picture3.PictureCall pausaPicture8.Visible = Falsepatosin = patosin + 1Call finalPicture8.Picture = Picture2(0).PictureElseIf Timer4.Enabled = True ThenTimer4.Enabled = FalsePicture8.Picture = Picture5.PictureCall pausaPicture8.Visible = Falsepatosin = patosin + 1Call finalPicture8.Picture = Picture4(0).PictureEnd IfEnd SubPrivate Sub Picture9_Click()sonido = sndPlaySound(App.Path & "\shoot.wav", SND_ASYNC)If Timer7.Enabled = True ThenTimer7.Enabled = FalsePicture9.Picture = Picture3.PictureCall pausaPicture9.Visible = Falsepatosin = patosin + 1Call finalPicture9.Picture = Picture2(0).PictureElseIf Timer8.Enabled = True ThenTimer8.Enabled = FalsePicture9.Picture = Picture5.PictureCall pausaPicture9.Visible = False patosin = patosin + 1Call finalPicture9.Picture = Picture4(0).PictureEnd IfEnd SubPrivate Sub Timer1_Timer()a = a + 1If a = 3 Thena = 0Picture1.Picture = Picture2(a).PicturePicture1.Visible = TrueDim r As Integerr = Int(Rnd * 20)Picture1.Move Picture1.Left + 200, Picture1.Top + rEnd SubPrivate SubTimer10_Timer()j = j + 1 If j = 3 Thenj = 0Picture7.Picture = Picture4(c).PicturePicture7.Visible = TrueDim r As Integerr = Int(Rnd * 30)Picture7.Move Picture7.Left + 200, Picture7.Top - rEnd SubPrivate Sub Timer2_Timer()b = b + 1 If b = 3 Then b = 0Picture1.Picture = Picture4(b).PicturePicture1.Visible = TrueDim r As Integerr = Int(Rnd * 20)Picture1.Move Picture1.Left + 200, Picture1.Top + rEnd SubPrivate Sub pausa()Dim comenzarDim controlarcomenzar = TimerDo Until controlar >= comenzar + 0.3controlar = TimerDoEventsLoopEnd SubPrivate Sub Timer3_Timer()c = c + 1If c = 3 Thenc = 0Picture8.Picture = Picture2(c).PicturePicture8.Visible = TruePicture8.Move Picture8.Left + 200, Picture8.TopEnd SubPrivate Sub Timer4_Timer()d = d + 1 If d = 3 Thend = 0Picture8.Picture = Picture4(d).PicturePicture8.Visible = TruePicture8.Move Picture8.Left + 200, Picture8.TopEnd SubPrivate Sub Timer5_Timer()e = e + 1If e = 3 Thene = 0Picture6.Picture = Picture2(c).PicturePicture6.Visible = TruePicture6.Move Picture6.Left + 200, Picture6.TopEnd SubPrivate Sub Timer6_Timer()f = f + 1If f = 3 Thenf = 0Picture6.Picture = Picture4(c).PicturePicture6.Visible = TruePicture6.Move Picture6.Left + 200, Picture6.TopEnd SubPrivate Sub Timer7_Timer()g = g + 1If g = 3 Theng = 0Picture9.Picture = Picture2(c).PicturePicture9.Visible = TrueDim r As Integerr = Int(Rnd * 30)Picture9.Move Pictur