View
116
Download
8
Category
Tags:
Preview:
Citation preview
CUADERNO DE
VISUAL BASIC
APENDICE
Cuaderno de Trabajo Visual Basic se e
Licenciamiento Recíproco 3.0 Unported
CUADERNO DE TRABAJO
UAL BASIC –
APENDICE A
encuentra bajo una Licencia Creative Commons Atribución
Licenciamiento Recíproco 3.0 Unported. Septiembre 2011 – IDSystem
TRABAJO
Creative Commons Atribución-No Comercial-
ms
Cuaderno de Trabajo Visual Basic APENDICE A Página 2
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 – Contraseña.......................................................................................................... 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 Página 3
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 – Impresión 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 Página 4
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 - Pestañas ............................................................................................................ 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 Página 5
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 Página 6
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 Página 7
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 Página 8
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 código sería muy complejo pero usando el control Label
en su modo transparente y con el Caption vacío, o sea sin etiqueta nos permite subdividir la
imagen y que sus partes respondan a el evento Click por separado, provocando una respuesta
distinta.
En el formulario podemos ver la Label dibujada sobre el monitor, todavía opaca como viene
por defecto, luego sobre el gabinete está transparente pero con el Caption , también por
defecto en este caso : Label2. Y en el teclado donde está posicionado el cursor en cambio
está transparente. De acuerdo a la parte que seleccionemos: en una cuarta Label se nos
mostrará el texto correspondiente, en el caso del formulario : "Teclado".
En este ejercicio tenemos una Image, con su Propiedad Stretch a True, lo que nos permite
agrandar un icono al tamaño deseado. Y cuatro Labels, tres transparentes para subdividir
la Image y una opaca para mostrar la parte seleccionada, y un Botón de Salida. El Código de este ejercicio es el siguiente: Private Sub Command1_Click()
End ' Cierre de la aplicación End Sub Private Sub Label2_Click() 'El evento Click modific a 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 Página 9
Actividad de Aprendizaje 7 – Funciones matematicas
En este ejercicio veremos algunas funciones como la
búsqueda de números al azar, raíz de números y
redondeo de decimales. Usamos botones para
ejecutar las funciones, cajas de texto para ingresar
valores y labels para dar salida a los resultados.
El código es:
Option Explicit Private Sub Command1_Click()'boton de número al aza r Dim azar As Integer Randomize azar = Int(10 * Rnd) + 1 Label3.Caption = azar End Sub
Private Sub Command2_Click()'número al azar entre d os valores Dim azar As Integer Dim rangomenor As Integer Dim rangomayor As Integer Randomize rangomayor = CInt(Text2) rangomenor = CInt(Text1) azar = Int((rangomayor - rangomenor + 1) * Rnd + rangomenor) Label4 = azar End Sub
Private Sub Command3_Click()' raíz de un número Dim numero As Integer Dim raiz As Integer raiz = CInt(Text3) numero = CInt(Text4) Label5.Caption = numero ^ (1 / raiz) End Sub
Private Sub Command4_Click()'redondeo de un decimal Dim numero Dim decimales As Integer numero = Text6 decimales = CInt(Text5) Label10.Caption = Round(numero, decimales) End Sub
Private Sub Form_Activate() Text1.SetFocus End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 10
Actividad de Aprendizaje 8 – Interes compuesto
En este ejercicio vamos a crear una función que
nos permite calcular un interes compuesto, de
una suma inicial de acuerdo al porcentaje de
interés ingresado y la cantidad de cuotas en que
se devuelva el mismo. Usamos tres labels informativas, y tres cajas de texto
para ingresar los valores, un boton para ejecutar la
función y una label para que nos devuelva el cálculo
hecho. El código es:
Option Explicit Dim capital As Currency Dim interesmensual As Single Dim cuotas As Long
Private Sub Command1_Click()
capital = Text1 interesmensual = Text2 cuotas = Text3 Label4.Caption = InteresCompuesto(capital, interesmensual, cuotas)
End Sub Function InteresCompuesto(capital As Currency, inte resmensual 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 Página 11
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 Página 12
Actividad de Aprendizaje 9 – Crucigrama
Con este ejercicio queremos sugerir una
ejemplo de crucigrama que cada uno podrá
adaptar a los contenidos requeridos. También
a partir de aquí podríamos elaborar un
Ahorcado.
El crucigrama está armado con cuadros de texto o sea controles Text, encerrados dentro de
un control frame, este control tiene la única finalidad de agrupar y contener otros controles,
ordenando la interactividad de una manera visual. Otros dos controles Frame agrupan las
opciones vertical y horizontal. Conteniendo controles CheckBox que al ser seleccionados
hacen la corrección de las letras ingresadas en las cajas de texto. El ingreso de las mismas se
hace en tiempo de ejecución a través del teclado.
A la derecha vemos unos controles Picture vacíos que se cargaran con imágenes que
muestren por ejemplo una cara sonriente si la palabra es correcta o seria si no lo es, o
cualquier otro tipo de imagen .Podemos llamar a esta imagen con la función LoadPicture
desde cualquier parte de nuestro disco rígido. Y un botón con el icono de Hijitus indica la
Salida y cierre del programa.
Acá tendremos que crear por código una estructura condicional que controle si la entrada
de datos es correcta o no. El código es el siguiente:
Private Sub Command1_Click()
End End Sub Private Sub Check1_Click()
If Text1.Text = "L" And Text2.Text = "O" And Text3. Text= "R" And Text4.Text ="O" then ' este código debe ir todo en un mismo reglón y
'chequea si se escribió una de las palabras correct as. Ciudado con los
'nombres de los Controles porque seguramente Ustede s no tendrán la
'misma numeración que yo. (Otra aclaración cuando u samos el carácter '
'indicamos que todo lo que sigue es un comentario, por lo tanto la
'computadora no lo ejecuta lo saltea, no es código).
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face 03.ico) 'carita linda
Else 'Sino
Cuaderno de Trabajo Visual Basic APENDICE A Página 13
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face 01.ico) 'carita fea
End Sub Private Sub Check2_Click()
If Text2.Text = "O" And Text5.Text ="R" And Text9.T ext ="O" then Image2.Picture = LoadPicture(c:\vb\Icons\Misc\Face0 3.ico) 'carita linda
Else 'Sino Image2. Picture = LoadPicture(c:\vb\Icons\Misc\Face 01.ico) 'carita fea
End Sub Private Sub Check3_Click()
If Text7.Text = "R" And Text8.Text ="A" And Text9.T ext ="T" And Text4.Text="O" And Text10.Text ="N" th en Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face 03.ico) 'carita linda
Else 'Sino Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face 01.ico) 'carita fea
End Sub
Actividad de Aprendizaje 10 – Contraseña
Varios visitantes nos han pedido algún ejercicio que use una contraseña para entrar a un programa.
Aquí va un ejemplo. Vamos a usar la función InputBox que al abrir una ventana con una caja de texto
nos permite ingresar la contraseña.
Si no queremos usar la función podemos reemplazarla por el uso de un pequeño formulario diseñado a
nuestro gusto con una caja de texto. El programa se ve así:
Y el código del evento click del Botón Acceso al Sistema es el siguiente:
Dim nombreusuario As String Dim contraseña As String nombreusuario = InputBox("Introduzca su Nombre")
contraseña = InputBox("Introduzca CONTRASEÑA")
If UCase(nombreusuario) = "LAURA" And LCase(contras eña) = "secreto" Then
MsgBox "¡BIENVENIDA LAURA! ¿Preparada para trabajar con tu PC?" Image1.Visible = True
ElseIf UCase(nombreusuario) = "MIRTA" And LCase(con traseña) = "duende" Then
MsgBox "¿BIENVENIDA MIRTA AL SISTEMA! ¡A trabajar n o te duermas!" Image1.Visible = True
Else MsgBox "ACCESO DENEGADO"
End If
Cuaderno de Trabajo Visual Basic APENDICE A Página 14
Además de darnos el acceso con un saludo despliega una imagen en un control Image, en caso de no
ser la contraseña o el nombre del usuario el indicado nos niega el acceso.
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 válidas, sino poniendo todas en una sola línea de
código. Al hacer click en el formulario se abre un inputBox que nos pregunta ¿qué color compone el
arco iris?, y al introducir un texto y hacer click en aceptar, con la intrucción Print nos da salida por el
formulario un mensaje que incluye al color elegido.
El mensaje puede ser: lo siento ese color no pertenece al arco iris o, sí este color pertenece al arco iris.
En tiempo de ejecución el programa se ve así:
Private Sub Form_Click()
Dim msg As String, titulo As String
Dim color As String, colorArco As String
Beep msg = "Introduzca un color."
titulo = " Cuestionario del Arco Iris."
color = InputBox(msg, titulo)
colorArco = LCase(color) Select Case colorArco
Case "rojo", "naranja", "amarillo", "verde", "azul" , "morado" Print "Sí, el color "; color; " está en mí Arco Iri s."
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 Página 15
Actividad de Aprendizaje 12 – Escritorio
Este ejercicio nos permite jugar con el puntero del mouse simulando un recoger objetos, al estilo de
una aventura gráfica.
Tenemos una Label y tres Pictures, la 2 es la goma, la 3 el marcador (en el medio) y la 1 el lápiz. La idea
es que al hacer click en el lápiz quede en el puntero del mouse y así luego hacemos click en la label y
aparece la palabra Tarea, como si la hubiésemos escrito, luego dejamos el lápiz haciendo Click en el
Formulario. Hacemos Click en la goma y luego en la label y se borra la palabra Tarea. Hacemos Click en
el formulario y dejamos la goma. Y al hacer click en el marcador y tenerlo en el puntero del mouse
hacemos Click en la Label y esta se vuelve roja, antes era color amarillo. El código es:
Option Explicit
Private Sub Form_Click() If MouseIcon = Picture1.Picture Then ' aqui volvemo s al puntero estándar
MousePointer = 0 Picture1.Visible = True
End If If MouseIcon = Picture2.Picture Then
MousePointer = 0 Picture2.Visible = True
End If If MouseIcon = Picture3.Picture Then
MousePointer = 0 Picture3.Visible = True
End If End Sub
Private Sub Label1_Click() If MouseIcon = Picture1.Picture Then
' si el puntero es el lápiz la label 'muestra la pa labra Tarea en su caption. Label1.Caption = "Tarea"
End If If MouseIcon = Picture2.Picture Then ' si el punter o es la goma borra Tarea.
Label1.Caption = "" Label1.BackColor = vbYellow ' fondo de la label ama rillo
End If If MouseIcon = Picture3.Picture Then ' si el punter o es el marcador el fondo se vuelve 'rojo
Label1.Caption = ""
Cuaderno de Trabajo Visual Basic APENDICE A Página 16
Label1.BackColor = VBred End If
End Sub
Private Sub Picture1_Click()'carga el icono del láp iz MouseIcon = Picture1.Picture MousePointer = 99 Picture1.Visible = False
End Sub Private Sub Picture2_Click()'carga el icono en el p untero de la goma MouseIcon = Picture2.Picture
MousePointer = 99 Picture2.Visible = False
End Sub Private Sub Picture3_Click()'carga el icono en el p untero 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 animación ayuda al alumno a buscar la respuesta adecuada. es un
ejemplo de simulación. El código es:
Option Explicit Dim paso As Integer Dim i As Integer Dim tramo1 As String Dim tramo2 As String Dim tramo3 As String Dim tramo4 As String Private Sub Label1_Click()
Cuaderno de Trabajo Visual Basic APENDICE A Página 17
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, po rque 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, po rque 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, po rque 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, po rque 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 Els eIf paso = 2 Then Picture2.Move Picture2.Left - 100 , Picture2.Top ElseIf paso = 3 Then Picture2.Move Pic ture2.Left - 150, Picture2.Top ElseIf paso = 4 Then Picture2.Move Picture2.Left - 150, Picture2.Top Els eIf paso = 5 Then Picture2.Move Picture2.Left - 150 , Picture2.Top ElseIf paso = 6 Then Picture2.Move Pic ture2.Left - 150, Picture2.Top ElseIf paso = 7 Then Picture2.Move Picture2.Left - 150, Picture2.Top Els eIf paso = 8 Then Picture2.Move Picture2.Left - 150 , Picture2.Top ElseIf paso = 9 Then Picture2.Move Pic ture2.Left - 150, Picture2.Top ElseIf paso = 10 The n Picture2.Move Picture2.Left - 150, Picture2.Top Els eIf paso = 11 Then Picture2.Move Picture2.Left - 15 0, Picture2.Top ElseIf paso = 12 Then Picture2.Move Pi cture2.Left - 150, Picture2.Top ElseIf paso = 13 Th en Picture2.Move Picture2.Left - 150, Picture2.Top Els eIf paso = 14 Then Picture2.Move Picture2.Left - 15 0, Picture2.Top ElseIf paso = 15 Then Picture2.Move Pi cture2.Left - 150, Picture2.Top ElseIf paso = 16 Th en
Cuaderno de Trabajo Visual Basic APENDICE A Página 18
Picture2.Move Picture2.Left - 150, Picture2.Top Els eIf 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 Els eIf paso = 20 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 21 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 22 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 23 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 24 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 25 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 26 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 28 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 29 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 30 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 31 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 32 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 33 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 34 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 35 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 36 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 37 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 38 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 39 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 40 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 41 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 42 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 43 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 44 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 45 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 46 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 47 Th en Picture2.Move Picture2.Left + 150, Picture2.Top Els eIf paso = 48 Then Picture2.Move Picture2.Left + 15 0, Picture2.Top ElseIf paso = 49 Then Picture2.Move Pi cture2.Left + 150, Picture2.Top ElseIf paso = 50 Th en Picture2.Move Picture2.Left + 126, Picture2.Top tra mo2 = " 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.M ove Picture2.Left - 150, Picture2.Top ElseIf paso = 53 Then Picture2.Move Picture2.Left - 150, Picture2.To p ElseIf paso = 54 Then Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 55 Then Picture2.M ove Picture2.Left - 150, Picture2.Top ElseIf paso = 56 Then Picture2.Move Picture2.Left - 150, Picture2.To p ElseIf paso = 57 Then Picture2.Move Picture2.Left - 150, Picture2.Top ElseIf paso = 58 Then Picture2.M ove 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 Els eIf paso = 62 Then Picture2.Move Picture2.Left + 25 0, Picture2.Top ElseIf paso = 63 Then Picture2.Move Pi cture2.Left + 250, Picture2.Top ElseIf paso = 64 Th en Picture2.Move Picture2.Left + 210, Picture2.Top tra mo4 = " y 500 mts al Este. ¿Que distancia Recorrió? " Label4.Caption = Label4.Caption & tramo4 End If pas o = 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 Página 19
Actividad de Aprendizaje 14 – Cobro de Servicios
Este ejercicio utiliza Botones de Opción y fue realizado a partir del pedido de un alumno por mail.
También integra: labels, caja de textos, botones y calcula el total del valor del pedido de acuerdo a la
opción seleccionada y la cantidad. Su código es el siguiente: 'Declaración de las variables para el precio de cad a 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 'De claración de variables para la cantidad de cada una . Dim CantidadHamburguesa As Integer Dim CantidadHotDog As Integer Dim CantidadSandwich As Integer Dim CantidadGaseosa As Integer Dim CantidadRefresco As Integer Dim CantidadPapasFritas As Integer
Private Sub cmdCalcular_Click() 'Multiplicando la cantidad por el precio y sum ando para hallar el total. Total = (CantidadHamburguesa * Hamburguesa) + (CantidadHotDog * HotDog) + _ (CantidadSandwich * Sandwich) + (C antidadGaseosa * Gaseosa) + _ (CantidadRefresco * Refresco) + (C antidadPapasFritas * 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 Página 20
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 Página 21
'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 Página 22
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.Tex t) End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 23
Private Sub txtHamburguesa_LostFocus() If txtHamburguesa.Text = "" Then CantidadHamburguesa = 0 Exit Sub End If If IsNumeric(txtHamburguesa.Text) Then 'Si es num érico. If txtHamburguesa.Text > 0 Then 'Si es positivo. CantidadHamburguesa = txtHamburguesa.Text
'Entonces asigna el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtHamburguesa.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtHamburguesa.SetFocus End If End Sub
Private Sub txtGaseosa_Change() lblTotal.Caption = "" End Sub
Private Sub txtGaseosa_GotFocus() 'Para seleccionar el texto(igual en todos). txtGaseosa.SelStart = 0 txtGaseosa.SelLength = Len(txtGaseosa.Text) End Sub
Private Sub txtGaseosa_LostFocus() If txtGaseosa.Text = "" Then CantidadGaseosa = 0 Exit Sub End If If IsNumeric(txtGaseosa.Text) Then 'Si es numéric o. If txtGaseosa.Text > 0 Then 'Si es positivo. CantidadGaseosa = txtGaseosa.Text 'Entonces asi gna el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtGaseosa.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtGaseosa.SetFocus End If End Sub
Private Sub txtHotDog_Change() lblTotal.Caption = "" End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 24
Private Sub txtHotDog_GotFocus() txtHotDog.SelStart = 0 txtHotDog.SelLength = Len(txtHotDog.Text) End Sub
Private Sub txtHotDog_LostFocus() If txtHotDog.Text = "" Then CantidadHotDog = 0 Exit Sub End If If IsNumeric(txtHotDog.Text) Then 'Si es numérico . If txtHotDog.Text > 0 Then 'Si es positivo. CantidadHotDog = txtHotDog.Text 'Entonces asign a el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtHotDog.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtHotDog.SetFocus End If End Sub
Private Sub txtPapasFritas_Change() lblTotal.Caption = "" End Sub
Private Sub txtPapasFritas_GotFocus() txtPapasFritas.SelStart = 0 txtPapasFritas.SelLength = Len(txtPapasFritas.Tex t) End Sub
Private Sub txtPapasFritas_LostFocus() If txtPapasFritas.Text = "" Then CantidadPapasFritas = 0 Exit Sub End If If IsNumeric(txtPapasFritas.Text) Then 'Si es num érico. If txtPapasFritas.Text > 0 Then 'Si es positivo. CantidadPapasFritas = txtPapasFritas.Text 'Ento nces asigna el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtPapasFritas.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtPapasFritas.SetFocus End If End Sub
Private Sub txtRefresco_Change() lblTotal.Caption = "" End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 25
Private Sub txtRefresco_GotFocus() txtRefresco.SelStart = 0 txtRefresco.SelLength = Len(txtRefresco.Text) End Sub
Private Sub txtRefresco_LostFocus() If txtRefresco.Text = "" Then CantidadRefresco = 0 Exit Sub End If If IsNumeric(txtRefresco.Text) Then 'Si es numéri co. If txtRefresco.Text > 0 Then 'Si es positivo. CantidadRefresco = txtRefresco.Text 'Entonces a signa el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtRefresco.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtRefresco.SetFocus End If End Sub
Private Sub txtSandwich_Change() lblTotal.Caption = "" End Sub
Private Sub txtSandwich_GotFocus() txtSandwich.SelStart = 0 txtSandwich.SelLength = Len(txtSandwich.Text) End Sub
Private Sub txtSandwich_LostFocus() If txtSandwich.Text = "" Then CantidadSandwich = 0 Exit Sub End If If IsNumeric(txtSandwich.Text) Then 'Si es numéri co. If txtSandwich.Text > 0 Then 'Si es positivo. CantidadSandwich = txtSandwich.Text 'Entonces a signa el valor a la variable. Else MsgBox "Entre un valor positivo", vbCritical txtSandwich.SetFocus End If Else MsgBox "Entre un valor numérico", vbCritical txtSandwich.SetFocus End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 26
Actividad de Aprendizaje 15 – Areas
Este ejercicio calcula el área de distintas figuras geométricas. usamos el mismo escenario que para la
aplicación Ecuaciones de Segundo Grado.Su código es:
Option Explicit Dim Figura As String 'Identifica las figuras. Dim B1 As Single 'Para la base mayor del trapecio. Dim b As Single 'Para la base. Dim h As Single 'Para la altura. Dim Area As Single 'Para el área Const Pi = 3.1415 'constante Sub Circulo() Call Limpiar Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el cálculo. lblB.Caption = "r=" picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los resu ltados. Dim x As Single, y As Single x = picFigura.Width / 2 y = picFigura.Height / 2 picFigura.DrawWidth = 2 'Grueso del punto del cen tro. picFigura.PSet (x, y) 'Poner un punto en el centr o. picFigura.DrawWidth = 1 'Restaurar el grueso para dibujar el círculo. picFigura.Circle (x, y), 700 'Dibujar el círculo en el centro del Picture.
'Dibujar el radio. picFigura.Line (x, y)-(600, 600) 'Colocar los letreros de la base. picFigura.CurrentX = 1000 picFigura.CurrentY = 600
Cuaderno de Trabajo Visual Basic APENDICE A Página 27
picFigura.Print "r"
'Situar la fórmula. picFormula.CurrentX = 25 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " Área = 3.14 x r ^ 2 " End Sub
Sub Trapecio() Call Limpiar Call MostrarB1 Call MostrarH Call CambiarLabels picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas. 'Dibuja las 4 líneas. picFigura.Line (300, 1400)-(300, 300) picFigura.Line -(1500, 300) picFigura.Line -(2100, 1400) picFigura.Line -(300, 1400)
'Colocar los letreros de altura. picFigura.CurrentX = 100 picFigura.CurrentY = 700 picFigura.Print "h" 'Colocar los letreros de la base mayor. picFigura.CurrentX = 1100 picFigura.CurrentY = 1450 picFigura.Print "B" 'Colocar los letreros de la base menor. picFigura.CurrentX = 850 picFigura.CurrentY = 50 picFigura.Print "b" 'Situar la fórmula. picFormula.CurrentX = 50 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print "Área = (B + b)h / 2 " End Sub
Sub CambiarLabels() lblB.Caption = "b=" lblH.Caption = "h=" End Sub
Sub Rombo() Call Limpiar picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas. 'Dibuja las 4 líneas. picFigura.Line (500, 850)-(1050, 100) picFigura.Line -(1700, 850) picFigura.Line -(1050, 1600)
Cuaderno de Trabajo Visual Basic APENDICE A Página 28
picFigura.Line -(500, 850) picFigura.DrawStyle = 2 'Dibujar la diagonales co n líneas discontinuas. 'Dibujar diagonales picFigura.Line (500, 850)-(1700, 850) picFigura.Line (1050, 100)-(1050, 1600) 'Colocar los letreros de altura. picFigura.CurrentX = 1200 picFigura.CurrentY = 650 picFigura.Print "d1" 'Colocar los letreros de la base. picFigura.CurrentX = 1100 picFigura.CurrentY = 1050 picFigura.Print "d2" 'Situar la fórmula picFormula.CurrentX = 60 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print "Área = (d1 x d2) / 2 " End Sub
Sub OcultarH() 'Oculta lblH y txtH. lblH.Visible = False txtH.Visible = False End Sub Sub MostrarH() 'Muestra lblH y txtH. lblH.Visible = True txtH.Visible = True End Sub Sub Cuadrado() Call Limpiar Call CambiarLabels picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas. 'Dibuja las 4 líneas.
picFigura.Line (500, 300)-(1900, 1400), , B 'Dibu ja un cuadrado dando los vértices opuestos.
'Colocar los letreros de altura. picFigura.CurrentX = 300 picFigura.CurrentY = 700 picFigura.Print "b" 'Colocar los letreros de la base. picFigura.CurrentX = 1100 picFigura.CurrentY = 1450 picFigura.Print "b" 'Situar la fórmula. picFormula.CurrentX = 300 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " Área = b ^ 2 " End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 29
Sub Paralelogramo() Call Limpiar Call CambiarLabels picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas 'Dibuja las 4 líneas. picFigura.Line (300, 1400)-(500, 300) picFigura.Line -(2100, 300) picFigura.Line -(1900, 1400) picFigura.Line -(300, 1400) 'Dibujar la altura. picFigura.DrawStyle = 2 'Dibujar con líneas punte adas la altura. picFigura.Line (500, 300)-(500, 1400) 'Colocar los letreros de altura. picFigura.CurrentX = 550 picFigura.CurrentY = 700 picFigura.Print "h" 'Colocar los letreros de la base. picFigura.CurrentX = 1100 picFigura.CurrentY = 1450 picFigura.Print "b" 'Situar la fórmula picFormula.CurrentX = 300 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " Área = b x h " End Sub
Sub Rectangulo() Call Limpiar picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas Call CambiarLabels 'Dibuja las 4 líneas. picFigura.Line (300, 1400)-(300, 300) picFigura.Line -(2100, 300) picFigura.Line -(2100, 1400) picFigura.Line -(300, 1400) 'Colocar los letreros de altura. picFigura.CurrentX = 100 picFigura.CurrentY = 700 picFigura.Print "h" 'Colocar los letreros de la base. picFigura.CurrentX = 1100 picFigura.CurrentY = 1450 picFigura.Print "b" 'Situar la fórmula picFormula.CurrentX = 300 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " Área = b x h " End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 30
Sub Limpiar() picFigura.Cls 'Limpiar el PictureBox para las fig uras. picFormula.Cls 'Limpiar PictureBox para la fórmul a. End Sub
Sub OcultarB1() 'Oculta lblB1 y txtB1. lblB1.Visible = False txtB1.Visible = False End Sub
Sub MostrarB1() 'Muestra lblB1 y txtB1. lblB1.Visible = True txtB1.Visible = True End Sub
Sub Triangulo() Call Limpiar picFigura.DrawStyle = 0 'Dibujar con líneas conti nuas. Call CambiarLabels 'Dibuja las 3 líneas. picFigura.Line (300, 1400)-(1600, 300) picFigura.Line -(2100, 1400) picFigura.Line -(300, 1400) picFigura.DrawStyle = 2 'Dibujar la altura con lí neas continuas. 'Dibuja la altura picFigura.Line (1600, 300)-(1600, 1400) 'Colocar los letreros de altura. picFigura.CurrentX = 1450 picFigura.CurrentY = 900 picFigura.Print "h" 'Colocar los letreros de la base. picFigura.CurrentX = 1300 picFigura.CurrentY = 1450 picFigura.Print "b" 'Situar la fórmula picFormula.CurrentX = 100 picFormula.CurrentY = 500 picFormula.FontBold = True picFormula.FontSize = 12 picFormula.Print " Área=( b x h ) / 2" End Sub
Private Sub cmdCalcular_Click() fraResultados.Visible = True Select Case Figura Case "Triangulo" Area = b * h / 2 Case "Paralelogramo" Area = b * h Case "Rectangulo" Area = b * h Case "Cuadrado" Area = b ^ 2 'Usamos la misma variable b para el lado.
Cuaderno de Trabajo Visual Basic APENDICE A Página 31
Case "Rombo" Area = b * h / 2
'Usamos las mismas variables b y h para las diagona les. ‘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 ra dio.Cambiamos la etiqueta a r.
End Select txtArea.Text = Area End Sub
Private Sub cmdSalir_Click() End End Sub
Private Sub Form_Load() 'Inicializar las variables. h = 1 b = 2 B1 = 1 'Inicializar las cajas de texto. txtB.Text = b txtH.Text = h txtB1.Text = B1 End Sub
Private Sub optCirculo_Click() If optCirculo.Value Then Figura = "Circulo" Call Circulo 'Dibuja el círculo. End If End Sub
Private Sub optCuadrado_Click() If optCuadrado.Value Then Figura = "Cuadrado" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. Call OcultarH 'Pone invisible lblH y txtH por no necesitarse para el cálculo. Call Cuadrado 'Dibuja el cuadrado. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los res ultados. End If End Sub
Private Sub optParalelogramo_Click() If optParalelogramo.Value Then Figura = "Paralelogramo" Call Paralelogramo 'Dibuja el paralelogramo. Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. Call MostrarH 'Pone visible lblH y txtH. fraDatos.Visible = True 'MostrarB1 los datos fraResultados.Visible = False 'OcultarB1 los res ultados End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 32
Private Sub optRectangulo_Click() If optRectangulo Then Figura = "Rectangulo" Call Rectangulo 'Dibuja el rectángulo. Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. Call MostrarH 'Pone visible lblH y txtH. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los res ultados. End If End Sub
Private Sub optRombo_Click() If optRombo.Value Then Figura = "Rombo" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. lblB.Caption = "d1=" 'Cambiar el valor del lblB. lblH.Caption = "d2=" 'Cambiar el valor del lblH. Call MostrarH 'Pone visible lblH y txtH. Call Rombo 'Dibuja el rombo. fraDatos.Visible = True 'MostrarB1 los datos. fraResultados.Visible = False 'OcultarB1 los res ultados. 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 res ultados. End If End Sub
Private Sub optTriangulo_Click() If optTriangulo.Value Then Figura = "Triangulo" Call OcultarB1 'Pone invisible lblB1 y txtB1 por no necesitarse para el cálculo. Call MostrarH 'Pone visible lblH y txtH. Call Triangulo 'Dibuja el triángulo por código. fraDatos.Visible = True 'MostrarB1 los datos fraResultados.Visible = False 'OcultarB1 los res ultados End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 33
Private Sub txtB_LostFocus() If IsNumeric(txtB.Text) Then 'Cheque si el valor es numérico. If txtB.Text > 0 Then 'Chequea si es mayor que c ero. b = txtB.Text 'Asigna el valor del texto a la v ariable. Else 'Si no cumple lo anterior. MsgBox "Valor incorrecto,debe ser mayor que cer o", vbCritical txtB.SetFocus 'Situa el foco en el TexBox txtB. End If Else 'Si no es numérico el dato. MsgBox "El valor debe ser mayor que cero", vbCri tical txtB.SetFocus 'Situa el foco en el TexBox txtB. End If End Sub
Private Sub txtB1_LostFocus() If IsNumeric(txtB1.Text) Then 'Cheque si el valor es numérico. If txtB1.Text > 0 Then 'Chequea si es mayor que cero. B1 = txtB1.Text 'Asigna el valor del texto a la variable. Else 'Si no cumple lo anterior. MsgBox "Valor incorrecto,debe ser mayor que cer o", vbCritical txtB1.SetFocus 'Situa el foco en el TexBox txtB 1. End If Else 'Si no es numérico el dato. MsgBox "El valor debe ser mayor que cero", vbCri tical txtB1.SetFocus 'Situa el foco en el TexBox txtB1 . End If End Sub
Private Sub txtH_LostFocus() If IsNumeric(txtH.Text) Then 'Cheque si el valor es numérico. If txtH.Text > 0 Then 'Chequea si es mayor que c ero. h = txtH.Text 'Asigna el valor del texto a la v ariable. Else 'Si no cumple lo anterior. MsgBox "Valor incorrecto,debe ser mayor que cer o", vbCritical txtH.SetFocus 'Situa el foco en el TexBox txtH. End If Else 'Si no es numérico el dato. MsgBox "El valor debe ser mayor que cero", vbCri tical txtH.SetFocus 'Situa el foco en el TexBox txtH. End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 34
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 Página 35
Actividad de Aprendizaje 16 – Sumas
Este ejercicio elige en forma Aleatoria dos números y los despliega en dos Labels para que el alumno
luego, introduzca el valor correcto de la suma de ambos en un TextBox . Si está bien le aparecerá la
carita sonriente y sino la de disgusto. Luego volverán a aparecer otros dos números para que siga
sumando.
El botón Aplicar permite hacer la corrección mediante un Condicional. Algunos de estos temas son
comunes a otros ejercicios. Por lo tanto nos centraremos en las funciones nuevas.
La función Rnd nos permite cargar en una variable un número aleatorio que en este caso definimos
como entero Int (de Integer) y de 0 a 10.
Num1 = int( Rnd * 10)
Repetimos el procedimiento para Num2, el segundo sumando de nuestra cuenta. Para que realmente
sea aleatorio debemos incorporar la sentencia Randomize en el Procedimiento Load del Formulario.
Otra función que utilizamos es Val que transforma una cadena de caracteres, en este caso el contenido
de un Text en un valor numérico.
Resultado = Val ( Text1.Text)
Y luego con un condicional y el operador de suma + controlamos si el resultado es correcto:
Cuaderno de Trabajo Visual Basic APENDICE A Página 36
If resultado = Int(num1) + Int(num2) then...
En el caso de resolver bien la cuenta pasa a cargar otros dos números , iniciando una nueva cuenta.
Pero necesitamos una espera en la aplicación. Esto lo hacemos por código con un bucle que asociado al
reloj del sistema crea una pausa en la aplicación. Para esto creamos un Procedimiento llamado Pausa.
Posicionados en la ventana de código , vamos a Tools/ Herramientas, Add Procedure/ Agregar
Procedimiento, y en la ventana que se nos abre elegimos un Name para el mismo en este caso = Pausa
y luego con los botones de opción seleccionamos: Sub y Private. Damos el Aceptar y se cierra la
ventana. Ahora veremos en nuestra ventana de código un nuevo Procedimiento llamado Pausa.
Incluido dentro de los procedimientos del objeto General. Luego lo llamaremos desde otra parte del
programa con la sentencia Call.
Para mayor claridad vamos al código:
Option Explicit
Dim num1, num2, resultado As Integer
Private Sub pausa() ' este el procedimiento creado por nosotros
Dim comenzar Dim controlar comenzar = Timer Do Until controlar > = comenzar + 1.5 ' este es el bucle de espera
controlar = Timer DoEvents ' esta sentencia evita un bucle egoista
Loop End Sub Private Sub Command1_Click()
num1 = Int(Rnd * 10) 'elige un número aleatorio
num2 = Int(Rnd * 10) 'elige un número aleatorio
Text1.Text = "" Label1.Caption = num1 Label2.Caption = num2 Text1.SetFocus ' ubica el foco del cursor en el con trol Text1 Command2.Enabled = False Image1.Picture = Nothing 'vacía el contenido de la imagen
End Sub Private Sub Command2_Click()
Command2.Enabled = False resultado = Val(Text1.Text) If resultado = Int(num1) + Int(num2) Then
Image1.Picture = Picture1.Picture
Call pausa ' llama al procedimiento que creamos com o Pausa Call Command1_Click 'este procedimiento llama a otr a suma
Else Image1.Picture = Picture2.Picture
End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 37
Private Sub Command3_Click() Unload Me
End Sub Private Sub Form_Load()
Randomize num1 = Int(Rnd * 10)'al cargarse el programa ya apa rece una cuenta num2 = Int(Rnd * 10) Text1.Text = "" Label1.Caption = num1'se vuelcan las variables en l as Labels Label2.Caption = num2 Command2.Enabled = False'el botón aplicar está desa ctivado
End Sub Private Sub Text1_Change()
Command2.Enabled = True'al cambiar el texto se acti va Aplicar End Sub
Actividad de Aprendizaje 17 – Temperaturas
En este ejercicio, simplemente entramos en tiempo de ejecución una temperatura para cada día de la
semana y luego haciendo click en los botones: Alta, Media y Baja , devuelve los valores en otras cajas
de texto. El código es el siguiente:
Option Explicit Dim alta As Single Dim dia As Integer Dim baja As Single Dim media As Single Private Sub Command1_Click() ' mostrar el valor más alto de los textbox() en el text Alta
alta = Text1(0).Text For dia = 1 To 6
If Text1(dia).Text > alta Then alta = Text1(dia).Text
End If Next dia Text2.Text = alta
Cuaderno de Trabajo Visual Basic APENDICE A Página 38
End Sub Private Sub Command2_Click() 'calcular la más baja y lo muestra en el Text1(0).Text
For dia = 1 To 6 If Text1(dia).Text < baja Then
baja = Text1(dia).Text End If
Next dia Text3.Text = baja
End Sub Private Sub
Command3_Click() 'calcula la media de los contenido s de text1() Dim total As Single Dim promedio As Single total = 0 For dia = 0 To 6
total = total + Text1(dia) Next dia promedio = total / 7 Text4.Text = Format(promedio, "##.##") 'formato con dos decimales
End Sub Private Sub Command4_Click()
For dia = 0 To 6 Text1(dia).Text = ""
Next dia Text1(0).SetFocus
End Sub Private Sub Command5_Click()
End End Sub
Usando estructuras de repetición For Next, calculamos los valores de alta y baja, luego para la media
sacamos por división el promedio.
Cuaderno de Trabajo Visual Basic APENDICE A Página 39
Actividad de Aprendizaje 18 – Efectos visuales
En este ejercicio vamos a realizar por código, ciertos efectos especiales aplicados a una imágen,
durante el proceso de carga de la misma en un control Picture. Para estos efectos usamos el método
PaintPicture. El código es el siguiente:
Private Sub Command1_Click()' Efecto estirado de la imagen Dim i For i = 1 To Picture1.ScaleWidth Step 3 Picture2.PaintPicture Picture1.Picture, 0, 0, Pi cture1.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 * str ipewidth, 0, j, Picture1.ScaleHeight, i * stripewidth, 0, j, Picture1.ScaleHeight, &HCC0020 Next Next End Sub
Private Sub Command3_Click()'Efecto barrido desde l a 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, (Picture 1.ScaleWidth - pw) / 2, 0, pw, ph, (Picture1.ScaleW idth - pw) / 2, 0, pw, ph, &HCC0020 pw = pw + 2 Next i End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 40
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 Página 41
Actividad de Aprendizaje 19 – Juego: ¿Qué ves?
Este es un juego de mesa pero en su version digital. Declaramos un array con un número determinado
de palabras que seran elegidas al azar, para que no se repita siempre el mismo orden, la subrutina que
usamos es similar al del juego memoria, luego en un control de texto ingresamos la palabra indicada y
automáticamente nos da un punto si es correcta.
El código es el siguiente:
Option Explicit Dim numero(1 To 20) As Integer Dim I As Integer Dim a As Integer Dim J As Integer Dim idxtemp As Integer Dim s As Integer Private Sub azar()
Static temparray(1 To 20) As Integer Randomize For I = 1 To 20 temparray(I) = I Next I Top = 20 For I = 1 To 20
idxtemp = Int(Top * Rnd + 1) numero(I) = temparray(idxtemp) For J = idxtemp To Top - 1
temparray(J) = temparray(J + 1) Next J Top = Top - 1 'Print numero(I)
Next I End Sub Private Sub Command1_Click()
If I > 1 Then Label1.Caption = numero(I - 1) Call mostrar
Cuaderno de Trabajo Visual Basic APENDICE A Página 42
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 Página 43
Case 14 Command2.Picture = Image1(13).Picture
Case 15 Command2.Picture = Image1(14).Picture
Case 16 Command2.Picture = Image1(15).Picture
Case 17 Command2.Picture = Image1(16).Picture
Case 18 Command2.Picture = Image1(17).Picture
Case 19 Command2.Picture = Image1(18).Picture
Case 20 Command2.Picture = Image1(19).Picture
End Select End Sub Private Sub
Text1_Change() Call corregir
End Sub Private Sub corregir()
Static puntos As Integer Select Case Label1 Case 1
If UCase(Text1.Text) = "CARAMBOLA" Then puntos = puntos + 1
Case 2 If UCase(Text1.Text) = "APRESADO" Then
puntos = puntos + 1 Case 3
If UCase(Text1.Text) = "APRENDER" Then
puntos = puntos + 1 Case 4
If UCase(Text1.Text) = "CAJÓN" Then puntos = puntos + 1
Case 5 If UCase(Text1.Text) = "CAMPAÑA" Then
puntos = puntos + 1 Case 6
If UCase(Text1.Text) = "CANOSO" Then
puntos = puntos + 1 Case 7
If UCase(Text1.Text) = "CARACÚ" Then
puntos = puntos + 1 Case 8
If UCase(Text1.Text) = "CASINO" Then
puntos = puntos + 1 Case 9
If UCase(Text1.Text) = "CORAZONADA" Then
puntos = puntos + 1 Case 10
If UCase(Text1.Text) = "CUCHARITA" Then
puntos = puntos + 1 Case 11
Cuaderno de Trabajo Visual Basic APENDICE A Página 44
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 >= 2 0 Then Label2.Caption = "¡Ganaste!" End If
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 45
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 código es el siguiente: Option Explicit Dim Nota() As Single Dim N As Integer 'Número total de notas.
Private Sub cmdBorrarNota_Click() Dim i As Integer, NotaInd As Integer NotaInd = List1.ListIndex + 1 'Asigna el orden de l elemento de la lista a una variable. If List1.ListIndex = -1 Then 'Si no esta chechead a la lista. MsgBox "Haga click en la lista para borrar la no ta" Exit Sub Else List1.RemoveItem (List1.ListIndex) 'Borra de la Lista la Nota Text1.Text = "" 'Limpia el texto. 'Eliminar la nota de indice (List1.ListIndex+1) y correr las notas For i = NotaInd To N - 1 Nota(i) = Nota(i + 1) Next i N = N - 1 'actualizando número de notas por ser borrada una. If N > 1 Then ReDim Preserve Nota(1 To N) 'Reaju stando la dimensión del arreglo notas Text2.Text = "" End If End Sub
Private Sub cmdEntrarNota_Click() If Text1.Text = "" Then 'Si no se han introducido nota. MsgBox "No se ha introducido una nota" Text1.SetFocus
Cuaderno de Trabajo Visual Basic APENDICE A Página 46
Exit Sub End If N = N + 1 'Inicializa el conteo de las notas entr adas. ReDim Preserve Nota(1 To N) 'Redimesiona el arreg lo. Nota(N) = Text1.Text 'Asigna el valor al arreglo. List1.AddItem (Nota(N)) 'Añade la nota a la lista . cmdEntrarNota.Enabled = False End Sub
Private Sub cmdPromedio_Click() Dim Suma As Single Dim Promedio As Single Dim J As Integer If N = 0 Then 'Si el número de notas es cero. MsgBox "No existen valores para promediar" Exit Sub End If Suma = 0 For J = 1 To N 'Suma todas las notas Suma = Suma + Nota(J) Next J Promedio = Suma / N Text2.Text = Promedio End Sub
Private Sub cmdSalir_Click() End End Sub
Private Sub Form_Activate() Text1.SetFocus
End Sub
Private Sub Text1_Change() cmdEntrarNota.Enabled = True Text2.Text = "" End Sub
Private Sub Text1_Click() cmdEntrarNota.Enabled = True End Sub
Private Sub Text1_GotFocus() 'Para Selelccionar el texto al hacer click en él. Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub
Private Sub Text1_LostFocus() If IsNumeric(Text1.Text) Then 'Chequea si el valo r es numérico. If Text1.Text <= 0 Then 'Chequea si es mayor que cero. MsgBox "Valor incorrecto,debe ser mayor que cer o", vbCritical Text1.SetFocus 'Situa el foco en el TexBox Text 1.
Cuaderno de Trabajo Visual Basic APENDICE A Página 47
End If Else 'Si no es numérico el dato. MsgBox "El valor debe ser mayor que cero", vbCri tical 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 matríz de controles. en este caso
un array de botones. Nos sirve de introducción al próximo ejercico donde usaremos un array de cajas
de texto. El código es el siguiente:
Private Sub Command1_Click(Index As Integer) 'Como es un array de controles. Al copiar el prim er botón y pegarlo 'le decimos que sí a la ventana que no dice si qu eremos crear 'un array de controles. 'A partir de ahora todos responden al mismo event o por eso los 'identificamos por la propiedad INDEX Label1.Caption = "Hiciste Click en el Botón Nº " & Command1(Index).Caption End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 48
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 código completo es: Private Sub txtA_Change(Index As Integer) If IsNumeric(txtA(Index)) Then txtC(Index) = Val(txtA(Index)) + Val(txtB(Index) ) Else txtC(Index) = "#######" End If End Sub
Private Sub txtB_Change(Index As Integer) If IsNumeric(txtB(Index)) Then txtC(Index) = Val(txtA(Index)) + Val(txtB(Index) ) Else txtC(Index) = "#######" End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 49
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 opción para mostrar las
cartas, o secuencial o aleatorio. El código es el siguiente:
En Option Explicit Dim ladoA(1 To 10) As String Dim ladoB(1 To 10) As String Dim numcarta As Integer Dim indice As Integer Private Sub Command1_Click() 'mostrar el lado A de la carta siguiente.
'los botones de opcion seleccionan una carta secu encial o aleatoria If Option1.Value = True Then 'incrementar el indice actual y comprobar si se encuentra dentro del intervalo de 1 a numcarta. indice = indice + 1 If indice < 1 Or indice > numcarta Then 'si el indice está fuera del intérvalo, comenza r nuevamente. indice = 1 End If ElseIf Option2.Value = True Then 'carta aleatoria. indice aleatorio de 1 a numcaa rta. indice = Fix(numcarta * Rnd) + 1 End If ' mostrar el lado A y el número de carta, Borrar el lado B Text3.Text = indice Text1.Text = ladoA(indice) Text2.Text = "" ' desactivar el botón lado A y activar el botón L ado B Command1.Enabled = False
Cuaderno de Trabajo Visual Basic APENDICE A Página 50
Command2.Enabled = True End Sub
Private Sub Command2_Click() 'mostrar el lado B de la tarjeta actual Text2.Text = ladoB(indice) 'activa el boton lado A y desactiva lado B Command1.Enabled = True Command2.Enabled = False End Sub
Private Sub Command3_Click() End End Sub
Private Sub Form_Load() ' asignar valores a los arrays ladoA y ladoB numcarta = 7 ladoA(1) = "Nihon´go" ladoB(1) = "Idioma Japonés" ladoA(2) = "Ohayo gozaimasu"
ladoB(2) = "Buenos Días" ladoA(3) = "Ken´nichi wa" ladoB(3) = "Hola o Buen Día" ladoA(4) = "Kon´ban wa" ladoB(4) = "Buenas Tardes" ladoA(5) = "Oyasumi nasai" ladoB(5) = "Buenas Noches" ladoA(6) = "Ja, mata ashita" ladoB(6) = "Bien, nos veremos mañana" ladoA(7) = "Sayonara" ladoB(7) = "Adiós" 'activar el botón ladoA y desactivar el ladoB Command1.Enabled = True Command2.Enabled = False End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 51
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 Página 52
Actividad de Aprendizaje 24 – Torero
Este ejercicio muestra una sucesión de Imágenes al estilo un show de diapositivas .Las imágenes las
cargamos en controles Image a la izquierda del formulario invisibles, para luego convocarlas por código
y desplegarlas en la Image central, ésta si con su propiedad visible = True.
La sucesión de imágenes la realiza un control Timer asociado a un contador , cada imagen se relaciona
con un texto que desplegamos en una Label colocada debajo de la imagen central. Al llegar el contador
a 12 se detiene la sucesión y se muestra una Label con los nombres de los creadores de la aplicación.
La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicación, para esto inicializa la
variable A = 0 y pone el Timer nuevamente en funcionamiento.
El código de los principales procedimientos es el siguiente:
Option explicit Dim A as Integer Private Sub Label3_Click() ' esta es la label de re iniciar
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 Página 53
Private Sub Timer1_Timer() A = A + 1 If A = 3 then
Image13.Picture= Image1.Picture
Label2.caption = "Y los tirantes después..."
ElseIf A = 4 then Image13.Picture = Image5.Picture
Label2.caption = "enseguida la corbata..."
Elseif A = 5 Then ' Y así las distintas opciones de Imágenes y de Texto. Label4.Visible = True ' muestra los Autores
Timer1.enabled = False ' desactiva el Timer
End If End Sub Controlen el orden de las Imágenes de acuerdo a su propia aplicación, y los textos siguientes son:
"Y una faja de chipé..."
"El chaleco hay que ensancharlo ..."
"la chaquetilla está bien..."
"Una cinta desatada..."
"Un beso ardiente ...dos...tres..."
"Mezcla de llanto y de juego y un rezo de ella por él..."
"Dios mío que vuelva zano! ¡Si muere, muero también !
La sintaxis de los textos se mantiene como en las fotos originales.
Actividad de Aprendizaje 25 – Sistema Solar
Este ejercicio es similar al de las partes de la computadora. Una Imagen grande es particionada a través
de Labels transparentes que nos permiten en este caso identificar cada planeta por separado.
Cuaderno de Trabajo Visual Basic APENDICE A Página 54
Al pasar el puntero del mouse sobre el planeta este cambia por una manito lo que nos indica que es
posible una interacción. Y al clickear sobre el mismo despliega en la Label inferior el nombre del
planeta.
Vamos a centrarnos en las novedades que aporta este ejercicio en relación al Nº1. Primero : podemos
cambiar el puntero del mouse: Para esto en la propiedad MousePointer y MouseIcon de cada Label
transparente haremos cierta modificaciones.
MousePointer = 99 (Custome) ' O sea la opción personalizada.
MouseIcon = Seleccionamos de la carpeta Icons o de otra en especial el Icono que queremos mostrar.
Segundo : Vemos en la Imagen Inferior que muestra la Aplicación en ejecución, dos botones : uno de
Imprimir y otro de Salir, que en realidad no son Botones porque su forma es ovalada. Estos son
Controles Shape de forma ovalada . Como el Control Shape es puramente decorativo y no responde a
ningún Evento , entonces aquí también con un pequeño truco , le colocamos una Label transparente
sobre la Shape con la propiedad Caption = Imprimir o Salir y ahora sí la Label responde al Evento Click.
Tercero: En la Shape Imprimir , al clickear sobre ella imprimimos el Formulario en tiempo de ejecución.
El código es:
Private Sub Label13_Click()
Form1.PrintForm
End Sub
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 ejecución de un lugar a otro del
formulario. Este tipo de ejercicios es muy útil para los docentes que trabajan con los más pequeños.
Cuaderno de Trabajo Visual Basic APENDICE A Página 55
Usamos tres controles Picture cargando en cada uno de ellos un icono que les guste. Y en la propiedad
Dragmode de cada picture elegimos la opción Automatic , la numero 1. Esto permitirá mover los
controles. Pero para que realmente se desplacen debemos agregar al procedimiento Form_DragDrop
el siguiente código:
Private Sub DragDrop ( Source as control, X as Sing le, Y as Single)
Source.Move x, y
End Sub
Dentro de los argumentos entre paréntesis vemos Source que quiere decir origen, o sea el control de
origen y esto es muy importante porque quiere decir que no hace falta que especifiquemos que picture
estamos moviendo o arrastrando y soltando , el procedimiento lo registra de por sí, y lo que debemos
actualizarle son las nuevas coordenadas que leerá el procedimiento a través de x, y. Aquí usamos un
método ya conocido el Move. Al correr el programa podemos clickear sobre una de las figuras y
manteniendo el botón izquierdo del mouse apretado arrastrarla a la nueva posición que deseamos y
luego soltarla.
Actividad de Aprendizaje 27 – Dia Feliz
Este ejercicio de drageo utiliza también imágenes que pueden desplegarse en controles picture o
image . En este caso son Images con su propiedad stretch a true lo que permite usar iconos y poder
agrandarlos.
La Image1 la carita fea tiene la propiedad DragMode en 1 : Automática. Y en la propiedad DragIcon
tiene cargado el mismo icono para que cuando la arrastremos no se vea una ventana vacía. Pero ahora
el procedimiento usado es el DragOver que detecta cuando pasamos por encima de un control
determinado. En este caso es el cesto o la Image2 . Y el objetivo es que al arrastrar la carita fea sobre el
cesto esta desaparezca, simulando que la estamos tirando dentro del cesto. Entonces el código
indicado será:
Cuaderno de Trabajo Visual Basic APENDICE A Página 56
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 imágenes del teléfono, reloj y filmadora, como si hiciéramos una
compra virtual sobre la calculadora y el valor del total, se va incrementando haciendo la cuenta de lo
que gastamos.
Los controles son cuatro Image , el botón que borra el total a pagar. Una caja de texto que muestra el
total y las demás son Labels indicativas.
Cuando arrastramos la imagen vamos a observar que no drageamos un rectángulo o ventana vacía sino
iconos que coinciden con la imagen elegida, para eso a cada imagen le cargamos su icono
correspondiente en la propiedad DragIcon. No olvidarse poner la propiedad DragMode en 1. El código
es el siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Página 57
Dim total as integer ' Declaramos en la parte Gener al la variable. Private Sub Command1_Click()
Text1.text = "" ' vaciámos la caja de texto.
Total = 0 ' reiniciamos la variable a 0. End Sub Private Sub Image4_dragDrop (...) ' En imagen de la calculadora.
If Source = Image1 then ' Aquí testeamos la imagen de origen. Total = total + 260
Elseif Source = Image2 then
Total = total + 300 Elseif Source = Image3 then
Total = total + 1400 End if Text1.text = total
End Sub
Acá vemos la importancia del argumento Source como control de origen, porque nos permite testear
en el condicional a que imagen nos estamos refiriendo.
Actividad de Aprendizaje 29 – Ordernar de Menor a Mayor
Este ejercicio usa el Drageo para que los alumnos ordenen los números de Menor a Mayor.
Tenemos 3 Labels que muestran los números a ordenar y otras 3 Labels que recibirán los números
drageados de las Labels anteriores. Y dos Botones El de Números que a través del procedimiento Azar
elige tres números aleatorios para cada label con la función Randomize y el Botón Corregir que
chequea que estén ordenados realmente de menor a mayor. La Label7 muestra un "Bien" o un "Mal",
de acuerdo a si el orden es correcto o no. El código es el siguiente:
Dim N1, N2, N3 as Integer ' declaramos las variable s en General. Private Sub Command1_Click() ' Este es el botón Núm eros
Label4.caption = "" Label5.caption = "" Label6.caption = "" ' vaciamos los números ordenado s Label1.visible = True Label2.visible = True Label3.visible = True ' volvemos visibles las Label que drageamos.
Cuaderno de Trabajo Visual Basic APENDICE A Página 58
Call Azar ' Convocamos al procedimiento creado en G eneral. End Sub Private Sub Azar() ' creamos un procedimiento llama do Azar
N1= int(Rnd * 10) + 1 ' elige un número aleatorio d e 1 a 10 N2= int(Rnd * 10) +1 N3= int(Rnd * 10) +1 If N1 <> N2 And N2 <> N3 And N1 <> N3 then 'control a que no haya 2 números iguales. Usamos
los operadores <> y And. Label1.caption = N1 ' volcamos los valores de las v ariables en las labels. Label2.caption = N2 Label3.caption = N3
Else Exit Sub ' Si uno de los números se repite sale de la Rutina y vuelve a llamarse al
procedimiento Azar desde el Botón 1.
End If End Sub Private Command2_Click () ' Este es el Botón Correg ir.
If Val(Label4.Caption) < Val(Label5.Caption) And Va l(Label5.Caption) < Val(Label6.caption) Then ' Este condicional que controla el orden de los númer os debe ir en una sola línea.
Label7.Caption = "Bien" Else
Label7.caption= "Mal" End If
End Sub Private Sub Form_Load()
Randomize ' Reinicia la funcion Rnd
Call Azar ' llama al procedimiento Azar.
End Sub Private Sub Label4_DragDrop(..)
Label4.Caption = Source ' La label que recibe el co ntrol de Origen toma el caption de este Origen.
Source.visible = False ' oculta el control de orige n una vez drageado. End Sub
Este código de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y recordemos modificar su
Dragmode a 1.
En tiempo de ejecución luego de arrastrar las Labels 1 2 y 3 sobre
las 4 5 y 6 y clickear en Corregir veremos una pantalla similar a la
siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Página 59
Actividad de Aprendizaje 30 - Vinculos
Este ejercicio lo hemos armado a pedido de un visitante colombiano, Luis, docente en Informática. Y
nos permite vincular una palabra con una imagen específica dentro del contenido desplegado en una
Label.
Usamos como truco una label transparente superpuesta sobre la palabra que recibe el evento click y
que se vincula a la imagen. El programa en ejecución es similar a esta imagen:
Sobre la palabra comida y animal tenemos superpuesta una label con la letra en azul para que muestre
la posible interactividad, también cambiamos el puntero del mouse a una manito cuando pasa por
sobre las palabras. Y al hacer click cambia el contenido de la Image en su propiedad picture. El código
del evento click de la primer label es:
Private Sub Label2_Click() Image1.Picture = Picture2.Picture Label4.Caption = "Una rica hamburguesa"
End Sub Como vemos el código es muy sencillo.
Cuaderno de Trabajo Visual Basic APENDICE A Página 60
Actividad de Aprendizaje 31 - Esqueleto
Bueno, ustedes ya conocen el método de arrastrar y soltar, pero como a nosotros nos gusta mucho,
hemos armado este pequeño ejercicio, para armar un esqueleto con sus distintas partes. Espero los
motive para usarlo adaptándolo a otras imágenes.
El código ejemplo para una de las image que recibe la imagen del cráneo arrastrado es:
Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single) If Source = Image9 Then
Image1.Picture = Image9.Picture Image9.Visible = False Label1.Caption = "¡Correcto!" Label2.Caption = "Craneo" Beep
Else Label1.Caption = "¡Incorrecto!"
End If Call fin
End Sub
El procedimiento fin es el que testea si esta es la última pieza colocada y su código es:
Private Sub fin()
If Image9.Visible = False And Image10.Visible = Fal se 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 Página 61
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 características de windows. Para poder activarlo debemos estar en la ventana de formulario u
objeto, no en la de código. Mediante botones de opción vamos a hacer visibles o invisibles los menús
que hemos diseñado, en este caso el tema será platos de comida y los menús serán sobre: Platos fríos,
calientes y postres. El programa ejecutado se vé así:
Posicionados en la ventana formulario activamos el Editor mediante el ícono y cuando se abre la
ventana vamos configurado los distintos item del menú como se ve en la siguiente imagen:
Aquí hay dos propiedades muy importantes, el caption del menú que será el título que aparezca en el
menú y el name del menú, el caption puede estar vacío pero el name no, Y vamos anidando los
submenús que queremos incorporar, como lo muestra la imagen, para desplegar un submenú hacemos
click en next y en la flecha hacia la derecha para hacer una sangría que indica los subtemas del menú.
Cada integrante del menú responde a un solo evento que es el Click. Para probarlo podemos agregar el
siguiente código en el evento click de cada menú:
MnuFiambres_Click() MsgBox "haz hecho click en la opción bandeja de Fia mbres"
End Sub.
Cuaderno de Trabajo Visual Basic APENDICE A Página 62
Esto no está incluído en el ejercicio, pero puede agregarle cualqier evento para testear el
funcionamiento. En relación al código que hace visible u oculta un tipo de menú , agregamos un botón
que aplica o ejecuta la opción de opción seleccionada con el siguiente código en el evento click del
botón Aplicar:
Private Sub Command1_Click()
If Option1 Then ' mostrar menú de Entradas
mnuEntradas.Visible = True
mnuCalientes.Visible = False
mnuPostres.Visible = False ElseIf Option2 Then ' mostrar menú Platos Calientes
mnuEntradas.Visible = False mnuCalientes.Visible = True mnuPostres.Visible = Fa lse
Else mnuEntradas.Visible = False
mnuCalientes.Visible = False
mnuPostres.Visible = True End If
End Sub
este código relaciona mediante un condicional el menú que debe mostrarse y oculta los restantes. En
el procedimiento Load del formulario incluimos el siguiente código, que oculta los menús: Private Sub Form_Load()
mnuEntradas.Visible = False
mnuCalientes.Visible = False
mnuPostres.Visible = False End Sub
Actividad de Aprendizaje 33 – Encuestra Graciosa
Este ejercicio lo podemos hacer y llevar, su arranque al trabajo y preguntarle a nuestros colegas, o
compañeros si Está conforme con el sueldo que gana. Como damos por supuesto que la mayoría va a
contestarnos que No, hicimos un pequeño chiste , ya que al querer hacer Click en el Botón de No, este
se nos escapará.
El código es el siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Página 63
Private Sub Command1_Click() End
End Sub Private Sub Command2_Click()
MsgBox "Sufre el mismo mal que millones de Argentin os!!" End Sub Private Sub Command2_MouseMove(Button As Integer, S hift As Integer, X As Single, Y As Single)
Command2.Move CInt(Rnd * (Width - Command2.Width)), CInt(Rnd * (Height - Command2.Height)) End Sub
Con el Botón Si: salimos del programa y al querer hacer click en el botón: No, se mueve aleatoriamente
a una nueva posición entre las medidas de ancho y alto del formulario.
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 aplicación se parece a la
siguiente:
Option Explicit
Private Sub Command1_Click()'el boton Salir cierra el programa End
End Sub Private Sub Command2_Click()
'este boton corrige si estan bien 'colocadas las im agenes. Debe escribirse todo el código 'seguido o cortarlo usando el under _
If Picture1.Picture = Image1(2).Picture And Picture 2.Picture = Image1(1).Picture And Picture3.Picture = Image1(5).Picture And Picture4.P icture = 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 ocul ta que 'muestra un gato completo
Else 'sino es correcto vacía las imagenes para rein iciar el 'armado del rompecabezas.
Cuaderno de Trabajo Visual Basic APENDICE A Página 64
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) Ima ge1(1).Picture = PictureClip1.GraphicCell(1) Image1(2).Picture = PictureClip1.GraphicCell(0) Ima ge1(3).Picture = PictureClip1.GraphicCell(5) Image1(4).Picture = PictureClip1.GraphicCell(4) Ima ge1(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 estarán asociados a la ubicación de la
pestaña del Scroll y se mostrarán en dos cajas de texto.
Cuaderno de Trabajo Visual Basic APENDICE A Página 65
De acuerdo a su valor este determinará el color del fondo del formulario, y del tipo de un terce control
Text. La aplicación se así:
Aquí también debemos prestar atención a la propiedad Value, Y a los procedimientos Change y Scroll,
que testean cuando se modifica el valor de la barra horizontal. También debemos determinar los
valores de las propiedades Min y Max en este caso, a 0 la primera y 15 la segunda y dejamos el
LargeChange o sea el largo del cambio, a 1. El código es el siguiente:
Option Explicit
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 Página 66
Actividad de Aprendizaje 36 - Love
Esta es una simple animación hecha con un Timer y una secuencia de imágenes, pero muy simpática
que simula una tarjeta animada. Su código es:
Option Explicit Dim a As Integer Private Sub Command1_Click()
End End Sub Private Sub Timer1_Timer()
a = a + 1 If a >= 7 Then
a = 0 Picture1.Picture = Image1(a).Picture
End Sub
Actividad de Aprendizaje 37 – Metodo Draw
Otra manera de realizar una animación transparente es usando el Método Draw. En este ejercicio
usamos una Picture con el paisaje para desplegar dos imagenes del hombrecito, en distinta posición
desplegadas en un Control ImageList, que posee la propiedad MaskColor y nos va a permitir
transparentar el fondo blanco del dibujo, al superponerse al paisaje.
Esta animación podemos activarla manualmente con el Click de un botón o, automáticamente con el
Click de otro botón que activa a su vez un Timer. Veamos el código:
Cuaderno de Trabajo Visual Basic APENDICE A Página 67
Private Sub Command1_Click()'el botón Automático Timer1.Enabled = True
End Sub Private Sub Command2_Click()
Static flag As Integer Timer1.Enabled = False flag = flag + 1 If flag > 2 Then
flag = 1 End If Picture1.Refresh ' refresca el fondo de la Picture ' El metodo draw en accion ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent
End Sub Private Sub Timer1_Timer()
Static flag As Integer flag = flag + 1 If flag > 2 Then
flag = 1 End If Picture1.Refresh ' El método draw en acción ImageList1.ListImages(flag).Draw Picture1.hDC, 250, 950, imlTransparent
End Sub El método Refresh refresca la imagen de la Picture donde se ejecuta el Método Draw. Los argumentos
de este método son el controlador de contexto de dispositivo (HDC) del objeto que lo recibe o sea la
Picture1.hDC, su ubicación en las coordenadas x, y, y el estilo gráfico transparente correspondiente al
valor del color de la propiedad MaskColor del ImageList.
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 Página 68
Actividad de Aprendizaje 39 – Simulacion
Este ejercicio de simulación contiene un listado de posibles palabras contenidas dentro de la respuesta
a las preguntas de un Psicólogo virtual, y simula esta relación en un diálogo entre doctor y paciente.
El Los controles son: una label que indica que debemos contesar la pregunta y luego hacer click en la
imagen del doctor. Una label que despliega las preguntas que hace el doctor y una caja de texto
enriquecido osea un RichTextBox donde debemos ingresar nosotros las respuestas. Ademas tenemos
oculto un control list que carga la lista de palabras claves. El código es el siguiente:
Option Explicit Dim contar As Integer Dim palabra As Integer Dim frase As String Dim pepe As String Dim a As Integer Private Sub pausa()
Dim comenzar Dim chequeo comenzar = Timer Do Until chequeo >= comenzar + 1
chequeo = Timer DoEvents
Loop End Sub Private Sub Command1_Click()
End End Sub Private Sub Form_Activate()
RichTextBox1.SetFocus End Sub Private Sub Form_Load()
Randomize Call frasedoctor List1.AddItem "tu" List1.AddItem "te" List1.AddItem "pienso"
List1.AddItem "bien"
Cuaderno de Trabajo Visual Basic APENDICE A Página 69
List1.AddItem "regular"
List1.AddItem "¿que" List1.AddItem "quiero"
List1.AddItem "deprimido"
List1.AddItem "sin" List1.AddItem "dificil"
List1.AddItem "esperar"
List1.AddItem "necesito"
List1.AddItem "¿por que?"
List1.AddItem "se" List1.AddItem "adios"
List1.AddItem "odio"
List1.AddItem "amor" List1.AddItem "asesino"
List1.AddItem "matar"
List1.AddItem "grosero"
List1.AddItem "no puedo"
List1.AddItem "fracaso"
List1.AddItem "nunca"
List1.AddItem "infeliz"
'Text1.Text = List1.List(3) End Sub Private Sub frasedoctor()
frase = Int(Rnd * 8) Select Case frase
Case 0 Label1.Caption = "¿Cómo está Ud.?"
Case 1 Label1.Caption = "¿Cuál es su estado de ánimo?"
Case 2 Label1.Caption = "¿Tuvo Ud. una infancia feliz?"
Case 3 Label1.Caption = "¿Es feliz con el medio que lo rod ea?"
Case 4 Label1.Caption = "¿Tiene problemas para relacionars e?"
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(pe pe, palabra + 1, , 2) pepe =
RichTextBox1.SelText Next a
End If 'Print pepe RichTextBox1.Text = "" Call respuestapaciente
Cuaderno de Trabajo Visual Basic APENDICE A Página 70
End Sub Private Sub
Image1_MouseDown(Button As Integer, Shift As Intege r, X As Single, Y As Single) Call respuestadoctor
End Sub Private Sub
RichTextBox1_Click() RichTextBox1.Text = ""
End Sub Private Sub respuestapaciente()
Select Case pepe Case "tu"
Label1.Caption = "No hablemos de mi."
Case "te" Label1.Caption = "Dejemos de hablar de mi."
Case "pienso" Label1.Caption = "¿Por qué piensa eso?"
Case "bien" Label1.Caption = " Me alegra, cuénteme sobre Ud."
Case "regular" Label1.Caption = "Entiendo, Cuenteme sobre Ud."
Case "¿que" Label1.Caption = "¿Por qué pregunta Ud.?"
Case "quiero" Label1.Caption = "¿Por qué quiere usted eso?"
Case "deprimido" Label1.Caption = "¿Qué lo deprime?"
Case "sin" Label1.Caption = "Entiendo. ¿Cree que lo puede reme diar?"
Case "¿por que" Label1.Caption = "Recuerde, la terapia es buena par a Ud."
Case "dificil" Label1.Caption = "No se preocupe, ya cambiarán las cosas."
Case "esperar" Label1.Caption = "Tenga algo de paciencia."
Case "necesito" Label1.Caption = "Todos necesitamos cosas."
Case "se" Label1.Caption = "¿Como sabe Ud. eso?"
Case "odio" Label1.Caption = "El odio nunca conduce a nada buen o"
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 Página 71
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 código familiar para ustedes ya que hemos trabajado en ejercicios anteriores el
método DragDrop pero lo incluí por lo vistoso de las imágenes, es una versión en Visual Basic de una
aplicación hecha en Flash de Macromedia.
El código es el siguiente:
Private Sub Form_DragDrop(Source As Control, X As S ingle, Y As Single) 'Source.Move X, Y Source.Move (X - Source.Width / 2), (Y - Source.Hei ght / 2)
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 72
Actividad de Aprendizaje 41 - Slider
Este es un control slider común donde codificamos los procedimientos Click y Change. Usamos la
función Format para darle forma al valor en centímetros. El código es el siguiente: Option Explicit Private Sub Slider1_Change()
Label1.Caption = "Medida en Centímetros = " & Forma t(Slider1.Value, "#.00") End Sub Private Sub Slider1_Scroll()
Label1.Caption = "Medida en Centímetros = " & Forma t(Slider1.Value, "#.00") End Sub
Actividad de Aprendizaje 42 – Tablas de Sumar
En esta tabla del uno, aplicable a los demas números y adaptable a otra operaciones de resta,
multiplicación o división. Tenemos una combinación de labels, imágenes, shapes y checkbox con los
que ha sido armada la aplicación. Su código es el siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Página 73
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.V isible = False And ImageSeis.Visible = False _ And ImageSiete.Visible = False And ImageOcho.Visi ble = 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 Ta bla! ¡FELICIDADES!" End If End Sub
Private Sub AniPushButton1_Click() frmTablaDel_1.Hide frmTablaSumaDel_2.Show End Sub
Private Sub AniPushButton2_Click() 'Limpiar los resultados img0.Picture = LoadPicture("") img1.Picture = LoadPicture("") img2.Picture = LoadPicture("") img3.Picture = LoadPicture("") img4.Picture = LoadPicture("") img5.Picture = LoadPicture("") img6.Picture = LoadPicture("") img7.Picture = LoadPicture("") img8.Picture = LoadPicture("") img9.Picture = LoadPicture("")
'Poner los números en la bola ImageUno.Visible = True ImageDos.Visible = True ImageTres.Visible = True ImageCuatro.Visible = True ImageCinco.Visible = True ImageSeis.Visible = True ImageSiete.Visible = True ImageOcho.Visible = True ImageNueve.Visible = True ImageCero.Visible = True
'Inicializar la propiedad Tag img0.Tag = "vacia" img1.Tag = "vacia" img2.Tag = "vacia" img2.Tag = "vacia" img4.Tag = "vacia"
Cuaderno de Trabajo Visual Basic APENDICE A Página 74
img5.Tag = "vacia" img6.Tag = "vacia" img7.Tag = "vacia" img8.Tag = "vacia" img9.Tag = "vacia"
'Limpiar los CheckBox y la imagenes Check1.Caption = "" Check1.Visible = False
imgConejo.Visible = False
Check2.Caption = "" Check2.Value = 0 imgOsito.Visible = False
Check3.Caption = "" Check3.Value = 0 imgPato.Visible = False
Check4.Caption = "" Check4.Value = 0 imgGato.Visible = False
Check5.Caption = "" Check5.Value = 0 imgBug.Visible = False
Check6.Caption = "" Check6.Value = 0 imgNiña.Visible = False
Check7.Caption = "" Check7.Value = 0 imgOso.Visible = False
Check8.Caption = "" Check8.Value = 0 imgAlce.Visible = False
Check9.Caption = "" Check9.Value = 0 imgViejito.Visible = False
lblRespuesta.ZOrder 1 'pasar atrás el label
End Sub
Private Sub Check1_Click() Check1.Value = 1 End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 75
Private Sub Check2_Click() Check2.Value = 1 End Sub
Private Sub Check3_Click() Check3.Value = 1 End Sub
Private Sub Check4_Click() Check4.Value = 1 End Sub
Private Sub Check5_Click() Check5.Value = 1 End Sub
Private Sub Check6_Click() Check6.Value = 1 End Sub
Private Sub Check7_Click() Check7.Value = 1 End Sub
Private Sub Check8_Click() Check8.Value = 1 End Sub
Private Sub Check9_Click() Check9.Value = 1 End Sub
Private Sub Command1_Click() 'Limpiar los resultados img0.Picture = LoadPicture("") img1.Picture = LoadPicture("") img2.Picture = LoadPicture("") img3.Picture = LoadPicture("") img4.Picture = LoadPicture("") img5.Picture = LoadPicture("") img6.Picture = LoadPicture("") img7.Picture = LoadPicture("") img8.Picture = LoadPicture("") img9.Picture = LoadPicture("")
'Poner los números en la bola ImageUno.Visible = True ImageDos.Visible = True ImageTres.Visible = True ImageCuatro.Visible = True ImageCinco.Visible = True ImageSeis.Visible = True ImageSiete.Visible = True ImageOcho.Visible = True
Cuaderno de Trabajo Visual Basic APENDICE A Página 76
ImageNueve.Visible = True ImageCero.Visible = True
'Inicializar la propiedad Tag img0.Tag = "vacia" img1.Tag = "vacia" img2.Tag = "vacia" img2.Tag = "vacia" img4.Tag = "vacia" img5.Tag = "vacia" img6.Tag = "vacia" img7.Tag = "vacia" img8.Tag = "vacia" img9.Tag = "vacia"
'Limpiar los CheckBox y la imagenes Check1.Caption = "" Check1.Value = 0 imgConejo.Visible = False
Check2.Caption = "" Check2.Value = 0 imgOsito.Visible = False
Check3.Caption = "" Check3.Value = 0 imgPato.Visible = False
Check4.Caption = "" Check4.Value = 0 imgGato.Visible = False
Check5.Caption = "" Check5.Value = 0 imgBug.Visible = False
Check6.Caption = "" Check6.Value = 0 imgNiña.Visible = False
Check7.Caption = "" Check7.Value = 0 imgOso.Visible = False
Check8.Caption = "" Check8.Value = 0 imgAlce.Visible = False
Check9.Caption = "" Check9.Value = 0 imgViejito.Visible = False
lblRespuesta.ZOrder 1 'pasar atrás el label
Cuaderno de Trabajo Visual Basic APENDICE A Página 77
End Sub
Private Sub img0_DragDrop(Source As Control, X As S ingle, Y As Single) flag2 = 2 If TypeOf Source Is Image Then If img0.Tag = "vacia" And Source.Tag = "cero" Th en img0.Picture = LoadPicture(App.Path & "\#0.ico" ) img0.Tag = "Correcta" Source.Visible = False
If flag1 = 1 And flag2 = 2 Then 'Chequea si est an 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 <> "cer o" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img1_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img1.Tag = "vacia" And Source.Tag = "dos" The n 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 S ingle, Y As Single) If TypeOf Source Is Image Then If img2.Tag = "vacia" And Source.Tag = "tres" Th en 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 Página 78
imgOsito.Visible = True For I = 1 To 20 Beep Next I Call ganar ElseIf img2.Tag = "vacia" And Source.Tag <> "tre s" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img3_DragDrop(Source As Control, X As S ingle, 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 <> "cua tro" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img4_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img4.Tag = "vacia" And Source.Tag = "cinco" T hen 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 <> "cin co" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img5_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img5.Tag = "vacia" And Source.Tag = "seis" Th en img5.Picture = LoadPicture(App.Path & "\#6.ico" ) img5.Tag = "Correcta" Source.Visible = False
Cuaderno de Trabajo Visual Basic APENDICE A Página 79
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 <> "sei s" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img6_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img6.Tag = "vacia" And Source.Tag = "siete" T hen img6.Picture = LoadPicture(App.Path & "\#7.ico" ) img6.Tag = "Correcta" Source.Visible = False Check6.Caption = "Correcta" Check6.Value = 1 imgNiña.Visible = True For I = 1 To 20 Beep Next I Call ganar ElseIf img6.Tag = "vacia" And Source.Tag <> "sie te" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img7_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img7.Tag = "vacia" And Source.Tag = "ocho" Th en 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 <> "och o" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img8_DragDrop(Source As Control, X As S ingle, Y As Single) If TypeOf Source Is Image Then If img8.Tag = "vacia" And Source.Tag = "nueve" T hen img8.Picture = LoadPicture(App.Path & "\#9.ico" )
Cuaderno de Trabajo Visual Basic APENDICE A Página 80
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 <> "nue ve" Then MsgBox "Esa suma es incorrecta", vbCritical End If End If End Sub
Private Sub img9_DragDrop(Source As Control, X As S ingle, Y As Single) flag1 = 1 'Bandera If TypeOf Source Is Image Then If img9.Tag = "vacia" And Source.Tag = "uno" The n img9.Picture = LoadPicture(App.Path & "\#1.ico" ) img9.Tag = "Correcta" Source.Visible = False
If flag1 = 1 And flag2 = 2 Then 'Chequea si est an 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 Página 81
Actividad de Aprendizaje 43 – Clave de Seguridad
Hay muchas maneras de incluir en un ejercicio cierto control de seguridad a través de una clave, o
password, en esta aplicación se hace utilizando la propiedad tag del control Text, donde se ingresa. El
código es:
Private Sub cmdAceptar_Click() Static Intentos As Integer Dim Espera As Long If UCase(txtPassword.Text) = txtPassword.Tag Then CandadoCerrado.Picture = CandadoAbierto.Picture Image1.Visible = False Refresh Espera = Timer 'Espera 2 seg, muestra el formulario principal While Espera + 2 > Timer Wend 'Descarga esta forma Unload frmClave Form2.Show Else Intentos = Intentos + 1 If Intentos = 3 Then MsgBox "Lo siento...Demasiados intentos", vbCri tical, "Acceso Negado" txtPassword.SetFocus End Else MsgBox "Presione OK e intente otra vez", vbInfo rmation, "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 Página 82
Actividad de Aprendizaje 44 - Figuras
Este ejercicio de Arrastrar y Soltar muestra otra posibilidad de ejercitación visual para niños. Las figuras
vienen incluidas en el archivo zipeado, para facilitarles el trabajo.El código es el siguiente:
Private Sub Image10_DragDrop(Source As Control, X A s 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 A s 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 A s 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 A s 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 A s Single, Y As Single) If Source = Image5 Then Image14 = Image5 Image5.Visible = False
Cuaderno de Trabajo Visual Basic APENDICE A Página 83
End If End Sub
Private Sub Image15_DragDrop(Source As Control, X A s 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 A s 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 A s 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 A s 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 Página 84
Actividad de Aprendizaje 45 – Funcion Mod
Este ejercicio usa las funciónes Mod y Format que nos permiten dar formato al valor del tiempo que
muestra el cronómetro. Usamos una Label y tres botones para las acciones. El código es: Dim I As Long 'Contador. Dim Tiempo As String 'Tiempo total transcurrido.
Private Sub cmdDetener_Click() Timer1.Interval = 0 End Sub
Private Sub cmdIniciar_Click() I = 0 'Inicializar el contador. Timer1.Interval = 0 'Detener el cronometro lblCronometro.Caption = "" 'Limpiar la etiqueta Timer1.Interval = 1 'Iniciar el cronometro End Sub
Private Sub cmdSalir_Click() End End Sub
Private Sub Timer1_Timer() I = I + 1 Tiempo = Format(Int(I / 36000) Mod 24, "00") & ": " & _ Format(Int(I / 600) Mod 60, "00") & ":" & _ Format(Int(I / 10) Mod 60, "00") & ":" & _ Format(I Mod 10, "00") lblCronometro.Caption = Tiempo End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 85
Actividad de Aprendizaje 46 – Impresión multilinea
Este ejercicio nos permite imprimir texto respetando el corte de línea. El formulario contiene una caja
de texto con la propiedad ScrollBar en vertical y la propiedad Multiline en True. Y dos botones uno para
dar salida por impresora y el otro para cerrar el programa. El código es el siguiente:
Option Explicit Dim i As Integer
Private Sub Command1_Click() 'X es 60 en este ejemplo ImprimeLineas Text1, 60 End Sub
Private Sub ImprimeLineas(Texto As Object, Linea As Integer) Dim Bloque As String 'Número de caracteres = NumC 'Número de Bloques= NumB Dim NumC, NumB As Integer NumC = Len(Texto.Text) If NumC > Linea Then NumB = NumC \ Linea For i = 0 To NumB Texto.SelStart = (Linea * 1) Texto.SelLength = Linea Bloque = Texto.SelText Printer.Print Bloque Next i Else Printer.Print Texto.Text End If Printer.EndDoc End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 86
Private Sub Command2_Click() End End Sub
Actividad de Aprendizaje 47 – Funcion Mid
Este ejercicio nos permite redondear un número decimal, con la cantidad de decimales que deseemos.
El código es el siguiente:
Dim Numero As Single Dim Decimales As Long
Function RedondearNumero(ByVal Valor As Variant, By Val Decimales As Integer) As Double
Dim Numero1 As Double Dim Numero2 As Double Dim Numero3 As Double Dim Numero4 As Double Dim Frac As Double Dim n As Byte n = InStr(1, Text1.Text, ".") 'posición en que se encuentra el punto decimal n = Len(Mid(Text1.Text, n + 1)) 'longitud de la c adena de los decimales If Decimales < n Then 'Si el dato de decimales es menor que el No. de decimales del número Frac = 10 ^ Decimales Numero1 = Valor * Frac Numero2 = Fix(Valor * -Frac) * -1 Numero3 = Numero1 - Numero2 If Numero3 >= 0.5 Then Numero4 = Int(Numero1 * -1) * -1 Else Numero4 = Fix(Numero1 * -1) * -1 End If RedondearNumero = Numero4 / Frac Else RedondearNumero = Val(Valor) End If End Function
Private Sub Command1_Click() Label1.Caption = RedondearNumero(Numero, Decimale s) End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 87
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, Decima les) Else MsgBox "El número debe ser positivo", vbInforma tion 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, Decimal es) Else MsgBox "El número debe ser positivo", vbInformat ion Text2.SetFocus End If End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer) If (KeyAscii < 48) Or (KeyAscii > 57) Then 'Para solo permitir números del 0 al 9 If KeyAscii <> 8 Then KeyAscii = 0 'Para aceptar la tecla de retroceso End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 88
Actividad de Aprendizaje 48 – Movimiento
En esta aplicación se crean con el método Line por cálculo matemático, las rectas de un recorrido y un
ícono cargado en un control Image se desplaza, siguiendo el recorrido de las rectas. El código es: Option Explicit Dim x, y, x1, x2, y1, y2, l, t, w, h, m, delta As S ingle 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 rec tas.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 rect a. y = y1 + m * (x - x1) 'Ecuación de la recta. l = x - w / 2 'Valor que toma image1.left t = y - h / 2 'Valor que toma image1.top Image1.Left = l 'Pasar los valores anteriores Image1.Top = t 'para mover la imagen. x = x + delta 'Incrementando la x. Loop Next I Image1.Enabled = False 'Inhabilitarla para impedi r que regrese a la posición inicial. End Sub
Private Sub Form_Load() 'La variable delta se usa para incrementar la x. delta = 0.05 'Incremento de delta inicial para la velocidad del movimiento End Sub
Private Sub Image1_Click() Label1.Visible = False 'Ancho y Alto de la imagen.
Cuaderno de Trabajo Visual Basic APENDICE A Página 89
w = Image1.Width h = Image1.Height
Call Mover End Sub
Private Sub mnIniciar_Click() Label1.Visible = True Image1.Enabled = True 'habilitar la imagen 'Llevar la imagen a la posición inicial. Image1.Left = 420 Image1.Top = 3060 End Sub
Private Sub mnuSalir_Click() End End Sub
Private Sub optMediana_Click() If optMediana.Value Then delta = 0.5 End Sub
Private Sub optPoca_Click() If optPoca.Value Then delta = 0.05 End Sub
Private Sub optRapida_Click() If optRapida.Value Then delta = 1 End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 90
Actividad de Aprendizaje 49 – Crear controles
Ahora Visual Basic nos permite, crear controles en tiempo de ejecución sin necesidad de hacerlo
dentro de un array, a partir del primero creado en tiempo de diseño.
El código 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 botón y luego con el Click del botón cambiamos su
propiedad Caption.
Cuaderno de Trabajo Visual Basic APENDICE A Página 91
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 Página 92
Actividad de Aprendizaje 50 – Imprimiendo con Printer
En este formulario desplegamos datos en cajas de texto y a través del Boton Imprimir vamos a darle
salida a estos datos por la Impresora que el sistema tenga por defecto. Para esto usamos el objeto
Printer, que nos permite controlar el texto, cambiar su aspecto, tamaño, tipo y color de la fuente y
coordenadas. Private Sub Command1_Click()
Printer.Orientation = 1
' La orientación del papel es vertical
Printer.FontSize = 12 'Tamaño de la letra Printer.Print 'Un renglón en blanco o salto de carro
Printer.Print Printer.Print Printer.Print Tab(15); Label1.Caption; Tab(30); Tex t1.Text
'Aquí damos la orden de impresión del caption de la label1 a 15 espacios 'del margen izquerdo y luego a 30 espacios del margen izquierdo el 'conten ido del texto.
Printer.Print Printer.Print Printer.Print Tab(15); Label2.Caption; Tab(30); Tex t2.Text Printer.Print Printer.Print Printer.Print Tab(15); Label3.Caption; Tab(30); Tex t3.Text Printer.Print Printer.Print Printer.Print Printer.Print Tab(15); Label4.Caption; Tab(30); Tex t4.Text Printer.Print Printer.Print Printer.Print Tab(15); Label5.Caption; Tab(30); Tex t5.Text Printer.Print Printer.Print Printer.Print Tab(15); Label6.Caption; Tab(30); Tex t6.Text
Cuaderno de Trabajo Visual Basic APENDICE A Página 93
Printer.EndDoc 'damos por terminada la impresión
End Sub Este ejercicio nos permite de una manera simple poder distribuir la impresión de forma personalizada.
Actividad de Aprendizaje 51 – Dibujar
Con este ejercicio podrán los alumnos dibujar en tiempo de ejecución. Podemos agregarles una paleta
de colores similar al Paint.
En caso de imprimir el dibujo es necesario que la propiedad del Formulario Autoredraw esté a True
para que el formulario se refresque e imprima el dibujo realizado.
Dim draw As Boolean 'declaramos una variable bulean a Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
draw = True 'estamos dibujando CurrentX = X' carga en la variable la ubicación en la coordenada X CurrentY = Y' carga en la variable la ubicación en la coordenada Y
End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If draw Then Line -(X, Y) ' si la variable draw est a a verdadera 'dibuja cada uno de los puntos.
End Sub Private Sub Form_MouseUp(Button As Integer, Shift A s Integer, X As Single, Y As Single)
draw = False 'la variable draw a falsa detiene el d ibujo End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 94
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 ejecución se ve así:
En el formulario tenemos una label para el título y una picture que muestra el icono de un reloj, luego
dos cajas de texto donde debemos ingresar la hora del aviso y el texto del mensaje y dos botones uno
para cancelar y el otro para activar la aplicación, obvamente usamos un timer que chequea si la hora
ya es la indicada.
Al cumplirse la condición despliega un MsgBox con el mensaje que ingresamos, y mientras se mantiene
minimizada la aplicación para que podamos seguir trabjando con otros programas.
El código es :
Option Explicit Dim recordar As String Dim horaActual As Date Private Sub Command1_Click()
Timer1.Enabled = True Me.WindowState = 1
End Sub Private Sub Command2_Click()
End End Sub Private Sub
Form_Activate() Text1.SetFocus
End Sub Private Sub
Timer1_Timer()
Cuaderno de Trabajo Visual Basic APENDICE A Página 95
horaActual = Format(Time, "hh:mm")
If horaActual >= Text1.Text Then Beep recordar = MsgBox(Text2.Text, vbInformation, "Alarm a") 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 gráficas de visual basic. Lo importante para que se salgan por impresora es que la propiedad
AutoRedraw del formulario este a True. Sino no se ven los puntos en la impresión.
El código del ejercicio es:
Option Explicit Private Sub Command1_Click()
Dim x As Integer Dim y As Integer Dim color As Integer Dim i As Integer For i = 1 To 20
x = Int(ScaleWidth * Rnd) y = Int(ScaleHeight * Rnd) color = Int(16 * Rnd) PSet (x, y), QBColor(color)
Next End Sub Private Sub
Command2_Click() Cls
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 96
Private Sub Command3_Click() Form1.PrintForm
End Sub Private Sub Form_Load()
Randomize End Sub Como vemos usamos la función randomize para ubicar los puntos en forma aleatoria en el formulario y
un bucle For/Next que dibuja 20 puntos por cada click que hacemos en el botón: Puntos, el otro botón
borra con Cls lo dibujo o sea limpia el form. El método Pset (Point Set) dibuja los puntos combinada
con QBColor que le asigna un color. El formato de los puntos es Dot.
Actividad de Aprendizaje 54 - Figuras
En este ejercicio vamos a ver otros métodos gráficos de Visual Basic, que complementan el Punto visto
es el ejemplo anterior. Veremos Círculos, Rectángulos y Líneas. Abrimos un nuevo formulario e
insertamos 8 botones: 1)Borrar o Limpiar Formulario, 2)Rectas, 3)Rectángulos, 4)Rect Rellenos,
5)Círculos, 6)Círculos Rellenos, 7)Puntos, y 8)Imprimir. En tiempo de ejecución se ve así:
La declaración general de variables y el código para cada botón es:
Option Explicit Dim x, y, r As Integer Dim x1 As Integer, y1 As Integer Dim x2 As Integer, y2 As Integer Dim color As Integer Dim ccolor As Integer Private Sub Command1_Click()'Botón Rectas
'puntos extremos y color aleatorio
x1 = Fix(Me.ScaleWidth * Rnd) y1 = Fix(Me.ScaleHeight * Rnd) x2 = Fix(Me.ScaleWidth * Rnd)
Cuaderno de Trabajo Visual Basic APENDICE A Página 97
y2 = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd) Randomize 'trazar una recta Line (x1, y1)-(x2, y2), QBColor(color) 'los dos pri meros valores 'establecen un punto extremo y los
otros dos el otro punto extemo, 'entre ambos se dib uja la recta. End Sub Private Sub Command2_Click() 'Botón Imprimir por Im presora.
Me.PrintForm End Sub Private Sub Command3_Click() 'Botón Rectángulo
x1 = Fix(Me.ScaleWidth * Rnd) y1 = Fix(Me.ScaleHeight * Rnd) x2 = Fix(Me.ScaleWidth * Rnd) y2 = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd)'elige al azar un color
Randomize FillStyle = 1 'dibuja un cuadro(B) Line (x1, y1)-(x2, y2), QBColor(color), B
End Sub Private Sub Command4_Click() 'Botón Rectángulo rell eno
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 Formul ario
Cls End Sub Private Sub Command6_Click() 'Botón Círculo relleno
'coordenadas del Centro, Radio y Color, aleatorias
x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) r = Fix(1000 * Rnd) color = Fix(16 * Rnd) Randomize FillStyle = 1'rellena el círculo
'dibuja una circunferencia
Circle (x, y), r, QBColor(color) End Sub Private Sub Command7_Click() 'Botón Círculo
x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) r = Fix(1000 * Rnd) color = Fix(16 * Rnd) ccolor = Fix(16 * Rnd) Randomize FillStyle = 0
Cuaderno de Trabajo Visual Basic APENDICE A Página 98
FillColor = QBColor(ccolor)
'dibuja una circunferencia
Circle (x, y), r, QBColor(color) End Sub Private Sub Command8_Click() 'Botón Puntos
Randomize x = Fix(Me.ScaleWidth * Rnd) y = Fix(Me.ScaleHeight * Rnd) color = Fix(16 * Rnd) PSet (x, y), QBColor(color) 'Dibuja Puntos
End Sub Para dibujar las Rectas debemos indicarle dos valores de: x, e y para uno de los puntos extremos y x1,
Y1 para el otro luego con el método Line dibuja una recta que une ambos puntos. Cuando dibuja un
rectángulo. También necesita estos valores pero para dibujar dos líneas rectas que luego repite en
espejo para formar una Box o Caja, y así aparece el cuadrado o rectángulo. Cuandoq uqeremos que ese
rectángulo este relleno la indicación será BF o sea Box Fill, o Caja rellena. Para esto la propiedad
FillStyle debe estar a True. Y con el Círculo necesitamos un valor para x, y otro para y para establecer
un punto que será el centro de la circunferencia y un valor para el radio. Para determinar los colores lo
hacemos usando un Randome y la función QBColor.
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 código del botón Imprimir es: Private Sub Command1_Click()
Dim alto As Long Dim ancho As Long With Printer
.ScaleMode = vbTwips alto = .ScaleHeight ancho = .ScaleWidth
End With alto = alto \ 2 - Picture1.ScaleHeight \ 2 ancho = ancho \ 2 - Picture1.ScaleWidth \ 2
Cuaderno de Trabajo Visual Basic APENDICE A Página 99
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 métodos graficos, como líneas,
rectángulos arcos y círculos. En el procedimiento Click del boton ingresamos el siguiente código:
Option Explicit Dim smensaje As String Dim HWidth As Integer Dim HHeight As Integer
Private Sub Command1_Click() Const pi = 3.141592654 'vamos a imprimir dos renglones con un saludo Printer.Print "Hola soy Mirta" Printer.Print "Estamos usando el Objeto Printer" 'si queremos imprimir en una nueva pagina usamos Printer.NewPage 'y para cerrar la impresión Printer.EndDoc
'si queremos cambiar la letra Printer.FontName = "Tahoma"
' para modificar el tamaño Printer.FontSize = 14
' y aqui otras variaciones de estilo With Printer Printer.Print "Impresión Normal" .FontBold = True Printer.Print "Estamos imprimiendo en Negrita" .FontItalic = True Printer.Print "Estamos imprimiendo en Negrita y Cursiva"
Cuaderno de Trabajo Visual Basic APENDICE A Página 100
.FontBold = False .FontItalic = False .FontSize = 10 Printer.Print "Volvemos a la impresión Normal y Tamaño: 10" End With
'para imprimir el número de página en el centro p odemos usar el siguiente código smensaje = "Página " & Printer.Page HWidth = Printer.TextWidth(smensaje) / 2 HHeight = Printer.TextHeight(smensaje) / 2 Printer.CurrentX = Printer.ScaleWidth / 2 - HWidt h Printer.CurrentY = (Printer.ScaleHeight - HHeight ) - 200 Printer.Print smensaje
'para imprimir funciones gráficas con el objeto p rinter 'Line: necesitamos valores para las dos coordenad as de inicio y de final de la recta Printer.Line (4000, 2500)-(7000, 4000), vbRed 'usando la sintaxix B se convertira en un rectáng ulo Printer.Line (3000, 4500)-(6000, 6000), vbBlue, B 'para un círculo Printer.Circle (4000, 8000), 1000, vbGreen 'para un medio arco Printer.Circle (8000, 8000), 1000, vbBlue, 0, pi 'si le damos valores negativos dibuja las líneas hacia el centro del círculo. Printer.Circle (4000, 12000), 1000, vbRed, -1, -p i 'y para una elipse Printer.Circle (8000, 12000), 1000, vbBlue, , , 0 .5 Printer.EndDoc End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 101
Actividad de Aprendizaje 57 – Juego de Memoria
Este ejercicio es una nueva versión del juego de memoria que busca dos imágenes iguales, para que
vayan desapareciendo. Le hemos hecho una presentación y luego el juego en sí. El código es el
siguiente:
Para el formulario de presentación:
Option Explicit Dim a As Integer Dim tiempo As Integer
Private Sub Timer1_Timer() tiempo = tiempo + 1
If tiempo = 30 Then Form1.Show Unload Form2 End If
Picture7 = Picture8(a) Picture7.Move Picture7.Left + 200, Picture7.Top + 100 If a >= 2 Then a = 0
Picture6 = Picture5(a) Picture6.Move Picture6.Left - 200, Picture6.Top + 100 If a >= 2 Then a = 0
Cuaderno de Trabajo Visual Basic APENDICE A Página 102
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.To p - 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 s e hace click 'sobre las figuras. Dim Figura(8) As String 'Para guardar las figuras c oncordantes. Dim Chequear As String 'Para contar las figuras dur ante la reconstrucción. Dim ctlPrimeraFigura As Control 'Variables de contr ol para la primera Dim ctlSegundaFigura As Control 'y el segunda figur a. Dim UnoMostrado As Boolean 'Para llevar la cuenta d e los mostrados. Dim AmbosMostrados As Boolean Dim Pares As Integer 'Lleva la cuenta de los pares. Dim Segundos As Long 'Para llevar el tiempo. Dim Puntuacion As Integer 'Para llevar la puntuació n. Dim Inicio As Date Dim I As Integer
Sub FigurasVisibles() 'Hace todas las Figuras visibles For I = 1 To 16 picFigura(I - 1).Visible = True Next I End Sub
Sub VoltearImagen() 'Voltea las imagenes cargando al Picture picVolte ar. For I = 1 To 16 picFigura(I - 1).Picture = picVoltear.Picture
Cuaderno de Trabajo Visual Basic APENDICE A Página 103
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 ig uales. Dim I As Single If ctlPrimeraFigura.Tag = ctlSegundaFigura.Tag Th en '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 & " segu ndos " & 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 se gunda figura que se volteado. If UnoMostrado Then 'si una figura esta visible. Set ctlSegundaFigura = Screen.ActiveControl 'Act iva la variable control. Call Verificar UnoMostrado = False Else Set ctlPrimeraFigura = Screen.ActiveControl 'Act iva la variable control. ctlPrimeraFigura.Enabled = False UnoMostrado = True End If End Sub
Function MezclarFiguras() As Integer 'Genera un núm ero aleatorio entre 0 y 7. 'para asignarlo a las figuras. Dim iNumero 'Variable para los números aleatorios .
Cuaderno de Trabajo Visual Basic APENDICE A Página 104
Do While True 'Continua generando mientras... Randomize Timer 'Siembra en base al número de se gundos desde media noche iNumero = Int(8 * Rnd) 'Obtiene un número entre 0 y 7. If InStr(Chequear, CStr(iNumero)) = 0 Then 'Si t odavía no esta asignado Chequear = Chequear & CStr(iNumero) 'lo añade a la cadena de revisión Exit Do 'y lo devuelve. End If Loop 'En caso contrario, genera otro.
MezclarFiguras = iNumero End Function
Private Sub Form_Load() lblTiempo.Caption = "" lblPuntuacion.Caption = "" Segundos = 0
UnoMostrado = False Puntuacion = 30000 'Como máxima a alcanzar.
'Inicializa el arreglo figuras. Figura(0) = App.Path & "\" & "Babs.ico" Figura(1) = App.Path & "\" & "Dalmat.ico" Figura(2) = App.Path & "\" & "Bird4.ico" Figura(3) = App.Path & "\" & "Cow.ico" Figura(4) = App.Path & "\" & "Fish1.ico" Figura(5) = App.Path & "\" & "Cat3.ico" Figura(6) = App.Path & "\" & "Butterf3.ico" Figura(7) = App.Path & "\" & "Bear1.ico"
mnuIniciar_Click 'Hacer click en el menu Inicio. End Sub
Private Sub Frame1_MouseMove(Button As Integer, Shi ft 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 co ntroles. ctlPrimeraFigura.Picture = picVoltear.Picture 'L os voltea. ctlSegundaFigura.Picture = picVoltear.Picture AmbosMostrados = False End If End Sub
Private Sub mnuIniciar_Click() Inicio = Now 'Iniciar el tiempo. MousePointer = 11 'reloj de arena. Chequear = "" 'Vacia la cadena de revisión. Call FigurasVisibles Call VoltearImagen 'Voltea las figuras. Call HabilitarTodos picFigura(0).Tag = Figura(MezclarFiguras()) 'Llam a a MezclarFiguras para picFigura(1).Tag = Figura(MezclarFiguras()) 'un n úmero aleatorio. picFigura(2).Tag = Figura(MezclarFiguras()) 'lo u sa como indice para asignar
Cuaderno de Trabajo Visual Basic APENDICE A Página 105
picFigura(3).Tag = Figura(MezclarFiguras()) 'alea toriamente imágenes del arreglo Figuras. picFigura(4).Tag = Figura(MezclarFiguras()) picFigura(5).Tag = Figura(MezclarFiguras()) picFigura(6).Tag = Figura(MezclarFiguras()) picFigura(7).Tag = Figura(MezclarFiguras())
Chequear = "" 'Cadena de revisión vacía.
picFigura(8).Tag = Figura(MezclarFiguras()) picFigura(9).Tag = Figura(MezclarFiguras()) picFigura(10).Tag = Figura(MezclarFiguras()) picFigura(11).Tag = Figura(MezclarFiguras()) picFigura(12).Tag = Figura(MezclarFiguras()) picFigura(13).Tag = Figura(MezclarFiguras()) picFigura(14).Tag = Figura(MezclarFiguras()) picFigura(15).Tag = Figura(MezclarFiguras())
MousePointer = 0 'Devuelve el mousepointer a lo n ormal. Segundos = 0 'Reajusta los segundos. lblTiempo.Caption = "" lblPuntuacion.Caption = "" 'Limpia la puntuación Timer2.Enabled = True 'Habilitar el reloj. Bandera = 0 'Inicializa el contador Bandera. End Sub
Private Sub mnuSalir_Click() End End Sub
Private Sub picFigura_Click(Index As Integer) Bandera = Bandera + 1 'Aumentar el contador. lblPuntuacion.Caption = Bandera 'Colocar su valor en el label. picFigura(Index).Picture = LoadPicture(picFigura( Index).Tag) 'Cargar la imagen. Call ChequearFigura End Sub
Private Sub Timer2_Timer() Segundos = DateDiff("s", Inicio, Now) 'Asignar al label el tiempo total. lblTiempo.Caption = Int(Segundos) End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 106
Actividad de Aprendizaje 58 – Metodo Line
En esta aplicación usando el método Line vamos a dibujar rectas, a partir de un apretar el botón
izquierdo del mouse, en el formulario arrastramos el mouse y hacemos un soltar el botón izquierdo del
mouse, con lo que se dibujara una línea entre los dos puntos, marcados. En las labels se muestran los
valores de las coordenadas, de a cuerdo a la ubicación del puntero.
Dim CX As Integer Dim CY As Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) CX = X CY = Y End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = X Label2.Caption = Y End Sub
Private Sub Form_MouseUp(Button As Integer, Shift A s Integer, X As Single, Y As Single) Line (CX, CY)-(X, Y) End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 107
Actividad de Aprendizaje 59 – Eventos con el Mouse
En esta aplicación vamos a crear una pequeña aventura gráfica. Consta de dos formularios. En el
primero vamos a hacer Click sobre ciertos objetos que guardamos en el Inventario y luego en el
segundo formulario, hacemos Click en los objetos del Inventario y los colocamos en la segunda
pantalla, en los lugares correctos. El código del primer formulario es: Option Explicit
Private Sub Image4_Click() MousePointer = 99 MouseIcon = Image4 Image4.MouseIcon = Image4 Image4.Visible = False End Sub
Private Sub Image6_Click() MousePointer = 99 MouseIcon = Image6 Image6.MouseIcon = Image6 Image6.Visible = False End Sub
Private Sub Image7_Click() MousePointer = 99 MouseIcon = Image7 Image7.MouseIcon = Image7 Image7.Visible = False End Sub
Private Sub Image8_Click() MousePointer = 99
Cuaderno de Trabajo Visual Basic APENDICE A Página 108
MouseIcon = Image8 Image8.MouseIcon = Image8 Image8.Visible = False End Sub
Private Sub Image9_Click() Form2.Show Form1.Hide End Sub
Private Sub mnuAyuda_Click() MsgBox " Recogé los objetos posibles y colocálos en el Inventario por Orden Alfabético, haciéndo Click", , "Mini Aventura" End Sub
Private Sub mnuReiniciar_Click() Unload Form1 Unload Form2 Form1.Show End Sub
Private Sub mnuSalir_Click() End End Sub
Private Sub Picture1_Click() If MouseIcon = Image7 Then Picture1 = Image7 MouseIcon = Nothing Form2.Picture1.Picture = Image7 End If End Sub
Private Sub Picture2_Click() If MouseIcon = Image4 Then Picture2 = Image4 MouseIcon = Nothing Form2.Picture2.Picture = Image4 End If End Sub
Private Sub Picture3_Click() If MouseIcon = Image8 Then Picture3 = Image8 MouseIcon = Nothing Form2.Picture3.Picture = Image8 End If End Sub
Private Sub Picture4_Click() If MouseIcon = Image6 Then Picture4 = Image6 MouseIcon = Nothing Form2.Picture4.Picture = Image6
Cuaderno de Trabajo Visual Basic APENDICE A Página 109
End If End Sub
El código del segundo formulario es:
Option Explicit
Private Sub Image5_Click() If MouseIcon = Picture1 Then Image5 = Picture1 MouseIcon = Nothing Image5.MouseIcon = Nothing End If Call corregir End Sub
Private Sub Image6_Click() If MouseIcon = Picture3 Then Image6 = Picture3 MouseIcon = Nothing Image6.MouseIcon = Nothing End If Call corregir End Sub
Private Sub Image7_Click() If MouseIcon = Picture4 Then Image7 = Picture4 MouseIcon = Nothing Image7.MouseIcon = Nothing End If Call corregir End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 110
Private Sub Image8_Click() If MouseIcon = Picture2 Then Image8 = Picture2 MouseIcon = Nothing Image8.MouseIcon = Nothing End If Call corregir End Sub
Private Sub Image9_Click() Form1.Show Form2.Hide End Sub
Private Sub mniSalir_Click() End End Sub
Private Sub mnuAtuda_Click() MsgBox "Hacé Click en los Objetos del Inventario y Colocálos en los lugares correspondientes", , "Mini Aventura" End Sub
Private Sub mnuReiniciar_Click() Unload Form1 Unload Form2 Form1.Show End Sub
Private Sub Picture1_Click() MousePointer = 99 MouseIcon = Picture1 Picture1.MouseIcon = Picture1 Picture1.Visible = False End Sub
Private Sub Picture2_Click() MousePointer = 99 MouseIcon = Picture2 Picture2.MouseIcon = Picture2 Picture2.Visible = False End Sub
Private Sub Picture3_Click() MousePointer = 99 MouseIcon = Picture3 Picture3.MouseIcon = Picture3 Picture3.Visible = False End Sub
Private Sub Picture4_Click() MousePointer = 99 MouseIcon = Picture4 Picture4.MouseIcon = Picture4
Cuaderno de Trabajo Visual Basic APENDICE A Página 111
Picture4.Visible = False End Sub
Private Sub corregir() If Image5 = Picture1 And Image8 = Picture2 And Im age6 = Picture3 And Image7 = Picture4 Then Label2 = "¡¡Correcto!! Completaste la Mini Aven tura" 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 método Print. El código es:
Option Explicit
Private Sub recuadro() Dim i As Integer Form1.ScaleMode = vbPixels Form1.ForeColor = vbBlack Const DrawWidth = 3 For i = DrawWidth - 1 To 6 * 6 Step 2 Form1.Line (i, i)-(Form1.ScaleWidth - 1 - i, For m1.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.ScaleMod e = vbTwips Form1.ZOrder 0 'lo necesitamos para imprimir por arriba de lo existente Form1.ForeColor = RGB(32, 32, 32) ' gris oscuro para las sombras Form1.Font.Name = "Arial" Form1.Font.Underline = True Form1.FontSize = 38 Form1.CurrentX = X ' sitúa el cursor Form1.CurrentY = Y Form1.Print "Diseño y Programación:" Form1.CurrentX = 1500
Cuaderno de Trabajo Visual Basic APENDICE A Página 112
Form1.Print "Mirta Echeverría" Form1.ForeColor = RGB(255, 255, 255) 'blanco par a resaltar Form1.CurrentX = X - 35 ' coloca la zona a resal tar en la parte superior izquierda Form1.CurrentY = Y - 45 Form1.Print "Diseño y Programación:" Form1.CurrentX = 1500
Form1.Print "Mirta Echeverría" Form1.ForeColor = vbBlue Form1.CurrentX = X - 25 ' imprime entre el resal tado y la sombra Form1.CurrentY = Y - 35 Form1.Print "Diseño y Programación:" ' imprime e n azul Form1.CurrentX = 1500
Form1.Print "Mirta Echeverría" End Sub
Private Sub Form_Load() Call texto3d Call recuadro End Sub
Actividad de Aprendizaje 61 – Carita
Este ejercicio es una nueva versión del juego "Agárrame si puedes". Donde debemos hacer Clic en una
carita que se desplaza aleatoriamente por el formulario, dejando un recuadro de color a su paso. El
código es el siguiente:
Option Explicit
Cuaderno de Trabajo Visual Basic APENDICE A Página 113
'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 Página 114
End If End Sub
Private Sub Timer1_Timer() Dim x As Integer, y As Integer Dim BoxX As Integer, BoxY As Integer
x = Int(391 * Rnd + 20) y = Int(231 * Rnd + 20) BoxX = Picture1.Left BoxY = Picture1.Top Form1.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256) Form1.Line (BoxX, BoxY)-(BoxX + 100, BoxY + 100), , BF Picture1.Move x, y puntaje = puntaje + 1 If puntaje = 30 Then Timer1.Interval = 0 MsgBox "Su puntaje: " & puntaje, , "¡Agárrame si puedes!" End If End Sub
Private Sub ComenzarJuego() dificultad = 500 mnuModerado.Checked = True Set menuchekeado = mnuModerado Randomize Call DibujarPantalla Call DibujarCara End Sub
Private Sub DibujarPantalla() Form1.ForeColor = vbBlack Form1.Line (10, 10)-(517, 10) Form1.Line (10, 10)-(10, 358) Form1.Line (522, 5)-(522, 362) Form1.Line (522, 362)-(5, 362) Form1.ForeColor = vbWhite Form1.Line (5, 5)-(522, 5) Form1.Line (5, 5)-(5, 363) Form1.Line (517, 10)-(517, 358) Form1.Line (517, 358)-(10, 358) End Sub
Private Sub DibujarCara() Picture1.FillStyle = vbSolid Picture1.FillColor = vbYellow Picture1.Circle (48, 48), 45 Picture1.FillColor = vbBlack Picture1.Circle (30, 35), 10 Picture1.Circle (65, 35), 10 Picture1.Circle (47, 55), 8 Picture1.DrawWidth = 2 Picture1.Circle (48, 50), 30, , 3.4, 6, 1# End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 115
Actividad de Aprendizaje 62 – Validar un texto
El control caja de Texto tiene ahora en esta versión 6 un nuevo procedimiento que nos permite
controlar la información que se ingresa, y una vez validada recién pasar al campo de texto siguiente.
Prueben tratar de pasar a la caja de texto siguiente sin ingresar ningún dato con la tecla Tab y verán
que no lo permite.
El código 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 p ara pasar al tercero.",
vbInformation, "Instrucciones"
Cancel = True End If
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 116
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 Página 117
Actividad de Aprendizaje 63 – Animacion del osito
Para esta animación usamos un control especial que no está en la Caja de Controles estándar ,
para incluirlo vamos a Proyecto , Componentes y allí seleccionamos Microsoft PictureClip
Control y al aceptar , este se incluirá en la Caja de Controles. Permanecerá invisible en tiempo
de ejecución por lo tanto volcaremos su imagen en un control Picture común que dibujaremos
en el Formulario y dejamos vacío. En el formulario dibujamos un control Picture vacío sin
Picture, con el fondo blanco y sin borde o sea con la propiedad Borderstyle a None. Luego
dibujamos el PictureClip con las propiedades Col a 1 y Row a 9 , y agregamos un Timer control
fundamental en todo tipo de animación. El Timer es un cronómetro que repite una acción (hace
un Bucle) o sentencia en Visual Basic de manera automática e infinita, hasta que lo
desactivamos o cerramos el programa.
El control PictureClip es una grilla que despliega los distintos frames de la animación que
podemos ver en la imagen a la izquierda. Pueden grabar esta imagen y usarla en la propiedad
picture para el ejercicio. Estos frames o cuadros de animación tienen un índice en esta imagen
de 0 a 8.
Aquí también usamos el Método Move para desplazar la imagen del Oso.
El código de cada procedimiento es el siguiente:
Option Explicit Dim A As Integer 'declaramos a como variable entera
Cuaderno de Trabajo Visual Basic APENDICE A Página 118
Private Sub Form_Load() A = 9 ' Inicializamos la variable en 9.
End Sub Private Sub Timer_Timer()
A = A - 1 If A = 0 then A = 8 'Al llegar al frame 0 vuelve a empezar
Picture1.Picture = PictureClip1.GraphicCell(A)
Picture1.Move Picture1.Left + 50, Picture1.Top + 50 'Mueve en diagonal End Sub Comenzamos con una variable = 9 porque los frames del osito deben disminuir y no aumentar sino dá
la impresión de caminar al revés.
Una propiedad fundamental del PictureClip es la GraphicCell ya que ella automatiza la división de la
grilla(imagen total) en partes(frames).
En este caso en el Move usamos los dos argumentos el Left y el Top de la imagen , propiedades que
indican la ubicación de ésta en relación al borde izquierdo (coordenada x) y al borde superior
(coordenada y). Lo que permitirá que el oso se mueva en diagonal.
En la explicación sólo está detallado el movimiento del oso, en el formulario vemos agregadas otros
controles Line e Image simulando una calle, un semáforo y una señal de Stop, como para darles una
idea de lo que podrían agregar a la escena.
Actividad de Aprendizaje 64 – Control para animacion
Una manera sencilla de desplegar una animación es con el control Animation, este control no es
standard por lo tanto lo debemos traer de Componentes del grupo Microsoft Windows Common
Controls-2 5.0 o 5.0
Y por código le vamos a asociar un archivo Avi sin sonido porque sino no lo carga , en este caso llamado
FileCopy que se encuentra en el mismo directorio del proyecto por eso usamos App.Path que quiere
decir el camino o ruta de la aplicación.
Cuaderno de Trabajo Visual Basic APENDICE A Página 119
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 clásico estilo Windows.
Usando el control Toolbar y el control ImageList para desplegar las imágenes en los botones de la barra
de herramientas, también nos permite crear una barra de status con tres paneles, compuesta por tres
paneles. Estos controles forman parte de Microsoft Windows Common Controls 5.0 que debemos
agregar de Componentes en la versión profesional de Visual Basic 5.
Luego de crear sobre el Formulario la barra de status, con el botón derecho del mouse seleccionamos
propiedades y allí en la pestaña paneles vamos eligiendo cuantos queremos y cual será su mensaje.
En el control ImageList seleccionamos con el botón derecho del mouse propiedades y cargamos las
imágenes que componen este repositorio de imágenes para luego por código relacionarlas con los
botones de la ToolBar.
Private Sub Form_Load() Toolbar1.ImageList = ImageList1
'en el procedimiento load asociamos el control Imag elist a la Toolbar End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As Co mctlLib.Button)
Select Case Button.Key
Cuaderno de Trabajo Visual Basic APENDICE A Página 120
Case Is = "camara" MsgBox "Esto es una camara"
Set Image1.Picture = ImageList1.ListImages(1).Pictu re Case Is = "dibujo"
MsgBox "Eso es para dibujar"
Set Image1.Picture = ImageList1.ListImages(2).Pictu re Case Is = "nuevo"
MsgBox "Esto abre un archivo nuevo"
Set Image1.Picture = ImageList1.ListImages(3).Pictu re Case Is = "abrir"
MsgBox "Esto abre un archivo existente"
Set Image1.Picture = ImageList1.ListImages(4).Pictu re Case Is = "imprimir"
MsgBox "Esto Imprime"
Set Image1.Picture = ImageList1.ListImages(5).Pictu re End Select
End Sub
En el procedimiento click de laToolbar mediante un Select Case asociamos cada botón a una imagen
distinta de la ImageList y al cliquear desencadenamos la función MsgBox que nos identifica el botón al
que nos referimos. Aquí juega un papel importante la propiedad Key que identifica a la imagen, como
única y no puede repetirse.
La sentencia Set determina la asociación entre los controles, fijándola.
Actividad de Aprendizaje 66 – Animacion Transparente
Uno de los temas más queridos relacionados con la programación para nosotros es el tema de las
Animaciones. Poco a Poco vamos a ir desarrollando ejercicios que vayan perfeccionando y mostrando
distintas formas de crear animaciones en Visual Basic. Las que vimos hasta ahora usando el método
Move , el control PictureClip, y las secuencias de images o pictures activadas con un Timer, son las
formas más primitivas y sencillas de animación.
Cuaderno de Trabajo Visual Basic APENDICE A Página 121
Hoy sumamos el Método PaintPicture que dibuja una imagen sobre un fondo , pero al combinar
mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen: la máscara y el sprite o
animación en sí permite trasparentar el fondo.
En este caso vamos a desplegar la animación sobre un control Picture con una imagen de fondo, pero
podemos hacerlo sobre el formulario y cargar en este una imagen. Lo que debemos tener en cuenta es
que el objeto sobre el que se despliega la animación debe estar la propiedad ScaleMode en Pixel y no
en Twips como lo es por defecto.
Las constantes para desplegar métodos gráficos como SRCAnd y SRCINvert deben declararse en la
parte General del Formulario. Pueden copiarse a mano o a través del Visor de Apis.
Usamos dos controles PictureClip uno para la máscar y otro para el Sprite (Ver Controles favoritos:
PictureClip). Un Timer para desplegar la secuencia de los frames que componen la grilla en este caso la
imagen completa del perro se compone de 4 columnas y 1 fila. Y un CommandButton que regula el
inicio y fin de la animación.
Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR dest Const SRCCOPY = &HCC0020 ' (DWORD) dest = origen
Private Sub Command1_Click()
If Command1.Caption = "Animación" Then
Timer1.Enabled = True Picture1.Refresh 'esta propiedad Refresh es muy importante ya que re fresca el fondo para 'cambiar de
cuadro en la secuencia. Command1.Caption = "Detener"
Else Timer1.Enabled = False Command1.Caption = "Animación"
End If End Sub Private Sub Command2_Click()
End End Sub Private Sub Form_Load()
PictureClip1.Cols = 4 PictureClip1.Rows = 1 PictureClip2.Cols = 4 PictureClip2.Rows = 1 'Es mejor determinar la composición de la grilla po r código ya que a veces 'al salir del programa
el control Pictureclip no retiene los valores de la 'ventana de propiedades y vuele a su 1 a 1 por def ecto. 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 Página 122
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 cu adros de la animación, 'reiniciándola y el movimiento cuando se escapa de la picture 'posicionándose otra vez al comienzo del margen izq uierdo.
Picture1.PaintPicture PictureClip2.GraphicCell(imag enactual), xactual, 220, , , , , , , SRCAND 'esta sintaxis deb e estar en un solo renglón
Picture1.PaintPicture PictureClip1.GraphicCell(imag enactual), xactual, 220, , , , , , , SRCINVERT 'esta sintaxis debe estar en un solo renglón
imagenactual = imagenactual + 1
'avanza un cuadro la secuencia
xactual = xactual + 20 ' se mueve 20 pixels a la derecha.
End Sub
Actividad de Aprendizaje 67 – Internet
Este ejercicio nos permite mediante un evento click sobre un botón conectarnos con un sitio web
determinado, incorporando el control WebBrowser, este control no es estándar y lo debemos traer de
Componentes, Microsoft Internet Control.
Private Sub Command1_Click()
WebBrowser1.Navigate "http://www.yahoo.com" 'WebBrowser1.GoHome
End Sub La propiedad Navigate del control WebBrowser es el nos permite navegar hacia un sitio web, estando
conectados a nuestro servidor, obviamente, la otra propiedad alternativa GoHome nos conecta con la
página predeterminada de Inicio.
Este control nos resulta muy útil cuando queremos que los alumnos consulten determinados sitios,
antes visitados por nosotros, y así evitamos navegaciones inútiles o peligrosas por sus contenidos.
Cuaderno de Trabajo Visual Basic APENDICE A Página 123
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 dirección del sitio a visitar. Y una barra de estado o StatusBar
dividida en tres paneles despliega: un mensaje, la hora y la fecha respectivamente.
El código es el siguiente:
Private Sub Command1_Click() ' este control está oc ulto 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 Co mctlLib.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/SiliconValle y/Garage/6472" Command1_Click
Case "refresh" WebBrowser1.Refresh 'actualiza o refrezca
Case "stop" WebBrowser1.Stop 'detiene la búsqueda
End Select
Cuaderno de Trabajo Visual Basic APENDICE A Página 124
End Sub Private Sub WebBrowser1_DownloadBegin()
StatusBar1.Panels(1).Text = "Cargando Página..."
End Sub Private Sub WebBrowser1_DownloadComplete()
StatusBar1.Panels(1).Text = "Listo"
End Sub
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 botón Wave
escuchamos los gritos de Tarzan por encima de la música de fondo que se sigue ejecutando. Esto nos
resulta útil para ciertas aplicaciones donde queremos dejar una música de fondo, o entretenimientos
que combinan sonidos.
Private Sub Command2_Click() 'Botón wave MMControl2.Command = "Prev" MMControl2.DeviceType = "WaveAudio" 'establece el t ipo de 'sonido MMControl2.filename = App.Path & "\Tarzan.wav"' mue stra el 'camino MMControl2.Command = "Open" 'lo abre MMControl2.Command = "Play" ' lo ejecuta
End Sub Private Sub Command3_Click() ' Botón Midi
MMControl1.Command = "Prev"
MMControl1.DeviceType = "Sequencer"' tipo de sonido
MMControl1.filename = App.Path & "\Thefinal.mid" 'c amino MMControl1.Command = "Open" 'lo abre
MMControl1.Command = "Play" lo ejecuta
End Sub
Debemos traer de Componentes el control Multimedia y poner todos sus botones a falsos e invisibles.
Luego asociamos por código a cada control el archivo correspondiente, en este caso uno para el
Cuaderno de Trabajo Visual Basic APENDICE A Página 125
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 código es el siguiente:
Private Sub video() MMControl1.DeviceType = "AVIVideo"
MMControl1.filename = App.Path & "\ugachaka.Avi"
MMControl1.Command = "open"
MMControl1.hWndDisplay = Picture1.hWnd
MMControl1.Command = "play"
End Sub Private Sub Command1_Click()
Call video End Sub
Primero creamos un procedimiento llamado video y allí volcamos las indicaciones de la ejecución, pero
¡Atención! Usamos la propiedad Handle Window para manipular en que objeto se ejecuta el avi.
Windows identifica así que queremos que se despliegue en la picture, a traves de la propiedad hWnd
del control multimedia y de hWnd del control Picture.
Cuaderno de Trabajo Visual Basic APENDICE A Página 126
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 Botón que activa el proceso y una picture que va cambiando su color
a medida que el porcentaje aumenta.El código es el siguiente:
Private Sub Command1_Click() Picture1.ForeColor = RGB(0, 0, 255) 'color azul
For i = 0 To 100 'un bucle que llama al procedimien to '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 porc entaje 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 'dib uja el 'rectangulo pb.Refresh 'actualiza la picture
End Sub Private Sub pausa() 'procedimiento que detiene la a plicación '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 Página 127
Actividad de Aprendizaje 72 – Control Tab
El control Tab o ficha con pestaña debemos traerlo de Componentes y se llama Microsoft Tabbed
Dialog Control 5.0. Este control nos permite ordenar la informacion de una tabla de una base de datos
en distintas fichas, a las que accedemos por la elección de una de sus pestañas. El formulario se ve así:
Esta aplicación tiene además del Tab control un Data control que conecta con la base de datos que
elijamos, y dentro del control tab tenemos controles Text y Labels para desplegar la información, como
ya hemos hecho en otros ejercicios con Base de Datos. No hay código escrito, ya que las conecciones a
la tabla estan hechas directamente a través de la ventana Propiedades. Tener en cuenta las
propiedades: DataBasename, y los controles Text que desplieguen los campos elejidos.
Actividad de Aprendizaje 73 – Control AniGif
Esta aplicación que hace muy poco, solo muestra un gato moviendo los ojos y la cola, activa un gif
animado usando un Control llamado AniGif, que conseguí en Internet. Puede conseguirse una demo
del control y en caso de querer adoptarlo hay que comprarlo.
En el archivo zipeado de la Aplicación se incluye el control Anigif.OCX, Es conveniente que lo copien en
el System de Windows, si despues quieren traerlo desde Componentes. el formulario se ve así.
Cuaderno de Trabajo Visual Basic APENDICE A Página 128
Actividad de Aprendizaje 74 - Transicion
En este ejercicio vamos a usar un ActiveX que permite hacer efctos de transición entre varias
imagenes, es un shareware, bajado de Internet, muy fácil de usar. El form se ve así:
El código es el siguiente:
Option Explicit Public pc, i As Integer Private Sub Command1_Click()
Do DoEvents TransFX1.Effect = i TransFX1.Start Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg") pc = pc + 1: If pc > 3 Then pc = 1 i = i + 1: If i = 13 Then i = 1 Loop
End Sub Private Sub Command2_Click()
End End Sub Private Sub Form_Load()
pc = 1 i = 1 Set TransFX1.PicTarget = LoadPicture(App.Path & "\" &_ CStr(pc) & ".jpg") Set TransFX1.PicBuffer = LoadPicture(App.Path & "\" &_ CStr(pc + 1) & ".jpg")
End Sub
Las propiedades principales son: PicTarget que es la primera imagen que carga y PicBuffer las
siguientes, como minimo debemos tener 2 imagenes , pero podemos cargar varias más. Y el método
Start que lo inicia, podríamos usar un timer pero en este caso es un bucle el que repite la operación
pasando entre los 15 efectos posibles que permite el control.
Por cualquier duda incluyo el archivo de Ayuda del creador del activeX.
Cuaderno de Trabajo Visual Basic APENDICE A Página 129
Actividad de Aprendizaje 75 - Patos
Este es otro ejemplo de animación usando el método PaintPicture combinado con el control
pictureClip y aplicando las constantes gráficas que permiten transparentar el fondo.
Option Explicit Const SRCAND = &H8800C6 Const SRCINVERT = &H660046 Private Sub Form_Load()
PictureClip1.Rows = 3 PictureClip1.Cols = 3 PictureClip2.Rows = 3 PictureClip2.Cols = 3
End Sub Private Sub Timer1_Timer()
Form1.Refresh Dim x As Single, y As Single Static imagenactual As Integer
Static imagenactual1 As Integer
Static xactual As Integer Static xactual1 As Integer If imagenactual > 5 Then
imagenactual = 3 If imagenactual < 2 Then
imagenactual = 2 If imagenactual1 > 2 Then
imagenactual1 = 0 If imagenactual1 < 0 Then
imagenactual1 = 0 If xactual > 1000 Then
xactual = 10 If xactual < 0 Then
xactual = 10 If xactual1 > 1000 Then
xactual = 1000 If xactual1 <= 0 Then
xactual1 = 1000 Form1.PaintPicture PictureClip2.GraphicCell(imagena ctual), xactual, 120, , , , , , , SRCAND Form1.PaintPicture PictureClip1.GraphicCell(imagena ctual), xactual, 120, , , , , , , SRCINVERT Form1.PaintPicture PictureClip2.GraphicCell(imagena ctual1), xactual1, 250, , , , , , , SRCAND Form1.PaintPicture PictureClip1.GraphicCell(imagena ctual1), xactual1, 250, , , , , , , SRCINVERT
Cuaderno de Trabajo Visual Basic APENDICE A Página 130
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 máscara,
dos botones que activan y desactivan el Timer y un Timer para repetir la secuencia del conejo
caminando.
El código es el siguiente:
Option Explicit Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR 'dest Dim cone As Integer Dim a As Integer
Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False
End Sub Private Sub Form_Load()
PictureClip1.Cols = 6 PictureClip1.Rows = 1 PictureClip2.Cols = 6 PictureClip2.Rows = 1
End Sub Private Sub Timer1_Timer()
Picture1.Refresh Static x, y, i As Integer cone = cone + 1 If cone >= 6 Then cone = 0
Cuaderno de Trabajo Visual Basic APENDICE A Página 131
Picture1.PaintPicture PictureClip1.GraphicCell(cone ), x, 50, , , , , , , SRCAND ' para la mascara Picture1.PaintPicture PictureClip2.GraphicC ell(cone), x, 50, , , , , , , SRCINVERT ' para la imagen(animación) 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 código es:
Option Explicit Dim Min As Integer Dim Sec As Integer Dim Nombrearchivo As String Dim Abrirarchivo As Boolean
Private Sub Command2_Click()'Boton salir End End Sub
Private Sub Command4_Click()'Boton Abrir y cerrar e l 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 Página 132
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 OldS tate As Long, ByVal NewState As Long)
'mide el tiempo total de duración del archivo Min = MediaPlayer1.Duration \ 60 Sec = MediaPlayer1.Duration - (Min * 60) Label7.Caption = "Tiempo Total: " & Format(Min, " 0#") & ":" & Format(Sec, "0#") Abrirarchivo = CBool(NewState) End Sub
Private Sub Timer1_Timer()
'con el timer actualiza la label de tiempo 'transcu rrido Min = MediaPlayer1.CurrentPosition \ 60 Sec = MediaPlayer1.CurrentPosition - (Min * 60) If Min > 0 Or Sec > 0 Then Label8.Caption = "Tiempo transcurrido: " & Forma t(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 Página 133
Actividad de Aprendizaje 78 - Recipiente
Con esta aplicación simulamos la animación de llenar y vaciar un Tanque de Agua. Para que funcione
correctamente este ejercicio, deben tener el control Gauge32 habilitado en su sistema de Windows.
El código es el siguiente:
Private Sub Form_Load() VolumenInicial = 0 'Inicializar el volumen Text1.Text = 0 End Sub
Private Sub Slider1_MouseUp(Button As Integer, Shif t 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 Página 134
'Chequear el rango en que puede encontrarse el vo lumen. If (Text1.Text > 10 Or Text1.Text < 0) Then Slider1.Value = 0 Gauge1.Value = 0 MsgBox "El volumen debe estar entre 0 y 10 litro s." 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 ubicación. El código es:
Option Explicit 'Dibuja el nombre de Cuba en Relieve en el Formular io. 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 Página 135
Private Sub Form_Activate() 'Para dibujar en relieve en el formulario el nomb re de Cuba. Call EnRelieve(Form1, "Cuba", 6500, 400) End Sub
Private Sub Form_Load() ' Este código crea un árbol con objetos Node. TreeView1.Style = tvwTreelinesPlusMinusText ' Est ilo 6. TreeView1.LineStyle = tvwRootLines 'Estilo de lín ea 1.
' Agrega varios objetos Node. Dim nodX As Node ' Crea variable. 'Nodo Principal con la Clave Provincia y el Nombr e Provincias Set nodX = TreeView1.Nodes.Add(, , "Provincia", "Provincias") Set nodX = TreeView1.Nodes.Add(, , "MunicipioEspe cial", "Municipio Especial") Set nodX = TreeView1.Nodes.Add("MunicipioEspecial ", tvwChild, "IslaJuventud", "Isla de la Juventud") 'Nodos Secundarios con el nombre de las provincia s. Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Pinar del Rio", "Pinar del Rio") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "La Habana", "La Habana") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Ciudad Habana", "Ciudad Habana") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Matanzas", "Matanzas") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Villa Clara", "Villa Clara") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Cienfuegos", "Cienfuegos") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Santi Spiritus", "Santi Spiritus") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Ciego de Avila", "Ciego de Avila") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Camaguey", "Camaguey") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Las Tunas", "Las Tunas") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Holguin", "Holguin") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Granma", "Granma") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Santiago de Cuba", "Santiago de Cuba") Set nodX = TreeView1.Nodes.Add("Provincia", tvwCh ild, "Guantanamo", "Guantanamo") 'Set nodX = TreeView1.Nodes.Add("Provincia", tvwC hild, "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 Página 136
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 Página 137
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 código completo es el siguiente:
Private Sub cmdInicio_Click() Dim Extension As String Busqueda = "." ' Busqueda hasta ".". If InStr(1, File1.FileName, ".") Then 'Si encuent ra el signo "." 'Comparacion MiPos = InStr(File1.FileName, Busqueda) ' Regres a la posición de ".". Extension = Mid(File1.FileName, MiPos + 1) 'Escr ibe extensión cortado despues del punto. If Extension = "WAV" Or Extension = "wav" Then MMControl1.FileName = Dir1.Path & "/" & File1.F ileName MMControl1.Command = "open" MMControl1.Command = "play" Else MsgBox "Con esa extensión no puede oir esta mus ica," & _ "solo permite oir con extension WAV", vbInforma tion 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 Página 138
Private Sub Dir1_Change() 'Para que aparezcan sólo los archivos de ese dire ctorio. File1.Path = Dir1.Path End Sub
Private Sub Form_Load() MMControl1.DeviceType = "waveaudio" MMControl1.Command = "close" End Sub
Actividad de Aprendizaje 81 - Video
Esta aplicación similar a la anterior, ejecuta videos con el control Multimedia. Seleccionandolos desde
las carpetas de los directorios de los distintos dispositivos.Su código es:
Private Sub cmdInicio_Click() Dim Extension As String Busqueda = "." ' Busqueda hasta ".". If InStr(1, File1.FileName, ".") Then 'Si encuent ra el signo "." 'Comparacion MiPos = InStr(File1.FileName, Busqueda) ' Regres a la posición de ".". Extension = Mid(File1.FileName, MiPos + 1) 'Escr ibe extensión cortado despues del punto.
If Extension = "AVI" Then MMControl1.FileName = Dir1.Path & "/" & File1.F ileName MMControl1.Command = "open" MMControl1.Command = "play" Else MsgBox "Con esa extensión no pueden ver videos, " & _ "solo permite ver con extension avi", vbInforma tion End If Else Exit Sub End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 139
Private Sub cmdParar_Click() MMControl1.Command = "stop" MMControl1.Command = "close" End Sub
Private Sub cmdPausa_Click() MMControl1.Command = "pause" End Sub
Private Sub Dir1_Change() 'Para que aparezcan sólo los archivos de ese dire ctorio. 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 interés de tipo financiero, para esto vamos a crear un Módulo con
una función específica llamada: CalcPago. Para crear el Módulo vamos a proyecto : agregar Módulo y
allí codificamos y luego lo grabamos con la extensión .bas. Desde esta aplicación vamos a usar un
objeto OLE que convoque a la aplicación Excel, del Office. El código del formulario es el siguiente:
Cuaderno de Trabajo Visual Basic APENDICE A Página 140
Option Explicit
Private Sub Command1_Click() Dim cuotas As Currency If Not CalcPago(CSng(Text1), Val(Text2), CSng(Tex t3), cuotas) Then MsgBox "¡Qué escribiste!, ¡¡No puedo calcular es o!!" Else ' resultado satisfactorio Picture1.Visible = True Label4.Caption = Format(cuotas, " #,##0.00;($#,# #0.00)") End If End Sub
El código del Módulo es:
Option Explicit
Public Function CalcPago(capital As Currency, año A s Integer, interes As Single, cuota As Currency) As Boolean
On Error GoTo repararerror 'dimensiona la variable como objeto Dim excelapp As Object
' el tipo de apliación es Excel Const hdExcelObject = "Excel.Application" Screen.MousePointer = vbHourglass CalcPago = False
' crea la aplicación en Excel donde se realizará el Cálculo Set excelapp = CreateObject(hdExcelObject)
'llama al método pmt de Excel cuota = excelapp.Pmt((interes / 100) / 12, año * 12, -1 * capital) excelapp.quit Set excelapp = Nothing CalcPago = True Screen.MousePointer = vbDefault Exit Function
repararerror: ' determina el tipo de error Select Case Err.Number Case 429 MsgBox "Imposible crear un Aplicación OLE con E xcel." + vbCrLf + " Está seguro de tener una Versión de Excel superior a la 5, y bi en instalada?", vbCritical, "Cálculo de pago de Cuo tas" Case Else MsgBox "Error #" + Str(Err.Number) + ":" + Err. Description + ".", vbCritical, "Cálculo de pago de Cuotas" End Select Screen.MousePointer = vbDefault End Function
Cuaderno de Trabajo Visual Basic APENDICE A Página 141
Actividad de Aprendizaje 83 – Nuevos controles MonthView y DTPicker
Estos dos controles: el MonthView y el DTPicker son controles especiales que trae la versión 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 imágenes además 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 contr ol ImageList Dim comboimage As ComboItem 'variable de tipo objet o para 'declarar un comboItem
'Agrega una referencia al objeto comboItem usando e l 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%) 'ag rega un 'grafico comboimage.Image = imgi% + 1 'controlar que no se e xceda de 'la cantidad de images del
ImageList
Cuaderno de Trabajo Visual Basic APENDICE A Página 142
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 código 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 través del Método AddItem en tiempo de
ejecución.
Cuaderno de Trabajo Visual Basic APENDICE A Página 143
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 código es el siguiente:
Option Explicit Private Sub cmdSalir_Click()
End End Sub Private Sub Form_Load()
'Inicializamos el timer para que este apagado Timer 1.Enabled = False End Sub Private Sub cmdComenzar_Click()
'Inicializamos la barra de progreso, y comenzamos e l Timer Progreso.Value = 0 Timer1.Enabled = True
End Sub Private Sub Timer1_Timer()
'Si el progreso todavía no termina, seguir aumentan do 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 código de un mismo control.
Cuaderno de Trabajo Visual Basic APENDICE A Página 144
Actividad de Aprendizaje 87 – Barra de estado
Un ejemplo de como modificar en tiempo de ejecución 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 botón lo asignamos al
panel de la barra correspondiente.
El código 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 - Pestañas
Es común usar el control TabStrip para mostrar aplicaciones con pestañas, sin embargo es mucho más
potente el control Tabbed Dialog ya que cada panel puede contener otros controles, esto facilita el
diseño y su codificación.
En el formulario dibujamos un control SStab traido de componentes y luego en su primer pestaña
dibujamos varias labels que nos vincularan con las otras pestañas, donde se mostrará en una texto y en
la otrs una imagen. El código 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 Página 145
End Sub Private Sub
Label1_Click() Text1.Text = "Aqui podemos cargar un texto con form ato 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 form ato 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 asignación 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 Página 146
El código 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 el egido 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.SelectedIt em.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 Página 147
Actividad de Aprendizaje 90 - TreeView
Este ejercicio muestra un tipico arbol de archivos de windows con su raíz principal y sus derivados.
Acompañado de Iconos tomados también de un control ImageList. El método Add, agrega un Nodo al
arbol de Archivos.
El código 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, "Hij o " & i, (i + 1)
Next i Arbol.Nodes.Add "Hijo 1", tvwChild, "Nieto 1", "Nie to 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 Página 148
Actividad de Aprendizaje 91 – Control Chart
El control Miscrosoft Chart nos permite desplegar gráficos 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 código.
El control lo traemos de Componentes. Y al dibujarlo en el formulario vamos a ver que contiene de
manera predeterminada un gráfico con datos apócrifos para mostarnos su diseño.
Como organiza los datos: El control MSChart requiere que todos los datos se organicen en filas y
columnas. Además requiere saber cuántos puntos de datos habrá en cada fila y columna que debe
graficar. Por lo general se cuenta con una columna de datos con múltiples filas (algo parecido a un
alista de números). Por ejemplo: si se desean graficar las ventas de una empresa durante los últimos
doce meses, contará con una sola columna(un año) y doce filas(una por cada mes). Si desea comparar
los dos últimos años, tendrá dos columnas (una por cada año) 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 diseño: capturamos 12 cifras en tiempo de diseño para poder apreciar
el gráfico. 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 automática.
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 Página 149
'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, t eniendo 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 gráfico ." 'Le agrego un Título. MSChart1.TitleText = "Gráfico MSChart"
'Puedo cambiar el tipo de letra del titulo y del Pi e 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 (u na 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 Página 150
Actividad de Aprendizaje 92 – DHTML: Hola Mundo
Visual Basic en su versión 6 cuenta con un tipo de proyecto que nos permite crear un archivo con
extensión 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: Aplicación DHTML (Dinamic Html).
Tenemos aquí también una caja de herramientas y una ventana diseño y otra ventana código aunque
con ciertas modificaciones, en el nombre de los objetos y en sus procedimientos. Vamos a hacer el
típico ejemplo de Hola Mundo pero en este editor de código HTML. La aplicación en tiempo de
ejecución abre una página web con las siguientes características:
Cuaderno de Trabajo Visual Basic APENDICE A Página 151
Vamos a dibujar un control image, un botón y una caja de texto, modificamos sus propiedades a través
de la ventana propiedades, y luego codificamos en la ventana código, la sintáxis es la siguiente: Private Function Button1_onclick() As Boolean Image1.border = 4 TextField1.Value = "Hola mundo" End Function Los procedimientos aquí se llamarán funciones. Y la caja de texto en lugar de Caption tiene una
propiedad llamada Value. Y la función no es Click sino onClick.
Actividad de Aprendizaje 92 – DHTML: Operaciones
Ahora vamos a hacer una calculadora simple de operaciones matemáticas. Abrimos un nuevo proyecto
DHTML y dibujamos una tabla con etiquetas y cajas de texto y cinco botones. En tiempo de ejecución
se ve como la imagen de la izquierda. Y la codificación 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 Página 152
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 Página 153
EJERCICIOS SOBRE FUNCIONES
Los siguientes ejercicios muestran como utiilzar y crear funciones propias dentro de Visual Basic.
Cuaderno de Trabajo Visual Basic APENDICE A Página 154
Actividad de Aprendizaje 93 – Juego Ranita
Este ejercicio es un juego muy simple que al hacer click en los insectos, si estan próximos a la rana, ésta
simula comerlos y suma un puntaje.
Los insectos se mueven en forma aleatoria mediante un random y los ojos de la ranita tienen una
animación, donde se abren y cierran, además de los controles Images, tenemos dos labels
transparentes, una que muestra el puntaje y otra que resetea la aplicación. Y el sonido está activado
usando la API sndPlaySound de windows.
El código es el siguiente:
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dl l" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1 ' reproducción asíncrona
Const SND_NODEFAULT = &H2 ' silencio no predetermin ado, 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(I ndex).Visible = False
Cuaderno de Trabajo Visual Basic APENDICE A Página 155
b = b + 10 If Image6(Index).Left >= 2600 Then
Image7.Visible = True ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASY NC Or SND_NODEFAULT)
ElseIf Image6(Index).Left <= 2600 Then Image8.Visible = True ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASY NC 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_A SYNC Or SND_NODEFAULT)
End If End Sub Private Sub perder()
If tiempo = 60 Then Timer1.Enabled = False
Cuaderno de Trabajo Visual Basic APENDICE A Página 156
Timer2.Enabled = False Timer3.Enabled = False Label1.Caption = "¡¡Perdiste!!"
ret = sndPlaySound(App.Path & "\desapa.wav", SND_AS YNC 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 simulación del funcionamiento de un semáforo. No incluye ningún tipo de interactividad es
solo para observar cuando debe cruzarse la calle, viendo como lo hace el hombrecito. El código es:
Option Explicit Private Sub pausa()
Dim comenzar Dim controlar comenzar = Timer Do Until controlar >= comenzar + 2
controlar = Timer DoEvents
Loop End Sub Private Sub Command1_Click()
End End Sub Private Sub Timer1_Timer()
Picture1.Move Picture1.Left, Picture1.Top + 150
'con el condicional controla el reposicionarse.
If Picture1.Top > 7000 Then Picture1.Top = -300
Cuaderno de Trabajo Visual Basic APENDICE A Página 157
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 Página 158
Picture3.Picture = Picture8.Picture
Timer1.Interval = 150 Call pausa
End Sub Private Sub Timer3_Timer()
Image1.Move Image1.Left + 100 End Su b
Actividad de Aprendizaje 94 – Pausa
En este ejercicio vamos a crear un procedimiento llamado Pausa para poder hacer una interrupción en
la ejecución del código de una Aplicación. Así se verá una animación que muestra la aparición de las
letras con un intérvalo. Usamos un bucle que toma el tiempo desde el reloj del sistema. El código es:
Private Sub pausa()
Dim comenzar Dim chequeo comenzar = Timer Do Until chequeo >= comenzar + 1
chequeo = Timer DoEvents 'esto hace que windows escuche otras accio nes
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 Página 159
Actividad de Aprendizaje 95 – Manejo de Errores
En este ejercicio vamos a usar una pequeña rutina de control de Errores. El objetivo es buscar en la
Unidad A, un archivo determinado, en este caso un .wmf, si no lo encuentra despliega un mensaje,
codificado en la rutina de Error.
El código es:
Private Sub Command1_Click() On Error GoTo ErrorDisco Image1.Picture = LoadPicture("a:\prntout2.wmf") Exit Sub ErrorDisco: If Err.Number = 71 Then MsgBox ("Por Favor, Cierre la puerta de la unid ad."), , "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 Página 160
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 cómo se pueden hacer estas llamadas a dichas funciones y como utilizarlas.
Cuaderno de Trabajo Visual Basic APENDICE A Página 161
Actividad de Aprendizaje 96 - Tragamonedas
Esta es una version de las maquinitas tragamonedas. Arrastramos una moneda de 1$ sobre el Botón
Apostar y se habilita el Botón Jugar, cuando nos pàrece hacemos Click en el Botón Detener, y si las tres
imagenes son iguales: ganamos sino perdimos, y volvemos a intentarlo. En tiempo de ejecución se ve
parecido a la imagen:
El código es el siguiente:
Usamos la API de Windows sndPlaySound para activar el sonido. Pueden copiarla de aquí textualmente
o convocarla desde el Visor de las API de Visual Basic.
Private Declare Function sndPlaySound Lib "winmm.dl l" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1 ' reproducción asíncrona
Option Explicit Dim snd As Integer Dim a As Integer Dim n1 As Integer Dim n2 As Integer Dim n3 As Integer Private Sub Command1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
'Dragea la moneda sobre el botón Apostar
Source.Visible = False Command2.Enabled = True 'habilita el Botón Jugar
End Sub Private Sub Command2_Click() 'Botón Jugar
'Aquí usamos la API de windows para ejecutar el son ido snd = sndPlaySound(App.Path & "\1toons1.wav", SND_A SYNC) 'Habilita el timer de la animación del tragamonedas Timer1.Enabled = True Command4.Enabled = True
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 162
Private Sub Command3_Click() 'Salida del programa Unload Me
End Sub Private Sub Command4_Click()
'Detiene la animación. Inhabilita el botón Jugar y llama al procedimiento 'que elige al azar los números
Timer1.Enabled = False Command2.Enabled = False Call azar 'llama al procedimiento Azar que eleige t res números Command4.Enabled = False
End Sub Private Sub Form_Load()
Randomize End Sub Private Sub Timer1_Timer()
'Animación pasando las imagenes de la tragamoneda
a = a + 1 If a = 1 Then
Image1.Picture = Picture1(0).Picture Image2.Picture = Picture1(1).Picture Image3.Picture = Picture1(2).Picture
End If If a = 2 Then
Image1.Picture = Picture1(1).Picture Image2.Picture = Picture1(2).Picture
Image3.Picture = Picture1(0).Picture End If If a = 3 Then
Image1.Picture = Picture1(2).Picture Image2.Picture = Picture1(0).Picture
Image3.Picture = Picture1(1).Picture a = 0
End If End Sub Private Sub azar()
'Procedimiento que elige tres números al azar corre spondientes 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 Página 163
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 nu meros elegidos al azar son iguales.
Call ganar End Sub Private Sub ganar()
'Procedimiento que controla si los tres números al azar son iguales ganó, sino perdió
Dim m As Integer If n1 = n2 And n2 = n3 Then Label1.Caption = "¡¡Gan aste!!"
snd = sndPlaySound(App.Path & "\Cash2.wav", SND_ASY NC) For m = 0 To 6
Image4(m).Visible = True Next m
Else Label1.Caption = "¡¡Perdiste!!"
snd = sndPlaySound(App.Path & "\NoTiempo.wav", SND_ ASYNC) End If 'llama al procedimiento que controla si se terminó el dinero. Call dinero
End Sub Private Sub dinero()
' Procedimiento que Controla si se acabó el dinero
If Image4(0).Visible = False And Image4(1).Visible = False And_ Image4(2).Visible = False And Image4(3).Visible = False And_ Image4(4).Visible = False And Image4(5).Visible = False And_ Image4(5).Visible = False Then
Label1.Caption = "¡¡Sin Dinero!!"
End If End Sub Como vemos en esta aplicación tenemos varios procedimientos creados : Azar, ganar y dinero que
eligen los tres numeros al azar que cargan las imágenes, ganar que controla si las tres imagenes son
iguales y dinero que controla que las monedas de 1$ se agotaron. Y un Select Case que elige que
imagen corresponde a cada numero.
Cuaderno de Trabajo Visual Basic APENDICE A Página 164
Actividad de Aprendizaje 97 – Protector de Pantalla
Este ejercicio muestra como hacer un protector de pantalla simple, que desplaza un corazón en la
pantalla. Este archivo lo vamos a hacer en VB y lo vamos a grabar con extension .scr, para luego
copiarlo en el directorio de Windows.
En el forrmulario insertamos un control PictureBox donde cargamos el corazón y un control Timer que
controla la animación del corazón en la pantalla. El código es:
Option Explicit Dim movimiento As Integer Dim puntero As Integer Private Declare Function ShowCursor Lib "user32" (B yVal 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 Página 165
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.Hei ght) 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.Hei ght) Then
movimiento = 1 End If
End Select End Sub Para esta aplicación vamos a usar una API de window para mostrar y ocultar el puntero del mouse,
SHOWCURSOR, y tambien vamos a registrar un pequeño movimiento del mouse para que se cierre el
programa, asi como tocar una tecla. La animacion controla en cuatro movimientos el desplazamiento
del corazón en diagonal hasta llegar al borde, y allí cambia la dirrección.
Cuaderno de Trabajo Visual Basic APENDICE A Página 166
Actividad de Aprendizaje 98 – Juego: Caza de patos
Este es un típico jueguito de disparar o Shoot. con el mouse debemos derribar los patos y esto hace
que incrementemos el puntaje. He omitido los sonidos para que el archivo no sea tan pesado pero
ustedes pueden agregar los que gusten. El código es:
Option Explicit Private Declare Function sndPlaySound Lib "winmm.dl l" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1 ' play asynchronously
Dim sonido As Integer Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim f As Integer Dim g As Integer Dim h As Integer Dim i As Integer Dim j As Integer Dim patos As Integer Dim patosin As Integer Dim patosout As Integer Private Sub Form_Load()
Randomize End Sub Private Sub mniDía_Click()
mniDía.Checked = True mnuNoche.Checked = False Form1.Picture = Image1.Picture Timer1.Enabled = True
Cuaderno de Trabajo Visual Basic APENDICE A Página 167
Timer3.Enabled = True Timer5.Enabled = True Timer7.Enabled = True Timer9.Enabled = True Timer4.Enabled = False Timer2.Enabled = False Timer6.Enabled = False Timer8.Enabled = False Timer10.Enabled = False Picture6.Visible = False Picture7.Visible = False Picture1.Visible = False Picture8.Visible = False Picture9.Visible = False
End Sub Private Sub mnuNoche_Click()
mniDía.Checked = False mnuNoche.Checked = True Form1.Picture = Image2.Picture Timer2.Enabled = True Timer4.Enabled = True Timer6.Enabled = True Timer8.Enabled = True Timer10.Enabled = True Timer1.Enabled = False Timer3.Enabled = False Timer5.Enabled = False Timer7.Enabled = False Timer9.Enabled = False Picture6.Visible = False Picture7.Visible = False Picture1.Visible = False Picture8.Visible = False Picture9.Visible = False
End Sub Private Sub mnuNuevo_Click()
Picture1.Left = 0 Picture1.Top = 480 Picture6.Left = 1560 Picture6.Top = 1440 Picture7.Left = 480 Picture7.Top = 2760 Picture8.Left = 2400 Picture8.Top = 240 Picture9.Left = 2880 Picture9.Top = 2160 Picture1.Visible = True Picture8.Visible = True Picture6.Visible = True If mniDía.Checked = True Then
Timer1.Enabled = True Timer3.Enabled = True Timer5.Enabled = True Timer7.Enabled = True
Cuaderno de Trabajo Visual Basic APENDICE A Página 168
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 Página 169
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 Página 170
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 Página 171
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 Página 172
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 código. Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwM illiseconds As Long) Private Sub Command1_Click()
Call Sleep(1000) Beep Call Sleep(3000) Beep
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 173
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 posición del cursor usamos una Api de Windows que nos permite chequear la
posición del cursor y para guardar el código creamos un Módulo de tipo .bas El código es:
Option Explicit Dim imagen As Integer Dim Moviendo As Boolean
'Aquí establecemos las constantes de máximo y mínim o 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.TwipsPer PixelX) - 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 Página 174
DoEvents Loop Until Moviendo = False
End Sub Sub Private Sub imgPuntero_MouseUp(Button As Intege r, 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 P OINTAPI)
Actividad de Aprendizaje 101 – Sleep
Las API de Windows (Application Programming Interface) son funciones automáticas 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 aplicación 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 continúa hasta el próximo obstáculo. Para esto vamos a usar la
API Sleep que nos permite hacer la pausa, con poca programación 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 Módulo de extensión .bas que agregamos desde Proyecto, agregar Módulo. El código es el
siguiente:
Para el Módulo:
Cuaderno de Trabajo Visual Basic APENDICE A Página 175
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilli seconds 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 izquie rda. Sleep 2000 'Llama a la API Sleep (2000 milisegun dos = 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
declaración y la guardamos en un Módulo .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 código en el procedimiento Activate del Formulario con la siguiente sintáxis:
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 Página 176
Actividad de Aprendizaje 103 – MCIExecute (Sonido)
Esta aplicación 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 código 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 Página 177
Actividad de Aprendizaje 104 – MCIExecute (Video)
Esta aplicación permite ejecutar un Video usando la Api, MCIExecute. El código 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 A LIAS kpdvideo STYLE POPUP" 'determinar el tamaño del video a desplegar mciExecute "PUT kpdvideo WINDOW AT 306 290 180 be gin_of_the_skype_highlighting 306 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
Cuaderno de Trabajo Visual Basic APENDICE A Página 178
Actividad de Aprendizaje 105 - Blend
Esta aplicación muestra un efecto de superposición y transparencia de dos imágenes. El código es:
Option Explicit
'Este proyecto requiere de dos controles Picture
'Cada control debe tener una imagen, ambas deben se r 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.dl l" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Lon g, ByVal hdc As Long, ByVal lInt As Long, ByVal lIn t 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 gráfico 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 parámetros With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 .AlphaFormat = 0 End With
Cuaderno de Trabajo Visual Basic APENDICE A Página 179
'copia la función blend a una variable en memoria de tipo long RtlMoveMemory lBF, BF, 4 'aplicar la Api desde la picture1 sobre la pictur e2 AlphaBlend Picture2.hdc, 50, 0, 100, 100, Picture 1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 180
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 Página 181
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 extensión TXT, que podemos tipear en cualquier editor como el NotePad,
por ejemplo y otro texto con formato RTF (Rich Text File, o sea archivo de texto enriquecido) . Este
formato puede grabarse en el Word, vamos a grabar como... y allí seleccionamos RTF.
Se llama texto enriquecido porque permite incluir distintos tipos de letras, colores y tamaños o sea
más variantes en su formato. Y el control que vamos a usar para desplegar este texto con formato RTF
es el RichTextBox 8es un control no estándar, por lo tanto debemos traerlo de Componentes), para el
texto común o sea con formato TXT, usaremos un TextBox de la caja de herramientas estandar. El
formulario tendrá el siguiente aspecto:
Tenemos dos controles para desplegar el texto: un Text1 y un RichTextBox1, y dos botones en cuyos
eventos Click se desplegarán por código los archivos mencionados en los controles de texto. Primero
debemos crear un archivo en el NotePad o en el Word y grabarlo como TXT y otro con variaciónes en el
tipo, color y tamaño de la letra y grabarlo como rtf. Luego abrimos visual y en creamos un nuevo
proyecto grabandolo en el mismo directorio y carpeta que tenemos los archivos: txt y rtf. El código de
cada botón es el siguiente:
Option Explicit 'Esta expresión nos fuerza a declar ar las variables.
Private Sub Command1_Click() 'Este boton es el que carga el 'archivo TXT Dim pepe As String 'Declaramos una variable para id entificar el 'archivo Dim renglon As String 'Esta variable guardará el ta maño de 'cada renglón del archivo
renglon = Chr(13) & Chr(10) ' corta a otra línea
Text1.Text = "" Open App.Path & "\rtf.txt"
For Input As #1 ' Abre (Open) y da 'entrada (Input) el archivo 'ubicado en el mismo directorio y carpeta en que es tá la 'aplicación. App.path significa en la ruta actual d e la'aplicación. 'Sino hay que indicar cual es el Path.
While Not EOF(1) ' esto realiza un bucle o sea repite la acción 'hasta que se llegue al final del archivo 1 (End of File)
Cuaderno de Trabajo Visual Basic APENDICE A Página 182
Line Input #1, pepe$ ' le da entrada a la linea 1 del archivo Text1.Text = Text1.Text & pepe & renglon 'concatena con & el 'texto del archivo y el tamaño del reglón.
Wend 'repite las ordenes en tanto la condición es verdad era, en 'este caso hasta tanto no termine el texto del arch ivo. Close #1 ' cierra el archivo al terminar de cargarlo.
End Sub Private Sub Command2_Click()
RichTextBox1.LoadFile (App.Path & "\rtf.rtf") 'como podemos 'ver con el Control RichTextBox es má s sencillo el manejo de 'archivos, con la sentencia LoadFile se carga el ar chivo 'indicando el camino para encontrarlo.
End Sub
Actividad de Aprendizaje 107 – Mosaico de Fondo
Muchas veces queremos desplegar en un fondo una imagen pequeña repetidas veces. En este ejercicio
vamos a lograrlo creando un procedimiento de tipo público en un modulo con extensión .bas y luego lo
convocamos desde el Formulario en el procemiento Click de un array de imagenes, que se encuentran
dentro de un Frame o Recuadro para su elección.
El código para el Módulo es:
Option Explicit Public Sub TileBitmap(Source As Object, _ Destinati on As Object)
Dim Y As Integer Dim X As Integer 'Ejecuta dos bucles anidados que r epiten 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 Página 183
Next 'X Next 'Y
End Sub Usamos el Método PaintPicture ya conocido en nuestras animaciones, para copiar la imagen en el
fondo del formulario. En un bucle anidado For Next que repite el ancho y el alto de la imagen.
Luego lo convocamos desde el Formulario en el Click de un Array de imagenes, que muestran distintas
opciones de dibujo:
Private Sub picSource_Click(Index As Integer)
'Toma la imagen del array de controles y la copia e n el formulario 'como un mosaico repetido.
TileBitmap picSource(Index), Me End Sub
Convoca al procedimiento público del Módulo y lo vuelca en el Formulario activo o sea Me.
Actividad de Aprendizaje 108 – Ecuacion de 2º. Grado
Este ejercicio utiliza funciones matemáticas como cálculo de raíz cuadrada. Y un control especial
CommonDialog que convoca a las ventanas estándar de Windows, que asociados a los métodos Put y
Get nos permiten Abrir y Guardar un fichero como txt. El código del ejercicio es el siguiente:
Dim a As Single, b As Single, c As Single 'Variable de los Datos Dim x1 As Single, x2 As Single 'Variable de las res puestas Dim del As Single 'Variable para los sumandos dentr o del radical
Private Sub cmdCalcular_Click()
Cuaderno de Trabajo Visual Basic APENDICE A Página 184
del = (b ^ 2 - 4 * a * c) If del >= 0 Then 'Si las raíces son reales e igua les 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 de l 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 Página 185
Exit Sub End If Open Fichero For Random As #1 'Abrir el Fichero. 'Guardar el valor de las variables en el Fichero. Put #1, , a Put #1, , b Put #1, , c
Put #1, , x1 Put #1, , x2 Close (1) End Sub
Private Sub mnuSalvarComo_Click() Dim Fichero As String CommonDialog1.Action = 2 'Abrir la ventana Salvar como. Fichero = CommonDialog1.FileName If Fichero = "" Then Exit Sub Open Fichero For Random As #1 'Abrir el Fichero. 'Guardar el valor de las variables en el Fichero. Put #1, , a Put #1, , b Put #1, , c Put #1, , x1 Put #1, , x2 Close (1) End Sub
Private Sub txtA_LostFocus() If IsNumeric(txtA.Text) Then 'Si el dato es numér ico a = txtA.Text 'Asignar el valor del TextBox a l a 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 Página 186
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 Página 187
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 Página 188
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 Gráficos que despliega distintos tipos de graficos , uno
de ellos a traves de la base de datos y otros por código.
Option Explicit 'debemos cargar la referencia Microsoft ActiveX dat a 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 gráfico ha sido guardado en " & strArchi voGuardar, vbInformation, "Guardar Gráfico"
End Sub Private Sub mnuArchivoImprimir_Click()
MSChart1.EditCopy Printer.PaintPicture Clipboard.GetData, 0, 0
Printer.NewPage Printer.EndDoc MsgBox "El gráfico ha sido enviado para su impresió n.", vbInformation, "Imprimir gráfico"
Cuaderno de Trabajo Visual Basic APENDICE A Página 189
End Sub Private Sub mnuArchivoSalir_Click()
Unload Me End Sub Private Sub mnuEdicionCopiar_Click()
MSChart1.EditCopy MsgBox "El gráfico se copiado a la memoria.", vbInf ormation, "Copia de gráfico"
End Sub Private Sub mnuGraficosBaseDatos_Click()
'abrimos una conexion a datos con el uso de un prov eedor 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 B ookSales GROUP BY Title HAVING SUM(Sales) > 0"
cnn.Open "provider=" & strProveedor & "; Data Sourc e=" & 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 Página 190
'los bucles generan los datos de la matriz dimensio nada 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) * Rn d + 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 gráfico al cargarse el formulario que
contiene al control MiSChart. El código es el siguiente:
Option Explicit ' Coloque este código en la sección Declaraciones.
' Si utiliza Office 97, asegúrese de establecer una
Cuaderno de Trabajo Visual Basic APENDICE A Página 191
' 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 ob jeto. Private Sub Form_Load()
' Establece después la variable con el método
GetObject. Set wkbObj = GetObject _ (App.Path & "\p epe.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 ser ie de las ' matriz. Si estos valores son cadenas, se conviert en ' las etiquetas de las filas. matrizDatos(i, 1) = wkbObj.Worksheets(1) _ .Range(" A" & i + 1).Value ' Después los valores de la columna B llenan la seg unda. 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 Página 192
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 Página 193
Actividad de Aprendizaje 111 – Formulario de Datos
Visual Basic cuenta con una cantidad importante de Asistentes. Entre ellos el asistente para la creación
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 selección,
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 introducción al Asistente. Pasamos a Siguiente, ya que aquí no podemos cargar la configuración de ningún perfil, porque no
tenemos ninguna configuración o plantilla grabada.
Cuaderno de Trabajo Visual Basic APENDICE A Página 194
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 botón Examinar podemos elegir la base de datos que vamos a
usar.
Cuaderno de Trabajo Visual Basic APENDICE A Página 195
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. Cuadrícula: lo
hará en una grilla. Maestro/Detalle: relaciona dos tablas. FlexGrid mostrará: las tablas con sus resúmenes y totales de los datos existentes en la tabla y Chart lo
hará de manera gráfica. Nosotros vamos a elegir a manera de grilla o Cuadrícula.
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 Página 196
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 configuración como una
plantilla para futuros formularios. Luego hacemos Finalizar.
Al cerrase la ventana del Asistente veremos en nuestro proyecto estándar un nuevo formulario, si no
usamos el primero o Form1 lo podemos eliminar.
Posicionados en la ventana proyecto con el botón derecho tenemos la opción de eleminarlo. Y
grabamos la aplicación con el formulario que creó el asistente. Sino lo usamos como formulario de
presentación. Como vemos en la ventana código el asistente, ya codificó los botones de navegación y
de cierre de la Aplicación.
Cuaderno de Trabajo Visual Basic APENDICE A Página 197
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 también podemos seleccionar la cantidad de registros que
queremos mostrar. Obviamente necesitaremos conexión con una base de datos, para lo que usaremos
un control data. El código es:
Dim tipo As Byte Dim Orden As String
Private Sub Command1_Click() Dim N As Long DBGrid1.Visible = True N = Text1.Text 'Para entrar el número de registro s.
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 Página 198
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) The n N = Text1.Text Else MsgBox "El número de registros debe estar entre 1 y 9", vbInformation Text1.SetFocus End If Else MsgBox "Entre un valor numérico entre 1 y 9" Text1.SetFocus End If End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 199
Actividad de Aprendizaje 113 – Relacionar varios formularios
A pedido de varios seguidores de nuestra página vamos a integrar en un solo proyecto varios
formularios. El proyecto se compone de 5 formularios: Presentación, Planetas, Información, Evaluación
y Créditos.
Retomando un ejercicio simple ya explicado el Nº 7 El Sistema Solar, vamos a agregarle una primera
pantalla de presentación con distintos botones o labels que nos vinculan a los otros formularios:
La label Planetas nos muestra el formulario del ejercicio Nº7 con los distintos planetas y el
procedimiento Clic de cada label transparente nos vincula a una Base de Datos previamente armada
con el Data Jet, el motor para Base de Datos de Visual Basic 5 o con Access, donde tendremos la
información referente a cada planeta, en este caso: el nombre del planeta, su distancia al sol en km. y
la cantidad de satélites (El proyecto final está incompleto, Uds. pueden completarlo como les resulte
más conveniente).
Al hacer Clic sobre uno de los planetas se nos abre la siguiente pantalla:
El código que nos vincula a la base de datos convocada por un control Data que se encuentra invisible
en el formulario de Información es el siguiente:
Private Sub Label12_Click() 'Esta label corresponde al planeta 'Júpiter Label2.Caption = "Júpiter" Form2.Data1.Recordset.MoveFirst 'mueve el puntero a l comienzo
Cuaderno de Trabajo Visual Basic APENDICE A Página 200
Form2.Data1.Recordset.Move 1 ' y luego un lugar al registro 'correspondiente en la Base de datos Planetas Form2.Picture1.Picture = Form2.ImageList1.ListImage s(2).Picture Form2.Show
End Sub
Para desplegar la imagen del planeta usamos un control ImageList que tiene cargadas, en este caso
solo dos imágenes: la Tierra y Júpiter.
La posición del registro depende del orden que le dieron a los planetas en los registros de la Base de
datos.
Ustedes pueden agregar oros campos que desplieguen más información y labels indicativas de dichos
campos.
Luego tenemos el Formulario evaluación que a través de la función InputBox le hace al alumno dos
preguntas: Una sobre el nombre del planeta y otra sobre la cantidad de satélites que posee.
El formulario de evaluación se asemeja al siguiente:
Y el código es:
Private Sub Picture1_Click() 'imagen de Júpiter planeta = InputBox("¿Qué planeta es este?", "Planet as") If UCase(planeta) = "JÚPITER" Then
contar = contar + 1 Label2.Caption = contar
End If satelite = InputBox("¡Cuántos satélites tiene?", "P lanetas") If satelite = "16" Then
contar = contar + 1 Label2.Caption = contar Picture1.Enabled = False
End If End Sub También incluimos una variable contar para que nos sume puntos con las respuestas correctas, y las
variables planeta y satélite que guardan las respuestas del InputBox. Esta variables deben ser
declaradas en la parte general del formulario.
Cuaderno de Trabajo Visual Basic APENDICE A Página 201
Para cerrar tenemos el formulario créditos donde se indica el nombre del programador y el botón Salir
que cierra la aplicación. La navegación entre un formulario y otro se realiza mediante los métodos
Show: Mostrar y Hide: Ocultar. Primero se muestra el formulario vinculado y luego se oculta el que
está activo. Ejemplo:
Private Sub Label1_Click() Form3.Show Form5.Hide
End Sub Ustedes pueden vincular distintos formularios con distintos ejercicios, imágenes, animaciones o videos
o simplemente información escrita.
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 específica en este caso Customers, o sea Clientes o
usuarios. Observen que no hemos escrito ni una línea de código y sin embargo podemos recorrer los
registros que componen la tabla a través del control Data. El formulario muestra los campos del
registro a través 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 tendrán que cargar el DataBaseName
nuevamente de acuerdo al recorrido de sus máquinas.
Cuaderno de Trabajo Visual Basic APENDICE A Página 202
Actividad de Aprendizaje 115 – BD Navegar por codigo
En este ejercicio agregamos cuatro botones o sea CommandButton para realizar por código a través
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 r egistro End Sub Private Sub Command2_Click()
Data1.Recordset.MovePrevious ' Se mueve al registro previo If Data1.Recordset.BOF Then 'Si es el primero muest ra 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 muest ra 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 Página 203
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 búsquedas.
El formulario contiene los siguientes controles:
La base con la que trabajamos es Biblio.mdb y la tabla Editores o Publishers. El código correspondiente
a los botones avanzar y Atrás ya los hemos visto en el ejercicio anterior por lo tanto vamos a
centrarnos en los botones Agregar, Eliminar y Buscar cuyos códigos son:
Private Sub Command1_Click()
mensaje = MsgBox("Complete los datos y haga un Clic k" + Chr(10) + "en el botón de registro siguiente.", vbInformation)
Data1.Recordset.AddNew Text2.SetFocus
End Sub Private Sub Command2_Click()
mensaje = MsgBox("¿Está seguro de Borrar el registr o?", vbOKCancel, "Eliminación 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:", "B úsqueda") Data1.Recordset.FindFirst "City=" & "'" & buscar & "'" If Data1.Recordset.NoMatch Then
mensaje = MsgBox("No existe la Ciudad Buscada.", vb Critical) Command4.Enabled = False
Else Command4.Enabled = True
Cuaderno de Trabajo Visual Basic APENDICE A Página 204
End If End Sub Private Sub Command4_Click()
Data1.Recordset.FindNext "City=" & "'" & buscar & " '" End Sub El método AddNew nos permite agregar un nuevo registro, y la actualización la podemos hacer a través
de botón grabar o moviendo el puntero al pasar al siguiente registro. Para eliminar un registro lo
hacemos con el Método Delete, previa confirmación a través 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 método FindFirst (Buscar primero) y el campo
establecido en este caso City (Ciudad) establece los criterios de la búsqueda. Luego con FindNext
establece el criterio de la segunda búsqueda.
Actividad de Aprendizaje 117 – BD Consulta SQL
En este ejercicio vamos a hacer una pequeña 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, también podemos hacer las
consultas SQL directamente, luego veremos que podemos hacerlas a través 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 Página 205
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 podría ser DESC o sea descendente.
Así vemos mostrarse en la grilla el listado de autores ordenado alfabéticamente.
Actividad de Aprendizaje 118 – BD Crystal Report
Esta es una aplicación generadora de Informes. Estos informes se diseñan a partir de una Base de datos
y la aplicación nos permite añadir un encabezado, fechas, textos, pie de páginas. etc. O hacer en
tiempo de ejecución 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 función que es generar un Informe. tenemos la
aplicación Crystal Reports y el control Crystal Report que debemos traer de componentes, para
incluirlo en la Caja de herramientas.
Primero veremos la aplicación Crystal Reports, vamos a Inicio, programas y dentro de Microsoft Visual
Basic selecionamos Crystal reports, una vez dentro de la aplicación, 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 Página 206
La pantalla en tiempo de diseño 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 página. 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 aplicación.
Luego abrimos Visual Basic y creamos la siguiente aplicación:
El formulario contiene un Control data cuya propiedad DatabaseName es Biblio.mdb y la propiedad
RecordSource: la tabla Authors. Luego tenemos una DBGrid traída de componentes cuya propiedad
DataSource es :DataControl.
Un Crystal Report, también traído de componentes, cuya propiedad ReportFileName es el informe que
creamos recientemente,, en la aplicación Crystal Reports: aut.rpt. Luego agregamos una caja de texto
para ingresar la identificación 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 ejecución al generar el informe de uno de los Autores se ve así:
El código para actualizar la grilla es :
Cuaderno de Trabajo Visual Basic APENDICE A Página 207
Private Sub Command1_Click() Data1.RecordSource = "Select * from authors Where A u_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 código en el evento Load es el siguiente:
Private Sub Form_Load()
'La grilla debe estar conectada a la data 1 Data1.D atabaseName = 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 Página 208
Actividad de Aprendizaje 120 – BD Funciones con SQL
Este ejercicio nos muestra el uso de tres funciones: Mínima, Máxima 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 años 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 sintáxis 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 años de
nacimiento de los autores, guardándola 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 máquinas. La base usada es
Biblio.mdb.
Cuaderno de Trabajo Visual Basic APENDICE A Página 209
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 ubicación de la base de datos de su disco rígido. 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 (Título) 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 esto s campos están vaciós aparecerá el
asterisco. Data2.Recordset.Seek "=", Data1.Recordset.Fields("P ubID") If Data2.Recordset.NoMatch Then Text4.Text = "***"
Data3.Recordset.Seek "=", Data1.Recordset.Fields("I SBN") If Data3.Recordset.NoMatch Then Text2.Text = "***"
Exit Sub Data4.Recordset.Seek "=", Data3.Recordset.Fields("A U_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 Página 210
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 código de las consultas y practicar este lenguaje de consultas estructuradas de información
contenida en tablas de Base de Datos. La explicación esta hecha en Visual basic 6, pero también la
pueden hacer en el 5 cambiando el control MsFlex Grid por el Data Bound Grid de la versión 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 código 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 código 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 muestr a 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 Página 211
End Sub Private Sub Command2_Click()
On Error GoTo sqlerror Data1.RecordSource = Text2 'aqui se vuelca la consu lta 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 código 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 patrón específico. 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 instrucción crea una vista que
muestra el título 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 instrucción 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 Página 212
Podemos modificar el nombre que SQL le asigna a las columnas con la claúsula 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 cálculos 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 instrucción SELECT: Al cargar cualquier base de datos
mediante el Jet en un aaplicación Visual Basic, es posible utilizar cualquier función propia del entorno
como parte de una instrucción SQL. Ejemplo 1: Vista con una columna que muestra los tres primeros
caracteres de una columna de la tabla base usando la función 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: También pueden usarse las funciones de Visual basic como parte de la claúsula 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, aún si lo hace a través de
controles enlazados sin codificación, utiliza estos objetos de acceso a datos. El Modelo de Objetos de
Acceso a datos puede ser:
DAO 3.51 (versión 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 Página 213
El objeto fundamental en los programas basados en DAO es el Recorset. este es el objeto que contiene
la colección 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 están 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 instrucción.
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 dinámico, permite lectura y escritura, el segundo sólo lectura.
Al crear el Dynaset por código 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. También vamos a usar la propiedad Filter para crear un nuevo RecordSet. El
código es:
Option Explicit Private Sub Form_Load()
'Lo primero que debo hacer es incorporar la referen cia Microsoft DAO 3.51. 'creación 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 apun te a ella Set db = DBEngine.OpenDatabase(strNombreDB)
Cuaderno de Trabajo Visual Basic APENDICE A Página 214
'genera el Dynaset a partir de la tabla Titles
Set rs = db.OpenRecordset(strNombreRS, dbOpenDynase t) 'cuenta los registros en el conjunto de datos
With rs
.MoveLast ' se mueve al final del registro
intRegs = .RecordCount ' obtiene la cantidad de reg istros 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 Método OpenRecords et 'para obtener un segundo conjunto de datos.
Dim strFiltro As String Dim rs2 As Recordset strFiltro = "YearPub > 1990" 'crea el conjunto filt rado. 'Pruebe a cambiar el año 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 & ": " & intRe gs & " Registros" End Sub
Actividad de Aprendizaje 125 – BD con DAO validacion de campos
En esta ejercitación vamos a trabajar con algunos ejemplos de validación de campos. en este primer
ejercicio vamos a validar filtrando el teclado. O sea podrán ingresar sólo números del 0 al 9, en el
primer cuadro de texto. Y letras en el segundo cuadro de texto. Y ambos en el tercero. El código es:
Cuaderno de Trabajo Visual Basic APENDICE A Página 215
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strvalido As String strvalido = "0123456789" 'habilita solo números
If InStr(strvalido, Chr(KeyAscii)) = 0 Then
KeyAscii = 0 ' sino es válido lo vuelve nulo
End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii))) ' cambia a may úsculas. End Sub Private Sub Text3_KeyPress(KeyAscii As Integer)
Dim strvalido As String strvalido = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁ ÉÍÓÚ" KeyAscii = Asc(UCase(Chr(KeyAscii)))
If KeyAscii > 26 Then ' si no es un codigo de contr ol 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 validación 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 número telefónico: (##) ### - ####. Y en la
propiedad Format seleccionamos para Importe: $#,##0.00;($#.##0.00).
Cuaderno de Trabajo Visual Basic APENDICE A Página 216
El código 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 e l primer elemento. End With
End Sub
Aquí vamos a validar por código un campo requerido y un rango de mayor y menor, pero vamos a
hacer la validación a través de el Click de un Botón.O sea vamos a hacer la validación a nivel de
formulario y no de campos. Para esto vamos a crear una función validoform que cuando chequee que
está todo correcto devuelva un valor adecuado, aceptando la información del formulario, de lo
contrario devuelva un mensaje de error.
El código es:
Option Explicit Private Sub Command1_Click()
Dim strMsj As String strMsj = validoform() If strMsj = "" Then
Unload Me Else
MsgBox strMsj, vbExclamation, "Error de validación" End If
End Sub
Cuaderno de Trabajo Visual Basic APENDICE A Página 217
Private Sub Form_Load() 'Carga la lista desplegable With Combocliente
.AddItem "Minorista"
.AddItem "Mayorista"
.AddItem "Distribuidor"
.AddItem "Otro"
.ListIndex = 0 ' estalece de forma predeterminada e l primer elemento. End With
End Sub Public Function validoform() As String 'valida el f ormulario y devuelve un mensaje de error si no es v álido
'variables para la validación del rango
Dim intSup As Integer Dim intInf As Integer Dim strMsjSupInf As String 'variables para la valid ación 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 con tener un valor entre " & CStr(intInf) & " y " & CStr(intSup) & "." 'valores de la longitud
intMinLong = 3 intMaxLong = 10 strMsjMinMax = "El campo Mayúsculas debe tener entr e " & CStr(intMinLong) & " y " &
CStr(intMaxLong) & " caracteres."
strEnviarMsj = "" 'verifique el campo Superior/Infe rior With txtsupeinf
If Val(.Text) < intInf Or Val(.Text) > intSup Then
strEnviarMsj = strEnviarMsj & vbCrLf & strMsjSupInf & vbCrLf .SetFocus
End If End With 'verifique el campo mayúsculas
With txtletrasmayusculas
If Len(.Text) < intMinLong Or Len(.Text) > intMaxLo ng 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 nume ricos? strEnviarMsj = strEnviarMsj & vbCrLf & "El campo di nero debe tener un valor
numérico." & vbCrLf MaskEddinero
.SetFocus End If
End If 'verifico el campo combinado
With txtcombinado If Len(Trim(.Text)) = 0 Then
strEnviarMsj = strEnviarMsj & vbCrLf & "El campo co mbinado es requerido." & vbCrLf
.SetFocus End If
End With validoform = strEnviarMsj
Cuaderno de Trabajo Visual Basic APENDICE A Página 218
End Function Private Sub txtcombinado_KeyPress(KeyAscii As Integ er)
Dim strvalido As String strvalido = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁ ÉÍÓÚ" KeyAscii = Asc(UCase(Chr(KeyAscii)))
If KeyAscii > 26 Then ' si no es un codigo de contr ol If InStr(strvalido, Chr(KeyAscii)) = 0 Then
KeyAscii = 0 End If
End If End Sub Private Sub txtletrasmayusculas_KeyPress(KeyAscii A s Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii))) ' cambia a may úsculas. End Sub Private Sub txtnumeros_KeyPress(KeyAscii As Integer )
Dim strvalido As String strvalido = "0123456789" 'habilita solo números
If InStr(strvalido, Chr(KeyAscii)) = 0 Then
KeyAscii = 0 ' sino es válido lo vuelve nulo
End If End Sub
Recommended