Cuaderno de Trabajo Visual Basic II

218
CUADER VISU AP Cuaderno de Trabajo Visual Basic se e Licenciamiento Re RNO DE TRAB UAL BASIC PENDICE A encuentra bajo una Licencia Creative Commons Atrib ecíproco 3.0 Unported . Septiembre 2011 – IDSystem BAJO bución-No Comercial- ms

description

Cuaderno de Trabajo Visual Basic II

Transcript of Cuaderno de Trabajo Visual Basic II

Page 1: Cuaderno de Trabajo Visual Basic II

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

Page 2: Cuaderno de Trabajo Visual Basic II

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

Page 3: Cuaderno de Trabajo Visual Basic II

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

Page 4: Cuaderno de Trabajo Visual Basic II

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

Page 5: Cuaderno de Trabajo Visual Basic II

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

Page 6: Cuaderno de Trabajo Visual Basic II

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.

Page 7: Cuaderno de Trabajo Visual Basic II

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.

Page 8: Cuaderno de Trabajo Visual Basic II

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

Page 9: Cuaderno de Trabajo Visual Basic II

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

Page 10: Cuaderno de Trabajo Visual Basic II

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

Page 11: Cuaderno de Trabajo Visual Basic II

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.

Page 12: Cuaderno de Trabajo Visual Basic II

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

Page 13: Cuaderno de Trabajo Visual Basic II

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

Page 14: Cuaderno de Trabajo Visual Basic II

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

Page 15: Cuaderno de Trabajo Visual Basic II

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 = ""

Page 16: Cuaderno de Trabajo Visual Basic II

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

Page 17: Cuaderno de Trabajo Visual Basic II

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

Page 18: Cuaderno de Trabajo Visual Basic II

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.

Page 19: Cuaderno de Trabajo Visual Basic II

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

Page 20: Cuaderno de Trabajo Visual Basic II

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

Page 21: Cuaderno de Trabajo Visual Basic II

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

Page 22: Cuaderno de Trabajo Visual Basic II

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

Page 23: Cuaderno de Trabajo Visual Basic II

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

Page 24: Cuaderno de Trabajo Visual Basic II

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

Page 25: Cuaderno de Trabajo Visual Basic II

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

Page 26: Cuaderno de Trabajo Visual Basic II

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

Page 27: Cuaderno de Trabajo Visual Basic II

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)

Page 28: Cuaderno de Trabajo Visual Basic II

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

Page 29: Cuaderno de Trabajo Visual Basic II

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

Page 30: Cuaderno de Trabajo Visual Basic II

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.

Page 31: Cuaderno de Trabajo Visual Basic II

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

Page 32: Cuaderno de Trabajo Visual Basic II

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

Page 33: Cuaderno de Trabajo Visual Basic II

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

Page 34: Cuaderno de Trabajo Visual Basic II

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.

Page 35: Cuaderno de Trabajo Visual Basic II

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:

Page 36: Cuaderno de Trabajo Visual Basic II

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

Page 37: Cuaderno de Trabajo Visual Basic II

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

Page 38: Cuaderno de Trabajo Visual Basic II

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.

Page 39: Cuaderno de Trabajo Visual Basic II

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

Page 40: Cuaderno de Trabajo Visual Basic II

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.

Page 41: Cuaderno de Trabajo Visual Basic II

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

Page 42: Cuaderno de Trabajo Visual Basic II

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

Page 43: Cuaderno de Trabajo Visual Basic II

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

Page 44: Cuaderno de Trabajo Visual Basic II

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

Page 45: Cuaderno de Trabajo Visual Basic II

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

Page 46: Cuaderno de Trabajo Visual Basic II

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.

Page 47: Cuaderno de Trabajo Visual Basic II

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

Page 48: Cuaderno de Trabajo Visual Basic II

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

Page 49: Cuaderno de Trabajo Visual Basic II

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

Page 50: Cuaderno de Trabajo Visual Basic II

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

Page 51: Cuaderno de Trabajo Visual Basic II

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.

Page 52: Cuaderno de Trabajo Visual Basic II

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

Page 53: Cuaderno de Trabajo Visual Basic II

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.

Page 54: Cuaderno de Trabajo Visual Basic II

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.

Page 55: Cuaderno de Trabajo Visual Basic II

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á:

Page 56: Cuaderno de Trabajo Visual Basic II

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:

Page 57: Cuaderno de Trabajo Visual Basic II

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.

Page 58: Cuaderno de Trabajo Visual Basic II

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:

Page 59: Cuaderno de Trabajo Visual Basic II

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.

Page 60: Cuaderno de Trabajo Visual Basic II

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

Page 61: Cuaderno de Trabajo Visual Basic II

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.

Page 62: Cuaderno de Trabajo Visual Basic II

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:

Page 63: Cuaderno de Trabajo Visual Basic II

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.

Page 64: Cuaderno de Trabajo Visual Basic II

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.

Page 65: Cuaderno de Trabajo Visual Basic II

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

Page 66: Cuaderno de Trabajo Visual Basic II

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:

Page 67: Cuaderno de Trabajo Visual Basic II

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

Page 68: Cuaderno de Trabajo Visual Basic II

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"

Page 69: Cuaderno de Trabajo Visual Basic II

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

Page 70: Cuaderno de Trabajo Visual Basic II

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"

Page 71: Cuaderno de Trabajo Visual Basic II

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

Page 72: Cuaderno de Trabajo Visual Basic II

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:

Page 73: Cuaderno de Trabajo Visual Basic II

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"

Page 74: Cuaderno de Trabajo Visual Basic II

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

Page 75: Cuaderno de Trabajo Visual Basic II

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

Page 76: Cuaderno de Trabajo Visual Basic II

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

Page 77: Cuaderno de Trabajo Visual Basic II

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

Page 78: Cuaderno de Trabajo Visual Basic II

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

Page 79: Cuaderno de Trabajo Visual Basic II

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

Page 80: Cuaderno de Trabajo Visual Basic II

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

Page 81: Cuaderno de Trabajo Visual Basic II

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

Page 82: Cuaderno de Trabajo Visual Basic II

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

Page 83: Cuaderno de Trabajo Visual Basic II

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

Page 84: Cuaderno de Trabajo Visual Basic II

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

Page 85: Cuaderno de Trabajo Visual Basic II

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

Page 86: Cuaderno de Trabajo Visual Basic II

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

Page 87: Cuaderno de Trabajo Visual Basic II

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

Page 88: Cuaderno de Trabajo Visual Basic II

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.

Page 89: Cuaderno de Trabajo Visual Basic II

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

Page 90: Cuaderno de Trabajo Visual Basic II

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.

Page 91: Cuaderno de Trabajo Visual Basic II

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.

Page 92: Cuaderno de Trabajo Visual Basic II

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

Page 93: Cuaderno de Trabajo Visual Basic II

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

Page 94: Cuaderno de Trabajo Visual Basic II

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

Page 95: Cuaderno de Trabajo Visual Basic II

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

Page 96: Cuaderno de Trabajo Visual Basic II

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)

Page 97: Cuaderno de Trabajo Visual Basic II

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

Page 98: Cuaderno de Trabajo Visual Basic II

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

Page 99: Cuaderno de Trabajo Visual Basic II

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"

Page 100: Cuaderno de Trabajo Visual Basic II

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

Page 101: Cuaderno de Trabajo Visual Basic II

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

Page 102: Cuaderno de Trabajo Visual Basic II

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

Page 103: Cuaderno de Trabajo Visual Basic II

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 .

Page 104: Cuaderno de Trabajo Visual Basic II

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

Page 105: Cuaderno de Trabajo Visual Basic II

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

Page 106: Cuaderno de Trabajo Visual Basic II

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

Page 107: Cuaderno de Trabajo Visual Basic II

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

Page 108: Cuaderno de Trabajo Visual Basic II

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

Page 109: Cuaderno de Trabajo Visual Basic II

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

Page 110: Cuaderno de Trabajo Visual Basic II

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

Page 111: Cuaderno de Trabajo Visual Basic II

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

Page 112: Cuaderno de Trabajo Visual Basic II

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

Page 113: Cuaderno de Trabajo Visual Basic II

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

Page 114: Cuaderno de Trabajo Visual Basic II

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

Page 115: Cuaderno de Trabajo Visual Basic II

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

Page 116: Cuaderno de Trabajo Visual Basic II

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

Page 117: Cuaderno de Trabajo Visual Basic II

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

Page 118: Cuaderno de Trabajo Visual Basic II

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.

Page 119: Cuaderno de Trabajo Visual Basic II

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

Page 120: Cuaderno de Trabajo Visual Basic II

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.

Page 121: Cuaderno de Trabajo Visual Basic II

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

Page 122: Cuaderno de Trabajo Visual Basic II

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.

Page 123: Cuaderno de Trabajo Visual Basic II

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

Page 124: Cuaderno de Trabajo Visual Basic II

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

Page 125: Cuaderno de Trabajo Visual Basic II

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.

Page 126: Cuaderno de Trabajo Visual Basic II

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

Page 127: Cuaderno de Trabajo Visual Basic II

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

Page 128: Cuaderno de Trabajo Visual Basic II

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.

Page 129: Cuaderno de Trabajo Visual Basic II

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

Page 130: Cuaderno de Trabajo Visual Basic II

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

Page 131: Cuaderno de Trabajo Visual Basic II

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

Page 132: Cuaderno de Trabajo Visual Basic II

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"

Page 133: Cuaderno de Trabajo Visual Basic II

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

Page 134: Cuaderno de Trabajo Visual Basic II

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

Page 135: Cuaderno de Trabajo Visual Basic II

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

Page 136: Cuaderno de Trabajo Visual Basic II

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

Page 137: Cuaderno de Trabajo Visual Basic II

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

Page 138: Cuaderno de Trabajo Visual Basic II

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

Page 139: Cuaderno de Trabajo Visual Basic II

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:

Page 140: Cuaderno de Trabajo Visual Basic II

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

Page 141: Cuaderno de Trabajo Visual Basic II

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

Page 142: Cuaderno de Trabajo Visual Basic II

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.

Page 143: Cuaderno de Trabajo Visual Basic II

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.

Page 144: Cuaderno de Trabajo Visual Basic II

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

Page 145: Cuaderno de Trabajo Visual Basic II

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.

Page 146: Cuaderno de Trabajo Visual Basic II

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.

Page 147: Cuaderno de Trabajo Visual Basic II

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

Page 148: Cuaderno de Trabajo Visual Basic II

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

Page 149: Cuaderno de Trabajo Visual Basic II

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

Page 150: Cuaderno de Trabajo Visual Basic II

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:

Page 151: Cuaderno de Trabajo Visual Basic II

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)

Page 152: Cuaderno de Trabajo Visual Basic II

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

Page 153: Cuaderno de Trabajo Visual Basic II

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.

Page 154: Cuaderno de Trabajo Visual Basic II

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

Page 155: Cuaderno de Trabajo Visual Basic II

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

Page 156: Cuaderno de Trabajo Visual Basic II

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

Page 157: Cuaderno de Trabajo Visual Basic II

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

Page 158: Cuaderno de Trabajo Visual Basic II

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

Page 159: Cuaderno de Trabajo Visual Basic II

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

Page 160: Cuaderno de Trabajo Visual Basic II

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.

Page 161: Cuaderno de Trabajo Visual Basic II

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

Page 162: Cuaderno de Trabajo Visual Basic II

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

Page 163: Cuaderno de Trabajo Visual Basic II

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.

Page 164: Cuaderno de Trabajo Visual Basic II

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

Page 165: Cuaderno de Trabajo Visual Basic II

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.

Page 166: Cuaderno de Trabajo Visual Basic II

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

Page 167: Cuaderno de Trabajo Visual Basic II

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

Page 168: Cuaderno de Trabajo Visual Basic II

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

Page 169: Cuaderno de Trabajo Visual Basic II

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

Page 170: Cuaderno de Trabajo Visual Basic II

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

Page 171: Cuaderno de Trabajo Visual Basic II

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

Page 172: Cuaderno de Trabajo Visual Basic II

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

Page 173: Cuaderno de Trabajo Visual Basic II

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

Page 174: Cuaderno de Trabajo Visual Basic II

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:

Page 175: Cuaderno de Trabajo Visual Basic II

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.

Page 176: Cuaderno de Trabajo Visual Basic II

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

Page 177: Cuaderno de Trabajo Visual Basic II

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

Page 178: Cuaderno de Trabajo Visual Basic II

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

Page 179: Cuaderno de Trabajo Visual Basic II

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

Page 180: Cuaderno de Trabajo Visual Basic II

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.

Page 181: Cuaderno de Trabajo Visual Basic II

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)

Page 182: Cuaderno de Trabajo Visual Basic II

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

Page 183: Cuaderno de Trabajo Visual Basic II

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

Page 184: Cuaderno de Trabajo Visual Basic II

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

Page 185: Cuaderno de Trabajo Visual Basic II

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

Page 186: Cuaderno de Trabajo Visual Basic II

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

Page 187: Cuaderno de Trabajo Visual Basic II

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.

Page 188: Cuaderno de Trabajo Visual Basic II

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"

Page 189: Cuaderno de Trabajo Visual Basic II

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

Page 190: Cuaderno de Trabajo Visual Basic II

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

Page 191: Cuaderno de Trabajo Visual Basic II

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

Page 192: Cuaderno de Trabajo Visual Basic II

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

Page 193: Cuaderno de Trabajo Visual Basic II

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.

Page 194: Cuaderno de Trabajo Visual Basic II

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.

Page 195: Cuaderno de Trabajo Visual Basic II

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.

Page 196: Cuaderno de Trabajo Visual Basic II

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.

Page 197: Cuaderno de Trabajo Visual Basic II

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

Page 198: Cuaderno de Trabajo Visual Basic II

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

Page 199: Cuaderno de Trabajo Visual Basic II

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

Page 200: Cuaderno de Trabajo Visual Basic II

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.

Page 201: Cuaderno de Trabajo Visual Basic II

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.

Page 202: Cuaderno de Trabajo Visual Basic II

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.

Page 203: Cuaderno de Trabajo Visual Basic II

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

Page 204: Cuaderno de Trabajo Visual Basic II

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:

Page 205: Cuaderno de Trabajo Visual Basic II

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:

Page 206: Cuaderno de Trabajo Visual Basic II

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 :

Page 207: Cuaderno de Trabajo Visual Basic II

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.

Page 208: Cuaderno de Trabajo Visual Basic II

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.

Page 209: Cuaderno de Trabajo Visual Basic II

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.

Page 210: Cuaderno de Trabajo Visual Basic II

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

Page 211: Cuaderno de Trabajo Visual Basic II

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

Page 212: Cuaderno de Trabajo Visual Basic II

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

Page 213: Cuaderno de Trabajo Visual Basic II

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)

Page 214: Cuaderno de Trabajo Visual Basic II

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:

Page 215: Cuaderno de Trabajo Visual Basic II

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

Page 216: Cuaderno de Trabajo Visual Basic II

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

Page 217: Cuaderno de Trabajo Visual Basic II

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

Page 218: Cuaderno de Trabajo Visual Basic II

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