jueves, 29 de septiembre de 2016

Visual Basic

Juegos



Ejercicio Nº 1: Partes de la Computadora.


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

Ejercicio Nº 2: Crucigrama.



Comenzamos un nuevo proyecto.
Con este ejercicio queremos sugerir una ejemplo de crucigrama que cada uno podrá adaptar a los contenidos requeridos. También a partir de aquí podríamos elaborar un Ahorcado.
El crucigrama está armado con cuadros de texto o sea controles Text, encerrados dentro de un control frame, este control tiene la única finalidad de agrupar y contener otros controles, ordenando la interactividad de una manera visual. Otros dos controles Frame agrupan las opciones vertical y horizontal. Conteniendo controles CheckBox que al ser seleccionados hacen la corrección de las letras ingresadas en las cajas de texto. El ingreso de las mismas se hace en tiempo de ejecución a través del teclado.
A la derecha vemos unos controles Picture vacíos que se cargaran con imágenes que muestren por ejemplo una cara sonriente si la palabra es correcta o seria si no lo es, o cualquier otro tipo de imagen .Podemos llamar a esta imagen con la función LoadPicture desde cualquier parte de nuestro disco rígido. Y un botón con el icono de Hijitus indica la Salida y cierre del programa.
Acá tendremos que crear por código una estructura condicional que controle si la entrada de datos es correcta o no.
El código es el siguiente:
Private Sub Command1_Click()
End
End Sub
Private Sub Check1_Click()
If Text1.Text = "L" And Text2.Text = "O" And Text3.Text= "R" And Text4.Text ="O" then ' este código debe ir todo en un mismo reglón y 'chequea si se escribió una de las palabras correctas. Ciudado con los 'nombres de los Controles porque seguramente Ustedes no tendrán la 'misma numeración que yo. (Otra aclaración cuando usamos el carácter ' 'indicamos que todo lo que sigue es un comentario, por lo tanto la 'computadora no lo ejecuta lo saltea, no es código).
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda
Else 'Sino
Image1. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub
Private Sub Check2_Click()
If Text2.Text = "O" And Text5.Text ="R" And Text9.Text ="O" then
Image2.Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda
Else 'Sino
Image2. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub
Private Sub Check3_Click()
If Text7.Text = "R" And Text8.Text ="A" And Text9.Text ="T" And Text4.Text ="O" And Text10.Text ="N" then
Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face03.ico) 'carita linda Else 'Sino
Image3. Picture = LoadPicture(c:\vb\Icons\Misc\Face01.ico) 'carita fea
End Sub

Ejercicio Nº 3: Animación del Osito.




Para esta animación usamos un control especial que no está en la Caja de Controles estándar , para incluirlo vamos a Proyecto , Componentes y allí seleccionamos Microsoft PictureClip Control y al aceptar , este se incluirá en la Caja de Controles. Permanecerá invisible en tiempo de ejecución por lo tanto volcaremos su imagen en un control Picture común que dibujaremos en el Formulario y dejamos vacío. En el formulario dibujamos un control Picture vacío sin Picture, con el fondo blanco y sin borde o sea con la propiedad Borderstyle a None. Luego dibujamos el PictureClip con las propiedades Col a 1 y Row a 9 , y agregamos un Timer control fundamental en todo tipo de animación. El Timer es un cronómetro que repite una acción (hace un Bucle) o sentencia en Visual Basic de manera automática e infinita, hasta que lo desactivamos o cerramos el programa.
El control PictureClip es una grilla que despliega los distintos frames de la animación que podemos ver en la imagen a la izquierda. Pueden grabar esta imagen y usarla en la propiedad picture para el ejercicio. Estos frames o cuadros de animación tienen un índice en esta imagen de 0 a 8.
Aquí también usamos el Método Move para desplazar la imagen del Oso.
El código de cada procedimiento es el siguiente:
 Option Explicit
Dim A As Integer 'declaramos a como variable entera
Private Sub Form_Load()
A = 9 ' Inicializamos la variable en 9.
End Sub
Private Sub Timer_Timer()
A = A - 1
If A = 0 then A = 8 'Al llegar al frame 0 vuelve a empezar
Picture1.Picture = PictureClip1.GraphicCell(A)
Picture1.Move Picture1.Left + 50, Picture1.Top + 50 'Mueve en diagonal
End Sub
Comenzamos con una variable = 9 porque los frames del osito deben disminuir y no aumentar sino dá la impresión de caminar al revés.
Una propiedad fundamental del PictureClip es la GraphicCell ya que ella automatiza la división de la grilla(imagen total) en partes(frames).
En este caso en el Move usamos los dos argumentos el Left y el Top de la imagen , propiedades que indican la ubicación de ésta en relación al borde izquierdo (coordenada x) y al borde superior (coordenada y). Lo que permitirá que el oso se mueva en diagonal.
En la explicación sólo está detallado el movimiento del oso, en el formulario vemos agregadas otros controles Line e Image simulando una calle, un semáforo y una señal de Stop, como para darles una idea de lo que podrían agregar a la escena.

Ejercicio Nº 4: Sumas.


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


El botón Aplicar permite hacer la corrección mediante un Condicional. Algunos de estos temas son comunes a otros ejercicios. Por lo tanto nos centraremos en las funciones nuevas.
La función Rnd nos permite cargar en una variable un número aleatorio que en este caso definimos como entero Int (de Integer) y de 0 a 10.
Num1 = int( Rnd * 10)
Repetimos el procedimiento para Num2, el segundo sumando de nuestra cuenta. Para que realmente sea aleatorio debemos incorporar la sentencia Randomize en el Procedimiento Load del Formulario.
Otra función que utilizamos es Val que transforma una cadena de caracteres, en este caso el contenido de un Text en un valor numérico.
Resultado = Val ( Text1.Text)
Y luego con un condicional y el operador de suma + controlamos si el resultado es correcto:
If resultado = Int(num1) + Int(num2) then...
En el caso de resolver bien la cuenta pasa a cargar otros dos números , iniciando una nueva cuenta. Pero necesitamos una espera en la aplicación. Esto lo hacemos por código con un bucle que asociado al reloj del sistema crea una pausa en la aplicación. Para esto creamos un Procedimiento llamado Pausa. Posicionados en la ventana de código , vamos a Tools/ Herramientas, Add Procedure/ Agregar Procedimiento, y en la ventana que se nos abre elegimos un Name para el mismo en este caso = Pausa y luego con los botones de opción seleccionamos: Sub y Private. Damos el Aceptar y se cierra la ventana. Ahora veremos en nuestra ventana de código un nuevo Procedimiento llamado Pausa. Incluido dentro de los procedimientos del objeto General. Luego lo llamaremos desde otra parte del programa con la sentencia Call.
Para mayor claridad vamos al código:
Option Explicit
Dim num1, num2, resultado As Integer
Private Sub pausa() ' este el procedimiento creado por nosotros
Dim comenzar
Dim controlar
comenzar = Timer
Do Until controlar > = comenzar + 1.5 ' este es el bucle de espera
controlar = Timer
DoEvents ' esta sentencia evita un bucle egoista
Loop
End Sub
Private Sub Command1_Click()
num1 = Int(Rnd * 10) 'elige un número aleatorio
num2 = Int(Rnd * 10) 'elige un número aleatorio
Text1.Text = ""
Label1.Caption = num1
Label2.Caption = num2
Text1.SetFocus ' ubica el foco del cursor en el control Text1
Command2.Enabled = False
Image1.Picture = Nothing 'vacía el contenido de la imagen
End Sub
Private Sub Command2_Click()
Command2.Enabled = False
resultado = Val(Text1.Text)
If resultado = Int(num1) + Int(num2) Then
Image1.Picture = Picture1.Picture
Call pausa ' llama al procedimiento que creamos como Pausa
Call Command1_Click 'este procedimiento llama a otra suma
Else
Image1.Picture = Picture2.Picture
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
Randomize
num1 = Int(Rnd * 10)'al cargarse el programa ya aparece una cuenta
num2 = Int(Rnd * 10)
Text1.Text = ""
Label1.Caption = num1'se vuelcan las variables en las Labels
Label2.Caption = num2
Command2.Enabled = False'el botón aplicar está desactivado
End Sub
Private Sub Text1_Change()
Command2.Enabled = True'al cambiar el texto se activa Aplicar
End Sub

Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 5: Torero.

Este ejercicio muestra una sucesión de Imágenes al estilo un show de diapositivas .Las imágenes las cargamos en controles Image a la izquierda del formulario invisibles, para luego convocarlas por código y desplegarlas en la Image central, ésta si con su propiedad visible = True.
La sucesión de imágenes la realiza un control Timer asociado a un contador , cada imagen se relaciona con un texto que desplegamos en una Label colocada debajo de la imagen central. Al llegar el contador a 12 se detiene la sucesión y se muestra una Label con los nombres de los creadores de la aplicación.
La Label = Reiniciar nos posibilita volver a comenzar sin salir de la aplicación, para esto inicializa la variable A = 0 y pone el Timer nuevamente en funcionamiento.
El código de los principales procedimientos es el siguiente:
Option explicit
Dim A as Integer
Private Sub Label3_Click() ' esta es la label de reiniciar
Timer1.enabled = True
A = 0
Label2.caption = "Lo primero es la coleta..."
Label4.visible = False ' oculta a los Autores
End Sub
Private Sub Timer1_Timer()
A = A + 1
If A = 3 then
Image13.Picture= Image1.Picture
Label2.caption = "Y los tirantes después..."
ElseIf A = 4 then
Image13.Picture = Image5.Picture
Label2.caption = "enseguida la corbata..."
Elseif A = 5 Then ' Y así las distintas opciones de Imágenes y de Texto.
Label4.Visible = True ' muestra los Autores
Timer1.enabled = False ' desactiva el Timer
End If
End Sub
Controlen el orden de las Imágenes de acuerdo a su propia aplicación, y los textos siguientes son:
"Y una faja de chipé..."
"El chaleco hay que ensancharlo ..."
"la chaquetilla está bien..."
"Una cinta desatada..."
"Un beso ardiente ...dos...tres..."
"Mezcla de llanto y de juego y un rezo de ella por él..."
"Dios mío que vuelva zano! ¡Si muere, muero también!
La sintaxis de los textos se mantiene como en las fotos originales.
Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 6: Sistema Solar.

Este ejercicio es similar al de las partes de la computadora. Una Imagen grande es particionada a través de Labels transparentes que nos permiten en este caso identificar cada planeta por separado.
Al pasar el puntero del mouse sobre el planeta este cambia por una manito lo que nos indica que es posible una interacción. Y al clickear sobre el mismo despliega en la Label inferior el nombre del planeta.
Vamos a centrarnos en las novedades que aporta este ejercicio en relación al Nº1. Primero : podemos cambiar el puntero del mouse: Para esto en la propiedad MousePointer y MouseIcon de cada Label transparente haremos cierta modificaciones.
MousePointer = 99 (Custome) ' O sea la opción personalizada.
MouseIcon = Seleccionamos de la carpeta Icons o de otra en especial el Icono que queremos mostrar.
Segundo : Vemos en la Imagen Inferior que muestra la Aplicación en ejecución, dos botones : uno de Imprimir y otro de Salir, que en realidad no son Botones porque su forma es ovalada. Estos son Controles Shape de forma ovalada . Como el Control Shape es puramente decorativo y no responde a ningún Evento , entonces aquí también con un pequeño truco , le colocamos una Label transparente sobre la Shape con la propiedad Caption = Imprimir o Salir y ahora sí la Label responde al Evento Click.
Tercero: En la Shape Imprimir , al clickear sobre ella imprimimos el Formulario en tiempo de ejecución. El código es:
Private Sub Label13_Click()
Form1.PrintForm
End Sub

Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 7: Cubos.

Este ejercicio y los tres siguientes usan en sus procedimientos el Drageo o Drag and Drop , que significa arrastrar y soltar y nos va a permitir mover un objeto en tiempo de ejecución de un lugar a otro del formulario. Este tipo de ejercicios es muy útil para los docentes que trabajan con los más pequeños.
Usamos tres controles Picture cargando en cada uno de ellos un icono que les guste. Y en la propiedad Dragmode de cada picture elegimos la opción Automatic , la numero 1. Esto permitirá mover los controles. Pero para que realmente se desplacen debemos agregar al procedimiento Form_DragDrop el siguiente código:
Private Sub DragDrop ( Source as control, X as Single, Y as Single)
Source.Move x, y
End Sub
Dentro de los argumentos entre paréntesis vemos Source que quiere decir origen, o sea el control de origen y esto es muy importante porque quiere decir que no hace falta que especifiquemos que picture estamos moviendo o arrastrando y soltando , el procedimiento lo registra de por sí, y lo que debemos actualizarle son las nuevas coordenadas que leerá el procedimiento a través de x, y. Aquí usamos un método ya conocido el Move. Al correr el programa podemos clickear sobre una de las figuras y manteniendo el botón izquierdo del mouse apretado arrastrarla a la nueva posición que deseamos y luego soltarla.

Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 8: Día Feliz.


Este ejercicio de drageo utiliza también imágenes que pueden desplegarse en controles picture o image . En este caso son Images con su propiedad stretch a true lo que permite usar iconos y poder agrandarlos.
La Image1 la carita fea tiene la propiedad DragMode en 1 : Automática. Y en la propiedad DragIcon tiene cargado el mismo icono para que cuando la arrastremos no se vea una ventana vacía. Pero ahora el procedimiento usado es el DragOver que detecta cuando pasamos por encima de un control determinado. En este caso es el cesto o la Image2 . Y el objetivo es que al arrastrar la carita fea sobre el cesto esta desaparezca, simulando que la estamos tirando dentro del cesto. Entonces el código indicado será:
Private Sub Image2_DragOver (...)
Image1.visible = False
End Sub

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

Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 9: Compra de Productos.

En este ejercicio arrastramos las imágenes del teléfono, reloj y filmadora, como si hiciéramos una compra virtual sobre la calculadora y el valor del total, se va incrementando haciendo la cuenta de lo que gastamos.
Los controles son cuatro Image , el botón que borra el total a pagar. Una caja de texto que muestra el total y las demás son Labels indicativas.
Cuando arrastramos la imagen vamos a observar que no drageamos un rectángulo o ventana vacía sino iconos que coinciden con la imagen elegida, para eso a cada imagen le cargamos su icono correspondiente en la propiedad DragIcon. No olvidarse poner la propiedad DragMode en 1. El código es el siguiente:
Dim total as integer ' Declaramos en la parte General la variable.
Private Sub Command1_Click()
Text1.text = "" ' vaciámos la caja de texto.
Total = 0 ' reiniciamos la variable a 0.
End Sub
Private Sub Image4_dragDrop (...) ' En imagen de la calculadora.
If Source = Image1 then ' Aquí testeamos la imagen de origen.
Total = total + 260
Elseif Source = Image2 then
Total = total + 300
Elseif Source = Image3 then
Total = total + 1400
End if
Text1.text = total
End Sub
Acá vemos la importancia del argumento Source como control de origen, porque nos permite testear en el condicional a que imagen nos estamos refiriendo.

Descripción: Descripción: http://usuarios.multimania.es/echeverriam/bullet2.jpgEjercicio Nº 10: Ordenar de Menor a Mayor.

Este ejercicio usa el Drageo para que los alumnos ordenen los números de Menor a Mayor.

Tenemos 3 Labels que muestran los números a ordenar y otras 3 Labels que recibirán los números drageados de las Labels anteriores. Y dos Botones El de Números que a través del procedimiento Azar elige tres números aleatorios para cada label con la función Randomize y el Botón Corregir que chequea que estén ordenados realmente de menor a mayor. La Label7 muestra un "Bien" o un "Mal", de acuerdo a si el orden es correcto o no. El código es el siguiente:
Dim N1, N2, N3 as Integer ' declaramos las variables en General.
Private Sub Command1_Click() ' Este es el botón Números
Label4.caption = ""
Label5.caption = ""
Label6.caption = "" ' vaciamos los números ordenados
Label1.visible = True
Label2.visible = True
Label3.visible = True ' volvemos visibles las Label que drageamos.
Call Azar ' Convocamos al procedimiento creado en General.
End Sub
Private Sub Azar() ' creamos un procedimiento llamado Azar
N1= int(Rnd * 10) + 1 ' elige un número aleatorio de 1 a 10
N2= int(Rnd * 10) +1
N3= int(Rnd * 10) +1
If N1 <> N2 And N2 <> N3 And N1 <> N3 then 'controla que no haya 2 números iguales. Usamos los operadores <> y And.
Label1.caption = N1 ' volcamos los valores de las variables en las labels.
Label2.caption = N2
Label3.caption = N3
Else
Exit Sub ' Si uno de los números se repite sale de la Rutina y vuelve a llamarse al procedimiento Azar desde el Botón 1.
End If
End Sub
Private Command2_Click () ' Este es el Botón Corregir.
If Val(Label4.Caption) < Val(Label5.Caption) And Val(Label5.Caption) < Val(Label6.caption) Then ' Este condicional que controla el orden de los números debe ir en una sola línea.
Label7.Caption = "Bien"
Else
Label7.caption= "Mal"
End If
End Sub
Private Sub Form_Load()
Randomize ' Reinicia la funcion Rnd
Call Azar ' llama al procedimiento Azar.
Private Sub Label4_DragDrop(..)
Label4.Caption = Source ' La label que recibe el control de Origen toma el caption de este Origen.
Source.visible = False ' oculta el control de origen una vez drageado.
End Sub
Este código de la Label4_DragDrop lo repetimos para la Label5 y la Label6 y recordemos modificar su Dragmode a 1.
En tiempo de ejecución luego de arrastrar las Labels 1 2 y 3 sobre las 4 5 y 6 y clickear en Corregir veremos una pantalla similar a la siguiente:
























viernes, 23 de septiembre de 2016

visual basic

Mas actividades en Visual Basic


La aplicación más simple
En primer lugar, construiremos una aplicación en Visual Basic muy simple, que permita introducir un número y muestre el doble de ese número cuando hagamos clic en un botón. Primero, crea una carpeta (que se llame por ejemplo prueba1) en la que ubicaremos todos los ficheros que se generen en esta práctica. Pon después en marcha el Visual Basic y pídele que cree un proyecto de tipo EXE estándar. Entonces aparece la siguiente imagen.

En la imagen podemos identificar 4 zonas principales. En la zona 1 vemos los elementos que tiene nuestro proyecto. Inicialmente, solo tenemos el objeto Form1. Se trata de un formulario (un objeto básico en Visual Basic). El formulario podemos verlo en la zona 2. En la zona 3 podemos ver las propiedades del formulario. En concreto, una de las propiedades es Caption (la que aparece señalada en azul). Esa propiedad corresponde al nombre que aparecerá en el formulario, en la banda superior azul (ver zona 2). Finalmente, en la zona 4 se muestran diversos objetos que pueden añadirse al formulario.
Las propiedades del formulario pueden cambiarse manipulando directamente la zona 3. Prueba, por ejemplo, a cambiar la propiedad Caption, y la propiedad BackColor, y observa los cambios que se producen en el aspecto del formulario.
Un objeto de Visual Basic (por ejemplo, el formulario) no sólo tiene asociadas unas propiedades, sino unas acciones que se llevan a cabo en determinadas circunstancias (eventos). Si hacemos doble clic sobre el formulario aparecerá una ventana en la que podemos escribir el código correspondiente a las acciones que queremos que se lleven a cabo en función del evento que se produzca. Esa ventana es como la mostrada en la figura.

Vemos un procedimiento vacío que se llama Form_Load (). El código de este procedimiento se ejecutará cada vez que se active el formulario. En este caso, al ser el formulario principal del proyecto, se activará automáticamente al iniciar la ejecución de la aplicación. Añade el siguiente código al procedimiento:
caption = “mi formulario”
Con esto, al ejecutar la aplicación, automáticamente cambiará el nombre del formulario. Para ejecutar la aplicación, basta clicar en el botón con el triángulo azul que hay en la barra superior de herramientas (como el botón play de los equipos de música). Para parar la ejecución hay que clicar en el botón con el cuadrado azul.
¡Enhorabuena! Ya tienes tu primera aplicación en marcha. Sálvala usando la opción Archivo->Guardar proyecto. El sistema te mostrará el típico navegador de carpetas. Localiza la que habías creado para esta práctica (la carpeta prueba1) y salva en ella los ficheros del proyecto. Comprueba que se han salvado dos ficheros, uno correspondiente al proyecto y otro correspondiente al único formulario del proyecto.
Además del evento Form_Load (activar el formulario) hay otros eventos que pueden producirse. Desplega la lista que hay en la parte superior derecha de la ventana del código (en la que aparece inicialmente la palabra Load), y selecciona en esa lista la palabra Click. Aparece en la ventana de código el procedimiento vacío Form_Click() en el que podemos escribir lo que queremos hacer cuando se haga clic sobre el formulario. Escribe el siguiente código para cambiar el color del formulario al hacer clic.

BackColor = &HFF

Ejecuta la aplicación y comprueba que funciona.
Selecciona ahora el evento KeyDown. En el procedimiento vacío que aparece escribiremos la acción que queremos realizar cuando se pulse una tecla. El procedimiento tiene dos parámetros que nos permiten consultar la tecla que ha sido pulsada. Añade el código:

Caption = KeyCode

Si ejecutamos la aplicación veremos que al pulsar una tecla, en el nombre del formulario aparece el código numérico de la tecla pulsada (que se ha recibido automáticamente como parámetro del procedimiento Form_KeyDown).
Vamos ahora a añadir diferentes objetos al formulario. Primero añadimos un objeto de tipo Label, que seleccionaremos en la zona 4, marcando después sobre la imagen del formulario el sitio en el que queremos colocar ese objeto. En la figura se ve cómo queda la pantalla.

Aparece un objeto nuevo de tipo Label, que simplemente permite etiquetar una zona del formulario. En la zona 3 aparecen ahora las propiedades del objeto. Modifica la propiedad adecuada para que el texto que aparece en la etiqueta sea “Entrada”.
Ahora añadiremos un objeto de tipo TextBox, que seleccionaremos de la zona 4 y colocaremos bajo la etiqueta. El objeto de tipo TextBox permite introducir datos en la aplicación, y también mostrar datos al exterior. El formulario queda como muestra la figura.

Busca entre las propiedades del objeto TextBox la que nos permite cambiar el nombre del objeto (que llamaremos entrada) y la que permite cambiar el texto que ha puesto por defecto (Text1) de manera que la casilla aparezca en blanco.
Repite ahora las operaciones anteriores para añadir la etiqueta “Salida” y un objeto de tipo TextBox, que llamaremos salida. En este momento, en el formulario tenemos 4 objetos (dos de  tipo Label y dos de tipo TextBox). Podemos verlos desplegando la lista que hay en la parte superior de la ventana de propiedades.
Fíjate que no hay que confundir el nombre que tienen los objetos con el texto que aparece en el objeto. Tenemos, por ejemplo, un objeto de tipo Label que se llama Label1 y que muestra el texto entrada (propiedad Caption). Por otra parte, tenemos un objeto de tipo TextBox que se llama entrada y que no muestra ningún texto (propiedad Text en blanco).
Finalmente, vamos a añadir un objeto de tipo CommandButton. Haremos que el objeto se llame Boton y que el nombre con el que aparece el boton en el formulario sea “Calcular”.
Si hacemos ahora doble click sobre el botón nos aparecerá de nuevo la ventana de código, mostrándonos el procedimiento boton_Click (), que debemos rellenar con las operaciones que queremos que se hagan cuando el usuario clique sobre el botón. Escribir en ese procedimiento el siguiente código:
salida.Text = entrada.Text * 2
De esta manera, cuando ejecutemos la aplicación, podremos escribir un número en la casilla de entrada y clicar el botón. Entonces se ejecutará el procedimiento que acabamos de hacer, y que tomará el texto del objeto entrada (el número introducido), lo multiplicará por 2 y mostrará el resultado en el objeto salida (observa que Visual Basic ya hace las conversiones necesarias de texto a números y viceversa). Ejecuta la aplicación para ver que funciona bien.
Finalmente, añadiremos al formulario un objeto de tipo Timer. Este objeto nos permite realizar acciones cuando se cumpla un cierto tiempo. Si clicamos sobre el objeto se mostrará la ventana de código con el procedimiento Timer1_Timer(), que hay que rellenar con lo que queramos hacer al cumplirse el tiempo establecido (Timer1 es el nombre del objeto por defecto, puesto que no lo hemos cambiado). Como ejemplo, vamos a hacer que después de que se haya multiplicado por 2 el dato de entrada, 5 segundos más tarde se multiplique automáticamente por 4. Las operaciones que hay que hacer son las siguientes:
1          Añadir al procedimiento Form_Load() la línea de código
Timer1.Enabled = False
De esta forma, en el momento de iniciar la aplicación se indica que el contador de tiempo está parado.
2          Añadir al procedimiento boton_Click() el siguiente código:
Timer1.Interval = 5000
Timer1.Enabled = True
Es decir, cuando se clique el botón para mostrar el resultado en la salida, se pone en marcha el contador de tiempo, y le decimos que nos avise cada 5 segundos (5000 milisegundos).
3          Añadir al procedimiento Timer1_Timer() la línea siguiente:
salida.Text = salida.Text * 2
Esto hará que cada 5 segundos el número que hay en la salida se multiplique por 2.
Realiza todas las operaciones anteriores y verifica que la aplicación funciona correctamente.
Añade ahora el código necesario para que, además de hacer todo lo anterior, la aplicación cambie el color del fondo de las casillas de entrada y salida cuando hayan pasado 15 segundos desde el momento en que se hace clic en el botón.

4     Una aplicación con matrices de casillas

En la segunda aplicación vamos a aprender a usar el objeto MSFlexGrid, que es muy útil para trabajar con matrices de casillas. En primer lugar, crea una nueva carpeta (que se llamará prueba2) para este segundo ejercicio.
El objeto MSFlexGrid no aparece por defecto en la zona 4. Para añadir el objeto hay que seleccionar la pestaña Proyecto->Componentes. Entonces aparecerá una lista amplia de componentes, entre los que hay que seleccionar el que se llama Microsoft FlexGrid Control 6.0. Entonces aparecerá el objeto en la zona 4, y podremos añadirlo al formulario. Realiza estas operaciones con un proyecto nuevo. Después de añadir el objeto al formulario, la pantalla se verá como muestra la figura.

Lo primero que haremos es ponerle el nombre matriz al objeto, y añadir el siguiente código en el procedimiento Form_Load() que se ejecutará al iniciar la aplicación (los comentarios indican qué hace cada parte del código):
Private Sub Form_Load()
      ’ los comentarios se ponen asi
      ’ numero de columnas de la matriz
matriz.Cols = 10
’ numero de columnas de la matriz
matriz.Rows = 10

’ las siguientes propiedades tienen que ver
’ con el aspecto de la matriz
matriz.ScrollBars = 0
matriz.HighLight = 0
matriz.FocusRect = 0

’ ahora indicamos que las filas y las columnas
’ se numeran desde la 0
matriz.FixedCols = 0
matriz.FixedRows = 0

’ declaramos una variable entera
Dim I As Long

’ los dos bucles siguientes son para establecer
’ la altura y la anchura de las celdas de la casilla
For I = 0 To matriz.Rows - 1
            matriz.RowHeight(I) = 250
Next
For I = 0 To matriz.Cols - 1
            matriz.ColWidth(I) = 250
Next
End Sub

Al ejecutar la aplicación aparecerá una matriz tal y como muestra la figura. Prueba diferentes ejecuciones eliminando alguna de las líneas de código que modifican las propiedades relativas al aspecto de la matriz.

Ahora vamos a añadir el código necesario para que cuando se clique en una casilla de la matriz cambie de color todas las casillas de la misma fila y la misma columna. Para ello, hacemos doble clic sobre el objeto matriz para que se abra la ventana de código. Aparecerá el procedimiento llamado matriz_Click() que se ejecutará cuando se haga clic sobre la matriz. Añadiremos el siguiente código a ese procedimiento:
Dim fila As Long
Dim columna As Long
Dim i As Long
Dim j As Long

’ tomamos nota de la fila,columna de la casilla
’ sobre la que se ha clicado
fila = matriz.Row
columna = matriz.Col

’ vamos a recorrer la columna
For i = 0 To matriz.Rows - 1
  ’ establecemos las coordenadas de la casilla
  ’ que vamos a cambiar de color
   matriz.Row = i
   matriz.Col = columna

   ’ esta es la operación para cambiar el color de la casilla
   matriz.CellBackColor = &HFF&
Next

’ Ahora cambiamos el color de la fila
For i = 0 To matriz.Cols - 1
 matriz.Row = fila
 matriz.Col = i
 matriz.CellBackColor = &HFF&
Next

Ejecuta la aplicación y verifica que funciona correctamente.
Vamos a modificar ahora la aplicación para que al clicar sobre una casilla de la matriz se abra un formulario nuevo que nos permita introducir el valor numérico que queremos que aparezca en la casilla sobre la que se ha clicado.
El primer paso para conseguir esto es añadir al proyecto un nuevo formulario (pestaña Proyecto->agregar formulario), En este nuevo formulario añadiremos un objeto de tipo Label, un objeto de tipo TextBox (que llamaremos entrada) para introducir el valor, y un objeto de tipo CommandButton (que llamaremos aceptar) para dar la orden de aceptar el dato. El nuevo formulario puede tener el aspecto mostrado en la figura.

En el procedimiento aceptar_Click (), que se ejecutará al clicar sobre el botón del nuevo formulario, debes escribir la siguiente instrucción (la única del procedimiento)

Hide

Por otra parte, el código del procedimiento matriz_Click() (que se encargaba de cambiar de color la fila y la columna de la casilla clicada) debe substituirse por el código siguiente:
Form2.Show 1
matriz.TextMatrix(matriz.Row, matriz.Col) = Form2.entrada
Unload Form2
Ejecuta la aplicación y verifica que funciona como se ha descrito. Al clicar sobre la matriz se ejecuta matriz_Click (). La primera instrucción del procedimiento activa el segundo formulario (cuyo nombre por defecto es Form2, porque no le hemos cambiado el nombre). Esto hace que aparezca el segundo formulario en el que podemos escribir un número y clicar en el botón de aceptar. Esto provoca que se ejecute el procedimiento aceptar_Click() que ejecuta la sentencia Hide. Esta sentencia hace que el formulario se esconda, y regresamos al procedimiento matriz_Click (), cuya segunda instrucción toma el contenido del objeto entrada, que pertenece al segundo formulario (ese contenido es precisamente el número que hemos escrito) y lo coloca en la casilla sobre la que hemos clicado, identificada por las coordenadas (matriz.Row, matriz.Col). La última instrucción del procedimiento elimina definitivamente el segundo formulario (que solamente habíamos ocultado).
Salva la aplicación que has creado en la carpeta prueba2. Observa ahora que se salvan tres ficheros: el fichero correspondiente al proyecto y los dos ficheros correspondientes a los dos formularios que contiene el proyecto.
5     Más sobre formularios
Los formularios en Visual Basic son objetos que pueden ser creados, manipulados y destruidos a conveniencia. Esto puede resultar muy útil para crear aplicaciones que van abriendo o cerrando ventanas según sea necesario.
Veamos cómo construir, paso a paso, una aplicación que tiene un formulario principal desde el cual se pueden ir creando y destruyendo otros a petición del usuario. Crea una carpeta llamada prueba3 para trabajar en este nuevo proyecto.
Crea una aplicación nueva en Visual Basic. Llama Principal al formulario principal. Añade a ese formulario un objeto de tipo TextBox que llamarás nombre, y dos objetos de tipo CommandButton, uno se llamará llamarás crear y el otro se llamará eliminar.
Crea ahora un nuevo formulario que se llamará NuevoF. No necesitas añadir ningún objeto a ese formulario.
La aplicación va a funcionar de la siguiente manera: el usuario escribirá un nombre en el TextBox del formulario principal. Entonces hará un clic en el botón crear, y aparecerá un formulario de tipo NuevoF, que tendrá, en el atributo Caption, el nombre que el usuario ha puesto en el TextBox. Además, en el momento de aparecer el nuevo formulario, se verá un mensaje avisando de su creación. De esta forma, el usuario podrá crear tantos formularios de tipo NuevoF como quiera. Por otra parte, cuando el usuario escriba el nombre de un formulario que ya existe y clique el botón eliminar entonces el formulario correspondiente desaparecerá, y se mostrará un mensaje advirtiendo al usuario de esa circunstancia.
Para que la aplicación funcione de esta forma, el formulario de tipo NuevoF debe tener el código siguiente:

‘nom es una variable pública del forumlario que puede accederse
‘desde cualquier otro formulario
Public nom As String

‘cuando se carga el formulario simplemente se informa al usuario
Private Sub Form_Load()
MsgBox "Me acaban de crear. Soy: " & nom
End Sub

El código que debe tener el formulario principal es el siguiente:

‘cuando se clica el botón crear se crea un formulario de tipo nuevoF
‘se pone el nombre del TextBox en la variable pública nom, y en el ´
‘atributo caption

Private Sub crear_Click()
Dim F As New nuevoF
F.nom = nombre
F.Caption = nombre
F.Show
End Sub

‘cuando se clica el botón eliminar se elimina el formulario cuyo ‘nombre ha tecleado el usuario

Private Sub eliminar_Click()
 Dim F As Form
    ´avisamos al usuario de la eliminacion
    MsgBox "Has eliminado a " & nombre

    ´recorremos todos los formularios de la aplicación
    ´buscando el que tiene el nombre tecleado en el atributo caption
    ´cuando lo encontrados lo eliminamos
    For Each F In Forms
        If F.Caption = nombre Then
            Unload F
            Exit Sub
        End If
    Next
End Sub


Ejecuta ahora la aplicación y verifica que funciona correctamente. Salva ahora el proyecto que has creado en la carpeta prueba3.