Sie sind auf Seite 1von 218

CUADERNO DE TRABAJO VISUAL BASIC UAL APENDICE A

Cuaderno de Trabajo Visual Basic se e encuentra bajo una Licencia Creative Commons Atribucin-No ComercialAtribucin Licenciamiento Recproco 3.0 Unported Septiembre 2011 IDSystem Unported. ms

Contenido
INTRODUCCION ..........................................................................................................................................................6 EJERCICIOS SOBRE EL LENGUAJE ................................................................................................................................7 Actividad de Aprendizaje 6 Partes de la computadora .......................................................................................8 Actividad de Aprendizaje 7 Funciones matematicas ...........................................................................................9 Actividad de Aprendizaje 8 Interes compuesto................................................................................................ 10 EJERCICIOS SOBRE CONDICIONALES IF y SELECT CASE............................................................................................ 11 Actividad de Aprendizaje 9 Crucigrama............................................................................................................ 12 Actividad de Aprendizaje 10 Contrasea.......................................................................................................... 13 Actividad de Aprendizaje 11 Print en el Form .................................................................................................. 14 Actividad de Aprendizaje 12 Escritorio ............................................................................................................. 15 Actividad de Aprendizaje 13 Problema ............................................................................................................ 16 Actividad de Aprendizaje 14 Cobro de Servicios .............................................................................................. 19 Actividad de Aprendizaje 15 Areas ................................................................................................................... 26 EJERCICIOS SOBRE CICLOS FOR, DO WHILE, DO UNTIL ........................................................................................... 34 Actividad de Aprendizaje 16 Sumas ................................................................................................................. 35 Actividad de Aprendizaje 17 Temperaturas ..................................................................................................... 37 Actividad de Aprendizaje 18 Efectos visuales................................................................................................... 39 EJERCICIOS SOBRE ARRAYS...................................................................................................................................... 40 Actividad de Aprendizaje 19 Juego: Qu ves? ................................................................................................ 41 Actividad de Aprendizaje 20 Promedio de Notas ............................................................................................. 45 Actividad de Aprendizaje 21 Array de controles .............................................................................................. 47 Actividad de Aprendizaje 22 Suma de Matrices ............................................................................................... 48 Actividad de Aprendizaje 23 Arreglos .............................................................................................................. 49 EJERCICIOS SOBRE USO DE CONTROLES.................................................................................................................. 51 Actividad de Aprendizaje 24 Torero ................................................................................................................. 52 Actividad de Aprendizaje 25 Sistema Solar ...................................................................................................... 53 Actividad de Aprendizaje 26 - Cubos ................................................................................................................... 54 Actividad de Aprendizaje 27 Dia Feliz............................................................................................................... 55 Actividad de Aprendizaje 28 Compra de Productos ......................................................................................... 56 Actividad de Aprendizaje 29 Ordernar de Menor a Mayor .............................................................................. 57 Actividad de Aprendizaje 30 - Vinculos ............................................................................................................... 59 Actividad de Aprendizaje 31 - Esqueleto ............................................................................................................. 60 Cuaderno de Trabajo Visual Basic APENDICE A Pgina 2

Actividad de Aprendizaje 32 Editor de menu ................................................................................................... 61 Actividad de Aprendizaje 33 Encuestra Graciosa ............................................................................................. 62 Actividad de Aprendizaje 34 - Rompecabezas..................................................................................................... 63 Actividad de Aprendizaje 35 Uso del ScrollBar ................................................................................................. 64 Actividad de Aprendizaje 36 - Love ..................................................................................................................... 66 Actividad de Aprendizaje 37 Metodo Draw ..................................................................................................... 66 Actividad de Aprendizaje 38 ScrollBar y Codigo ASCII ...................................................................................... 67 Actividad de Aprendizaje 39 Simulacion .......................................................................................................... 68 Actividad de Aprendizaje 40 Berenjena ........................................................................................................... 71 Actividad de Aprendizaje 41 - Slider.................................................................................................................... 72 Actividad de Aprendizaje 42 Tablas de Sumar ................................................................................................. 72 Actividad de Aprendizaje 43 Clave de Seguridad ............................................................................................. 81 Actividad de Aprendizaje 44 - Figuras ................................................................................................................. 82 Actividad de Aprendizaje 45 Funcion Mod....................................................................................................... 84 Actividad de Aprendizaje 46 Impresin multilinea........................................................................................... 85 Actividad de Aprendizaje 47 Funcion Mid ........................................................................................................ 86 Actividad de Aprendizaje 48 Movimiento ....................................................................................................... 88 Actividad de Aprendizaje 49 Crear controles ................................................................................................... 90 EJERCICIOS SOBRE FORMULARIOS .......................................................................................................................... 91 Actividad de Aprendizaje 50 Imprimiendo con Printer .................................................................................... 92 Actividad de Aprendizaje 51 Dibujar ................................................................................................................ 93 Actividad de Aprendizaje 52 - Alarma ................................................................................................................. 94 Actividad de Aprendizaje 53 - Artista .................................................................................................................. 95 Actividad de Aprendizaje 54 - Figuras ................................................................................................................. 96 Actividad de Aprendizaje 55 Imprimir Imagen ................................................................................................. 98 Actividad de Aprendizaje 56 Objeto Printer ..................................................................................................... 99 Actividad de Aprendizaje 57 Juego de Memoria ............................................................................................ 101 Actividad de Aprendizaje 58 Metodo Line ..................................................................................................... 106 Actividad de Aprendizaje 59 Eventos con el Mouse....................................................................................... 107 Actividad de Aprendizaje 60 Texto 3D............................................................................................................ 111 Actividad de Aprendizaje 61 Carita ................................................................................................................ 112 Actividad de Aprendizaje 62 Validar un texto ................................................................................................ 115 EJERCICIOS SOBRE CONTROLES ACTIVEX .............................................................................................................. 116 Actividad de Aprendizaje 63 Animacion del osito .......................................................................................... 117 Actividad de Aprendizaje 64 Control para animacion .................................................................................... 118 Cuaderno de Trabajo Visual Basic APENDICE A Pgina 3

Actividad de Aprendizaje 65 Barra de herramientas...................................................................................... 119 Actividad de Aprendizaje 66 Animacion Transparente .................................................................................. 120 Actividad de Aprendizaje 67 Internet ............................................................................................................. 122 Actividad de Aprendizaje 68 Un navegador ................................................................................................... 123 Actividad de Aprendizaje 69 Combinando sonidos ........................................................................................ 124 Actividad de Aprendizaje 70 Control Multimedia .......................................................................................... 125 Actividad de Aprendizaje 71 Barra de porcentaje .......................................................................................... 126 Actividad de Aprendizaje 72 Control Tab ....................................................................................................... 127 Actividad de Aprendizaje 73 Control AniGif ................................................................................................... 127 Actividad de Aprendizaje 74 - Transicion .......................................................................................................... 128 Actividad de Aprendizaje 75 - Patos .................................................................................................................. 129 Actividad de Aprendizaje 76 Un conejo animado .......................................................................................... 130 Actividad de Aprendizaje 77 - Media Player MP3 ............................................................................................ 131 Actividad de Aprendizaje 78 - Recipiente.......................................................................................................... 133 Actividad de Aprendizaje 79 - TreeView ........................................................................................................... 134 Actividad de Aprendizaje 80 Musica .............................................................................................................. 137 Actividad de Aprendizaje 81 - Video ................................................................................................................. 138 Actividad de Aprendizaje 82 Calculo de interes ............................................................................................. 139 Actividad de Aprendizaje 83 Nuevos controles MonthView y DTPicker ........................................................ 141 Actividad de Aprendizaje 84 ImageCombo .................................................................................................... 141 Actividad de Aprendizaje 85 - Coolbar ............................................................................................................. 142 Actividad de Aprendizaje 86 Barra de progreso ............................................................................................. 143 Actividad de Aprendizaje 87 Barra de estado ................................................................................................ 144 Actividad de Aprendizaje 88 - Pestaas ............................................................................................................ 144 Actividad de Aprendizaje 89 - ListView ............................................................................................................. 145 Actividad de Aprendizaje 90 - TreeView ........................................................................................................... 147 Actividad de Aprendizaje 91 Control Chart .................................................................................................... 148 Actividad de Aprendizaje 92 DHTML: Hola Mundo ........................................................................................ 150 Actividad de Aprendizaje 92 DHTML: Operaciones ........................................................................................ 151 EJERCICIOS SOBRE FUNCIONES ............................................................................................................................. 153 Actividad de Aprendizaje 93 Juego Ranita ..................................................................................................... 154 Actividad de Aprendizaje 93 Semaforo .......................................................................................................... 156 Actividad de Aprendizaje 94 Pausa ................................................................................................................ 158 Actividad de Aprendizaje 95 Manejo de Errores ............................................................................................ 159 EJERCICIOS SOBRE WINDOWS API ........................................................................................................................ 160 Cuaderno de Trabajo Visual Basic APENDICE A Pgina 4

Actividad de Aprendizaje 96 - Tragamonedas .................................................................................................. 161 Actividad de Aprendizaje 97 Protector de Pantalla ........................................................................................ 164 Actividad de Aprendizaje 98 Juego: Caza de patos ........................................................................................ 166 Actividad de Aprendizaje 99 La API Sleep ...................................................................................................... 172 Actividad de Aprendizaje 100 Slider Especial ................................................................................................. 173 Actividad de Aprendizaje 101 Sleep ............................................................................................................... 174 Actividad de Aprendizaje 102 - SndPlaySound .................................................................................................. 175 Actividad de Aprendizaje 103 MCIExecute (Sonido) ...................................................................................... 176 Actividad de Aprendizaje 104 MCIExecute (Video) ........................................................................................ 177 Actividad de Aprendizaje 105 - Blend................................................................................................................ 178 EJERCICIOS SOBRE EL ARCHIVOS ........................................................................................................................... 180 Actividad de Aprendizaje 106 Texto y RTF ..................................................................................................... 181 Actividad de Aprendizaje 107 Mosaico de Fondo .......................................................................................... 182 Actividad de Aprendizaje 108 Ecuacion de 2. Grado .................................................................................... 183 EJERCICIOS SOBRE EL GRAFICOS ........................................................................................................................... 187 Actividad de Aprendizaje 109 Graficos con Chart .......................................................................................... 188 Actividad de Aprendizaje 110 Control Chart y Excel ...................................................................................... 190 EJERCICIOS SOBRE EL BASES DE DATOS ................................................................................................................ 192 Actividad de Aprendizaje 111 Formulario de Datos ....................................................................................... 193 Actividad de Aprendizaje 112 Ordenando una tabla...................................................................................... 197 Actividad de Aprendizaje 113 Relacionar varios formularios ......................................................................... 199 Actividad de Aprendizaje 114 BD Navegar ..................................................................................................... 201 Actividad de Aprendizaje 115 BD Navegar por codigo ................................................................................... 202 Actividad de Aprendizaje 116 BD Altas, Bajas y Busqueda ............................................................................ 203 Actividad de Aprendizaje 117 BD Consulta SQL ............................................................................................. 204 Actividad de Aprendizaje 118 BD Crystal Report ........................................................................................... 205 Actividad de Aprendizaje 119 BD Suma con SQL............................................................................................ 207 Actividad de Aprendizaje 120 BD Funciones con SQL .................................................................................... 208 Actividad de Aprendizaje 121 BD Varias Tablas ............................................................................................. 209 Actividad de Aprendizaje 122 BD Visor de SQL .............................................................................................. 210 Actividad de Aprendizaje 123 BD Consultas SQL ............................................................................................ 211 Actividad de Aprendizaje 124 BD con DAO .................................................................................................... 212 Actividad de Aprendizaje 125 BD con DAO validacion de campos................................................................. 214

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 5

INTRODUCCION
Este es el Apendice A o Cuaderno de Trabajo II de Visual Basic. Es la continuacion del primer cuaderno el cual esta lleno de ejercicios practicos llamados Actividades de Aprendizaje. A diferencia de los ejercicios (los cuales son paso a paso) y las practicas (que no se da ninguna solucion), estos ejercicios contienen una imagen del resultado y el codigo que debe ser tecleado. No asi, las propiedades de los controles y otros elementos graficos. Estos ejercicios fueron tomados de Visual Basic Programacion para Docentes y agradezco a Mirta Echeverria y Manuel Perez Valdez quienes tienen una excelente pagina de ejercicios. Sin embargo, hubo que clasificarlos en bloques de temas para llevaran un orden de aprendizaje de acuerdo a la mayoria de los cursos de Visual Basic. Por lo que dicha atribucion es nuestra. Recomendamos ampliamente consultar los dos Cuadernos de Trabajo, asi como su Guia de Estudio. Y tomar las notas resumidas en las clases presenciales de su profesor.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 6

EJERCICIOS SOBRE EL LENGUAJE


Los siguientes ejercicios, aunque de manera visual y con manejo de controles, se centran mas en sentencias del lenguaje, declaracion de variables y funciones. Usando los controles minimos estandar.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 7

Actividad de Aprendizaje 6 Partes de la computadora

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 8

Actividad de Aprendizaje 7 Funciones matematicas


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

El cdigo es:

Option Explicit Private Sub Command1_Click()'boton de nmero al azar Dim azar As Integer Randomize azar = Int(10 * Rnd) + 1 Label3.Caption = azar End Sub Private Sub Command2_Click()'nmero al azar entre dos valores Dim azar As Integer Dim rangomenor As Integer Dim rangomayor As Integer Randomize rangomayor = CInt(Text2) rangomenor = CInt(Text1) azar = Int((rangomayor - rangomenor + 1) * Rnd + rangomenor) Label4 = azar End Sub Private Sub Command3_Click()' raz de un nmero Dim numero As Integer Dim raiz As Integer raiz = CInt(Text3) numero = CInt(Text4) Label5.Caption = numero ^ (1 / raiz) End Sub Private Sub Command4_Click()'redondeo de un decimal Dim numero Dim decimales As Integer numero = Text6 decimales = CInt(Text5) Label10.Caption = Round(numero, decimales) End Sub Private Sub Form_Activate() Text1.SetFocus End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 9

Actividad de Aprendizaje 8 Interes compuesto


En este ejercicio vamos a crear una funcin que nos permite calcular un interes compuesto, de una suma inicial de acuerdo al porcentaje de inters ingresado y la cantidad de cuotas en que se devuelva el mismo. Usamos tres labels informativas, y tres cajas de texto para ingresar los valores, un boton para ejecutar la funcin y una label para que nos devuelva el clculo hecho. El cdigo es:

Option Explicit Dim capital As Currency Dim interesmensual As Single Dim cuotas As Long Private Sub Command1_Click() capital = Text1 interesmensual = Text2 cuotas = Text3 Label4.Caption = InteresCompuesto(capital, interesmensual, cuotas) End Sub Function InteresCompuesto(capital As Currency, interesmensual As Single, cuotas As Long) As Currency Dim i As Long Dim total As Currency total = capital For i = 1 To cuotas total = total + (total * (interesmensual)) Next i InteresCompuesto = total - capital End Function

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 10

EJERCICIOS SOBRE CONDICIONALES IF y SELECT CASE


Los siguientes ejercicios, aunque de manera visual y con manejo de controles, se centran mas en las estrucuturas condicionales.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 11

Actividad de Aprendizaje 9 Crucigrama


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

El crucigrama est armado con cuadros de texto o sea controles Text, encerrados dentro de un control frame, este control tiene la nica finalidad de agrupar y contener otros controles, ordenando la interactividad de una manera visual. Otros dos controles Frame agrupan las opciones vertical y horizontal. Conteniendo controles CheckBox que al ser seleccionados hacen la correccin de las letras ingresadas en las cajas de texto. El ingreso de las mismas se hace en tiempo de ejecucin a travs del teclado. A la derecha vemos unos controles Picture vacos que se cargaran con imgenes que muestren por ejemplo una cara sonriente si la palabra es correcta o seria si no lo es, o cualquier otro tipo de imagen .Podemos llamar a esta imagen con la funcin LoadPicture desde cualquier parte de nuestro disco rgido. Y un botn con el icono de Hijitus indica la Salida y cierre del programa. Ac tendremos que crear por cdigo una estructura condicional que controle si la entrada de datos es correcta o no. El cdigo es el siguiente:

Private Sub Command1_Click() End End Sub Private Sub Check1_Click() If Text1.Text = "L" And Text2.Text = "O" And Text3.Text= "R" And Text4.Text ="O" then ' este cdigo debe ir todo en un mismo regln y 'chequea si se escribi una de las palabras correctas. Ciudado con los 'nombres de los Controles porque seguramente Ustedes no tendrn la 'misma numeracin que yo. (Otra aclaracin cuando usamos el carcter ' 'indicamos que todo lo que sigue es un comentario, por lo tanto la 'computadora no lo ejecuta lo saltea, no es cdigo). Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda Else 'Sino

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 12

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

Actividad de Aprendizaje 10 Contrasea


Varios visitantes nos han pedido algn ejercicio que use una contrasea para entrar a un programa. Aqu va un ejemplo. Vamos a usar la funcin InputBox que al abrir una ventana con una caja de texto nos permite ingresar la contrasea. Si no queremos usar la funcin podemos reemplazarla por el uso de un pequeo formulario diseado a nuestro gusto con una caja de texto. El programa se ve as:

Y el cdigo del evento click del Botn Acceso al Sistema es el siguiente:


Dim nombreusuario As String Dim contrasea As String nombreusuario = InputBox("Introduzca su Nombre") contrasea = InputBox("Introduzca CONTRASEA") If UCase(nombreusuario) = "LAURA" And LCase(contrasea) = "secreto" Then MsgBox "BIENVENIDA LAURA! Preparada para trabajar con tu PC?" Image1.Visible = True ElseIf UCase(nombreusuario) = "MIRTA" And LCase(contrasea) = "duende" Then MsgBox "BIENVENIDA MIRTA AL SISTEMA! A trabajar no te duermas!" Image1.Visible = True Else MsgBox "ACCESO DENEGADO" End If

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 13

Adems de darnos el acceso con un saludo despliega una imagen en un control Image, en caso de no ser la contrasea o el nombre del usuario el indicado nos niega el acceso.

Actividad de Aprendizaje 11 Print en el Form


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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 14

Actividad de Aprendizaje 12 Escritorio

Este ejercicio nos permite jugar con el puntero del mouse simulando un recoger objetos, al estilo de una aventura grfica. Tenemos una Label y tres Pictures, la 2 es la goma, la 3 el marcador (en el medio) y la 1 el lpiz. La idea es que al hacer click en el lpiz quede en el puntero del mouse y as luego hacemos click en la label y aparece la palabra Tarea, como si la hubisemos escrito, luego dejamos el lpiz haciendo Click en el Formulario. Hacemos Click en la goma y luego en la label y se borra la palabra Tarea. Hacemos Click en el formulario y dejamos la goma. Y al hacer click en el marcador y tenerlo en el puntero del mouse hacemos Click en la Label y esta se vuelve roja, antes era color amarillo. El cdigo es:
Option Explicit Private Sub Form_Click() If MouseIcon = Picture1.Picture Then ' aqui volvemos al puntero estndar MousePointer = 0 Picture1.Visible = True End If If MouseIcon = Picture2.Picture Then MousePointer = 0 Picture2.Visible = True End If If MouseIcon = Picture3.Picture Then MousePointer = 0 Picture3.Visible = True End If End Sub Private Sub Label1_Click() If MouseIcon = Picture1.Picture Then ' si el puntero es el lpiz la label 'muestra la palabra Tarea en su caption. Label1.Caption = "Tarea" End If If MouseIcon = Picture2.Picture Then ' si el puntero es la goma borra Tarea. Label1.Caption = "" Label1.BackColor = vbYellow ' fondo de la label amarillo End If If MouseIcon = Picture3.Picture Then ' si el puntero es el marcador el fondo se vuelve 'rojo Label1.Caption = ""

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 15

Label1.BackColor = VBred End If End Sub Private Sub Picture1_Click()'carga el icono del lpiz MouseIcon = Picture1.Picture MousePointer = 99 Picture1.Visible = False End Sub Private Sub Picture2_Click()'carga el icono en el puntero de la goma MouseIcon = Picture2.Picture MousePointer = 99 Picture2.Visible = False End Sub Private Sub Picture3_Click()'carga el icono en el puntero del marcador MouseIcon = Picture3.Picture MousePointer = 99 Picture3.Visible = False End Sub

Actividad de Aprendizaje 13 Problema

Este ejercicio nos muestra como armar un problema sobre la velocidad y la distancia, ustedes podran agregar otros problemas similares. la animacin ayuda al alumno a buscar la respuesta adecuada. es un ejemplo de simulacin. El cdigo es:
Option Explicit Dim paso As Integer Dim i As Integer Dim tramo1 As String Dim tramo2 As String Dim tramo3 As String Dim tramo4 As String Private Sub Label1_Click()

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 16

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 17

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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 18

Actividad de Aprendizaje 14 Cobro de Servicios

Este ejercicio utiliza Botones de Opcin y fue realizado a partir del pedido de un alumno por mail. Tambin integra: labels, caja de textos, botones y calcula el total del valor del pedido de acuerdo a la opcin seleccionada y la cantidad. Su cdigo es el siguiente:
'Declaracin de las variables para el precio de cada una. Dim Hamburguesa As Single Dim HotDog As Single Dim Sandwich As Single Dim Gaseosa As Single Dim Refresco As Single Dim PapasFritas As Single 'Declaracin de variables para la cantidad de cada una. Dim CantidadHamburguesa As Integer Dim CantidadHotDog As Integer Dim CantidadSandwich As Integer Dim CantidadGaseosa As Integer Dim CantidadRefresco As Integer Dim CantidadPapasFritas As Integer Private Sub cmdCalcular_Click() 'Multiplicando la cantidad por el precio y sumando para hallar el total. Total = (CantidadHamburguesa * Hamburguesa) + (CantidadHotDog * HotDog) + _ (CantidadSandwich * Sandwich) + (CantidadGaseosa * Gaseosa) + _ (CantidadRefresco * Refresco) + (CantidadPapasFritas * PapasFritas) lblTotal.Caption = "$ " & Total End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() 'Inicializar las variables 'Precio de los productos Hamburguesa = 20.5

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 19

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 20

'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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 21

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 22

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 23

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 24

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 25

Actividad de Aprendizaje 15 Areas

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 26

picFigura.Print "r" 'Situar la frmula. picFormula.CurrentX = 25 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " rea = 3.14 x r ^ 2 " End Sub

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 27

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 28

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 29

Sub Limpiar() picFigura.Cls 'Limpiar el PictureBox para las figuras. picFormula.Cls 'Limpiar PictureBox para la frmula. End Sub Sub OcultarB1() 'Oculta lblB1 y txtB1. lblB1.Visible = False txtB1.Visible = False End Sub Sub MostrarB1() 'Muestra lblB1 y txtB1. lblB1.Visible = True txtB1.Visible = True End Sub Sub Triangulo() Call Limpiar picFigura.DrawStyle = 0 'Dibujar con lneas continuas. Call CambiarLabels 'Dibuja las 3 lneas. picFigura.Line (300, 1400)-(1600, 300) picFigura.Line -(2100, 1400) picFigura.Line -(300, 1400) picFigura.DrawStyle = 2 'Dibujar la altura con lneas continuas. 'Dibuja la altura picFigura.Line (1600, 300)-(1600, 1400) 'Colocar los letreros de altura. picFigura.CurrentX = 1450 picFigura.CurrentY = 900 picFigura.Print "h" 'Colocar los letreros de la base. picFigura.CurrentX = 1300 picFigura.CurrentY = 1450 picFigura.Print "b" 'Situar la frmula picFormula.CurrentX = 100 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " rea=( b x h ) / 2" End Sub Private Sub cmdCalcular_Click() fraResultados.Visible = True Select Case Figura Case "Triangulo" Area = b * h / 2 Case "Paralelogramo" Area = b * h Case "Rectangulo" Area = b * h Case "Cuadrado" Area = b ^ 2 'Usamos la misma variable b para el lado.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 30

Case "Rombo" Area = b * h / 2 'Usamos las mismas variables b y h para las diagonales. Cambiamos las etiquetas a d1 y d2. Case "Trapecio" Area = (B1 + b) * h / 2 Case "Circulo" Area = Pi * b ^ 2 'Usamos la variable b por el radio.Cambiamos la etiqueta a r. End Select txtArea.Text = Area End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() 'Inicializar las variables. h=1 b=2 B1 = 1 'Inicializar las cajas de texto. txtB.Text = b txtH.Text = h txtB1.Text = B1 End Sub Private Sub optCirculo_Click() If optCirculo.Value Then Figura = "Circulo" Call Circulo 'Dibuja el crculo. End If End Sub Private Sub optCuadrado_Click() If optCuadrado.Value Then Figura = "Cuadrado" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el clculo. Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el clculo. Call Cuadrado 'Dibuja el cuadrado. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los resultados. End If End Sub Private Sub optParalelogramo_Click() If optParalelogramo.Value Then Figura = "Paralelogramo" Call Paralelogramo 'Dibuja el paralelogramo. Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el clculo. Call MostrarH 'Pone visible lblH y txtH. fraDatos.Visible = True 'MostrarB1 los datos fraResultados.Visible = False 'OcultarB1 los resultados End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 31

Private Sub optRectangulo_Click() If optRectangulo Then Figura = "Rectangulo" Call Rectangulo 'Dibuja el rectngulo. Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el clculo. Call MostrarH 'Pone visible lblH y txtH. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los resultados. End If End Sub Private Sub optRombo_Click() If optRombo.Value Then Figura = "Rombo" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el clculo. lblB.Caption = "d1=" 'Cambiar el valor del lblB. lblH.Caption = "d2=" 'Cambiar el valor del lblH. Call MostrarH 'Pone visible lblH y txtH. Call Rombo 'Dibuja el rombo. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los resultados. End If End Sub Private Sub optTrapecio_Click() If optTrapecio.Value Then Figura = "Trapecio" Call Trapecio 'Dibuja el trapecio. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los resultados. End If End Sub Private Sub optTriangulo_Click() If optTriangulo.Value Then Figura = "Triangulo" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el clculo. Call MostrarH 'Pone visible lblH y txtH. Call Triangulo 'Dibuja el tringulo por cdigo. fraDatos.Visible = True 'MostrarB1 los datos fraResultados.Visible = False 'OcultarB1 los resultados End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 32

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 33

EJERCICIOS SOBRE CICLOS FOR, DO WHILE, DO UNTIL


Los siguientes ejercicios, aunque de manera visual y con manejo de controles, se centran mas en las estrucuturas repetitivas o ciclos.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 34

Actividad de Aprendizaje 16 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:

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 35

If resultado = Int(num1) + Int(num2) then... En el caso de resolver bien la cuenta pasa a cargar otros dos nmeros , iniciando una nueva cuenta. Pero necesitamos una espera en la aplicacin. Esto lo hacemos por cdigo con un bucle que asociado al reloj del sistema crea una pausa en la aplicacin. Para esto creamos un Procedimiento llamado Pausa. Posicionados en la ventana de cdigo , vamos a Tools/ Herramientas, Add Procedure/ Agregar Procedimiento, y en la ventana que se nos abre elegimos un Name para el mismo en este caso = Pausa y luego con los botones de opcin seleccionamos: Sub y Private. Damos el Aceptar y se cierra la ventana. Ahora veremos en nuestra ventana de cdigo un nuevo Procedimiento llamado Pausa. Incluido dentro de los procedimientos del objeto General. Luego lo llamaremos desde otra parte del programa con la sentencia Call. Para mayor claridad vamos al cdigo:
Option Explicit Dim num1, num2, resultado As Integer Private Sub pausa() ' este el procedimiento creado por nosotros Dim comenzar Dim controlar comenzar = Timer Do Until controlar > = comenzar + 1.5 ' este es el bucle de espera controlar = Timer DoEvents ' esta sentencia evita un bucle egoista Loop End Sub Private Sub Command1_Click() num1 = Int(Rnd * 10) 'elige un nmero aleatorio num2 = Int(Rnd * 10) 'elige un nmero aleatorio Text1.Text = "" Label1.Caption = num1 Label2.Caption = num2 Text1.SetFocus ' ubica el foco del cursor en el control Text1 Command2.Enabled = False Image1.Picture = Nothing 'vaca el contenido de la imagen End Sub Private Sub Command2_Click() Command2.Enabled = False resultado = Val(Text1.Text) If resultado = Int(num1) + Int(num2) Then Image1.Picture = Picture1.Picture Call pausa ' llama al procedimiento que creamos como Pausa Call Command1_Click 'este procedimiento llama a otra suma Else Image1.Picture = Picture2.Picture End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 36

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

Actividad de Aprendizaje 17 Temperaturas

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 37

End Sub Private Sub Command2_Click() 'calcular la ms baja y lo muestra en el Text1(0).Text For dia = 1 To 6 If Text1(dia).Text < baja Then baja = Text1(dia).Text End If Next dia Text3.Text = baja End Sub Private Sub Command3_Click() 'calcula la media de los contenidos de text1() Dim total As Single Dim promedio As Single total = 0 For dia = 0 To 6 total = total + Text1(dia) Next dia promedio = total / 7 Text4.Text = Format(promedio, "##.##") 'formato con dos decimales End Sub Private Sub Command4_Click() For dia = 0 To 6 Text1(dia).Text = "" Next dia Text1(0).SetFocus End Sub Private Sub Command5_Click() End End Sub

Usando estructuras de repeticin For Next, calculamos los valores de alta y baja, luego para la media sacamos por divisin el promedio.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 38

Actividad de Aprendizaje 18 Efectos visuales

En este ejercicio vamos a realizar por cdigo, ciertos efectos especiales aplicados a una imgen, durante el proceso de carga de la misma en un control Picture. Para estos efectos usamos el mtodo PaintPicture. El cdigo es el siguiente:
Private Sub Command1_Click()' Efecto estirado de la imagen Dim i For i = 1 To Picture1.ScaleWidth Step 3 Picture2.PaintPicture Picture1.Picture, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0, 0, i, Picture1.ScaleHeight, &HCC0020 Next i End Sub Private Sub Command2_Click()' Efecto persiana Dim stripes As Integer Dim i, j As Integer Dim stripewidth As Integer Picture2.Cls stripewidth = 10 stripes = Fix(Picture1.ScaleWidth / stripewidth) On Error Resume Next For j = 1 To stripewidth For i = 0 To stripes Picture2.PaintPicture Picture1.Picture, i * stripewidth, 0, j, Picture1.ScaleHeight, i * stripewidth, 0, j, Picture1.ScaleHeight, &HCC0020 Next Next End Sub Private Sub Command3_Click()'Efecto barrido desde la derecha Dim PWidth, PHeight As Integer Dim i As Integer pw = 1 ph = Picture1.ScaleHeight For i = 1 To Picture1.ScaleWidth / 2 Picture2.PaintPicture Picture1.Picture, (Picture1.ScaleWidth - pw) / 2, 0, pw, ph, (Picture1.ScaleWidth - pw) / 2, 0, pw, ph, &HCC0020 pw = pw + 2 Next i End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 39

EJERCICIOS SOBRE ARRAYS


Los siguientes ejercicios, aunque de manera visual y con manejo de controles, se centran mas en los Arreglos y algunos controles que los utilizan.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 40

Actividad de Aprendizaje 19 Juego: Qu ves?

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 41

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 42

Case 14 Command2.Picture = Image1(13).Picture Case 15 Command2.Picture = Image1(14).Picture Case 16 Command2.Picture = Image1(15).Picture Case 17 Command2.Picture = Image1(16).Picture Case 18 Command2.Picture = Image1(17).Picture Case 19 Command2.Picture = Image1(18).Picture Case 20 Command2.Picture = Image1(19).Picture End Select End Sub Private Sub Text1_Change() Call corregir End Sub Private Sub corregir() Static puntos As Integer Select Case Label1 Case 1 If UCase(Text1.Text) = "CARAMBOLA" Then puntos = puntos + 1 Case 2 If UCase(Text1.Text) = "APRESADO" Then puntos = puntos + 1 Case 3 If UCase(Text1.Text) = "APRENDER" Then puntos = puntos + 1 Case 4 If UCase(Text1.Text) = "CAJN" Then puntos = puntos + 1 Case 5 If UCase(Text1.Text) = "CAMPAA" Then puntos = puntos + 1 Case 6 If UCase(Text1.Text) = "CANOSO" Then puntos = puntos + 1 Case 7 If UCase(Text1.Text) = "CARAC" Then puntos = puntos + 1 Case 8 If UCase(Text1.Text) = "CASINO" Then puntos = puntos + 1 Case 9 If UCase(Text1.Text) = "CORAZONADA" Then puntos = puntos + 1 Case 10 If UCase(Text1.Text) = "CUCHARITA" Then puntos = puntos + 1 Case 11

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 43

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 44

Actividad de Aprendizaje 20 Promedio de Notas

Este ejercicio nos permite ingresar una cantidad de valores, por ejemplo las notas de un alumno, y luego obtener su promedio. En el formulario usamos cuatro botones, dos cajas de texto, y un ListBox, un frame y tres Labels. El cdigo es el siguiente:
Option Explicit Dim Nota() As Single Dim N As Integer 'Nmero total de notas. Private Sub cmdBorrarNota_Click() Dim i As Integer, NotaInd As Integer NotaInd = List1.ListIndex + 1 'Asigna el orden del elemento de la lista a una variable. If List1.ListIndex = -1 Then 'Si no esta checheada la lista. MsgBox "Haga click en la lista para borrar la nota" Exit Sub Else List1.RemoveItem (List1.ListIndex) 'Borra de la Lista la Nota Text1.Text = "" 'Limpia el texto. 'Eliminar la nota de indice (List1.ListIndex+1) y correr las notas For i = NotaInd To N - 1 Nota(i) = Nota(i + 1) Next i N = N - 1 'actualizando nmero de notas por ser borrada una. If N > 1 Then ReDim Preserve Nota(1 To N) 'Reajustando la dimensin del arreglo notas Text2.Text = "" End If End Sub Private Sub cmdEntrarNota_Click() If Text1.Text = "" Then 'Si no se han introducido nota. MsgBox "No se ha introducido una nota" Text1.SetFocus

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 45

Exit Sub End If N = N + 1 'Inicializa el conteo de las notas entradas. ReDim Preserve Nota(1 To N) 'Redimesiona el arreglo. Nota(N) = Text1.Text 'Asigna el valor al arreglo. List1.AddItem (Nota(N)) 'Aade la nota a la lista. cmdEntrarNota.Enabled = False End Sub Private Sub cmdPromedio_Click() Dim Suma As Single Dim Promedio As Single Dim J As Integer If N = 0 Then 'Si el nmero de notas es cero. MsgBox "No existen valores para promediar" Exit Sub End If Suma = 0 For J = 1 To N 'Suma todas las notas Suma = Suma + Nota(J) Next J Promedio = Suma / N Text2.Text = Promedio End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Form_Activate() Text1.SetFocus End Sub Private Sub Text1_Change() cmdEntrarNota.Enabled = True Text2.Text = "" End Sub Private Sub Text1_Click() cmdEntrarNota.Enabled = True End Sub Private Sub Text1_GotFocus() 'Para Selelccionar el texto al hacer click en l. Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub Private Sub Text1_LostFocus() If IsNumeric(Text1.Text) Then 'Chequea si el valor es numrico. If Text1.Text <= 0 Then 'Chequea si es mayor que cero. MsgBox "Valor incorrecto,debe ser mayor que cero", vbCritical Text1.SetFocus 'Situa el foco en el TexBox Text1.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 46

End If Else 'Si no es numrico el dato. MsgBox "El valor debe ser mayor que cero", vbCritical Text1.SetFocus 'Situa el foco en el TexBox Text1. End If End Sub

Actividad de Aprendizaje 21 Array de controles

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 47

Actividad de Aprendizaje 22 Suma de Matrices

Este ejercicio lo hicimos a pedido de uno de nuestros visitantes. El formulario consta de tres Frames con arrays de controles de cajas de texto. El cdigo completo es:
Private Sub txtA_Change(Index As Integer) If IsNumeric(txtA(Index)) Then txtC(Index) = Val(txtA(Index)) + Val(txtB(Index)) Else txtC(Index) = "#######" End If End Sub Private Sub txtB_Change(Index As Integer) If IsNumeric(txtB(Index)) Then txtC(Index) = Val(txtA(Index)) + Val(txtB(Index)) Else txtC(Index) = "#######" End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 48

Actividad de Aprendizaje 23 Arreglos

En este ejercicio vamos a trabajar con arreglos , simularemos un juego de cartas de dos caras, la matriz o arreglo consta de 10 valores. No olvidena al ejecutarlo seleccionar una opcin para mostrar las cartas, o secuencial o aleatorio. El cdigo es el siguiente:
En Option Explicit Dim ladoA(1 To 10) As String Dim ladoB(1 To 10) As String Dim numcarta As Integer Dim indice As Integer Private Sub Command1_Click() 'mostrar el lado A de la carta siguiente. 'los botones de opcion seleccionan una carta secuencial o aleatoria If Option1.Value = True Then 'incrementar el indice actual y comprobar si se encuentra dentro del intervalo de 1 a numcarta. indice = indice + 1 If indice < 1 Or indice > numcarta Then 'si el indice est fuera del intrvalo, comenzar nuevamente. indice = 1 End If ElseIf Option2.Value = True Then 'carta aleatoria. indice aleatorio de 1 a numcaarta. indice = Fix(numcarta * Rnd) + 1 End If ' mostrar el lado A y el nmero de carta, Borrar el lado B Text3.Text = indice Text1.Text = ladoA(indice) Text2.Text = "" ' desactivar el botn lado A y activar el botn Lado B Command1.Enabled = False

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 49

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 50

EJERCICIOS SOBRE USO DE CONTROLES


Los siguientes ejercicios, se centran en el uso de los controles estandar de Visual Basic, sus propiedades y eventos para conocer como se comportan.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 51

Actividad de Aprendizaje 24 Torero

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

La sucesin de imgenes la realiza un control Timer asociado a un contador , cada imagen se relaciona con un texto que desplegamos en una Label colocada debajo de la imagen central. Al llegar el contador a 12 se detiene la sucesin y se muestra una Label con los nombres de los creadores de la aplicacin. La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicacin, para esto inicializa la variable A = 0 y pone el Timer nuevamente en funcionamiento. El cdigo de los principales procedimientos es el siguiente:
Option explicit Dim A as Integer Private Sub Label3_Click() ' esta es la label de reiniciar Timer1.enabled = True A=0 Label2.caption = "Lo primero es la coleta..." Label4.visible = False ' oculta a los Autores End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 52

Private Sub Timer1_Timer() A=A+1 If A = 3 then Image13.Picture= Image1.Picture Label2.caption = "Y los tirantes despus..." ElseIf A = 4 then Image13.Picture = Image5.Picture Label2.caption = "enseguida la corbata..." Elseif A = 5 Then ' Y as las distintas opciones de Imgenes y de Texto. Label4.Visible = True ' muestra los Autores Timer1.enabled = False ' desactiva el Timer End If End Sub

Controlen el orden de las Imgenes de acuerdo a su propia aplicacin, y los textos siguientes son:
"Y una faja de chip..." "El chaleco hay que ensancharlo ..." "la chaquetilla est bien..." "Una cinta desatada..." "Un beso ardiente ...dos...tres..." "Mezcla de llanto y de juego y un rezo de ella por l..." "Dios mo que vuelva zano! Si muere, muero tambin!

La sintaxis de los textos se mantiene como en las fotos originales.

Actividad de Aprendizaje 25 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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 53

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

Actividad de Aprendizaje 26 - 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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 54

Usamos tres controles Picture cargando en cada uno de ellos un icono que les guste. Y en la propiedad Dragmode de cada picture elegimos la opcin Automatic , la numero 1. Esto permitir mover los controles. Pero para que realmente se desplacen debemos agregar al procedimiento Form_DragDrop el siguiente cdigo:
Private Sub DragDrop ( Source as control, X as Single, Y as Single) Source.Move x, y End Sub

Dentro de los argumentos entre parntesis vemos Source que quiere decir origen, o sea el control de origen y esto es muy importante porque quiere decir que no hace falta que especifiquemos que picture estamos moviendo o arrastrando y soltando , el procedimiento lo registra de por s, y lo que debemos actualizarle son las nuevas coordenadas que leer el procedimiento a travs de x, y. Aqu usamos un mtodo ya conocido el Move. Al correr el programa podemos clickear sobre una de las figuras y manteniendo el botn izquierdo del mouse apretado arrastrarla a la nueva posicin que deseamos y luego soltarla.

Actividad de Aprendizaje 27 Dia 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:

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 55

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.

Actividad de Aprendizaje 28 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:
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 56

Dim total as integer ' Declaramos en la parte General la variable. Private Sub Command1_Click() Text1.text = "" ' vacimos la caja de texto. Total = 0 ' reiniciamos la variable a 0. End Sub Private Sub Image4_dragDrop (...) ' En imagen de la calculadora. If Source = Image1 then ' Aqu testeamos la imagen de origen. Total = total + 260 Elseif Source = Image2 then Total = total + 300 Elseif Source = Image3 then Total = total + 1400 End if Text1.text = total End Sub

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

Actividad de Aprendizaje 29 Ordernar de Menor a Mayor

Este ejercicio usa el Drageo para que los alumnos ordenen los nmeros de Menor a Mayor. Tenemos 3 Labels que muestran los nmeros a ordenar y otras 3 Labels que recibirn los nmeros drageados de las Labels anteriores. Y dos Botones El de Nmeros que a travs del procedimiento Azar elige tres nmeros aleatorios para cada label con la funcin Randomize y el Botn Corregir que chequea que estn ordenados realmente de menor a mayor. La Label7 muestra un "Bien" o un "Mal", de acuerdo a si el orden es correcto o no. El cdigo es el siguiente:
Dim N1, N2, N3 as Integer ' declaramos las variables en General. Private Sub Command1_Click() ' Este es el botn Nmeros Label4.caption = "" Label5.caption = "" Label6.caption = "" ' vaciamos los nmeros ordenados Label1.visible = True Label2.visible = True Label3.visible = True ' volvemos visibles las Label que drageamos.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 57

Call Azar ' Convocamos al procedimiento creado en General. End Sub Private Sub Azar() ' creamos un procedimiento llamado Azar N1= int(Rnd * 10) + 1 ' elige un nmero aleatorio de 1 a 10 N2= int(Rnd * 10) +1 N3= int(Rnd * 10) +1 If N1 <> N2 And N2 <> N3 And N1 <> N3 then 'controla que no haya 2 nmeros iguales. Usamos los operadores <> y And. Label1.caption = N1 ' volcamos los valores de las variables en las labels. Label2.caption = N2 Label3.caption = N3 Else Exit Sub ' Si uno de los nmeros se repite sale de la Rutina y vuelve a llamarse al procedimiento Azar desde el Botn 1. End If End Sub Private Command2_Click () ' Este es el Botn Corregir. If Val(Label4.Caption) < Val(Label5.Caption) And Val(Label5.Caption) < Val(Label6.caption) Then ' Este condicional que controla el orden de los nmeros debe ir en una sola lnea. Label7.Caption = "Bien" Else Label7.caption= "Mal" End If End Sub Private Sub Form_Load() Randomize ' Reinicia la funcion Rnd Call Azar ' llama al procedimiento Azar. End Sub Private Sub Label4_DragDrop(..) Label4.Caption = Source ' La label que recibe el control de Origen toma el caption de este Origen. Source.visible = False ' oculta el control de origen una vez drageado. End Sub

Este cdigo de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y recordemos modificar su Dragmode a 1.

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 58

Actividad de Aprendizaje 30 - Vinculos


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

Usamos como truco una label transparente superpuesta sobre la palabra que recibe el evento click y que se vincula a la imagen. El programa en ejecucin es similar a esta imagen: Sobre la palabra comida y animal tenemos superpuesta una label con la letra en azul para que muestre la posible interactividad, tambin cambiamos el puntero del mouse a una manito cuando pasa por sobre las palabras. Y al hacer click cambia el contenido de la Image en su propiedad picture. El cdigo del evento click de la primer label es:
Private Sub Label2_Click() Image1.Picture = Picture2.Picture Label4.Caption = "Una rica hamburguesa" End Sub

Como vemos el cdigo es muy sencillo.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 59

Actividad de Aprendizaje 31 - Esqueleto

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

El procedimiento fin es el que testea si esta es la ltima pieza colocada y su cdigo es:
Private Sub fin() If Image9.Visible = False And Image10.Visible = False And Image11.Visible = False And Image12.Visible = False And Image13.Visible = False And Image14.Visible = False And Image15.Visible = False And Image16.Visible = False Then Beep Label2.Caption = "" Label1.Caption = "Ganaste!" End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 60

Actividad de Aprendizaje 32 Editor de menu

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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 61

Esto no est includo en el ejercicio, pero puede agregarle cualqier evento para testear el funcionamiento. En relacin al cdigo que hace visible u oculta un tipo de men , agregamos un botn que aplica o ejecuta la opcin de opcin seleccionada con el siguiente cdigo en el evento click del botn Aplicar:
Private Sub Command1_Click() If Option1 Then ' mostrar men de Entradas mnuEntradas.Visible = True mnuCalientes.Visible = False mnuPostres.Visible = False ElseIf Option2 Then ' mostrar men Platos Calientes mnuEntradas.Visible = False mnuCalientes.Visible = True mnuPostres.Visible = False Else mnuEntradas.Visible = False mnuCalientes.Visible = False mnuPostres.Visible = True End If End Sub

este cdigo relaciona mediante un condicional el men que debe mostrarse y oculta los restantes. En el procedimiento Load del formulario incluimos el siguiente cdigo, que oculta los mens:
Private Sub Form_Load() mnuEntradas.Visible = False mnuCalientes.Visible = False mnuPostres.Visible = False End Sub

Actividad de Aprendizaje 33 Encuestra 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:
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 62

Private Sub Command1_Click() End End Sub Private Sub Command2_Click() MsgBox "Sufre el mismo mal que millones de Argentinos!!" End Sub Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Command2.Move CInt(Rnd * (Width - Command2.Width)), CInt(Rnd * (Height - Command2.Height)) End Sub

Con el Botn Si: salimos del programa y al querer hacer click en el botn: No, se mueve aleatoriamente a una nueva posicin entre las medidas de ancho y alto del formulario.

Actividad de Aprendizaje 34 - Rompecabezas


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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 63

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

Actividad de Aprendizaje 35 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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 64

De acuerdo a su valor este determinar el color del fondo del formulario, y del tipo de un terce control Text. La aplicacin se as: Aqu tambin debemos prestar atencin a la propiedad Value, Y a los procedimientos Change y Scroll, que testean cuando se modifica el valor de la barra horizontal. Tambin debemos determinar los valores de las propiedades Min y Max en este caso, a 0 la primera y 15 la segunda y dejamos el LargeChange o sea el largo del cambio, a 1. El cdigo es el siguiente:
Option Explicit Private Sub 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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 65

Actividad de Aprendizaje 36 - Love

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

Actividad de Aprendizaje 37 Metodo 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:
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 66

Private Sub Command1_Click()'el botn Automtico Timer1.Enabled = True End Sub Private Sub Command2_Click() Static flag As Integer Timer1.Enabled = False flag = flag + 1 If flag > 2 Then flag = 1 End If Picture1.Refresh ' refresca el fondo de la Picture ' El metodo draw en accion ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent End Sub Private Sub Timer1_Timer() Static flag As Integer flag = flag + 1 If flag > 2 Then flag = 1 End If Picture1.Refresh ' El mtodo draw en accin ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent End Sub

El mtodo Refresh refresca la imagen de la Picture donde se ejecuta el Mtodo Draw. Los argumentos de este mtodo son el controlador de contexto de dispositivo (HDC) del objeto que lo recibe o sea la Picture1.hDC, su ubicacin en las coordenadas x, y, y el estilo grfico transparente correspondiente al valor del color de la propiedad MaskColor del ImageList.

Actividad de Aprendizaje 38 ScrollBar y Codigo ASCII

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 67

Actividad de Aprendizaje 39 Simulacion

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 68

List1.AddItem "regular" List1.AddItem "que" List1.AddItem "quiero" List1.AddItem "deprimido" List1.AddItem "sin" List1.AddItem "dificil" List1.AddItem "esperar" List1.AddItem "necesito" List1.AddItem "por que?" List1.AddItem "se" List1.AddItem "adios" List1.AddItem "odio" List1.AddItem "amor" List1.AddItem "asesino" List1.AddItem "matar" List1.AddItem "grosero" List1.AddItem "no puedo" List1.AddItem "fracaso" List1.AddItem "nunca" List1.AddItem "infeliz" 'Text1.Text = List1.List(3) End Sub Private Sub frasedoctor() frase = Int(Rnd * 8) Select Case frase Case 0 Label1.Caption = "Cmo est Ud.?" Case 1 Label1.Caption = "Cul es su estado de nimo?" Case 2 Label1.Caption = "Tuvo Ud. una infancia feliz?" Case 3 Label1.Caption = "Es feliz con el medio que lo rodea?" Case 4 Label1.Caption = "Tiene problemas para relacionarse?" Case 5 Label1.Caption = "Odia Ud. a su padre?" Case 6 Label1.Caption = "Cree que no lo comprenden?" Case 7 Label1.Caption = "Yo no estoy seguro de entenderlo" End Select End Sub Private Sub respuestadoctor() palabra = 0 If palabra >= 0 Then For a = 0 To 24 pepe = List1.List(a) palabra = RichTextBox1.Find(pepe, palabra + 1, , 2) pepe = RichTextBox1.SelText Next a End If 'Print pepe RichTextBox1.Text = "" Call respuestapaciente

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 69

End Sub Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Call respuestadoctor End Sub Private Sub RichTextBox1_Click() RichTextBox1.Text = "" End Sub Private Sub respuestapaciente() Select Case pepe Case "tu" Label1.Caption = "No hablemos de mi." Case "te" Label1.Caption = "Dejemos de hablar de mi." Case "pienso" Label1.Caption = "Por qu piensa eso?" Case "bien" Label1.Caption = " Me alegra, cunteme sobre Ud." Case "regular" Label1.Caption = "Entiendo, Cuenteme sobre Ud." Case "que" Label1.Caption = "Por qu pregunta Ud.?" Case "quiero" Label1.Caption = "Por qu quiere usted eso?" Case "deprimido" Label1.Caption = "Qu lo deprime?" Case "sin" Label1.Caption = "Entiendo. Cree que lo puede remediar?" Case "por que" Label1.Caption = "Recuerde, la terapia es buena para Ud." Case "dificil" Label1.Caption = "No se preocupe, ya cambiarn las cosas." Case "esperar" Label1.Caption = "Tenga algo de paciencia." Case "necesito" Label1.Caption = "Todos necesitamos cosas." Case "se" Label1.Caption = "Como sabe Ud. eso?" Case "odio" Label1.Caption = "El odio nunca conduce a nada bueno" Case "amor" Label1.Caption = "Es importante amar" Case "asesino" Label1.Caption = "No me gusta la gente que mata" Case "matar" Label1.Caption = "No esta bien matar" Case "grosero" Label1.Caption = "No esta bien que me hable as!" Case "no puedo" Label1.Caption = "No sea negativo, sea positivo" Case "fracaso" Label1.Caption = " Debe luchar por el exito"

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 70

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

Actividad de Aprendizaje 40 Berenjena

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 71

Actividad de Aprendizaje 41 - Slider

Este es un control slider comn donde codificamos los procedimientos Click y Change. Usamos la funcin Format para darle forma al valor en centmetros. El cdigo es el siguiente:
Option Explicit Private Sub Slider1_Change() Label1.Caption = "Medida en Centmetros = " & Format(Slider1.Value, "#.00") End Sub Private Sub Slider1_Scroll() Label1.Caption = "Medida en Centmetros = " & Format(Slider1.Value, "#.00") End Sub

Actividad de Aprendizaje 42 Tablas de Sumar

En esta tabla del uno, aplicable a los demas nmeros y adaptable a otra operaciones de resta, multiplicacin o divisin. Tenemos una combinacin de labels, imgenes, shapes y checkbox con los que ha sido armada la aplicacin. Su cdigo es el siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 72

Dim Puntos As Byte Public flag1 As Byte Public flag2 As Byte Private Sub ganar() 'Poner todas las imagenes invisibles If ImageUno.Visible = False And ImageDos.Visible = False And ImageTres.Visible = False _ And ImageCuatro.Visible = False And ImageCinco.Visible = False And ImageSeis.Visible = False _ And ImageSiete.Visible = False And ImageOcho.Visible = False And ImageNueve.Visible = False _ And ImageCero.Visible = False Then For I = 1 To 300 Beep Next I lblRespuesta.Visible = True lblRespuesta.ZOrder 0 lblRespuesta.Caption = "Muy bien resuelta la Tabla! FELICIDADES!" End If End Sub Private Sub AniPushButton1_Click() frmTablaDel_1.Hide frmTablaSumaDel_2.Show End Sub Private Sub AniPushButton2_Click() 'Limpiar los resultados img0.Picture = LoadPicture("") img1.Picture = LoadPicture("") img2.Picture = LoadPicture("") img3.Picture = LoadPicture("") img4.Picture = LoadPicture("") img5.Picture = LoadPicture("") img6.Picture = LoadPicture("") img7.Picture = LoadPicture("") img8.Picture = LoadPicture("") img9.Picture = LoadPicture("") 'Poner los nmeros en la bola ImageUno.Visible = True ImageDos.Visible = True ImageTres.Visible = True ImageCuatro.Visible = True ImageCinco.Visible = True ImageSeis.Visible = True ImageSiete.Visible = True ImageOcho.Visible = True ImageNueve.Visible = True ImageCero.Visible = True 'Inicializar la propiedad Tag img0.Tag = "vacia" img1.Tag = "vacia" img2.Tag = "vacia" img2.Tag = "vacia" img4.Tag = "vacia"

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 73

img5.Tag = "vacia" img6.Tag = "vacia" img7.Tag = "vacia" img8.Tag = "vacia" img9.Tag = "vacia" 'Limpiar los CheckBox y la imagenes Check1.Caption = "" Check1.Visible = False imgConejo.Visible = False Check2.Caption = "" Check2.Value = 0 imgOsito.Visible = False Check3.Caption = "" Check3.Value = 0 imgPato.Visible = False Check4.Caption = "" Check4.Value = 0 imgGato.Visible = False Check5.Caption = "" Check5.Value = 0 imgBug.Visible = False Check6.Caption = "" Check6.Value = 0 imgNia.Visible = False Check7.Caption = "" Check7.Value = 0 imgOso.Visible = False Check8.Caption = "" Check8.Value = 0 imgAlce.Visible = False Check9.Caption = "" Check9.Value = 0 imgViejito.Visible = False lblRespuesta.ZOrder 1 'pasar atrs el label End Sub Private Sub Check1_Click() Check1.Value = 1 End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 74

Private Sub Check2_Click() Check2.Value = 1 End Sub Private Sub Check3_Click() Check3.Value = 1 End Sub Private Sub Check4_Click() Check4.Value = 1 End Sub Private Sub Check5_Click() Check5.Value = 1 End Sub Private Sub Check6_Click() Check6.Value = 1 End Sub Private Sub Check7_Click() Check7.Value = 1 End Sub Private Sub Check8_Click() Check8.Value = 1 End Sub Private Sub Check9_Click() Check9.Value = 1 End Sub Private Sub Command1_Click() 'Limpiar los resultados img0.Picture = LoadPicture("") img1.Picture = LoadPicture("") img2.Picture = LoadPicture("") img3.Picture = LoadPicture("") img4.Picture = LoadPicture("") img5.Picture = LoadPicture("") img6.Picture = LoadPicture("") img7.Picture = LoadPicture("") img8.Picture = LoadPicture("") img9.Picture = LoadPicture("") 'Poner los nmeros en la bola ImageUno.Visible = True ImageDos.Visible = True ImageTres.Visible = True ImageCuatro.Visible = True ImageCinco.Visible = True ImageSeis.Visible = True ImageSiete.Visible = True ImageOcho.Visible = True

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 75

ImageNueve.Visible = True ImageCero.Visible = True 'Inicializar la propiedad Tag img0.Tag = "vacia" img1.Tag = "vacia" img2.Tag = "vacia" img2.Tag = "vacia" img4.Tag = "vacia" img5.Tag = "vacia" img6.Tag = "vacia" img7.Tag = "vacia" img8.Tag = "vacia" img9.Tag = "vacia" 'Limpiar los CheckBox y la imagenes Check1.Caption = "" Check1.Value = 0 imgConejo.Visible = False Check2.Caption = "" Check2.Value = 0 imgOsito.Visible = False Check3.Caption = "" Check3.Value = 0 imgPato.Visible = False Check4.Caption = "" Check4.Value = 0 imgGato.Visible = False Check5.Caption = "" Check5.Value = 0 imgBug.Visible = False Check6.Caption = "" Check6.Value = 0 imgNia.Visible = False Check7.Caption = "" Check7.Value = 0 imgOso.Visible = False Check8.Caption = "" Check8.Value = 0 imgAlce.Visible = False Check9.Caption = "" Check9.Value = 0 imgViejito.Visible = False lblRespuesta.ZOrder 1 'pasar atrs el label

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 76

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 77

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 78

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 79

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 80

Actividad de Aprendizaje 43 Clave de Seguridad

Hay muchas maneras de incluir en un ejercicio cierto control de seguridad a travs de una clave, o password, en esta aplicacin se hace utilizando la propiedad tag del control Text, donde se ingresa. El cdigo es:
Private Sub cmdAceptar_Click() Static Intentos As Integer Dim Espera As Long If UCase(txtPassword.Text) = txtPassword.Tag Then CandadoCerrado.Picture = CandadoAbierto.Picture Image1.Visible = False Refresh Espera = Timer 'Espera 2 seg, muestra el formulario principal While Espera + 2 > Timer Wend 'Descarga esta forma Unload frmClave Form2.Show Else Intentos = Intentos + 1 If Intentos = 3 Then MsgBox "Lo siento...Demasiados intentos", vbCritical, "Acceso Negado" txtPassword.SetFocus End Else MsgBox "Presione OK e intente otra vez", vbInformation, "Clave Incorrecta" txtPassword.SelStart = 0 txtPassword.SelLength = Len(txtPassword) txtPassword.SetFocus End If End If End Sub Private Sub cmdSalir_Click() End End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 81

Actividad de Aprendizaje 44 - Figuras

Este ejercicio de Arrastrar y Soltar muestra otra posibilidad de ejercitacin visual para nios. Las figuras vienen incluidas en el archivo zipeado, para facilitarles el trabajo.El cdigo es el siguiente:
Private Sub Image10_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image1 Then Image10 = Image1 Image1.Visible = False End If End Sub Private Sub Image11_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image2 Then Image11 = Image2 Image2.Visible = False End If End Sub Private Sub Image12_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image3 Then Image12 = Image3 Image3.Visible = False End If End Sub Private Sub Image13_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image4 Then Image13 = Image4 Image4.Visible = False End If End Sub Private Sub Image14_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image5 Then Image14 = Image5 Image5.Visible = False

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 82

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 83

Actividad de Aprendizaje 45 Funcion Mod

Este ejercicio usa las funcines Mod y Format que nos permiten dar formato al valor del tiempo que muestra el cronmetro. Usamos una Label y tres botones para las acciones. El cdigo es:
Dim I As Long 'Contador. Dim Tiempo As String 'Tiempo total transcurrido. Private Sub cmdDetener_Click() Timer1.Interval = 0 End Sub Private Sub cmdIniciar_Click() I = 0 'Inicializar el contador. Timer1.Interval = 0 'Detener el cronometro lblCronometro.Caption = "" 'Limpiar la etiqueta Timer1.Interval = 1 'Iniciar el cronometro End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Timer1_Timer() I=I+1 Tiempo = Format(Int(I / 36000) Mod 24, "00") & ":" & _ Format(Int(I / 600) Mod 60, "00") & ":" & _ Format(Int(I / 10) Mod 60, "00") & ":" & _ Format(I Mod 10, "00") lblCronometro.Caption = Tiempo End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 84

Actividad de Aprendizaje 46 Impresin multilinea

Este ejercicio nos permite imprimir texto respetando el corte de lnea. El formulario contiene una caja de texto con la propiedad ScrollBar en vertical y la propiedad Multiline en True. Y dos botones uno para dar salida por impresora y el otro para cerrar el programa. El cdigo es el siguiente:
Option Explicit Dim i As Integer Private Sub Command1_Click() 'X es 60 en este ejemplo ImprimeLineas Text1, 60 End Sub Private Sub ImprimeLineas(Texto As Object, Linea As Integer) Dim Bloque As String 'Nmero de caracteres = NumC 'Nmero de Bloques= NumB Dim NumC, NumB As Integer NumC = Len(Texto.Text) If NumC > Linea Then NumB = NumC \ Linea For i = 0 To NumB Texto.SelStart = (Linea * 1) Texto.SelLength = Linea Bloque = Texto.SelText Printer.Print Bloque Next i Else Printer.Print Texto.Text End If Printer.EndDoc End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 85

Private Sub Command2_Click() End End Sub

Actividad de Aprendizaje 47 Funcion Mid

Este ejercicio nos permite redondear un nmero decimal, con la cantidad de decimales que deseemos. El cdigo es el siguiente:
Dim Numero As Single Dim Decimales As Long Function RedondearNumero(ByVal Valor As Variant, ByVal Decimales As Integer) As Double Dim Numero1 As Double Dim Numero2 As Double Dim Numero3 As Double Dim Numero4 As Double Dim Frac As Double Dim n As Byte n = InStr(1, Text1.Text, ".") 'posicin en que se encuentra el punto decimal n = Len(Mid(Text1.Text, n + 1)) 'longitud de la cadena de los decimales If Decimales < n Then 'Si el dato de decimales es menor que el No. de decimales del nmero Frac = 10 ^ Decimales Numero1 = Valor * Frac Numero2 = Fix(Valor * -Frac) * -1 Numero3 = Numero1 - Numero2 If Numero3 >= 0.5 Then Numero4 = Int(Numero1 * -1) * -1 Else Numero4 = Fix(Numero1 * -1) * -1 End If RedondearNumero = Numero4 / Frac Else RedondearNumero = Val(Valor) End If End Function Private Sub Command1_Click() Label1.Caption = RedondearNumero(Numero, Decimales) End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 86

Private Sub Form_Load() Numero = 35.347239 Decimales = 2 Text1.Text = Numero Text2.Text = Decimales End Sub Private Sub Text1_Change() If Text1.Text = "" Then Exit Sub If IsNumeric(Text1.Text) Then Numero = Text1.Text Label1.Caption = RedondearNumero(Numero, Decimales) Else MsgBox "El nmero debe ser positivo", vbInformation Text1.SetFocus End If End If End Sub Private Sub Text2_Change() If Text2.Text = "" Then Label1.Caption = "" Exit Sub End If If IsNumeric(Text2.Text) Then Decimales = Text2.Text Label1.Caption = RedondearNumero(Numero, Decimales) Else MsgBox "El nmero debe ser positivo", vbInformation Text2.SetFocus End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If (KeyAscii < 48) Or (KeyAscii > 57) Then 'Para solo permitir nmeros del 0 al 9 If KeyAscii <> 8 Then KeyAscii = 0 'Para aceptar la tecla de retroceso End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 87

Actividad de Aprendizaje 48 Movimiento

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 88

w = Image1.Width h = Image1.Height Call Mover End Sub Private Sub mnIniciar_Click() Label1.Visible = True Image1.Enabled = True 'habilitar la imagen 'Llevar la imagen a la posicin inicial. Image1.Left = 420 Image1.Top = 3060 End Sub Private Sub mnuSalir_Click() End End Sub Private Sub optMediana_Click() If optMediana.Value Then delta = 0.5 End Sub Private Sub optPoca_Click() If optPoca.Value Then delta = 0.05 End Sub Private Sub optRapida_Click() If optRapida.Value Then delta = 1 End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 89

Actividad de Aprendizaje 49 Crear controles

Ahora Visual Basic nos permite, crear controles en tiempo de ejecucin sin necesidad de hacerlo dentro de un array, a partir del primero creado en tiempo de diseo. El cdigo es:
Private WithEvents cmdmiboton As CommandButton Private Sub cmdmiboton_Click() cmdmiboton.Caption = "Me hiciste Clic!" End Sub Private Sub Label2_Click() Set cmdmiboton = Controls.Add("VB.commandbutton", "Button") With cmdmiboton .Visible = True .Width = 3000 .Caption = "Qu Sorpresa!!" .Top = 3000 .Left = 1000 End With Label2.Enabled = False End Sub

Primero hacemos Click en la Label que crea el botn y luego con el Click del botn cambiamos su propiedad Caption.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 90

EJERCICIOS SOBRE FORMULARIOS


Los siguientes ejercicios tratan de usar la mayor cantidad de propiedades y eventos de formularios o acciones y procedimientos referentes a los formularios mas que a los controles.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 91

Actividad de Aprendizaje 50 Imprimiendo con Printer

En este formulario desplegamos datos en cajas de texto y a travs del Boton Imprimir vamos a darle salida a estos datos por la Impresora que el sistema tenga por defecto. Para esto usamos el objeto Printer, que nos permite controlar el texto, cambiar su aspecto, tamao, tipo y color de la fuente y coordenadas.
Private Sub Command1_Click() Printer.Orientation = 1 ' La orientacin del papel es vertical Printer.FontSize = 12 'Tamao de la letra Printer.Print 'Un rengln en blanco o salto de carro Printer.Print Printer.Print Printer.Print Tab(15); Label1.Caption; Tab(30); Text1.Text 'Aqu damos la orden de impresin del caption de la label1 a 15 espacios 'del margen izquerdo y luego a 30 espacios del margen izquierdo el 'contenido del texto. Printer.Print Printer.Print Printer.Print Tab(15); Label2.Caption; Tab(30); Text2.Text Printer.Print Printer.Print Printer.Print Tab(15); Label3.Caption; Tab(30); Text3.Text Printer.Print Printer.Print Printer.Print Printer.Print Tab(15); Label4.Caption; Tab(30); Text4.Text Printer.Print Printer.Print Printer.Print Tab(15); Label5.Caption; Tab(30); Text5.Text Printer.Print Printer.Print Printer.Print Tab(15); Label6.Caption; Tab(30); Text6.Text

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 92

Printer.EndDoc 'damos por terminada la impresin End Sub

Este ejercicio nos permite de una manera simple poder distribuir la impresin de forma personalizada.

Actividad de Aprendizaje 51 Dibujar

Con este ejercicio podrn los alumnos dibujar en tiempo de ejecucin. Podemos agregarles una paleta de colores similar al Paint. En caso de imprimir el dibujo es necesario que la propiedad del Formulario Autoredraw est a True para que el formulario se refresque e imprima el dibujo realizado.
Dim draw As Boolean 'declaramos una variable buleana Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) draw = True 'estamos dibujando CurrentX = X' carga en la variable la ubicacin en la coordenada X CurrentY = Y' carga en la variable la ubicacin en la coordenada Y End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If draw Then Line -(X, Y) ' si la variable draw esta a verdadera 'dibuja cada uno de los puntos. End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) draw = False 'la variable draw a falsa detiene el dibujo End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 93

Actividad de Aprendizaje 52 - Alarma


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

En el formulario tenemos una label para el ttulo y una picture que muestra el icono de un reloj, luego dos cajas de texto donde debemos ingresar la hora del aviso y el texto del mensaje y dos botones uno para cancelar y el otro para activar la aplicacin, obvamente usamos un timer que chequea si la hora ya es la indicada. Al cumplirse la condicin despliega un MsgBox con el mensaje que ingresamos, y mientras se mantiene minimizada la aplicacin para que podamos seguir trabjando con otros programas. El cdigo es :
Option Explicit Dim recordar As String Dim horaActual As Date Private Sub Command1_Click() Timer1.Enabled = True Me.WindowState = 1 End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Activate() Text1.SetFocus End Sub Private Sub Timer1_Timer()

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 94

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

Actividad de Aprendizaje 53 - Artista

Este es un ejercicio muy simple que dibuja puntos en un formulario. Vamos a empezar a ver cierta funciones grficas de visual basic. Lo importante para que se salgan por impresora es que la propiedad AutoRedraw del formulario este a True. Sino no se ven los puntos en la impresin. El cdigo del ejercicio es:
Option Explicit Private Sub Command1_Click() Dim x As Integer Dim y As Integer Dim color As Integer Dim i As Integer For i = 1 To 20 x = Int(ScaleWidth * Rnd) y = Int(ScaleHeight * Rnd) color = Int(16 * Rnd) PSet (x, y), QBColor(color) Next End Sub Private Sub Command2_Click() Cls End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 95

Private Sub Command3_Click() Form1.PrintForm End Sub Private Sub Form_Load() Randomize End Sub

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

Actividad de Aprendizaje 54 - Figuras

En este ejercicio vamos a ver otros mtodos grficos de Visual Basic, que complementan el Punto visto es el ejemplo anterior. Veremos Crculos, Rectngulos y Lneas. Abrimos un nuevo formulario e insertamos 8 botones: 1)Borrar o Limpiar Formulario, 2)Rectas, 3)Rectngulos, 4)Rect Rellenos, 5)Crculos, 6)Crculos Rellenos, 7)Puntos, y 8)Imprimir. En tiempo de ejecucin se ve as: La declaracin general de variables y el cdigo para cada botn es:
Option Explicit Dim x, y, r As Integer Dim x1 As Integer, y1 As Integer Dim x2 As Integer, y2 As Integer Dim color As Integer Dim ccolor As Integer Private Sub Command1_Click()'Botn Rectas 'puntos extremos y color aleatorio x1 = Fix(Me.ScaleWidth * Rnd) y1 = Fix(Me.ScaleHeight * Rnd) x2 = Fix(Me.ScaleWidth * Rnd)

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 96

y2 = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd) Randomize 'trazar una recta Line (x1, y1)-(x2, y2), QBColor(color) 'los dos primeros valores 'establecen un punto extremo y los otros dos el otro punto extemo, 'entre ambos se dibuja la recta. End Sub Private Sub Command2_Click() 'Botn Imprimir por Impresora. Me.PrintForm End Sub Private Sub Command3_Click() 'Botn Rectngulo x1 = Fix(Me.ScaleWidth * Rnd) y1 = Fix(Me.ScaleHeight * Rnd) x2 = Fix(Me.ScaleWidth * Rnd) y2 = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd)'elige al azar un color Randomize FillStyle = 1 'dibuja un cuadro(B) Line (x1, y1)-(x2, y2), QBColor(color), B End Sub Private Sub Command4_Click() 'Botn Rectngulo relleno x1 = Fix(Me.ScaleWidth * Rnd) y1 = Fix(Me.ScaleHeight * Rnd) x2 = Fix(Me.ScaleWidth * Rnd) y2 = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd)Randomize 'dibuja un cuadro(B) Line (x1, y1)-(x2, y2), QBColor(color), BF End Sub Private Sub Command5_Click() 'Borra o Limpia Formulario Cls End Sub Private Sub Command6_Click() 'Botn Crculo relleno 'coordenadas del Centro, Radio y Color, aleatorias x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) r = Fix(1000 * Rnd) color = Fix(16 * Rnd) Randomize FillStyle = 1'rellena el crculo 'dibuja una circunferencia Circle (x, y), r, QBColor(color) End Sub Private Sub Command7_Click() 'Botn Crculo x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) r = Fix(1000 * Rnd) color = Fix(16 * Rnd) ccolor = Fix(16 * Rnd) Randomize FillStyle = 0

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 97

FillColor = QBColor(ccolor) 'dibuja una circunferencia Circle (x, y), r, QBColor(color) End Sub Private Sub Command8_Click() 'Botn Puntos Randomize x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd) PSet (x, y), QBColor(color) 'Dibuja Puntos End Sub

Para dibujar las Rectas debemos indicarle dos valores de: x, e y para uno de los puntos extremos y x1, Y1 para el otro luego con el mtodo Line dibuja una recta que une ambos puntos. Cuando dibuja un rectngulo. Tambin necesita estos valores pero para dibujar dos lneas rectas que luego repite en espejo para formar una Box o Caja, y as aparece el cuadrado o rectngulo. Cuandoq uqeremos que ese rectngulo este relleno la indicacin ser BF o sea Box Fill, o Caja rellena. Para esto la propiedad FillStyle debe estar a True. Y con el Crculo necesitamos un valor para x, y otro para y para establecer un punto que ser el centro de la circunferencia y un valor para el radio. Para determinar los colores lo hacemos usando un Randome y la funcin QBColor.

Actividad de Aprendizaje 55 Imprimir Imagen

Este ejercicio nos muestra como usar el objeto Printer, para darle salida por la impresora a una imagen. El cdigo del botn Imprimir es:
Private Sub Command1_Click() Dim alto As Long Dim ancho As Long With Printer .ScaleMode = vbTwips alto = .ScaleHeight ancho = .ScaleWidth End With alto = alto \ 2 - Picture1.ScaleHeight \ 2 ancho = ancho \ 2 - Picture1.ScaleWidth \ 2

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 98

Printer.PaintPicture Picture1.Picture, ancho, alto, Picture1.ScaleWidth, Picture1.ScaleHeight Printer.EndDoc End Sub

Actividad de Aprendizaje 56 Objeto Printer

En este ejercicio vamos a retomar el objeto Printer, que alguna vez ya habiamos trabajado para darle salida por impresora, a un texto determinado. Ahora veremos modificaciones del tipo de letra, estilo y algunos mtodos graficos, como lneas, rectngulos arcos y crculos. En el procedimiento Click del boton ingresamos el siguiente cdigo:
Option Explicit Dim smensaje As String Dim HWidth As Integer Dim HHeight As Integer Private Sub Command1_Click() Const pi = 3.141592654 'vamos a imprimir dos renglones con un saludo Printer.Print "Hola soy Mirta" Printer.Print "Estamos usando el Objeto Printer" 'si queremos imprimir en una nueva pagina usamos Printer.NewPage 'y para cerrar la impresin Printer.EndDoc 'si queremos cambiar la letra Printer.FontName = "Tahoma" ' para modificar el tamao Printer.FontSize = 14 ' y aqui otras variaciones de estilo With Printer Printer.Print "Impresin Normal" .FontBold = True Printer.Print "Estamos imprimiendo en Negrita" .FontItalic = True Printer.Print "Estamos imprimiendo en Negrita y Cursiva"

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 99

.FontBold = False .FontItalic = False .FontSize = 10 Printer.Print "Volvemos a la impresin Normal y Tamao: 10" End With 'para imprimir el nmero de pgina en el centro podemos usar el siguiente cdigo smensaje = "Pgina " & Printer.Page HWidth = Printer.TextWidth(smensaje) / 2 HHeight = Printer.TextHeight(smensaje) / 2 Printer.CurrentX = Printer.ScaleWidth / 2 - HWidth Printer.CurrentY = (Printer.ScaleHeight - HHeight) - 200 Printer.Print smensaje 'para imprimir funciones grficas con el objeto printer 'Line: necesitamos valores para las dos coordenadas de inicio y de final de la recta Printer.Line (4000, 2500)-(7000, 4000), vbRed 'usando la sintaxix B se convertira en un rectngulo Printer.Line (3000, 4500)-(6000, 6000), vbBlue, B 'para un crculo Printer.Circle (4000, 8000), 1000, vbGreen 'para un medio arco Printer.Circle (8000, 8000), 1000, vbBlue, 0, pi 'si le damos valores negativos dibuja las lneas hacia el centro del crculo. Printer.Circle (4000, 12000), 1000, vbRed, -1, -pi 'y para una elipse Printer.Circle (8000, 12000), 1000, vbBlue, , , 0.5 Printer.EndDoc End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 100

Actividad de Aprendizaje 57 Juego de Memoria

Este ejercicio es una nueva versin del juego de memoria que busca dos imgenes iguales, para que vayan desapareciendo. Le hemos hecho una presentacin y luego el juego en s. El cdigo es el siguiente: Para el formulario de presentacin:
Option Explicit Dim a As Integer Dim tiempo As Integer Private Sub Timer1_Timer() tiempo = tiempo + 1 If tiempo = 30 Then Form1.Show Unload Form2 End If Picture7 = Picture8(a) Picture7.Move Picture7.Left + 200, Picture7.Top + 100 If a >= 2 Then a = 0 Picture6 = Picture5(a) Picture6.Move Picture6.Left - 200, Picture6.Top + 100 If a >= 2 Then a = 0

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 101

Picture1 = Picture2(a) Picture1.Move Picture1.Left - 200, Picture1.Top - 100 If a >= 2 Then a = 0 Picture3 = Picture4(a) Picture3.Move Picture3.Left + 200, Picture3.Top - 100 If a >= 2 Then a = 0 If tiempo = 5 Then Label5.Visible = True ElseIf tiempo = 7 Then Label6.Visible = True ElseIf tiempo = 11 Then Label1.Visible = True ElseIf tiempo = 13 Then Label2.Visible = True ElseIf tiempo = 15 Then Label3.Visible = True ElseIf tiempo = 16 Then Label4.Visible = True End If a=a+1 End Sub

Para el segundo formulario:


Option Explicit Public Bandera As Long 'Para contar las veces que se hace click 'sobre las figuras. Dim Figura(8) As String 'Para guardar las figuras concordantes. Dim Chequear As String 'Para contar las figuras durante la reconstruccin. Dim ctlPrimeraFigura As Control 'Variables de control para la primera Dim ctlSegundaFigura As Control 'y el segunda figura. Dim UnoMostrado As Boolean 'Para llevar la cuenta de los mostrados. Dim AmbosMostrados As Boolean Dim Pares As Integer 'Lleva la cuenta de los pares. Dim Segundos As Long 'Para llevar el tiempo. Dim Puntuacion As Integer 'Para llevar la puntuacin. Dim Inicio As Date Dim I As Integer Sub FigurasVisibles() 'Hace todas las Figuras visibles For I = 1 To 16 picFigura(I - 1).Visible = True Next I End Sub Sub VoltearImagen() 'Voltea las imagenes cargando al Picture picVoltear. For I = 1 To 16 picFigura(I - 1).Picture = picVoltear.Picture

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 102

Next I End Sub Sub HabilitarTodos() 'Habilita todas las Figuras. For I = 1 To 16 picFigura(I - 1).Enabled = True Next I End Sub Sub Verificar() 'Para ver si las dos figuras son iguales. Dim I As Single If ctlPrimeraFigura.Tag = ctlSegundaFigura.Tag Then 'Si las figuras coinciden Pares = Pares + 1 For I = 1 To 10000 'para mostrar las dos figuras un tiempo. ctlPrimeraFigura.Visible = False ctlSegundaFigura.Visible = False Next If Pares = 8 Then 'Si se termin el juego. Timer2.Enabled = False 'Inhabilitar el reloj. lblTiempo.Caption = CStr(Abs(Segundos)) If Segundos < Puntuacion Then MsgBox "Tiempo empleado: " & Segundos & " segundos " & Chr(10) & "Puntuacion : " & CStr(Bandera), vbInformation mnuIniciar_Click End If End If Else AmbosMostrados = True End If End Sub

Sub ChequearFigura() 'Chequea si es la primera o segunda figura que se volteado. If UnoMostrado Then 'si una figura esta visible. Set ctlSegundaFigura = Screen.ActiveControl 'Activa la variable control. Call Verificar UnoMostrado = False Else Set ctlPrimeraFigura = Screen.ActiveControl 'Activa la variable control. ctlPrimeraFigura.Enabled = False UnoMostrado = True End If End Sub Function MezclarFiguras() As Integer 'Genera un nmero aleatorio entre 0 y 7. 'para asignarlo a las figuras. Dim iNumero 'Variable para los nmeros aleatorios.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 103

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 104

picFigura(3).Tag = Figura(MezclarFiguras()) 'aleatoriamente imgenes del arreglo Figuras. picFigura(4).Tag = Figura(MezclarFiguras()) picFigura(5).Tag = Figura(MezclarFiguras()) picFigura(6).Tag = Figura(MezclarFiguras()) picFigura(7).Tag = Figura(MezclarFiguras()) Chequear = "" 'Cadena de revisin vaca. picFigura(8).Tag = Figura(MezclarFiguras()) picFigura(9).Tag = Figura(MezclarFiguras()) picFigura(10).Tag = Figura(MezclarFiguras()) picFigura(11).Tag = Figura(MezclarFiguras()) picFigura(12).Tag = Figura(MezclarFiguras()) picFigura(13).Tag = Figura(MezclarFiguras()) picFigura(14).Tag = Figura(MezclarFiguras()) picFigura(15).Tag = Figura(MezclarFiguras()) MousePointer = 0 'Devuelve el mousepointer a lo normal. Segundos = 0 'Reajusta los segundos. lblTiempo.Caption = "" lblPuntuacion.Caption = "" 'Limpia la puntuacin Timer2.Enabled = True 'Habilitar el reloj. Bandera = 0 'Inicializa el contador Bandera. End Sub Private Sub mnuSalir_Click() End End Sub

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 105

Actividad de Aprendizaje 58 Metodo Line

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 106

Actividad de Aprendizaje 59 Eventos con el Mouse

En esta aplicacin vamos a crear una pequea aventura grfica. Consta de dos formularios. En el primero vamos a hacer Click sobre ciertos objetos que guardamos en el Inventario y luego en el segundo formulario, hacemos Click en los objetos del Inventario y los colocamos en la segunda pantalla, en los lugares correctos. El cdigo del primer formulario es:
Option Explicit Private Sub Image4_Click() MousePointer = 99 MouseIcon = Image4 Image4.MouseIcon = Image4 Image4.Visible = False End Sub Private Sub Image6_Click() MousePointer = 99 MouseIcon = Image6 Image6.MouseIcon = Image6 Image6.Visible = False End Sub Private Sub Image7_Click() MousePointer = 99 MouseIcon = Image7 Image7.MouseIcon = Image7 Image7.Visible = False End Sub Private Sub Image8_Click() MousePointer = 99

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 107

MouseIcon = Image8 Image8.MouseIcon = Image8 Image8.Visible = False End Sub Private Sub Image9_Click() Form2.Show Form1.Hide End Sub Private Sub mnuAyuda_Click() MsgBox " Recog los objetos posibles y coloclos en el Inventario por Orden Alfabtico, hacindo Click", , "Mini Aventura" End Sub Private Sub mnuReiniciar_Click() Unload Form1 Unload Form2 Form1.Show End Sub Private Sub mnuSalir_Click() End End Sub Private Sub Picture1_Click() If MouseIcon = Image7 Then Picture1 = Image7 MouseIcon = Nothing Form2.Picture1.Picture = Image7 End If End Sub Private Sub Picture2_Click() If MouseIcon = Image4 Then Picture2 = Image4 MouseIcon = Nothing Form2.Picture2.Picture = Image4 End If End Sub Private Sub Picture3_Click() If MouseIcon = Image8 Then Picture3 = Image8 MouseIcon = Nothing Form2.Picture3.Picture = Image8 End If End Sub Private Sub Picture4_Click() If MouseIcon = Image6 Then Picture4 = Image6 MouseIcon = Nothing Form2.Picture4.Picture = Image6

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 108

End If End Sub

El cdigo del segundo formulario es:


Option Explicit Private Sub Image5_Click() If MouseIcon = Picture1 Then Image5 = Picture1 MouseIcon = Nothing Image5.MouseIcon = Nothing End If Call corregir End Sub Private Sub Image6_Click() If MouseIcon = Picture3 Then Image6 = Picture3 MouseIcon = Nothing Image6.MouseIcon = Nothing End If Call corregir End Sub Private Sub Image7_Click() If MouseIcon = Picture4 Then Image7 = Picture4 MouseIcon = Nothing Image7.MouseIcon = Nothing End If Call corregir End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 109

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 110

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

Actividad de Aprendizaje 60 Texto 3D

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 111

Form1.Print "Mirta Echeverra" Form1.ForeColor = RGB(255, 255, 255) 'blanco para resaltar Form1.CurrentX = X - 35 ' coloca la zona a resaltar en la parte superior izquierda Form1.CurrentY = Y - 45 Form1.Print "Diseo y Programacin:" Form1.CurrentX = 1500 Form1.Print "Mirta Echeverra" Form1.ForeColor = vbBlue Form1.CurrentX = X - 25 ' imprime entre el resaltado y la sombra Form1.CurrentY = Y - 35 Form1.Print "Diseo y Programacin:" ' imprime en azul Form1.CurrentX = 1500 Form1.Print "Mirta Echeverra" End Sub Private Sub Form_Load() Call texto3d Call recuadro End Sub

Actividad de Aprendizaje 61 Carita

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 112

'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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 113

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 114

Actividad de Aprendizaje 62 Validar un texto

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 115

EJERCICIOS SOBRE CONTROLES ACTIVEX


Los siguientes ejercicios se centran en mas controles de Visual Basic llamados tambien controles ActiveX. Algunos de estos controles no aparecen en la barra de herramientas del IDE de VB, y hay que agregarlos primeros. Aqu se vera el poder que tiene este lenguaje al incorporar nuevos controles para realizar diferentes caracteristicas

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 116

Actividad de Aprendizaje 63 Animacion del osito

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 117

Private Sub Form_Load() A = 9 ' Inicializamos la variable en 9. End Sub Private Sub Timer_Timer() A=A-1 If A = 0 then A = 8 'Al llegar al frame 0 vuelve a empezar Picture1.Picture = PictureClip1.GraphicCell(A) Picture1.Move Picture1.Left + 50, Picture1.Top + 50 'Mueve en diagonal End Sub

Comenzamos con una variable = 9 porque los frames del osito deben disminuir y no aumentar sino d la impresin de caminar al revs. Una propiedad fundamental del PictureClip es la GraphicCell ya que ella automatiza la divisin de la grilla(imagen total) en partes(frames). En este caso en el Move usamos los dos argumentos el Left y el Top de la imagen , propiedades que indican la ubicacin de sta en relacin al borde izquierdo (coordenada x) y al borde superior (coordenada y). Lo que permitir que el oso se mueva en diagonal. En la explicacin slo est detallado el movimiento del oso, en el formulario vemos agregadas otros controles Line e Image simulando una calle, un semforo y una seal de Stop, como para darles una idea de lo que podran agregar a la escena.

Actividad de Aprendizaje 64 Control para animacion

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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 118

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

Actividad de Aprendizaje 65 Barra de herramientas

Este ejercicio nos permite mostrar una barra de herramientas al clsico estilo Windows. Usando el control Toolbar y el control ImageList para desplegar las imgenes en los botones de la barra de herramientas, tambin nos permite crear una barra de status con tres paneles, compuesta por tres paneles. Estos controles forman parte de Microsoft Windows Common Controls 5.0 que debemos agregar de Componentes en la versin profesional de Visual Basic 5. Luego de crear sobre el Formulario la barra de status, con el botn derecho del mouse seleccionamos propiedades y all en la pestaa paneles vamos eligiendo cuantos queremos y cual ser su mensaje. En el control ImageList seleccionamos con el botn derecho del mouse propiedades y cargamos las imgenes que componen este repositorio de imgenes para luego por cdigo relacionarlas con los botones de la ToolBar.
Private Sub Form_Load() Toolbar1.ImageList = ImageList1 'en el procedimiento load asociamos el control Imagelist a la Toolbar End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button) Select Case Button.Key

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 119

Case Is = "camara" MsgBox "Esto es una camara" Set Image1.Picture = ImageList1.ListImages(1).Picture Case Is = "dibujo" MsgBox "Eso es para dibujar" Set Image1.Picture = ImageList1.ListImages(2).Picture Case Is = "nuevo" MsgBox "Esto abre un archivo nuevo" Set Image1.Picture = ImageList1.ListImages(3).Picture Case Is = "abrir" MsgBox "Esto abre un archivo existente" Set Image1.Picture = ImageList1.ListImages(4).Picture Case Is = "imprimir" MsgBox "Esto Imprime" Set Image1.Picture = ImageList1.ListImages(5).Picture End Select End Sub

En el procedimiento click de laToolbar mediante un Select Case asociamos cada botn a una imagen distinta de la ImageList y al cliquear desencadenamos la funcin MsgBox que nos identifica el botn al que nos referimos. Aqu juega un papel importante la propiedad Key que identifica a la imagen, como nica y no puede repetirse. La sentencia Set determina la asociacin entre los controles, fijndola.

Actividad de Aprendizaje 66 Animacion 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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 120

Hoy sumamos el Mtodo PaintPicture que dibuja una imagen sobre un fondo , pero al combinar mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen: la mscara y el sprite o animacin en s permite trasparentar el fondo. En este caso vamos a desplegar la animacin sobre un control Picture con una imagen de fondo, pero podemos hacerlo sobre el formulario y cargar en este una imagen. Lo que debemos tener en cuenta es que el objeto sobre el que se despliega la animacin debe estar la propiedad ScaleMode en Pixel y no en Twips como lo es por defecto. Las constantes para desplegar mtodos grficos como SRCAnd y SRCINvert deben declararse en la parte General del Formulario. Pueden copiarse a mano o a travs del Visor de Apis. Usamos dos controles PictureClip uno para la mscar y otro para el Sprite (Ver Controles favoritos: PictureClip). Un Timer para desplegar la secuencia de los frames que componen la grilla en este caso la imagen completa del perro se compone de 4 columnas y 1 fila. Y un CommandButton que regula el inicio y fin de la animacin.
Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR dest Const SRCCOPY = &HCC0020 ' (DWORD) dest = origen Private Sub Command1_Click() If Command1.Caption = "Animacin" Then Timer1.Enabled = True Picture1.Refresh 'esta propiedad Refresh es muy importante ya que refresca el fondo para 'cambiar de cuadro en la secuencia. Command1.Caption = "Detener" Else Timer1.Enabled = False Command1.Caption = "Animacin" End If End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() PictureClip1.Cols = 4 PictureClip1.Rows = 1 PictureClip2.Cols = 4 PictureClip2.Rows = 1 'Es mejor determinar la composicin de la grilla por cdigo ya que a veces 'al salir del programa el control Pictureclip no retiene los valores de la 'ventana de propiedades y vuele a su 1 a 1 por defecto. End Sub Private Sub Timer1_Timer() Picture1.Refresh Dim x As Single, y As Single Static imagenactual As Integer

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 121

Static xactual As Integer If imagenactual > 3 Then imagenactual = 0 If imagenactual < 0 Then imagenactual = 0 If xactual > 500 Then xactual = 0 If xactual < 0 Then xactual = 0 'Estos condicionales regulan la secuencia de los cuadros de la animacin, 'reinicindola y el movimiento cuando se escapa de la picture 'posicionndose otra vez al comienzo del margen izquierdo. Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCAND 'esta sintaxis debe estar en un solo rengln Picture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCINVERT 'esta sintaxis debe estar en un solo rengln imagenactual = imagenactual + 1 'avanza un cuadro la secuencia xactual = xactual + 20 ' se mueve 20 pixels a la derecha. End Sub

Actividad de Aprendizaje 67 Internet

Este ejercicio nos permite mediante un evento click sobre un botn conectarnos con un sitio web determinado, incorporando el control WebBrowser, este control no es estndar y lo debemos traer de Componentes, Microsoft Internet Control.
Private Sub Command1_Click() WebBrowser1.Navigate "http://www.yahoo.com" 'WebBrowser1.GoHome End Sub

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 122

Actividad de Aprendizaje 68 Un navegador

Otro ejercicio usando el control WebBrowser, en este caso creamos un Navegador muy simple. Con el control Toolbar asociado al ImageList creamos una barra de herramientas, esto ya lo hemos visto en otros ejercicios. Por lo tanto nos centraremos en otras propiedades del WebBrowser. Una caja de texto contiene la URL o direccin del sitio a visitar. Y una barra de estado o StatusBar dividida en tres paneles despliega: un mensaje, la hora y la fecha respectivamente. El cdigo es el siguiente:
Private Sub Command1_Click() ' este control est oculto If Text1.Text <> "" Then WebBrowser1.Navigate Text1.Text If WebBrowser1.Visible = False Then WebBrowser1.Visible = True End If End If End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 'equivale a la tecla Enter Command1_Click End If End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button) Select Case Button.Key Case "back" 'se identifica por la Key On Error Resume Next WebBrowser1.GoBack 'Retrocede Case "forward" On Error Resume Next WebBrowser1.GoForward 'Adelanta Case "home" Text1.Text = "http://www.geocities.com/SiliconValley/Garage/6472" Command1_Click Case "refresh" WebBrowser1.Refresh 'actualiza o refrezca Case "stop" WebBrowser1.Stop 'detiene la bsqueda End Select

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 123

End Sub Private Sub WebBrowser1_DownloadBegin() StatusBar1.Panels(1).Text = "Cargando Pgina..." End Sub Private Sub WebBrowser1_DownloadComplete() StatusBar1.Panels(1).Text = "Listo" End Sub

Actividad de Aprendizaje 69 Combinando sonidos

El siguiente ejercicio muestra como usar el control multimedia para desplegar sonidos de tipo Midi o Wave e incluso poder superponer un sonido a otro: Cuando se abre el formulario se ejecuta el archivo Midi y si nosotros hacemos Clic sobre el botn Wave escuchamos los gritos de Tarzan por encima de la msica de fondo que se sigue ejecutando. Esto nos resulta til para ciertas aplicaciones donde queremos dejar una msica de fondo, o entretenimientos que combinan sonidos.
Private Sub Command2_Click() 'Botn wave MMControl2.Command = "Prev" MMControl2.DeviceType = "WaveAudio" 'establece el tipo de 'sonido MMControl2.filename = App.Path & "\Tarzan.wav"' muestra el 'camino MMControl2.Command = "Open" 'lo abre MMControl2.Command = "Play" ' lo ejecuta End Sub Private Sub Command3_Click() ' Botn Midi MMControl1.Command = "Prev" MMControl1.DeviceType = "Sequencer"' tipo de sonido MMControl1.filename = App.Path & "\Thefinal.mid" 'camino MMControl1.Command = "Open" 'lo abre MMControl1.Command = "Play" lo ejecuta End Sub

Debemos traer de Componentes el control Multimedia y poner todos sus botones a falsos e invisibles. Luego asociamos por cdigo a cada control el archivo correspondiente, en este caso uno para el
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 124

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

Actividad de Aprendizaje 70 Control Multimedia


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

Lo original de este ejercicio es que el archivo al ejecutarse no lo hace en otra ventana, sino en un control Picture. El cdigo es el siguiente:
Private Sub video() MMControl1.DeviceType = "AVIVideo" MMControl1.filename = App.Path & "\ugachaka.Avi" MMControl1.Command = "open" MMControl1.hWndDisplay = Picture1.hWnd MMControl1.Command = "play" End Sub Private Sub Command1_Click() Call video End Sub

Primero creamos un procedimiento llamado video y all volcamos las indicaciones de la ejecucin, pero Atencin! Usamos la propiedad Handle Window para manipular en que objeto se ejecuta el avi. Windows identifica as que queremos que se despliegue en la picture, a traves de la propiedad hWnd del control multimedia y de hWnd del control Picture.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 125

Actividad de Aprendizaje 71 Barra de porcentaje

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 126

Actividad de Aprendizaje 72 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.

Actividad de Aprendizaje 73 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.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 127

Actividad de Aprendizaje 74 - Transicion

En este ejercicio vamos a usar un ActiveX que permite hacer efctos de transicin entre varias imagenes, es un shareware, bajado de Internet, muy fcil de usar. El form se ve as: El cdigo es el siguiente:
Option Explicit Public pc, i As Integer Private Sub Command1_Click() Do DoEvents TransFX1.Effect = i TransFX1.Start Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg") pc = pc + 1: If pc > 3 Then pc = 1 i = i + 1: If i = 13 Then i = 1 Loop End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() pc = 1 i=1 Set TransFX1.PicTarget = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg") Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc + 1) & ".jpg") End Sub

Las propiedades principales son: PicTarget que es la primera imagen que carga y PicBuffer las siguientes, como minimo debemos tener 2 imagenes , pero podemos cargar varias ms. Y el mtodo Start que lo inicia, podramos usar un timer pero en este caso es un bucle el que repite la operacin pasando entre los 15 efectos posibles que permite el control. Por cualquier duda incluyo el archivo de Ayuda del creador del activeX.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 128

Actividad de Aprendizaje 75 - Patos

Este es otro ejemplo de animacin usando el mtodo PaintPicture combinado con el control pictureClip y aplicando las constantes grficas que permiten transparentar el fondo.
Option Explicit Const SRCAND = &H8800C6 Const SRCINVERT = &H660046 Private Sub Form_Load() PictureClip1.Rows = 3 PictureClip1.Cols = 3 PictureClip2.Rows = 3 PictureClip2.Cols = 3 End Sub Private Sub Timer1_Timer() Form1.Refresh Dim x As Single, y As Single Static imagenactual As Integer Static imagenactual1 As Integer Static xactual As Integer Static xactual1 As Integer If imagenactual > 5 Then imagenactual = 3 If imagenactual < 2 Then imagenactual = 2 If imagenactual1 > 2 Then imagenactual1 = 0 If imagenactual1 < 0 Then imagenactual1 = 0 If xactual > 1000 Then xactual = 10 If xactual < 0 Then xactual = 10 If xactual1 > 1000 Then xactual = 1000 If xactual1 <= 0 Then xactual1 = 1000 Form1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 120, , , , , , , SRCAND Form1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 120, , , , , , , SRCINVERT Form1.PaintPicture PictureClip2.GraphicCell(imagenactual1), xactual1, 250, , , , , , , SRCAND Form1.PaintPicture PictureClip1.GraphicCell(imagenactual1), xactual1, 250, , , , , , , SRCINVERT

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 129

imagenactual = imagenactual + 1 imagenactual1 = imagenactual1 + 1 xactual = xactual + 100 xactual1 = xactual1 - 100 End Sub

Actividad de Aprendizaje 76 Un conejo animado

Tenemos en el formulario cinco controles: dos PictureClip para cargar las grillas del Sprite y su mscara, dos botones que activan y desactivan el Timer y un Timer para repetir la secuencia del conejo caminando. El cdigo es el siguiente:
Option Explicit Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR 'dest Dim cone As Integer Dim a As Integer Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Form_Load() PictureClip1.Cols = 6 PictureClip1.Rows = 1 PictureClip2.Cols = 6 PictureClip2.Rows = 1 End Sub Private Sub Timer1_Timer() Picture1.Refresh Static x, y, i As Integer cone = cone + 1 If cone >= 6 Then cone = 0

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 130

Picture1.PaintPicture PictureClip1.GraphicCell(cone), x, 50, , , , , , , SRCAND ' para la mascara Picture1.PaintPicture PictureClip2.GraphicCell(cone), x, 50, , , , , , , SRCINVERT ' para la imagen(animacin) x = x + 60 If x >= 570 Then x = 0 End If End Sub

Actividad de Aprendizaje 77 - Media Player MP3

En este ejercicio vamos a ejecutar archivos MP3 usando el control Media Player. Que debemos traer de componentes, y por supuesto tenerlo instalado en nuestro sistema a una de sus ltimas versiones. Los controles que usamos son: un Media palyer, los tres controles tipicos para manipular archivos : DriveListBox, el DirListBox y el FileListBox, dos botones y dos labels con un timer que daran cuenta del tiempo total y parcial del archivo. El cdigo es:
Option Explicit Dim Min As Integer Dim Sec As Integer Dim Nombrearchivo As String Dim Abrirarchivo As Boolean Private Sub Command2_Click()'Boton salir End End Sub Private Sub Command4_Click()'Boton Abrir y cerrar el archivo MP3 With MediaPlayer1 If Not Abrirarchivo Then .FileName = Nombrearchivo .AutoStart = False Command4.Caption = "Cerrar" Else .FileName = "" Command4.Caption = "Abrir" End If End With End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 131

Private Sub Dir1_Change()'selecciona el directorio File1.FileName = Dir1.Path End Sub Private Sub File1_Click()'selecciona el archivo MP3 If Right(Dir1.Path, 1) = "\" Then Nombrearchivo = Dir1.Path & File1.FileName Else Nombrearchivo = Dir1.Path & "\" & File1.FileName End If End Sub

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

Para que muestre solo los archivos MP3 en la propiedad Pattern del FileListBox: ingresamos "*.MP3"

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 132

Actividad de Aprendizaje 78 - Recipiente

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

Private Sub Form_Load() VolumenInicial = 0 'Inicializar el volumen Text1.Text = 0 End Sub Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) 'Para cerrar con el label el agua de la llave Static VolumenInicial As Integer Static VolumenFinal As Integer VolumenFinal = 10 - Slider1.Value If VolumenFinal < VolumenInicial Then lblAgua.Visible = True 'Cerrar la llave. VolumenInicial = VolumenFinal Else lblAgua.Visible = False 'Abrir la llave. VolumenInicial = VolumenFinal End If 'Pasar el valor del Slider al TextBox Text1.Text = 10 - (Slider1.Value) End Sub Private Sub Text1_Change() 'Si esta vacio el TextBox esperar entrar datos. If Text1.Text = "" Then Slider1.Value = 10 - Val(Text1.Text) Gauge1.Value = 0 Text1.SetFocus Exit Sub End If

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 133

'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

Actividad de Aprendizaje 79 - TreeView

Este ejercicio muestra el uso de un control llamado TreeView, que debemos traer de componentes del conjunto Microsoft controles. Combinado con un mapa de la Isla de Cuba, para mostrar el nombre de cada provincia y su ubicacin. El cdigo es:
Option Explicit 'Dibuja el nombre de Cuba en Relieve en el Formulario. Function EnRelieve(nombre As Form, A$, x, y) nombre.CurrentX = x nombre.CurrentY = y nombre.ForeColor = QBColor(15) nombre.Print A$ nombre.CurrentX = x + 8 nombre.CurrentY = y + 10 nombre.ForeColor = QBColor(2) nombre.Print A$ Form1.Show End Function

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 134

Private Sub Form_Activate() 'Para dibujar en relieve en el formulario el nombre de Cuba. Call EnRelieve(Form1, "Cuba", 6500, 400) End Sub Private Sub Form_Load() ' Este cdigo crea un rbol con objetos Node. TreeView1.Style = tvwTreelinesPlusMinusText ' Estilo 6. TreeView1.LineStyle = tvwRootLines 'Estilo de lnea 1. ' Agrega varios objetos Node. Dim nodX As Node ' Crea variable. 'Nodo Principal con la Clave Provincia y el Nombre Provincias Set nodX = TreeView1.Nodes.Add(, , "Provincia", "Provincias") Set nodX = TreeView1.Nodes.Add(, , "MunicipioEspecial", "Municipio Especial") Set nodX = TreeView1.Nodes.Add("MunicipioEspecial", tvwChild, "IslaJuventud", "Isla de la Juventud") 'Nodos Secundarios con el nombre de las provincias. Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Pinar del Rio", "Pinar del Rio") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "La Habana", "La Habana") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciudad Habana", "Ciudad Habana") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Matanzas", "Matanzas") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Villa Clara", "Villa Clara") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Cienfuegos", "Cienfuegos") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santi Spiritus", "Santi Spiritus") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Ciego de Avila", "Ciego de Avila") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Camaguey", "Camaguey") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Las Tunas", "Las Tunas") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Holguin", "Holguin") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Granma", "Granma") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Santiago de Cuba", "Santiago de Cuba") Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Guantanamo", "Guantanamo") 'Set nodX = TreeView1.Nodes.Add("Provincia", tvwChild, "Isla de la Juventud", "Isla de la Juventud") nodX.EnsureVisible ' Muestra todos los nodos. End Sub Private Sub mnuNuevo_Click() lblPinarDelRio.Visible = False lblLaHabana.Visible = False lblCiudadHabana.Visible = False lblMatanzas.Visible = False lblVillaClara.Visible = False lblCienfuegos.Visible = False lblSantiSpiritus.Visible = False lblCiegoDeAvila.Visible = False lblCamaguey.Visible = False lblLasTunas.Visible = False lblHolguin.Visible = False lblGranma.Visible = False lblSantiagoDeCuba.Visible = False lblGuantanamo.Visible = False lblIslaJuventud.Visible = False End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 135

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 136

Actividad de Aprendizaje 80 Musica

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 137

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

Actividad de Aprendizaje 81 - Video

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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 138

Private Sub cmdParar_Click() MMControl1.Command = "stop" MMControl1.Command = "close" End Sub Private Sub cmdPausa_Click() MMControl1.Command = "pause" End Sub Private Sub Dir1_Change() 'Para que aparezcan slo los archivos de ese directorio. File1.Path = Dir1.Path End Sub Private Sub Form_Load() MMControl1.DeviceType = "avivideo" MMControl1.Command = "close" MMControl1.hWndDisplay = Picture1.hWnd End Sub

Actividad de Aprendizaje 82 Calculo de interes

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

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

El cdigo del Mdulo es:


Option Explicit Public Function CalcPago(capital As Currency, ao As Integer, interes As Single, cuota As Currency) As Boolean On Error GoTo repararerror 'dimensiona la variable como objeto Dim excelapp As Object ' el tipo de apliacin es Excel Const hdExcelObject = "Excel.Application" Screen.MousePointer = vbHourglass CalcPago = False ' crea la aplicacin en Excel donde se realizar el Clculo Set excelapp = CreateObject(hdExcelObject) 'llama al mtodo pmt de Excel cuota = excelapp.Pmt((interes / 100) / 12, ao * 12, -1 * capital) excelapp.quit Set excelapp = Nothing CalcPago = True Screen.MousePointer = vbDefault Exit Function repararerror: ' determina el tipo de error Select Case Err.Number Case 429 MsgBox "Imposible crear un Aplicacin OLE con Excel." + vbCrLf + " Est seguro de tener una Versin de Excel superior a la 5, y bien instalada?", vbCritical, "Clculo de pago de Cuotas" Case Else MsgBox "Error #" + Str(Err.Number) + ":" + Err.Description + ".", vbCritical, "Clculo de pago de Cuotas" End Select Screen.MousePointer = vbDefault End Function

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 140

Actividad de Aprendizaje 83 Nuevos controles MonthView y DTPicker

Estos dos controles: el MonthView y el DTPicker son controles especiales que trae la versin 6 y que podemos traer de Componentes, seleccionando Microsoft Windows Common Controls - 2 6.0, y como vemos nos despliegan hora y fecha y un calendario que podemos recorrer.

Actividad de Aprendizaje 84 ImageCombo

Este nuevo control pertenece al grupo de componentes: Microsoft Windows Common Controls 6.0. Y nos permite desplegar imgenes adems de texto en un Combo desplegable.
Private Sub Command1_Click() Static i% 'un contador de numeros enteros Static imgi% 'un indice para las imagenes del control ImageList Dim comboimage As ComboItem 'variable de tipo objeto para 'declarar un comboItem 'Agrega una referencia al objeto comboItem usando el metodo 'Add Set comboimage = ImageCombo1.ComboItems.Add 'agrega un texto ImageCombo1.ComboItems.Add , , "Soy el item N " & CStr(i%) ImageCombo1.Text = "Soy el Item N " & CStr(i%) 'agrega un 'grafico comboimage.Image = imgi% + 1 'controlar que no se exceda de 'la cantidad de images del ImageList

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 141

If imgi% = ImageList1.ListImages.Count - 1 Then imgi% = 0 Else imgi% = imgi% + 1 End If 'incrementa la variable contadora i% = i% + 1 End Sub Private Sub Form_Activate() ImageCombo1.ImageList = ImageList1 End Sub

Actividad de Aprendizaje 85 - Coolbar

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

En el caso de la Lista le agregamos distintos Items a travs del Mtodo AddItem en tiempo de ejecucin.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 142

Actividad de Aprendizaje 86 Barra de progreso

Este ejercicio nos muestra el uso de una barra de progreso que podemos usar mientras se realiza la carga de un archivo o en otro momento de espera hasta que se complete una tarea. El cdigo es el siguiente:
Option Explicit Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() 'Inicializamos el timer para que este apagado Timer1.Enabled = False End Sub Private Sub cmdComenzar_Click() 'Inicializamos la barra de progreso, y comenzamos el Timer Progreso.Value = 0 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() 'Si el progreso todava no termina, seguir aumentando Value hasta 100 With Progreso If .Value < .Max Then .Value = .Value + 1 Else 'Termino MsgBox "Proceso Terminado", , "Barra de Progreso" 'Deshabilitamos el Timer Timer1.Enabled = False End If End With End Sub

Aqu usamos with para referirnos al control y no tener que repetir su nombre. Esto es muy til cuando debemos modificar los valores de varias propiedades por cdigo de un mismo control.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 143

Actividad de Aprendizaje 87 Barra de estado

Un ejemplo de como modificar en tiempo de ejecucin la Barra de estado. En el formulario tenemos una caja de texto donde ingresamos el texto a desplegar y luego en el click de un botn lo asignamos al panel de la barra correspondiente. El cdigo correspondiente es:
Private Sub cmdAceptar_Click() StatusBar1.Panels("Texto").Text = txtPanel End Sub

Como vemos es muy sencillo, para asignarle un valor al panel correspondiente debemos identificarlo con el nombre del mismo, determinado en la ventana propiedades, para tener acceso al mismo debemos hacer click con el boton derecho sobre el control y alli podemos configurar los distintos paneles.

Actividad de Aprendizaje 88 - Pestaas

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 144

End Sub Private Sub Label1_Click() Text1.Text = "Aqui podemos cargar un texto con formato richtextbox, sobre el Tema 1." SSTab1.Tab = 1 End Sub Private Sub Label4_Click() Picture1.Picture = Picture2 SSTab1.Tab = 2 End Sub Private Sub Label5_Click() Text1.Text = "Aqui podemos cargar un texto con formato richtextbox, sobre el Tema 2." SSTab1.Tab = 1 End Sub Private Sub Label6_Click() Picture1.Picture = Picture3 SSTab1.Tab = 2 End Sub

Como vemos lo importante es la propiedad Tab y la asignacin del indice del panel de l control que queremos mencionar.

Actividad de Aprendizaje 89 - ListView

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 145

El cdigo es el siguiente:
Option Explicit Function NroAzar(Min As Integer, Max As Integer) As Integer NroAzar = Int((Max - Min + 1) * Rnd + Min) End Function Private Sub cmdAgregar_Click() Dim Nuevo As ListItem Dim IndiceIcono As Integer 'Elegir un icono al azar para el elemento IndiceIcono = NroAzar(1, ilIconos.ListImages.Count) 'Agregar el nuevo elemento, y asignarle el icono elegido Set Nuevo = lvwPersonas.ListItems.Add(, , txtNombre, IndiceIcono, IndiceIcono) Nuevo.SubItems(1) = txtEdad Nuevo.SubItems(2) = txtSexo Nuevo.SubItems(3) = txtTelefono End Sub Private Sub cmdEliminar_Click() lvwPersonas.ListItems.Remove lvwPersonas.SelectedItem.Index End Sub Private Sub cmdSalir_Click() End End Sub Private Sub optVista_Click(Index As Integer) 'Cambiamos el tipo de vista en View lvwPersonas.View = Index End Sub

Elegimos un Icono al azar de un ImageList el texto lo ingresamos a traves de las Cajas de Texto. Tenemos dos botones con la opcion de Agregar y de Borrar, los ingresos. Y Botones de Opcion para seleccionar la propiedad View de la Lista acorde al Indice del option Button. los iconos que se muestran en los encabezados fueron asignados al ingresar el Nombre de las columnas y asociando la propiedad Icon Index a los Iconos de la ImageList ilColumnas. o sea que tenemos dos controles ImageList.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 146

Actividad de Aprendizaje 90 - TreeView

Este ejercicio muestra un tipico arbol de archivos de windows con su raz principal y sus derivados. Acompaado de Iconos tomados tambin de un control ImageList. El mtodo Add, agrega un Nodo al arbol de Archivos. El cdigo es:
Option Explicit Private Sub Arbol_Click() lblActual = Arbol.SelectedItem.Text End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() Dim i As Integer Arbol.Nodes.Add , , "Raiz", "Nodo raiz", 1 For i = 1 To 3 Arbol.Nodes.Add "Raiz", tvwChild, "Hijo " & i, "Hijo " & i, (i + 1) Next i Arbol.Nodes.Add "Hijo 1", tvwChild, "Nieto 1", "Nieto 1", 5 Arbol.Nodes.Add "Nieto 1", tvwNext, "Nieto 2", "Nieto 2", 6 Arbol.Nodes.Add "Nieto 1", tvwPrevious, "Nieto 0", "Nieto 0", 7 End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 147

Actividad de Aprendizaje 91 Control Chart

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 148

'Establece la cantidad de filas MSChart1.RowCount = 3 'asigna la cantidad de columnas de color MSChart1.ColumnCount = 3 'Puedo asignar un valor determinado a la columna de color de una fila en este caso la verde. MSChart1.Row = 3 MSChart1.Column = 2 MSChart1.data = 34 'Le cambia el texto a la Primer fila o row MSChart1.Row = 1 MSChart1.RowLabel = "Primera Fila" 'Le cambio el texto a la etiqueta del color azul, teniendo la propiedad ShowLegend a True MSChart1.ShowLegend = True MSChart1.Column = 3 MSChart1.ColumnLabel = "Azul" 'Le agrego un texto al pie del grafico MSChart1.FootnoteText = "Este es el pie del grfico." 'Le agrego un Ttulo. MSChart1.TitleText = "Grfico MSChart" 'Puedo cambiar el tipo de letra del titulo y del Pie de grafico With MSChart1.Title.VtFont .Name = "Arial" .Style = VtFontStyleBold .Effect = VtFontEffectUnderline .Size = 14 .VtColor.Set 0, 0, 255 End With With MSChart1.Footnote.VtFont .Name = "arial" .Style = VtFontStyleBold .Effect = VtFontEffectUnderline .Size = 10 .VtColor.Set 125, 150, 155 End With 'Con la propiedad ChartType podemos cambiar el tipo de grafico. 'Por ejemplo: vtChChartType3dBar: es un grafico de Barras en 3D. 'Tambien podemos crear un array de 2 dimensiones (una tabla) y graficarla. For i = 1 To 5 For m = 1 To 3 data(i, m) = Rnd * 100 Next m Next i MSChart1.ChartData = data End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 149

Actividad de Aprendizaje 92 DHTML: Hola Mundo

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 150

Vamos a dibujar un control image, un botn y una caja de texto, modificamos sus propiedades a travs de la ventana propiedades, y luego codificamos en la ventana cdigo, la sintxis es la siguiente:
Private Function Button1_onclick() As Boolean Image1.border = 4 TextField1.Value = "Hola mundo" End Function

Los procedimientos aqu se llamarn funciones. Y la caja de texto en lugar de Caption tiene una propiedad llamada Value. Y la funcin no es Click sino onClick.

Actividad de Aprendizaje 92 DHTML: Operaciones

Ahora vamos a hacer una calculadora simple de operaciones matemticas. Abrimos un nuevo proyecto DHTML y dibujamos una tabla con etiquetas y cajas de texto y cinco botones. En tiempo de ejecucin se ve como la imagen de la izquierda. Y la codificacin es la siguiente:
Dim numero1 As Integer Dim numero2 As Integer Private Sub BaseWindow_onload() TextField1.Select End Sub Private Function Button1_onclick() As Boolean numero1 = TextField1.Value numero2 = TextField2.Value TextField3.Value = Val(numero1 + numero2)

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 151

End Function Private Function Button2_onclick() As Boolean numero1 = TextField1.Value numero2 = TextField2.Value TextField3.Value = Val(numero1 - numero2) End Function Private Function Button3_onclick() As Boolean numero1 = TextField1.Value numero2 = TextField2.Value TextField3.Value = Val(numero1 * numero2) End Function Private Function Button4_onclick() As Boolean numero1 = TextField1.Value numero2 = TextField2.Value TextField3.Value = Val(numero1 / numero2) End Function Private Function Button5_onclick() As Boolean TextField1.Value = "" TextField2.Value = "" TextField3.Value = "" End Function

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 152

EJERCICIOS SOBRE FUNCIONES


Los siguientes ejercicios muestran como utiilzar y crear funciones propias dentro de Visual Basic.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 153

Actividad de Aprendizaje 93 Juego Ranita

Este ejercicio es un juego muy simple que al hacer click en los insectos, si estan prximos a la rana, sta simula comerlos y suma un puntaje. Los insectos se mueven en forma aleatoria mediante un random y los ojos de la ranita tienen una animacin, donde se abren y cierran, adems de los controles Images, tenemos dos labels transparentes, una que muestra el puntaje y otra que resetea la aplicacin. Y el sonido est activado usando la API sndPlaySound de windows. El cdigo es el siguiente:
Option Explicit Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_ASYNC = &H1 ' reproduccin asncrona Const SND_NODEFAULT = &H2 ' silencio no predeterminado, si no se encuentra sonido Private ret As Integer Private contar As Integer Private a As Integer Private b As Integer Private tiempo As Integer Private Sub pausa() Dim comenzar Dim controlar comenzar = Timer Do Until controlar >= comenzar + 1 controlar = Timer DoEvents Loop End Sub Private Sub Form_Load() Randomize b = 0 End Sub Private Sub Image6_Click(Index As Integer) Image6(Index).Visible = False

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 154

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 155

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.

Actividad de Aprendizaje 93 Semaforo

Esta es una simulacin del funcionamiento de un semforo. No incluye ningn tipo de interactividad es solo para observar cuando debe cruzarse la calle, viendo como lo hace el hombrecito. El cdigo es:
Option Explicit Private Sub pausa() Dim comenzar Dim controlar comenzar = Timer Do Until controlar >= comenzar + 2 controlar = Timer DoEvents Loop End Sub Private Sub Command1_Click() End End Sub Private Sub Timer1_Timer() Picture1.Move Picture1.Left, Picture1.Top + 150 'con el condicional controla el reposicionarse. If Picture1.Top > 7000 Then Picture1.Top = -300

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 156

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 157

Picture3.Picture = Picture8.Picture Timer1.Interval = 150 Call pausa End Sub Private Sub Timer3_Timer() Image1.Move Image1.Left + 100 End Sub

Actividad de Aprendizaje 94 Pausa

En este ejercicio vamos a crear un procedimiento llamado Pausa para poder hacer una interrupcin en la ejecucin del cdigo de una Aplicacin. As se ver una animacin que muestra la aparicin de las letras con un intrvalo. Usamos un bucle que toma el tiempo desde el reloj del sistema. El cdigo es:
Private Sub pausa() Dim comenzar Dim chequeo comenzar = Timer Do Until chequeo >= comenzar + 1 chequeo = Timer DoEvents 'esto hace que windows escuche otras acciones Loop End Sub Private Sub Form_Activate() Call pausa 'llama al procedimiento Label1.Visible = True Call pausa Label2.Visible = True call pausa Label3.Visible = True Call pausa Label4.Visible = True Call pausa Label5.Visible = True End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 158

Actividad de Aprendizaje 95 Manejo de Errores

En este ejercicio vamos a usar una pequea rutina de control de Errores. El objetivo es buscar en la Unidad A, un archivo determinado, en este caso un .wmf, si no lo encuentra despliega un mensaje, codificado en la rutina de Error. El cdigo es:
Private Sub Command1_Click() On Error GoTo ErrorDisco Image1.Picture = LoadPicture("a:\prntout2.wmf") Exit Sub ErrorDisco: If Err.Number = 71 Then MsgBox ("Por Favor, Cierre la puerta de la unidad."), , "Disco no preparado" Resume Else MsgBox ("Imposible localizar prntout2.wmf en A:\."), , "Archivo no encontrado" Resume FinPrueba End If FinPrueba: End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 159

EJERCICIOS SOBRE WINDOWS API


La Api de Windows permite a Visual Basic Extender sus capacidades usando programacion del sistema operativo de Microsoft (que esta escrito en lenguaje C). Las bibliotecas API (Application Program Interface) permite a los programadores acceder a funciones que ya estan por defecto dentro del sistema operativo. Aqu algunos ejemplo de cmo se pueden hacer estas llamadas a dichas funciones y como utilizarlas.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 160

Actividad de Aprendizaje 96 - Tragamonedas

Esta es una version de las maquinitas tragamonedas. Arrastramos una moneda de 1$ sobre el Botn Apostar y se habilita el Botn Jugar, cuando nos prece hacemos Click en el Botn Detener, y si las tres imagenes son iguales: ganamos sino perdimos, y volvemos a intentarlo. En tiempo de ejecucin se ve parecido a la imagen: El cdigo es el siguiente: Usamos la API de Windows sndPlaySound para activar el sonido. Pueden copiarla de aqu textualmente o convocarla desde el Visor de las API de Visual Basic.
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_ASYNC = &H1 ' reproduccin asncrona Option Explicit Dim snd As Integer Dim a As Integer Dim n1 As Integer Dim n2 As Integer Dim n3 As Integer Private Sub Command1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) 'Dragea la moneda sobre el botn Apostar Source.Visible = False Command2.Enabled = True 'habilita el Botn Jugar End Sub Private Sub Command2_Click() 'Botn Jugar 'Aqu usamos la API de windows para ejecutar el sonido snd = sndPlaySound(App.Path & "\1toons1.wav", SND_ASYNC) 'Habilita el timer de la animacin del tragamonedas Timer1.Enabled = True Command4.Enabled = True End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 161

Private Sub Command3_Click() 'Salida del programa Unload Me End Sub Private Sub Command4_Click() 'Detiene la animacin. Inhabilita el botn Jugar y llama al procedimiento 'que elige al azar los nmeros Timer1.Enabled = False Command2.Enabled = False Call azar 'llama al procedimiento Azar que eleige tres nmeros Command4.Enabled = False End Sub Private Sub Form_Load() Randomize End Sub Private Sub Timer1_Timer() 'Animacin pasando las imagenes de la tragamoneda a=a+1 If a = 1 Then Image1.Picture = Picture1(0).Picture Image2.Picture = Picture1(1).Picture Image3.Picture = Picture1(2).Picture End If If a = 2 Then Image1.Picture = Picture1(1).Picture Image2.Picture = Picture1(2).Picture Image3.Picture = Picture1(0).Picture End If If a = 3 Then Image1.Picture = Picture1(2).Picture Image2.Picture = Picture1(0).Picture Image3.Picture = Picture1(1).Picture a=0 End If End Sub Private Sub azar() 'Procedimiento que elige tres nmeros al azar correspondientes a cada 'imagen n1 = Int(Rnd * 3) + 1 n2 = Int(Rnd * 3) + 1 n3 = Int(Rnd * 3) + 1 Timer1.Enabled = False Select Case n1 Case 1 Image1.Picture = Picture1(0).Picture Case 2 Image1.Picture = Picture1(1).Picture Case 3 Image1.Picture = Picture1(2).Picture End Select n1 = n1 Select Case n2 Case 1

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 162

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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 163

Actividad de Aprendizaje 97 Protector de Pantalla

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

En el forrmulario insertamos un control PictureBox donde cargamos el corazn y un control Timer que controla la animacin del corazn en la pantalla. El cdigo es:
Option Explicit Dim movimiento As Integer Dim puntero As Integer Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long Private Sub Form_Click() puntero = ShowCursor(-1) End End Sub Private Sub Form_DblClick() puntero = ShowCursor(-1) End End Sub Private Sub Form_KeyPress(KeyAscii As Integer) puntero = ShowCursor(-1) End End Sub Private Sub Form_Load() If App.PrevInstance Then End puntero = ShowCursor(0) movimiento = 3 End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Static X1 As Integer, Y1 As Integer

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 164

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

Para esta aplicacin vamos a usar una API de window para mostrar y ocultar el puntero del mouse, SHOWCURSOR, y tambien vamos a registrar un pequeo movimiento del mouse para que se cierre el programa, asi como tocar una tecla. La animacion controla en cuatro movimientos el desplazamiento del corazn en diagonal hasta llegar al borde, y all cambia la dirreccin.
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 165

Actividad de Aprendizaje 98 Juego: Caza de patos

Este es un tpico jueguito de disparar o Shoot. con el mouse debemos derribar los patos y esto hace que incrementemos el puntaje. He omitido los sonidos para que el archivo no sea tan pesado pero ustedes pueden agregar los que gusten. El cdigo es:
Option Explicit Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_ASYNC = &H1 ' play asynchronously Dim sonido As Integer Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim f As Integer Dim g As Integer Dim h As Integer Dim i As Integer Dim j As Integer Dim patos As Integer Dim patosin As Integer Dim patosout As Integer Private Sub Form_Load() Randomize End Sub Private Sub mniDa_Click() mniDa.Checked = True mnuNoche.Checked = False Form1.Picture = Image1.Picture Timer1.Enabled = True

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 166

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 167

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 168

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 169

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()

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 170

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 171

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

Actividad de Aprendizaje 99 La API Sleep

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 172

Actividad de Aprendizaje 100 Slider Especial

Este ejemplo nos muestra una hermosa slider hecha a partir de una imagen personalizada. Como vamos a registrar la posicin del cursor usamos una Api de Windows que nos permite chequear la posicin del cursor y para guardar el cdigo creamos un Mdulo de tipo .bas El cdigo es:
Option Explicit Dim imagen As Integer Dim Moviendo As Boolean 'Aqu establecemos las constantes de mximo y mnimo Const MaxSlider1 = 6 Const MinSlider1 = 1 Private Sub Form_Load() Moviendo = False lblMin = MinSlider1 lblMax = MaxSlider1 lblValor = MinSlider1 End Sub Private Sub imgPuntero_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim Cursor As POINTAPI Dim Anterior As Long Do 'Para que no lo actualize si no cambio Anterior = Cursor.X Moviendo = True 'Cargo la posicion del mouse Call GetCursorPos(Cursor) Cursor.X = Cursor.X - (Form1.Left / Screen.TwipsPerPixelX) - imgPuntero.Width 'Si no cambio, y no sale de los bordes de la barra, entonces... If (Anterior <> Cursor.X) And (Cursor.X >= imgBarra.Left) And (Cursor.X + imgPuntero.Width <= imgBarra.Left + imgBarra.Width) Then imgPuntero.Left = Cursor.X End If lblValor = Int((imgPuntero.Left - imgBarra.Left) * (MaxSlider1 - MinSlider1) / (imgBarra.Width imgPuntero.Width)) + MinSlider1 Call mostrar 'Que haga los eventos para ver si hay MouseUp

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 173

DoEvents Loop Until Moviendo = False End Sub 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)

Actividad de Aprendizaje 101 Sleep

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

Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Para el Formulario:

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

Actividad de Aprendizaje 102 - SndPlaySound


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

En el archivo wav colocamos el nombre del sonido elegido y este debe estar en el mismo directorio que el proyecto ya que estamos usando el objeto App de Application.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 175

Actividad de Aprendizaje 103 MCIExecute (Sonido)

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 176

Actividad de Aprendizaje 104 MCIExecute (Video)

Esta aplicacin permite ejecutar un Video usando la Api, MCIExecute. El cdigo es el siguiente:
Option Explicit Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long Private Sub Command1_Click() Const sAVIFile As String = "c:\Filemove.avi" 'abrir un nuevo video mciExecute "OPEN " + sAVIFile + " TYPE AVIVIDEO ALIAS kpdvideo STYLE POPUP" 'determinar el tamao del video a desplegar mciExecute "PUT kpdvideo WINDOW AT 306 290 180 begin_of_the_skype_highlighting 290 180 end_of_the_skype_highlighting 40" 'determinar la velocidad del video mciExecute "SET kpdvideo SPEED 600" 'ejecutar el video mciExecute "PLAY kpdvideo WAIT" 'remover el video de la memoria mciExecute "CLOSE kpdvideo" End Sub

306

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 177

Actividad de Aprendizaje 105 - Blend

Esta aplicacin muestra un efecto de superposicin y transparencia de dos imgenes. El cdigo es:
Option Explicit 'Este proyecto requiere de dos controles Picture 'Cada control debe tener una imagen, ambas deben ser distintas Const AC_SRC_OVER = &H0 Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type

Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long

Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Form_Load() Dim BF As BLENDFUNCTION, lBF As Long 'Cambiar el modo grfico para que se mantenga la imagen Picture1.AutoRedraw = True Picture2.AutoRedraw = True 'usar pixels con la Api Picture1.ScaleMode = vbPixels Picture2.ScaleMode = vbPixels 'asignar los parmetros With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 .AlphaFormat = 0 End With

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 178

'copia la funcin blend a una variable en memoria de tipo long RtlMoveMemory lBF, BF, 4 'aplicar la Api desde la picture1 sobre la picture2 AlphaBlend Picture2.hdc, 50, 0, 100, 100, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 179

EJERCICIOS SOBRE EL ARCHIVOS


A continuacion se presentan algunos ejemplos de manejo de archivos simples con Visual Basic. Algunos archivos de tipo texto, documento o configuracion que son usados por algunas aplicaciones.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 180

Actividad de Aprendizaje 106 Texto y RTF


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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 181

Line Input #1, pepe$ ' le da entrada a la linea 1 del archivo Text1.Text = Text1.Text & pepe & renglon 'concatena con & el 'texto del archivo y el tamao del regln. Wend 'repite las ordenes en tanto la condicin es verdadera, en 'este caso hasta tanto no termine el texto del archivo. Close #1 ' cierra el archivo al terminar de cargarlo. End Sub Private Sub Command2_Click() RichTextBox1.LoadFile (App.Path & "\rtf.rtf") 'como podemos 'ver con el Control RichTextBox es ms sencillo el manejo de 'archivos, con la sentencia LoadFile se carga el archivo 'indicando el camino para encontrarlo. End Sub

Actividad de Aprendizaje 107 Mosaico de Fondo

Muchas veces queremos desplegar en un fondo una imagen pequea repetidas veces. En este ejercicio vamos a lograrlo creando un procedimiento de tipo pblico en un modulo con extensin .bas y luego lo convocamos desde el Formulario en el procemiento Click de un array de imagenes, que se encuentran dentro de un Frame o Recuadro para su eleccin.

El cdigo para el Mdulo es: Option Explicit Public Sub TileBitmap(Source As Object, _ Destination As Object) Dim Y As Integer Dim X As Integer 'Ejecuta dos bucles anidados que repiten en el 'fondo la imagen hasta cubrirla For Y = 0 To Destination.ScaleHeight _ Step Source.ScaleHeight For X = 0 To Destination.ScaleWidth Step _ Source.ScaleWidth Destination.PaintPicture _ Source.Picture, X, Y

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 182

Next 'X Next 'Y End Sub

Usamos el Mtodo PaintPicture ya conocido en nuestras animaciones, para copiar la imagen en el fondo del formulario. En un bucle anidado For Next que repite el ancho y el alto de la imagen. Luego lo convocamos desde el Formulario en el Click de un Array de imagenes, que muestran distintas opciones de dibujo:
Private Sub picSource_Click(Index As Integer) 'Toma la imagen del array de controles y la copia en el formulario 'como un mosaico repetido. TileBitmap picSource(Index), Me End Sub

Convoca al procedimiento pblico del Mdulo y lo vuelca en el Formulario activo o sea Me.

Actividad de Aprendizaje 108 Ecuacion de 2. Grado

Este ejercicio utiliza funciones matemticas como clculo de raz cuadrada. Y un control especial CommonDialog que convoca a las ventanas estndar de Windows, que asociados a los mtodos Put y Get nos permiten Abrir y Guardar un fichero como txt. El cdigo del ejercicio es el siguiente:
Dim a As Single, b As Single, c As Single 'Variable de los Datos Dim x1 As Single, x2 As Single 'Variable de las respuestas Dim del As Single 'Variable para los sumandos dentro del radical Private Sub cmdCalcular_Click()

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 183

del = (b ^ 2 - 4 * a * c) If del >= 0 Then 'Si las races son reales e iguales x1 = (-b + Sqr(del)) / (2 * a) x2 = (-b - Sqr(del)) / (2 * a) txtX1.Text = Format(x1, "###,##0.00") txtX2.Text = Format(x2, "###,##0.00") Else 'Si son complejas x1 = Format((-b) / (2 * a), "###,##0.00") x2 = Format((Sqr(-del)) / (2 * a), "###,##0.00") txtX1.Text = x1 & " + " & x2 & " i" txtX2.Text = x1 & " - " & x2 & " i" End If End Sub Private Sub cmdSalir_Click() End End Sub Private Sub Form_Load() 'Inicializar las variables a=1 b=2 c=1 'Inicializar las cajas de texto txtA.Text = a txtB.Text = b txtC.Text = c End Sub Private Sub mnuAbrir_Click() Dim Fichero As String 'Variable para el nombre del Fichero CommonDialog1.Action = 1 'Ventana Abrir Fichero = CommonDialog1.FileName If Fichero = "" Then Exit Sub Open Fichero For Random As #1 'Abrir el Fichero 'Tomar los valores del Fichero Get #1, 1, a Get #1, 2, b Get #1, 3, c Get #1, 4, x1 Get #1, 5, x2 Close #1 'Asignar los valores a las cajas de texto. txtA.Text = a txtB.Text = b txtC.Text = c cmdCalcular_Click 'Mandar a calcular End Sub Private Sub mnuSalvar_Click() Dim Fichero As String If Fichero = "" Then mnuSalvarComo_Click

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 184

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 185

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 186

EJERCICIOS SOBRE EL GRAFICOS


A continuacion se presentan algunos ejemplos que utilizan el control Chart para realizar graficos de barras, pastel y demas en nuestras aplicaciones de Visual Basic.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 187

Actividad de Aprendizaje 109 Graficos con Chart

En este ejercicio vamos a abrir una tabla y a traves de una consulta SQL vamos a graficar los datos de la misma. La tabla que usamos se llama books6.mdb y esta incluida en el codigo de los ejercicios del Control Chart. En este ejercicio vamos a usar un menu que consta de Archivo: Grabar, Imprimir y Salir.Un menu Edicion que copia al portapapeles y Un menu de Grficos que despliega distintos tipos de graficos , uno de ellos a traves de la base de datos y otros por cdigo.
Option Explicit 'debemos cargar la referencia Microsoft ActiveX data object 2.0 y el MSChart. Private Sub Form_Load() End Sub Private Sub Form_Resize() With MSChart1 .Left = 0 .Top = 0 .Width = Me.ScaleWidth .Height = Me.ScaleHeight End With End Sub Private Sub mnuArchivoGuardar_Click() Dim strArchivoGuardar As String strArchivoGuardar = App.Path & "\" & App.EXEName & ".bmp" MSChart1.EditCopy SavePicture Clipboard.GetData, strArchivoGuardar MsgBox "El grfico ha sido guardado en " & strArchivoGuardar, vbInformation, "Guardar Grfico" End Sub Private Sub mnuArchivoImprimir_Click() MSChart1.EditCopy Printer.PaintPicture Clipboard.GetData, 0, 0 Printer.NewPage Printer.EndDoc MsgBox "El grfico ha sido enviado para su impresin.", vbInformation, "Imprimir grfico"

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 188

End Sub Private Sub mnuArchivoSalir_Click() Unload Me End Sub Private Sub mnuEdicionCopiar_Click() MSChart1.EditCopy MsgBox "El grfico se copiado a la memoria.", vbInformation, "Copia de grfico" End Sub Private Sub mnuGraficosBaseDatos_Click() 'abrimos una conexion a datos con el uso de un proveedor OLEDB 'cuidado con la ruta donde esta la base de datos. Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim strProveedor As String Dim strOrigenDatos As String Dim strSQL As String strProveedor = "Microsoft.Jet.OLEDB.3.51" strOrigenDatos = App.Path & "\books6.mdb" strSQL = "SELECT Title, SUM(Sales) AS Ventas FROM BookSales GROUP BY Title HAVING SUM(Sales) > 0" cnn.Open "provider=" & strProveedor & "; Data Source=" & strOrigenDatos rst.Open strSQL, cnn, adOpenStatic With MSChart1 .ShowLegend = True .chartType = VtChChartType2dBar 'esta linea carga los datos Set .DataSource = rst End With End Sub Private Sub mnuGraficosIncrAut_Click() Dim intBucle As Integer With MSChart1 .chartType = VtChChartType3dBar .ColumnCount = 12 .RowCount = 12 .AutoIncrement = True For intBucle = 1 To 144 .Data = intBucle Next .AllowDynamicRotation = True .ShowLegend = True End With End Sub Private Sub mnuGraficosMatriz_Click() Dim avarDatos(0 To 3, 1 To 5) As Variant Dim intCol As Integer Dim intFila As Integer 'carga las leyendas y los datos With MSChart1 .chartType = VtChChartType3dBar .ColumnCount = 6 .RowCount = 12

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 189

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

Actividad de Aprendizaje 110 Control Chart y Excel

Vamos a usar datos de una planilla de Excel, para generar un grfico al cargarse el formulario que contiene al control MiSChart. El cdigo es el siguiente:
Option Explicit ' Coloque este cdigo en la seccin Declaraciones. ' Si utiliza Office 97, asegrese de establecer una

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 190

' referencia a Microsoft Excel 8.0 Object Library. ' Si utiliza Office 95, establezca una referencia a ' Microsoft Excel 5.0 Object Library y declare ' la variable como Worksheet. Dim wkbObj As Workbook ' Declara una variable de objeto. Private Sub Form_Load() ' Establece despus la variable con el mtodo GetObject. Set wkbObj = GetObject _ (App.Path & "\pepe.xls") Dim matrizDatos(1 To 6, 1 To 2) Dim i As Integer For i = 1 To 6 ' Los valores de la columna A llenan la primera serie de las ' matriz. Si estos valores son cadenas, se convierten ' las etiquetas de las filas. matrizDatos(i, 1) = wkbObj.Worksheets(1) _ .Range("A" & i + 1).Value ' Despus los valores de la columna B llenan la segunda. matrizDatos(i, 2) = wkbObj.Worksheets(1) _ .Range("B" & i + 1).Value Next i MSChart1.ChartData = matrizDatos End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 191

EJERCICIOS SOBRE EL BASES DE DATOS


Por ultimo, se presentan algunos ejercicios para ver como Visual Basic interctua con una base de datos, usando diferentes caracteristicas. La base de datos mas comun a usar en VB es ACCESS por lo que para la realizacion de las actividades, debera tener lista su base de datos, ya que de lo contrario estas no funcionaran. Pregunte a su profesor como crear sus bases de datos o como obtenerlas (si es que el se las proporcionara antes de realizar los ejercicios).

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 192

Actividad de Aprendizaje 111 Formulario de Datos

Visual Basic cuenta con una cantidad importante de Asistentes. Entre ellos el asistente para la creacin de un Formulario de datos, osea un formulario que va a mostrar datos de una Base de datos. Para incorporar al Asistente vamos a Complementos, Administrador de complementos y alli se nos abre una ventana desde donde podemos seleccionar cualquiera de los Asistentes.

Seleccionamos VB 6 Data Form Wizard y hacemos doble click, o marcamos en la casilla de seleccin, para qu se cargue. Luego hacemos Aceptar y al ir a Complementos veremos la opcion de del asistente incluida. La seleccionamos y se abrir una ventanacon la introduccin al Asistente. Pasamos a Siguiente, ya que aqu no podemos cargar la configuracin de ningn perfil, porque no tenemos ninguna configuracin o plantilla grabada.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 193

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

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 194

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

En esta pantalla seleccionamos la tabla de la base de datos. Y de ella los campos que queremos mostrar. Los seleccionamos y con los botones con flecha los vamos pasando a la lista de la derecha. Si queremos ordenar los datos por un campo determinado lo elegimos del combo desplegable.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 195

Aqui hacemos Click en seleccionar todos los botones o elegimos solo algunso. estos nos permiten navegar la grilla. La pantalla Siguiente nos pregunta si queremos guardar esta configuracin como una plantilla para futuros formularios. Luego hacemos Finalizar.

Al cerrase la ventana del Asistente veremos en nuestro proyecto estndar un nuevo formulario, si no usamos el primero o Form1 lo podemos eliminar. Posicionados en la ventana proyecto con el botn derecho tenemos la opcin de eleminarlo. Y grabamos la aplicacin con el formulario que cre el asistente. Sino lo usamos como formulario de presentacin. Como vemos en la ventana cdigo el asistente, ya codific los botones de navegacin y de cierre de la Aplicacin.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 196

Actividad de Aprendizaje 112 Ordenando una tabla

Este ejercicio nos permite ordenar los registros de una tabla en forma ascendente o descendente. Los registros se despliegan en una grilla, y tambin podemos seleccionar la cantidad de registros que queremos mostrar. Obviamente necesitaremos conexin con una base de datos, para lo que usaremos un control data. El cdigo es:
Dim tipo As Byte Dim Orden As String Private Sub Command1_Click() Dim N As Long DBGrid1.Visible = True N = Text1.Text 'Para entrar el nmero de registros. Select Case tipo Case 1 Orden = "DESC" Case 2 Orden = "ASC" End Select 'Selecciona a partir de los ltimos. Data1.RecordSource = "SELECT TOP " & N & " * " & _ "FROM Empleados " & _ "ORDER BY IdEmpleado " & Orden Data1.Refresh End Sub Private Sub Command2_Click() End End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 197

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 198

Actividad de Aprendizaje 113 Relacionar varios formularios


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

Retomando un ejercicio simple ya explicado el N 7 El Sistema Solar, vamos a agregarle una primera pantalla de presentacin con distintos botones o labels que nos vinculan a los otros formularios: La label Planetas nos muestra el formulario del ejercicio N7 con los distintos planetas y el procedimiento Clic de cada label transparente nos vincula a una Base de Datos previamente armada con el Data Jet, el motor para Base de Datos de Visual Basic 5 o con Access, donde tendremos la informacin referente a cada planeta, en este caso: el nombre del planeta, su distancia al sol en km. y la cantidad de satlites (El proyecto final est incompleto, Uds. pueden completarlo como les resulte ms conveniente).

Al hacer Clic sobre uno de los planetas se nos abre la siguiente pantalla: El cdigo que nos vincula a la base de datos convocada por un control Data que se encuentra invisible en el formulario de Informacin es el siguiente:
Private Sub Label12_Click() 'Esta label corresponde al planeta 'Jpiter Label2.Caption = "Jpiter" Form2.Data1.Recordset.MoveFirst 'mueve el puntero al comienzo

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 199

Form2.Data1.Recordset.Move 1 ' y luego un lugar al registro 'correspondiente en la Base de datos Planetas Form2.Picture1.Picture = Form2.ImageList1.ListImages(2).Picture Form2.Show End Sub

Para desplegar la imagen del planeta usamos un control ImageList que tiene cargadas, en este caso solo dos imgenes: la Tierra y Jpiter. La posicin del registro depende del orden que le dieron a los planetas en los registros de la Base de datos. Ustedes pueden agregar oros campos que desplieguen ms informacin y labels indicativas de dichos campos. Luego tenemos el Formulario evaluacin que a travs de la funcin InputBox le hace al alumno dos preguntas: Una sobre el nombre del planeta y otra sobre la cantidad de satlites que posee.

El formulario de evaluacin se asemeja al siguiente: Y el cdigo es:


Private Sub Picture1_Click() 'imagen de Jpiter planeta = InputBox("Qu planeta es este?", "Planetas") If UCase(planeta) = "JPITER" Then contar = contar + 1 Label2.Caption = contar End If satelite = InputBox("Cuntos satlites tiene?", "Planetas") If satelite = "16" Then contar = contar + 1 Label2.Caption = contar Picture1.Enabled = False End If End Sub

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

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 200

Para cerrar tenemos el formulario crditos donde se indica el nombre del programador y el botn Salir que cierra la aplicacin. La navegacin entre un formulario y otro se realiza mediante los mtodos Show: Mostrar y Hide: Ocultar. Primero se muestra el formulario vinculado y luego se oculta el que est activo. Ejemplo:
Private Sub Label1_Click() Form3.Show Form5.Hide End Sub

Ustedes pueden vincular distintos formularios con distintos ejercicios, imgenes, animaciones o videos o simplemente informacin escrita.

Actividad de Aprendizaje 114 BD Navegar


Este ejercicio es muy simple y nos permite solamente navegar una Base de datos ya existente usando un control standard de la barra de herramientas de Visual Basic, el Control Data Este control tiene dos propiedades importantes la DataBaseName, o sea la base de datos a la cual se asocia , en este caso usaremos la Hwind.mdb una de las dos bases que incluye Visual Basic, la otra es Biblio.mdb. Y la RecordSource que asocia al control con una tabla especfica en este caso Customers, o sea Clientes o usuarios. Observen que no hemos escrito ni una lnea de cdigo y sin embargo podemos recorrer los registros que componen la tabla a travs del control Data. El formulario muestra los campos del registro a travs de cajas de texto cuya propiedad DataField se asocian al campo correspondiente luego de establecer como DataSource o sea como base de origen la Data1 que es el control creado anteriormente.

Recuerden que siempre que trabajemos con bases de datos tendrn que cargar el DataBaseName nuevamente de acuerdo al recorrido de sus mquinas.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 201

Actividad de Aprendizaje 115 BD Navegar por codigo


En este ejercicio agregamos cuatro botones o sea CommandButton para realizar por cdigo a travs del evento click las acciones correspondientes a: primer registro, siguiente registro, registro previo y ltimo registro.

Private Sub Command1_Click() Data1.Recordset.MoveFirst ' Se ubica en el primer registro End Sub Private Sub Command2_Click() Data1.Recordset.MovePrevious ' Se mueve al registro previo If Data1.Recordset.BOF Then 'Si es el primero muestra un 'mensaje. MsgBox "Este es el Primer Registro.", , "Registros" Data1.Recordset.MoveFirst End If End Sub Private Sub Command3_Click() Data1.Recordset.MoveNext ' Se ubica en el siguiente If Data1.Recordset.EOF Then ' Si es el ltimo muestra un mensaje MsgBox "Este es el ltimo Registro.", , "Registros" Data1.Recordset.MoveLast ' Se ubica en el ltimo. End If End Sub Private Sub Command4_Click() Data1.Recordset.MoveLast ' Se ubica en el ltimo. End Sub

Las propiedades BOF y EOF indican el comienzo del archivo: begin of file y el final del archivo: end of file. El objeto Recordset que sigue al objeto data identifica al objeto: conjunto de registros.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 202

Actividad de Aprendizaje 116 BD Altas, Bajas y Busqueda


En este ejercicio vamos a seguir avanzando en cuanto a las posibilidades de manipular los contenidos de la Base de datos. Vamos a agregar y eliminar registros y hacer bsquedas. El formulario contiene los siguientes controles:

La base con la que trabajamos es Biblio.mdb y la tabla Editores o Publishers. El cdigo correspondiente a los botones avanzar y Atrs ya los hemos visto en el ejercicio anterior por lo tanto vamos a centrarnos en los botones Agregar, Eliminar y Buscar cuyos cdigos son:
Private Sub Command1_Click() mensaje = MsgBox("Complete los datos y haga un Click" + Chr(10) + "en el botn de registro siguiente.", vbInformation) Data1.Recordset.AddNew Text2.SetFocus End Sub Private Sub Command2_Click() mensaje = MsgBox("Est seguro de Borrar el registro?", vbOKCancel, "Eliminacin de Registros") If mensaje = vbOK Then Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If End Sub Private Sub Command3_Click() buscar = InputBox("Ingrese la Ciudad a Buscar:", "Bsqueda") Data1.Recordset.FindFirst "City=" & "'" & buscar & "'" If Data1.Recordset.NoMatch Then mensaje = MsgBox("No existe la Ciudad Buscada.", vbCritical) Command4.Enabled = False Else Command4.Enabled = True

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 203

End If End Sub Private Sub Command4_Click() Data1.Recordset.FindNext "City=" & "'" & buscar & "'" End Sub

El mtodo AddNew nos permite agregar un nuevo registro, y la actualizacin la podemos hacer a travs de botn grabar o moviendo el puntero al pasar al siguiente registro. Para eliminar un registro lo hacemos con el Mtodo Delete, previa confirmacin a travs de un MsgBox de la misma. Para que la base se mantenga actualizada en el procedimiento Activate del formulario incluimos:
Private Sub Form_Activate() Data1.UpdateRecord ' esto actualiza la data End Sub

Y para el procedimiento Buscar abrimos un InputBox que guarde la cadena a buscar, en este caso una ciudad por ejemplo: New York o Buenos Aires y con el mtodo FindFirst (Buscar primero) y el campo establecido en este caso City (Ciudad) establece los criterios de la bsqueda. Luego con FindNext establece el criterio de la segunda bsqueda.

Actividad de Aprendizaje 117 BD Consulta SQL


En este ejercicio vamos a hacer una pequea consulta SQL, para los que no conocen la sintaxis de este lenguaje pueden consultar el archivo SQL.doc que los va a ayudar. En la propiedad RecordSource, donde seleccionamos la tabla a utilizar en los ejercicios anteriores, tambin podemos hacer las consultas SQL directamente, luego veremos que podemos hacerlas a travs de un control y modificar esta propiedad. Lo primero que debemos hacer es seleccionar la base de datos que vamos a utilizar y vincularla a la propiedad DataBaseName del control data en este caso, seguimos trabajando con la base Biblio que viene con Visual Basic. Luego de crear el control data1 y determinar su propiedad DataBasename, agregamos un control databound grid de componentes: Microsoft Data Bound Grid y lo agregamos. El formulario muestra el siguiente aspecto visual:

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 204

Y la consulta que hacemos en la propiedad RecordSource es:


SELECT * FROM Authors ORDER BY Author ASC

Le decimos que seleccione de la tabla Authors todos los registros por eso usamos el asterisco (*) y que ordene el campo Author en forma ascendente, esto podra ser DESC o sea descendente. As vemos mostrarse en la grilla el listado de autores ordenado alfabticamente.

Actividad de Aprendizaje 118 BD Crystal Report


Esta es una aplicacin generadora de Informes. Estos informes se disean a partir de una Base de datos y la aplicacin nos permite aadir un encabezado, fechas, textos, pie de pginas. etc. O hacer en tiempo de ejecucin a partir de un programa de Visual Basic una consulta SQL y luego usando el control Crystal Report crear un Informe y darle salida por pantalla o impresora. Como vemos son dos cosas distintas aunque en el fondo cumplen la misma funcin que es generar un Informe. tenemos la aplicacin Crystal Reports y el control Crystal Report incluirlo en la Caja de herramientas. que debemos traer de componentes, para

Primero veremos la aplicacin Crystal Reports, vamos a Inicio, programas y dentro de Microsoft Visual Basic selecionamos Crystal reports, una vez dentro de la aplicacin, elegimos File o Archivo, nuevo report o nuevo Informe y cuando nos pregunte qu Base de datos vamos a utilizar le decimos Biblio.mdb. Entonces veremos una pantalla similar a esta:

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 205

La pantalla en tiempo de diseo la tenemos dividida en el encabezado, los detalles donde insertamos los campos de la tabla con la que vamos a trabajar y el pie de pgina. Investiguen y prueben las distintas opciones haciendo uso de la Ayuda. Luego que seleccionamos los campos Au_ID y Author grabamos el archivo y cerramos la aplicacin. Luego abrimos Visual Basic y creamos la siguiente aplicacin:

El formulario contiene un Control data cuya propiedad DatabaseName es Biblio.mdb y la propiedad RecordSource: la tabla Authors. Luego tenemos una DBGrid trada de componentes cuya propiedad DataSource es :DataControl. Un Crystal Report, tambin trado de componentes, cuya propiedad ReportFileName es el informe que creamos recientemente,, en la aplicacin Crystal Reports: aut.rpt. Luego agregamos una caja de texto para ingresar la identificacin del Autor y actualizar el informe y dos botones, uno que muestra la grilla actualizada y otro que genera el Informe activando el Control crystal report. El programa en ejecucin al generar el informe de uno de los Autores se ve as:

El cdigo para actualizar la grilla es :


Cuaderno de Trabajo Visual Basic APENDICE A Pgina 206

Private Sub Command1_Click() Data1.RecordSource = "Select * from authors Where Au_ID = " & Text1.Text Data1.Refresh DBGrid1.Refresh End Sub

Y para generar el Informe:


Private Sub Command2_Click() CrystalReport1.Action = 1 End Sub

El valor 1 de Action le da salida por pantalla luego, haciendo click en el icono de la impresora podemos darle salida por la misma.

Actividad de Aprendizaje 119 BD Suma con SQL

Este ejercicio usa un control DBGrid y dos Control Data uno que abre la tabla que se muestra en la grilla y otro que ejecuta la suma. El control DBGrid, como vimos en el ejemplo anterior debe estar relacionado a la tabla que usamos. El cdigo en el evento Load es el siguiente:
Private Sub Form_Load() 'La grilla debe estar conectada a la data 1 Data1.DatabaseName = App.Path & "\DBase.mdb" Data1.RecordSource = "Select * from DBorder " Data2.DatabaseName = App.Path & "\DBase.mdb" Data2.RecordSource = "SELECT sum(OrderAmt) As total from DBOrder " Data2.Refresh Text1.Text = Data2.Recordset!total End Sub

Una vez cargado el programa ejecuta las consultas SQL y nos muestra la suma total del precio de los productos. Suma todos los campos de la tabla DBOrder y los carga en total, luego le damos salida a este valor en un control TextBox.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 207

Actividad de Aprendizaje 120 BD Funciones con SQL

Este ejercicio nos muestra el uso de tres funciones: Mnima, Mxima y Media. El formulario tiene cuatro controles de Texto donde muestra: en el primero la cantidad de registros (Count ofAuthor) en el segundo la fecha menor de nacimiento de los Autores (MinofYear Born), el tercero la fecha mayor de nacimiento de los Autores (Maxofyear Born) y el cuarto la media de los aos de nacimiento de los Aurores (AvgofYear Born). Cada caja de texto de comunica con el control Data1 y cada Datafield se refiere a : CountofAutor, MinofYear, Maxofyear y AvgofYear. Y la consulta SQL esta hecha directamente en la propiedad RecordSource del control Data1, cuya sintxis es:
SELECT Count(*) AS CountofAuthor, Avg([Year Born]) AS [AvgogYear Born], Min ([Year Born])AS [MinofYear], Max ([Year Born]) AS [Maxofyear] FROM Authors

Esto selecciona todos los registros, volcando el valor a CountofAuthor, luego la media de los aos de nacimiento de los autores, guardndola en el alias AvgogAuthor como variable y as con los otros valores. No olviden cambiar el camino o Path del ejercicio original al cargarlo en sus mquinas. La base usada es Biblio.mdb.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 208

Actividad de Aprendizaje 121 BD Varias Tablas


La idea de este ejercicio es conectar varias tablas desde el formulario, o sea volcar en campos de texto los datos de distintas tablas. Para esto deben estar definidas como tabla en en la propiedad RecordType. Siempre usamos la base de datos Biblio.mdb. Pero recuerden que al bajar el ejercicio deben actualizar los Path con la ubicacin de la base de datos de su disco rgido. El formulario se ve de la siguiente manera:

Tenemos 6 controles Text para desplegar los datos y cuatro controles data que conectan con distintas tablas: El Data1 con en su propiedad RecordSource con Tiles, la Data2 con Publishers, la data3 con Title Author y la Data4 con Authors. Y los controles de texto: Text1 (Ttulo) en su propiedad DataSource con la data1, Datafield con Title; el Text2 (Editor) con la Data2 y el Datafield: Name; el Text3 (Editor) con la Data1 y el datafield: Year publisher; el Text4 (Autor) con la Data4 y el datafield Author; el Text5 con la Data1 y el datafield: Subject y el Text6 (Comentarios) con la Data1 y el datafield Comments. El codigo correspondiente es:
Option Explicit 'El RecordType es Table Private Sub Data1_Reposition() 'Con Seek busca los campos correspondientes.Si estos campos estn vacis aparecer el asterisco. Data2.Recordset.Seek "=", Data1.Recordset.Fields("PubID") If Data2.Recordset.NoMatch Then Text4.Text = "***" Data3.Recordset.Seek "=", Data1.Recordset.Fields("ISBN") If Data3.Recordset.NoMatch Then Text2.Text = "***" Exit Sub Data4.Recordset.Seek "=", Data3.Recordset.Fields("AU_ID") End Sub Private Sub Form_Load() 'refresca las tablas o sea las actualiza Data2.Refresh Data3.Refresh Data4.Refresh 'establece cuales son las llaves para indexarlas.

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 209

Data2.Recordset.Index = "PrimaryKey" Data3.Recordset.Index = "ISBN" Data4.Recordset.Index = "PrimaryKey" End Sub

Actividad de Aprendizaje 122 BD Visor de SQL


El siguiente ejercicio nos permite crear un Visor de conusltas SQL, esto es de mucha utilidad para probra el cdigo de las consultas y practicar este lenguaje de consultas estructuradas de informacin contenida en tablas de Base de Datos. La explicacin esta hecha en Visual basic 6, pero tambin la pueden hacer en el 5 cambiando el control MsFlex Grid por el Data Bound Grid de la versin 5.

Como vemos este formulario est compuesto por: dos controles Text, un MSFlexGid, dos botones, uno que busca y selecciona la base de datos y otro para ejecutar el cdigo SQL de la caja de texto2, un control data que vincula a una base de datos y un commonddialog que nos permite seleccionar la base a consultar, el camino de la base seleccionada se muestra en el Text1. El cdigo es el siguiente:
Option Explicit Private Sub Command1_Click() On Error GoTo nobase CommonDialog1.CancelError = True CommonDialog1.Filter = "Database|*.mdb" CommonDialog1.ShowOpen Data1.DatabaseName = CommonDialog1.FileNameaqui se enlaza a una 'Base de Datos. Data1.Refresh If Err = 0 Then Text1.Text = CommonDialog1.FileName 'aqui se muestra el camino de la 'base de datos. Else MsgBox Err.Description End If nobase: On Error GoTo 0

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 210

End Sub Private Sub Command2_Click() On Error GoTo sqlerror Data1.RecordSource = Text2 'aqui se vuelca la consulta SQL Data1.Refresh Exit Sub sqlerror: MsgBox Err.Description End Sub

Como vemos se incluyen alguna rutinas para controlar posibles erroes.

Actividad de Aprendizaje 123 BD Consultas SQL


Para ejecutar estas consultas SQL, pueden usar el visor del ejercicio anterior, o el Administrador Visual de datos de Visual basic, abrir la Base Books6.mdb y tipear las consultas en la ventana de cdigo SQL y ejecutarlas. El SQL del JetDataManager soporta el uso de operadores como: BETWEEN, IN y LIKE. Ejemplos: SELECT PubID, Name, StateProv, City FROM Publishers WHERE PubID BETWEEN 10 AND 15 Con IN puedo hacer una lista de condiciones: SELECT PubID, Name, City, StateProv FROM Publishers WHERE StateProv IN ('NY' , 'CA' , 'RI') Puedo usar LIKE para obtener una vista cuyos registros cumplan con un patrn especfico. Ejemplo: aquellos registros cuya columna StateProv tenga una letra I en su comienzo, o el PubID sea un valor determinado. SELECT PubID, Name, City, StateProvFROM Publichers WHERE StateProv LIKE ' I ' SELECT PubID, Name, City, StateProv FROM Publichers WHERE PubID LIKE 10 Puedo usar WHERE para vincular tablas en un solo conjunto de Datos. la instruccin crea una vista que muestra el ttulo de un libro y el nombre de la editorial. esto se logra con WHERE al solicitar que genere una vista donde los valores de la columna PubID de ambas confluyen. SELECT Titles.Title, Publishers.Name FROM Publishers.Title WHERE Publishers.PubID = Titles.PubID Se pueden combinar las versiones de WHERE para combinar tablas y limitar registros seleccionados en una sola instruccin SELECT. SELECT Titles.PubID, Titles.Title, Publishers.Name FROM Titles, Publishers WHERE Titles.PubID = Publishers.PubID AND Publishers.PubID BETWEEN 5 AND 10
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 211

Podemos modificar el nombre que SQL le asigna a las columnas con la clasula AS. SELECT Titles.PubID AS CodigoPub, Titles.Title AS TituloLibro, Publishers.Name AS NombrePub, Authors.Name AS NombreAutor FROM Titles, Publishers, Authors WHERE Titles.PubID = Publishers.PubID AND Titles.AUID = Authors.AUID Funciones SQL: Es posible usar WHERE y las funciones agregadas en un mismo SELECT, para limitar los registros a incluir en los clculos que realizan las funciones.SELECT COUNT(UNits) AS RecuentoUnidades, AVG(Units) AS PromedioUnidades, SUM(Units) AS SumatoriaUnidades, MIN(Units) AS UnidadMinima, MAX(Units) AS UnidadMaxima FROM BookSales WHERE Qtr = 1 Uso de las funciones de Visual basic en una instruccin SELECT: Al cargar cualquier base de datos mediante el Jet en un aaplicacin Visual Basic, es posible utilizar cualquier funcin propia del entorno como parte de una instruccin SQL. Ejemplo 1: Vista con una columna que muestra los tres primeros caracteres de una columna de la tabla base usando la funcin Left. SELECT Left(Name,3), Name FROM Authors Ejemplo 2: Combinar varias columnas en una sola dentro de una vista: SELECT Name AS Nombre, City & ' , ' & StateProv & ' ' & Zip AS Domicilio FROM Publishers Ejemplo 3: Tambin pueden usarse las funciones de Visual basic como parte de la clasula WHERE, este ejemplo devuelve aquellos registros que tienen como segundo caracter de la columna Name la letra 'a': SELECT Name FROM Publishers WHERE Mid$(Name,2,1) = "a" Las desventajas son la incompatibilidad con otras bases de datos como SQL Server, que no ejecuta las funciones de Visual Basic y que la velocidad del acceso al ejecutarse la consulta disminuye. Si queremos ganar en Portabilidad y Velocidad mejor no usarlas.

Actividad de Aprendizaje 124 BD con DAO


Cualquier programa que accede a tablas utiliza objetos de acceso a datos, an si lo hace a travs de controles enlazados sin codificacin, utiliza estos objetos de acceso a datos. El Modelo de Objetos de Acceso a datos puede ser: DAO 3.51 (versin actual de VB6) DAO 2.5/3.51(compatible con versiones anteriores) Y otros Modelos como: RDO (Remote data Object) y ADO (Objetos Activos de Acceso a Datos).
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 212

El objeto fundamental en los programas basados en DAO es el Recorset. este es el objeto que contiene la coleccin de registros que utilizan los programas. Existen tres tipo diferentes de Recordset: Dynaset, table y Snapshot. Otro objeto es el Database (o base de datos) que convoca a la Base. Las Bases tradicionales como FoxPro, DBase, Paradox se orientan a Registros, las operaciones que tienen que ver con la base se realizan registro por registro (bucle). En cambio Access y otras que soportan SQL estn orientadas a conjuntos de datos, se hacen con sonsultas SQL. Las Bases de Datos que trabajan con SQL pueden ejecutar operaciones en tablas enteras con una sola instruccin. El objeto Recordset de tipo Table es adecuado para ejecutar procesamientos orientados a registros. Los tipos Dynaset y Snapshot lo son para procesamientos orientados a conjuntos de datos. El primero es dinmico, permite lectura y escritura, el segundo slo lectura. Al crear el Dynaset por cdigo en lugar de un control data debemos crear dos objetos: el DataBase y el RecordSet. Para esto nada mejor que un ejercicio.

En este ejercicio vamos a ver como creamos la DataBase y el RecordSet y contamos los registros que contiene una de las Tablas. Tambin vamos a usar la propiedad Filter para crear un nuevo RecordSet. El cdigo es:
Option Explicit Private Sub Form_Load() 'Lo primero que debo hacer es incorporar la referencia Microsoft DAO 3.51. 'creacin de los objetos Database y recordset para manejar 'un conjunto de datos de tipo Dynaset Dim db As Database 'este es el objeto Database Dim rs As Recordset ' este es el objeto recordset 'creamos dos variables locales Dim strNombreDB As String Dim strNombreRS As String 'creamos una variable para contar los registros Dim intRegs As Integer 'inicializamos las variables strNombreDB = App.Path & "\books6.mdb" strNombreRS = "Titles" 'crea los objetos 'abre la base de datos y hace que el objeto db apunte a ella Set db = DBEngine.OpenDatabase(strNombreDB)

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 213

'genera el Dynaset a partir de la tabla Titles Set rs = db.OpenRecordset(strNombreRS, dbOpenDynaset) 'cuenta los registros en el conjunto de datos With rs .MoveLast ' se mueve al final del registro intRegs = .RecordCount ' obtiene la cantidad de registros End With 'los vuelca en un msgbox MsgBox strNombreRS & ": " & intRegs, vbInformation, "Total de Registros en el conjunto de Datos" 'los imprimo en el formulario Print strNombreRS & ": " & intRegs & " Registros" Print "____________________________________" 'Uso de la propiedad Filter y el Mtodo OpenRecordset 'para obtener un segundo conjunto de datos. Dim strFiltro As String Dim rs2 As Recordset strFiltro = "YearPub > 1990" 'crea el conjunto filtrado. 'Pruebe a cambiar el ao a 1980 o 1993. rs.Filter = strFiltro Set rs2 = rs.OpenRecordset With rs2 .MoveLast ' moverse al final del conjunto de datos intRegs = .RecordCount 'obtenga el total End With MsgBox strFiltro & ": " & intRegs, vbInformation, "Total de registros en el segundo conjunto de datos" 'lo imprime en el formulario Print strNombreRS & ": " & strFiltro & ": " & intRegs & " Registros" End Sub

Actividad de Aprendizaje 125 BD con DAO validacion de campos

En esta ejercitacin vamos a trabajar con algunos ejemplos de validacin de campos. en este primer ejercicio vamos a validar filtrando el teclado. O sea podrn ingresar slo nmeros del 0 al 9, en el primer cuadro de texto. Y letras en el segundo cuadro de texto. Y ambos en el tercero. El cdigo es:
Cuaderno de Trabajo Visual Basic APENDICE A Pgina 214

Private Sub Text1_KeyPress(KeyAscii As Integer) Dim strvalido As String strvalido = "0123456789" 'habilita solo nmeros If InStr(strvalido, Chr(KeyAscii)) = 0 Then KeyAscii = 0 ' sino es vlido lo vuelve nulo End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) ' cambia a maysculas. End Sub Private Sub Text3_KeyPress(KeyAscii As Integer) Dim strvalido As String strvalido = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii > 26 Then ' si no es un codigo de control If InStr(strvalido, Chr(KeyAscii)) = 0 Then KeyAscii = 0 End If End If End Sub

En este ejercicio vamos a agregar el uso de un control nuevo que nos facilita la validacin de campos. El MaskedEdit, que debemos traer desde componentes. Este control funciona como el cuadro de texto pero con algunas propiedades extras. Importante! Debe establecer la propiedad PromptIncluede como False cuando lo utilice como control enlazado. De lo contrario puede dar Error. En la propiedad Mask: le determinamos un formato para nmero telefnico: (##) ### - ####. Y en la propiedad Format seleccionamos para Importe: $#,##0.00;($#.##0.00).

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 215

El cdigo es:
Private Sub Form_Load() 'Carga la lista desplegable With Combo1 .AddItem "Minorista" .AddItem "Mayorista" .AddItem "Distribuidor" .AddItem "Otro" .ListIndex = 0 ' estalece de forma predeterminada el primer elemento. End With End Sub

Aqu vamos a validar por cdigo un campo requerido y un rango de mayor y menor, pero vamos a hacer la validacin a travs de el Click de un Botn.O sea vamos a hacer la validacin a nivel de formulario y no de campos. Para esto vamos a crear una funcin validoform que cuando chequee que est todo correcto devuelva un valor adecuado, aceptando la informacin del formulario, de lo contrario devuelva un mensaje de error. El cdigo es:
Option Explicit Private Sub Command1_Click() Dim strMsj As String strMsj = validoform() If strMsj = "" Then Unload Me Else MsgBox strMsj, vbExclamation, "Error de validacin" End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 216

Private Sub Form_Load() 'Carga la lista desplegable With Combocliente .AddItem "Minorista" .AddItem "Mayorista" .AddItem "Distribuidor" .AddItem "Otro" .ListIndex = 0 ' estalece de forma predeterminada el primer elemento. End With End Sub Public Function validoform() As String 'valida el formulario y devuelve un mensaje de error si no es vlido 'variables para la validacin del rango Dim intSup As Integer Dim intInf As Integer Dim strMsjSupInf As String 'variables para la validacin de la longitud Dim intMinLong As Integer Dim intMaxLong As Integer Dim strMsjMinMax As String Dim strEnviarMsj As String 'valores del rango intSup = 100 intInf = 0 strMsjSupInf = "El campo Superior/Inferior debe contener un valor entre " & CStr(intInf) & " y " & CStr(intSup) & "." 'valores de la longitud intMinLong = 3 intMaxLong = 10 strMsjMinMax = "El campo Maysculas debe tener entre " & CStr(intMinLong) & " y " & CStr(intMaxLong) & " caracteres." strEnviarMsj = "" 'verifique el campo Superior/Inferior With txtsupeinf If Val(.Text) < intInf Or Val(.Text) > intSup Then strEnviarMsj = strEnviarMsj & vbCrLf & strMsjSupInf & vbCrLf .SetFocus End If End With 'verifique el campo maysculas With txtletrasmayusculas If Len(.Text) < intMinLong Or Len(.Text) > intMaxLong Then strEnviarMsj = strEnviarMsj & vbCrLf & strMsjMinMax & vbCrLf .SetFocus End If End With validoform = strEnviarMsj 'valido el campo dinero If MaskEddinero.Text <> "" Then 'Tiene datos? If Not IsNumeric(MaskEddinero.Text) Then ' son numericos? strEnviarMsj = strEnviarMsj & vbCrLf & "El campo dinero debe tener un valor numrico." & vbCrLf MaskEddinero .SetFocus End If End If 'verifico el campo combinado With txtcombinado If Len(Trim(.Text)) = 0 Then strEnviarMsj = strEnviarMsj & vbCrLf & "El campo combinado es requerido." & vbCrLf .SetFocus End If End With validoform = strEnviarMsj

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 217

End Function Private Sub txtcombinado_KeyPress(KeyAscii As Integer) Dim strvalido As String strvalido = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii > 26 Then ' si no es un codigo de control If InStr(strvalido, Chr(KeyAscii)) = 0 Then KeyAscii = 0 End If End If End Sub Private Sub txtletrasmayusculas_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) ' cambia a maysculas. End Sub Private Sub txtnumeros_KeyPress(KeyAscii As Integer) Dim strvalido As String strvalido = "0123456789" 'habilita solo nmeros If InStr(strvalido, Chr(KeyAscii)) = 0 Then KeyAscii = 0 ' sino es vlido lo vuelve nulo End If End Sub

Cuaderno de Trabajo Visual Basic APENDICE A

Pgina 218