Entrega Nº 2

En esta segunda entrega vamos a ver el control OLE que nos permite vincularnos a otras aplicaciones instaladas en nuestra computadora, aplicaciones compatibles con Windows, y sobre todo las del paquete Office, sonidos, videos, editores gráficos etc.

OLE significa Object Linked and Embeded o sea objetos vinculados e insertados. Cuando nosotros incluimos un control Ole en nuestro formulario, estamos creando una relacion cliente/servidor dentro de la propia aplicacion. Cuando linkeamos o vinculamos con un objeto ya creado, cualquier modificacion hecha en el objeto de origen influirá en el documento al convocarlo desde nuestra aplicacion, ya que este se modificara. Si en cambio lo insertamos no actualizara modificaciones posteriores, al momento de la vinculación.

Supongamos que nuestros alumnos van a trabajar con un doc de Word, una planilla de Excel, o un dibujo del PaintBrush, no hace falta abrir esas aplicaciones en forma independiente, sino que desde nuestra aplicación de Visual Basic podemos determinar vínculos entre la aplicación VB en tiempo de ejecución y un doc, planilla o dibujo determinado. El alumno trabaja con ellos desde VB, hace modificaciones, las graba, cierra la aplicación y a la clase siguiente continúa.

Abrimos un nuevo proyecto estándar de VB y dibujamos un control OLE en el formulario, veremos que inmediatamente termina de dibujarse, se nos abre una ventana como la imagen siguiente:

esta ventana nos invita a elegir entre insertar un archivo existente o crear uno nuevo vacío, entre vincular o insertar y entre mostrar como un icono esta relación o mostrarlo en una pequeña ventana, de acuerdo al tamaño del control se verá archivo relacionado.

Si seleccionamos crear nuevo aparece un listado de todos los objetos que por configuración del sistema podemos elegir, si en cambio seleccionamos crear desde archivo aparece un botón examinar que nos permite buscar en el disco rígido con que tipo de archivo establecer el link o la inserción, puede ser una imagen, sonido, video, animación... En caso de vincular seleccionamos vincular. Y también podemos elegir un icono.

Vamos a hacer un ejercicio donde haremos los vínculos por código, sin este asistente que nos guía a través de ventanas, como la descripción anterior.

El formulario se vera parecido a esta imagen:

Cuatro botones, cada uno establece un vínculo con un archivo de distinto tipo.

El codigo para cada Boton es:

Private Sub Command1_Click()
OLE1.Class = "SoundRec"
OLE1.CreateLink (App.Path & "\tarzan.wav")
OLE1.Action = 7
End Sub

Private Sub Command2_Click()
OLE3.Class = "Word.Document.8"
OLE3.CreateLink (App.Path & "\pruebavb.doc")
OLE3.Action = 7
End Sub

Private Sub Command3_Click()
OLE2.Class = "AVIFile"
OLE2.CreateLink (App.Path & "\Search.avi")
OLE2.Action = 7
End Sub

Private Sub Command4_Click()
OLE4.Class = "Excel.Sheet.8"
OLE4.CreateLink (App.Path & "\pruebavb.xls")
OLE4.Action = 7
End Sub

Como vemos hay una propiedad a determinar que es la clase de archivo vinculado. Esta propiedad se determina en forma automática si lo hacemos con el asistente, mencionado anteriormente y la vinculación al archivo la hacemos con la propiedad CreateLink, describiendo entre paréntesis el camino a seguir para encontrarla. Como vemos al usar App.Path le estamos diciendo que el archivo está grabado en el mismo directorio que el proyecto de VB.

En caso de no tenerlos, primero los creamos o copiamos y luego ejecutamos la aplicación. Si tenemos dudas de como identificar a la clase de archivo, colocando el puntero del mouse en la ventana propiedades en la propiedad class, se abrirá una lista de opciones y allí vemos la sintaxis requerida.

Por último debemos activar el control Ole para que al hacer click en el boton, se abra el archivo con el que nos vinculamos. Esto lo determina o ejecuta el valor 7 de la propiedad Action. Por defecto los objetos Ole se activan en tiempo de ejecución haciendo un doble-click sobre los mismos, esto hace que se abra el archivo en la aplicación correspondiente, sea el Word, el Excel, el Paint etc.Pero para activarla con el valor 7 a través de otro objeto, como en este caso el boton. Debemos tener la propiedad AutoActivate a 3 (Automática).

Los invito a investigar la vinculación e inserción ya sea a través del asistente como haciendo este ejercicio.

Para agregar un toque de movimiento a las aplicaciones, el siguiente ejercicio muestra una marquesina hecha en VB. La imagen es así:

Tenemos una Picture de forma rectangular, y un Timer dentro del formulario, el texto del mensaje lo determinamos por código así como el desplazamiento contínuo del mismo. El código es el siguiente:

Private Sub Timer1_Timer() 'el timer tiene un intervalo de 300.
Call mostrarmensaje ' creamos un procedimiento
End Sub

Private Sub mostrarmensaje()
Static msgpalabra As Integer 'declaramos la variable acumulativa
Static mitexto As String

If Len(mitexto) = 0 Then ' Len indica la longitud de cadena
msgpalabra = 1
mitexto = "Hola que tal, soy Mirta desde Argentina"
End If
Picture1.Cls' limpia la picture
Picture1.Print Mid$(mitexto, msgpalabra); mitexto; 'Imprime la 'primer letra del texto
msgpalabra = msgpalabra + 1 'incrementa la letra
If msgpalabra > Len(mitexto) Then' si el contador supera el largo de 'la cadena del texto, se reinicia
msgpalabra = 1
End If

End Sub

En este ejercicio creamos un procedimiento llamado mostrarmensaje. Para crear un procedimiento vamos a Herramientas, Agregar procedimiento, le damos un nombre y lo declaramos como privado. Luego le incluimos las sentencias necesarias y lo llamamos desde cualquier parte del programa con la sentencia Call para identificarlo.

Vemos en este ejercicio el uso de Static, una variable puede ser declarada como Dim o private dentro de un formulario y Public dentro de un Módulo (o sea con alcance a todo el proyecto), como Const (permanece invariable) y como Static, que la hace acumulativa dentro del procedimiento donde se declara.

También usamos las funciones Mid y Len, que nos permiten ubicar una posición determinada dentro de una cadena de caracteres. Para aquellos que tengan dudas o no estén familiarizados con algunas de estas funciones o sentencias, les aconsejo buscarlas en el índice de la ayuda, el Manual del programador que trae incluido VB5 es extensísimo y con muchos ejemplos, que facilitan la tarea del programador.

Y por ultimo un ejercicio que nos permite hacer un efecto 2D en un título. El formulario se verá así:

Este efecto está hecho directamente por código. Abrimos un formulario y modificamos su propiedad Autoredraw a True o sea verdadera, para que se redibuje. Luego creamos dos procedimientos: recuadro y texto3d:

Option Explicit
Private Sub recuadro()
Dim i As Integer
Form1.ScaleMode = vbPixels
Form1.ForeColor = vbBlack
Const DrawWidth = 3
For i = DrawWidth - 1 To 6 * 6 Step 2
Form1.Line (i, i)-(Form1.ScaleWidth - 1 - i, Form1.ScaleHeight - 1 - i), , B
Next i

End Sub
Private Sub texto3d()
Dim X As Integer
Dim Y As Integer
X = 500
Y = 500
If Form1.ScaleMode <> vbTwips Then Form1.ScaleMode = vbTwips
Form1.ZOrder 0 'lo necesitamos para imprimir por arriba de lo existente
Form1.ForeColor = RGB(32, 32, 32) ' gris oscuro para las sombras
Form1.Font.Name = "Arial"
Form1.Font.Underline = True
Form1.FontSize = 38
Form1.CurrentX = X ' sitúa el cursor
Form1.CurrentY = Y
Form1.Print "Diseño y Programación:"
Form1.CurrentX = 1500

Form1.Print "Mirta Echeverría"
Form1.ForeColor = RGB(255, 255, 255) 'blanco para resaltar
Form1.CurrentX = X - 35 ' coloca la zona a resaltar en la parte superior izquierda
Form1.CurrentY = Y - 45
Form1.Print "Diseño y Programación:"
Form1.CurrentX = 1500

Form1.Print "Mirta Echeverría"
Form1.ForeColor = vbBlue
Form1.CurrentX = X - 25 ' imprime entre el resaltado y la sombra
Form1.CurrentY = Y - 35
Form1.Print "Diseño y Programación:" ' imprime en azul
Form1.CurrentX = 1500

Form1.Print "Mirta Echeverría"
End Sub


Private Sub Form_Load()
Call texto3d
Call recuadro
End Sub

Y dentro del procedimiento Load llamamos a estos dos procedimientos. Algunas propiedades y métodos les resultarán conocidos por ser comunes al ejercicio del degradé de la entrega anterior.

Y ahora un pequeño chiste para nuestros amigos o compañeros de trabajo. Hacemos un formulario con una label y dos botones, como los de la siguiente imagen:

Cuando intenten hacer click sobre el botón de No, este se escapará, y salvo que tenga mucha suerte, no podrá agarrarlo. El codigo para el evento click de los botones es:

Private Sub Command1_Click() ' Boton de Si
End
End Sub

Private Sub Command2_Click() ' Boton de No
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)) ' esto debe escribirse todo en la 'misma línea
End Sub

El código del evento Mousemove, hace que al colocar el puntero del mouse sobre el botón que dice No, este se mueva a una nueva posición, determinada en forma aleatoria usando la funcion RND, Random, dentro del formulario. Y nos permite juagar un inocente chiste a nuestros colegas o compañeros de trabajo.

Cualquier consulta o comentario será bien recibido en nuestro mail.

Un abrazo y hasta la próxima. Que tengan un lindo fin de semana.

Mirta.

 

Entrega 1 - Entrega 2 - Entrega 3 - Entrega 4 - Entrega 5 - Entrega 6 - Entrega 7 - Entrega 8