Más Ejercicios:
 
Internet: WebBrowser Barra de Porcentaje
Navegador Simple Control Tab
Dibujar: Coordenadas x, y Control Anigif
Varios Formularios Control Transición
Sonidos Wave y Midi Juego usando Click
Vínculos entre controles Animación Transparente
Contraseña Array de palabras
Esqueleto: Arrastrar y Soltar Uso del Timer
Editor de Menú Método PaintPicture
Método Print Animación de un Conejo
Ejecutar un .Avi Método Draw
Encuesta: Uso de Rnd Scrollbar y código ASCII
Array de controles Simulación
Abrir un .txt y un .rtf Alarma: Timer
Rompecabezas: Arrastrar y Soltar Método Gráfico: PSet
ScrollBar Métodos Line y Circle
 
Ejercicio Nº 15: 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.

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

Una caja de texto contiene la URL o 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á oculto

If Text1.Text <> "" Then

WebBrowser1.Navigate Text1.Text

If WebBrowser1.Visible = False Then

WebBrowser1.Visible = True

End If

End If

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then 'equivale a la tecla Enter

Command1_Click

End If

End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)

Select Case Button.Key

Case "back" 'se identifica por la Key

On Error Resume Next

WebBrowser1.GoBack 'Retrocede

Case "forward"

On Error Resume Next

WebBrowser1.GoForward 'Adelanta

Case "home"

Text1.Text = "http://www.oocities.org/SiliconValley/Garage/6472"

Command1_Click

Case "refresh"

WebBrowser1.Refresh 'actualiza o refrezca

Case "stop"

WebBrowser1.Stop 'detiene la búsqueda

End Select

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

 
Ejercicio Nº 17: 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 buleana

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

draw = True 'estamos dibujando

CurrentX = X' carga en la variable la 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 esta a verdadera 'dibuja cada uno de los puntos.

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

draw = False 'la variable draw a falsa detiene el dibujo

End Sub

 Los ejercicios Nº 17, 18 y 19 pueden bajarlos de Aquí.

 
Ejercicio Nº 18: 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 al comienzo

Form2.Data1.Recordset.Move 1 ' y luego un lugar al registro 'correspondiente en la Base de datos Planetas

Form2.Picture1.Picture = Form2.ImageList1.ListImages(2).Picture

Form2.Show

End Sub

Para desplegar la imagen del planeta usamos un control ImageList que tiene cargadas, en este caso solo dos 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?", "Planetas")

If UCase(planeta) = "JÚPITER" Then

contar = contar + 1

Label2.Caption = contar

End If

satelite = InputBox("¡Cuántos satélites tiene?", "Planetas")

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.

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.

El proyecto final (incompleto) puede bajarse de Aquí.

 
Ejercicio Nº 19: Combinando sonidos.
 

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

Cuando se abre el formulario se ejecuta el archivo Midi y si nosotros hacemos Clic sobre el 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 tipo de 'sonido

MMControl2.filename = App.Path & "\Tarzan.wav"' muestra el 'camino

MMControl2.Command = "Open" 'lo abre

MMControl2.Command = "Play" ' lo ejecuta

End Sub

Private Sub Command3_Click() ' Botón Midi

MMControl1.Command = "Prev"

MMControl1.DeviceType = "Sequencer"' tipo de sonido

MMControl1.filename = App.Path & "\Thefinal.mid" 'camino

MMControl1.Command = "Open" 'lo abre

MMControl1.Command = "Play" lo ejecuta

End Sub

Debemos traer de Componentes el control Multimedia y poner todos sus botones a falsos e invisibles. Luego asociamos por código a cada control el archivo correspondiente, en este caso uno para el archivo Midi y otro para el Wave. Determinamos que tipo de dispositivo es y explicitamos su camino, lo abrimos y luego ejecutamos. No olvidarse el Open primero y luego el Play.

Private Sub Form_Unload(Cancel As Integer)

MMControl1.Command = "Close" 'lo cierra

MMControl2.Command = "Close" 'lo cierra

End Sub

Al descargar el formulario es fundamental cerrarlos para recuperar recursos del sistema.

El ejercicio completo puede bajarse de Aquí

 
Ejercicio Nº 20: Vínculos.
 
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. El ejercicio completo lo pueden bajar de Aquí.

 
Ejercicio Nº 21: 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(contraseña) = "secreto" Then

MsgBox "¡BIENVENIDA LAURA! ¿Preparada para trabajar con tu PC?"

Image1.Visible = True

ElseIf UCase(nombreusuario) = "MIRTA" And LCase(contraseña) = "duende" Then

MsgBox "¿BIENVENIDA MIRTA AL SISTEMA! ¡A trabajar no te duermas!"

Image1.Visible = True

Else

MsgBox "ACCESO DENEGADO"

End If

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. Pueden bajar el ejercicio de Aquí.

 
Ejercicio Nº 22: 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 = False And Image11.Visible = False And Image12.Visible = False And Image13.Visible = False And Image14.Visible = False And Image15.Visible = False And Image16.Visible = False Then

Beep

Label2.Caption = ""

Label1.Caption = "¡Ganaste!"

End If

End Sub

El ejercicio completo puede bajarse de Aquí.

 
Ejercicio Nº 23: Editor de menú.
 
En este ejercicio vamos a usar el Editor de menú de Visual Basic, que nos permite crear un menú con las 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 Fiambres"

End Sub.

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

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

El código del ejercicio puede bajarse de Aquí.

 
Ejercicio Nº 24: Print en el Form.
 
En este ejercicio usamos un Select case pero de una manera novedosa, ya que nos permite seleccionar los colores del arco iris, sin enumerar las opciones 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 Iris."

Case Else

Print "Lo siento, pero el color "; color; " no está en mí Arco Iris."

End Select

End Sub

El código del ejercicio completo puede bajarse de Aquí.

 
Ejercicio Nº 25: Control Multimedia.
 

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

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

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

El código completo sin el AVI puede bajarse de Aquí.

 
Ejercicio Nº 26: Encuesta 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:

Private Sub Command1_Click()

End

End Sub

Private Sub Command2_Click()

MsgBox "Sufre el mismo mal que millones de Argentinos!!"

End Sub

Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Command2.Move CInt(Rnd * (Width - Command2.Width)), CInt(Rnd * (Height - Command2.Height))

End Sub

Con el 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.

El código del ejercicio pueden bajarlo de Aquí.

 
Ejercicio Nº 27: 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

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 contenidos de text1()

Dim total As Single

Dim promedio As Single

total = 0

For dia = 0 To 6

total = total + Text1(dia)

Next dia

promedio = total / 7

Text4.Text = Format(promedio, "##.##") 'formato con dos decimales

End Sub

Private Sub Command4_Click()

For dia = 0 To 6

Text1(dia).Text = ""

Next dia

Text1(0).SetFocus

End Sub

Private Sub Command5_Click()

End

End Sub

Usando estructuras de repetición For Next, calculamos los valores de alta y baja, luego para la media sacamos por división el promedio.

El código completo del ejercicio podemos bajarlo de Aquí.

 
Ejercicio Nº 28: Texto y RTF.
 
En este Ejercicio vamos a ver como hacemos para directamente desplegar un texto ya copiado y grabado en un archivo con 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 declarar las variables.

Private Sub Command1_Click() 'Este boton es el que carga el 'archivo TXT

Dim pepe As String 'Declaramos una variable para identificar el 'archivo

Dim renglon As String 'Esta variable guardará el tamañ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 está la 'aplicación. App.path significa en la ruta actual de 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)

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 verdadera, en 'este caso hasta tanto no termine el texto del archivo.

Close #1 ' cierra el archivo al terminar de cargarlo.

End Sub

Private Sub Command2_Click()

RichTextBox1.LoadFile (App.Path & "\rtf.rtf") 'como podemos 'ver con el Control RichTextBox es más sencillo el manejo de 'archivos, con la sentencia LoadFile se carga el archivo 'indicando el camino para encontrarlo.

El código completo puede bajarse de Aquí.

 
Ejercicio Nº 29: Rompecabezas.
 
En este ejercicio armaremos un rompecabezas con las partes del esqueleto de un gato.

Los procedimientos usados ya son conocidos: Dragear y soltar, uso de un Control PictureClip y de arrays de Imagenes para cargar las partes del rompecabezas.La imagen de la 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 imagenes. Debe escribirse todo el código 'seguido o cortarlo usando el under _

If Picture1.Picture = Image1(2).Picture And Picture2.Picture = Image1(1).Picture And Picture3.Picture = Image1(5).Picture And Picture4.Picture = Image1(0).Picture And Picture5.Picture = Image1(4) And Picture6.Picture = Image1(3).Picture Then

Picture1.Visible = False

Picture2.Visible = False

Picture3.Visible = False

Picture4.Visible = False

Picture5.Visible = False

Picture6.Visible =

False Image2.Visible = True 'carga otra imagen oculta que 'muestra un gato completo

Else 'sino es correcto vacía las imagenes para reiniciar el 'armado del rompecabezas.

Picture1.Picture = Nothing

Picture2.Picture = Nothing

Picture3.Picture = Nothing

Picture4.Picture = Nothing

Picture5.Picture = Nothing

Picture6.Picture = Nothing

End If

End Sub

Private Sub Form_Activate()' al cargarse el form y pasar a estar 'activo carga las celdas o partes en que dividimos la imagen con 'el PictureClip.

Image1(0).Picture = PictureClip1.GraphicCell(3) Image1(1).Picture = PictureClip1.GraphicCell(1) Image1(2).Picture = PictureClip1.GraphicCell(0) Image1(3).Picture = PictureClip1.GraphicCell(5) Image1(4).Picture = PictureClip1.GraphicCell(4) Image1(5).Picture = PictureClip1.GraphicCell(2)

End Sub

Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)

Picture1.Picture = Source

End Sub

Private Sub Picture2_DragDrop(Source As Control, X As Single, Y As Single)

'carga las imagenes de origen al soltarlas

Picture2.Picture = Source

End Sub Private Sub Picture3_DragDrop(Source As Control, X As Single, Y As Single)

Picture3.Picture = Source

End Sub

Private Sub

Picture4_DragDrop(Source As Control, X As Single, Y As Single)

Picture4.Picture = Source

End Sub

Private Sub Picture5_DragDrop(Source As Control, X As Single, Y As Single)

Picture5.Picture = Source

End Sub

Private Sub

Picture6_DragDrop(Source As Control, X As Single, Y As Single)

Picture6.Picture = Source

End Sub

El código completo puede bajarse de Aquí.

 
Ejercicio Nº 30: Uso del Scrollbar.
 

Usaremos en este ejercicio dos Scrollbar horizontales para modificar el valor de la propiedad QBColor que muestra 16 colores, con valores de 0 a 15, estos valores estarán asociados a la ubicación de la pestaña del Scroll y se mostrarán en dos cajas de texto.

De acuerdo a su valor este determinará el color del fondo del formulario, y del tipo de un terce control Text. La 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

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

El código completo puede bajarse de Aquí.

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

Los controles que usamos son un 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 procedimiento 'actualizaprogress

actualizaprogress Picture1, i

Call pausa 'procedimiento de espera

Next i

End Sub

Private Sub actualizaprogress(pb As Control, ByVal percent)

Dim num$ ' porcentaje

'el autoredraw de la picture debe estar a = true

pb.Cls

pb.ScaleWidth = 100

pb.DrawMode = 10

num$ = Format(percent, "##") + "%" 'calcula el porcentaje

pb.FontSize = 18

pb.CurrentX = 50 - pb.TextWidth(num$) / 2

pb.CurrentY = (pb.ScaleHeight - pb.TextHeight(num$)) / 2

pb.Print num$ 'imprime en la picture el porcentaje

pb.Line (0, 0)-(percent, pb.ScaleHeight), , BF 'dibuja el 'rectangulo

pb.Refresh 'actualiza la picture

End Sub

Private Sub pausa() 'procedimiento que detiene la aplicación 'un segundo

Dim controlar

Dim comenzar

comenzar = Timer

Do Until controlar >= comenzar + 0.2

controlar = Timer

DoEvents

Loop

End Sub

El código completo puede bajarse de Aquí.

 
Ejercicio Nº 32: 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.

La Aplicación puede bajarse de Aquí.

 
Ejercicio Nº 33: 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í.
La aplicación con el control pueden bajarse de Aquí.
 
Ejercicio Nº 34: Transición.
 
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. Los archivos con el control pueden bajarse de Aquí.

 
Ejercicio Nº 35: 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.dll" 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 predeterminado, si no se encuentra sonido

Private ret As Integer

Private contar As Integer

Private a As Integer

Private b As Integer

Private tiempo As Integer

Private Sub pausa()

Dim comenzar

Dim controlar

comenzar = Timer

Do Until controlar >= comenzar + 1

controlar = Timer

DoEvents

Loop

End Sub

Private Sub Form_Load()

Randomize b = 0

End Sub

Private Sub Image6_Click(Index As Integer) Image6(Index).Visible = False

b = b + 10

If Image6(Index).Left >= 2600 Then

Image7.Visible = True

ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASYNC Or SND_NODEFAULT)

ElseIf Image6(Index).Left <= 2600 Then

Image8.Visible = True

ret = sndPlaySound(App.Path & "\Frogs.wav", SND_ASYNC Or SND_NODEFAULT)

End If

Call pausa

Image7.Visible = False

Image8.Visible = False

Label1.Caption = "Puntaje =" & b

Call ganar

Call perder

End Sub

Private Sub Label2_Click()

Unload Me

Me.Show

End Sub

Private Sub Timer1_Timer()

contar = contar + 1

If contar = 1 Then

Image1.Picture = Image3.Picture

Image2.Picture = Image3.Picture

ElseIf contar = 2 Then

Image1.Picture = Image4.Picture

Image2.Picture = Image4.Picture

ElseIf contar = 3 Then

Image1.Picture = Image3.Picture

Image2.Picture = Image3.Picture

ElseIf contar = 4 Then

Image1.Picture = Image5.Picture

Image2.Picture = Image5.Picture

contar = 0

End If

End Sub

Private Sub

Timer2_Timer()

Dim x As Integer, y As Integer

For a = 0 To 9

Image6(a).Move CInt(Rnd * (Width - Image6(a).Width)), CInt(Rnd * (Height - 1600))

Next a

End Sub

Private Sub ganar()

If b = 100 Then

Label1.Caption = "¡¡GANASTE!!"

ret = sndPlaySound(App.Path & "\Fanfare.wav", SND_ASYNC Or SND_NODEFAULT)

End If

End Sub

Private Sub perder()

If tiempo = 60 Then

Timer1.Enabled = False

Timer2.Enabled = False

Timer3.Enabled = False

Label1.Caption = "¡¡Perdiste!!"

ret = sndPlaySound(App.Path & "\desapa.wav", SND_ASYNC Or SND_NODEFAULT)

End If

End Sub

Private Sub

Timer3_Timer() tiempo = tiempo + 1

Call perder

End Sub

Como vemos creamos tres procedimientos personalizados, ganar, perder y pausa. El ejercicio completo puede bajarse de Aquí.

 
Ejercicio Nº 36: 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(imagenactual), xactual, 120, , , , , , , SRCAND

Form1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 120, , , , , , , SRCINVERT

Form1.PaintPicture PictureClip2.GraphicCell(imagenactual1), xactual1, 250, , , , , , , SRCAND

Form1.PaintPicture PictureClip1.GraphicCell(imagenactual1), xactual1, 250, , , , , , , SRCINVERT

imagenactual = imagenactual + 1

imagenactual1 = imagenactual1 + 1

xactual = xactual + 100

xactual1 = xactual1 - 100

End Sub

El ejercicio completo puede bajarse de Aquí.

 
Ejercicio Nº 37: ¿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

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

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

If UCase(Text1.Text) = "DEMONIO" Then

puntos = puntos + 1

Case 12

If UCase(Text1.Text) = "DEPORTE" Then

puntos = puntos + 1

Case 13

If UCase(Text1.Text) = "DIARIO" Then

puntos = puntos + 1

Case 14

If UCase(Text1.Text) = "DUENDE" Then

puntos = puntos + 1

Case 15

If UCase(Text1.Text) = "AUSTRALIA" Then

puntos = puntos + 1

Case 16

If UCase(Text1.Text) = "FLORENCIA" Then

puntos = puntos + 1

Case 17

If UCase(Text1.Text) = "INGENIO" Then

puntos = puntos + 1

Case 18

If UCase(Text1.Text) = "REINO" Then

puntos = puntos + 1

Case 19

If UCase(Text1.Text) = "VATICANO" Then

puntos = puntos + 1

Case 20

If UCase(Text1.Text) = "SOLDADO" Then

puntos = puntos + 1

End Select

Label2.Caption = "PUNTOS: " & puntos If puntos >= 20 Then

Label2.Caption = "¡Ganaste!"

End If

End Sub

El ejercicio completo puede bajarse de Aquí.

 
Ejercicio Nº 38: 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

La aplicación completa puede bajarse de Aquí.

 
Ejercicio Nº 39: 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, _ Destination As Object)

Dim Y As Integer

Dim X As Integer 'Ejecuta dos bucles anidados que repiten en el 'fondo la imagen hasta cubrirla

For Y = 0 To

Destination.ScaleHeight _ Step Source.ScaleHeight

For X = 0 To

Destination.ScaleWidth Step _ Source.ScaleWidth

Destination.PaintPicture _ Source.Picture, X, Y

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

El ejercicio completo puede bajarse de Aquí.
 
Ejercicio Nº 40: Un Conejo Animado.
 
Este ejercicio lo envía una de mis seguidoras de Visual Basic, alumna del profesorado de Informática: Nora Vila. Gracias. 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

Picture1.PaintPicture PictureClip1.GraphicCell(cone), x, 50, , , , , , , SRCAND ' para la mascara Picture1.PaintPicture PictureClip2.GraphicCell(cone), x, 50, , , , , , , SRCINVERT ' para la imagen(animación)

x = x + 60

If x >= 570 Then x = 0

End If

End Sub

El ejercicio completo puede bajarse de Aquí. Gracias Nora.

 
Ejercicio Nº 41: Método 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:

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.

El ejercicio completo puede bajarse de Aquí.
 
Ejercicio Nº 42: ScrollBar y Código ASCII
 

Option Explicit

Private Sub HScroll1_Change()

Label3.Caption = Format$(HScroll1.Value)

Label4.Caption = Chr$(HScroll1.Value)

End Sub

El ejercicio completo puede bajarse de Aquí.
 
Ejercicio Nº 43: Simulación
 
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"

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 rodea?"

Case 4

Label1.Caption = "¿Tiene problemas para relacionarse?"

Case 5

Label1.Caption = "¿Odia Ud. a su padre?"

Case 6

Label1.Caption = "¿Cree que no lo comprenden?"

Case 7

Label1.Caption = "Yo no estoy seguro de entenderlo"

End Select

End Sub

Private Sub respuestadoctor()

palabra = 0

If palabra >= 0 Then

For a = 0 To 24

pepe = List1.List(a) palabra = RichTextBox1.Find(pepe, palabra + 1, , 2) pepe = RichTextBox1.SelText

Next a

End If

'Print pepe

RichTextBox1.Text = ""

Call respuestapaciente

End Sub

Private Sub

Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Call respuestadoctor

End Sub

Private Sub

RichTextBox1_Click()

RichTextBox1.Text = ""

End Sub

Private Sub respuestapaciente()

Select Case pepe

Case "tu"

Label1.Caption = "No hablemos de mi."

Case "te"

Label1.Caption = "Dejemos de hablar de mi."

Case "pienso"

Label1.Caption = "¿Por qué piensa eso?"

Case "bien"

Label1.Caption = " Me alegra, 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 remediar?"

Case "¿por que"

Label1.Caption = "Recuerde, la terapia es buena para 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 bueno"

Case "amor"

Label1.Caption = "Es importante amar"

Case "asesino"

Label1.Caption = "No me gusta la gente que mata"

Case "matar"

Label1.Caption = "No esta bien matar"

Case "grosero"

Label1.Caption = "¡No esta bien que me hable así!"

Case "no puedo"

Label1.Caption = "No sea negativo, sea positivo"

Case "fracaso"

Label1.Caption = " Debe luchar por el exito"

Case "nunca"

Label1.Caption = "No sea negativo, sea positivo"

Case "infeliz"

Label1.Caption = "¿Por que es infeliz?"

Case "adios"

Label1.Caption = "Le enviaré la factura. Gracias."

RichTextBox1.Locked = True

Beep

Call pausa

End Case

Else

Call frasedoctor

End Select

End Sub

El código completo puede bajarse de AQUÍ.

 
Ejercicio Nº 44: Alarma
 
El siguiente ejercicio nos permite crear un recordatorio de tareas, mientras estamos trabajando con la computadora y tenemos este programa activado, podemos quedarnos tranquilos de que nos avisa a determinada hora, si estamos en una clase nos permite programar el tiempo de tarea de los alumnos, por ejemplo. En tiempo de 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()

horaActual = Format(Time, "hh:mm")

If horaActual >= Text1.Text Then

Beep

recordar = MsgBox(Text2.Text, vbInformation, "Alarma")

Timer1.Enabled = False

Form1.WindowState = 0

End If

End Sub

El código completo puede bajarse de AQUÍ.

 
Ejercicio Nº 45: Artista
 
E 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

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.

El ejercicio completo pueden bajarlo de AQUÍ.

 
Ejercicio Nº 46: 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)

y2 = Fix(Me.ScaleHeight * Rnd)

color = Fix(16 * Rnd) Randomize

'trazar una recta

Line (x1, y1)-(x2, y2), QBColor(color) 'los dos primeros valores 'establecen un punto extremo y los otros dos el otro punto extemo, 'entre ambos se dibuja la recta.

End Sub

Private Sub Command2_Click() 'Botón Imprimir por Impresora.

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 relleno

x1 = Fix(Me.ScaleWidth * Rnd)

y1 = Fix(Me.ScaleHeight * Rnd)

x2 = Fix(Me.ScaleWidth * Rnd)

y2 = Fix(Me.ScaleHeight * Rnd)

color = Fix(16 * Rnd)Randomize

'dibuja un cuadro(B)

Line (x1, y1)-(x2, y2), QBColor(color), BF

End Sub

Private Sub Command5_Click() 'Borra o Limpia Formulario

Cls

End Sub

Private Sub Command6_Click() '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

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. El ejercicio completo puede bajarse de Aquí.

 
 
Volver al Menú Principal. Volver a Ejercicios.