lunes, 17 de mayo de 2010

Control ScrollBar - Barras de desplazamiento




Control ScrollBar - Barras de desplazamiento


Visual Basic posee 2 tipos de barras de desplazamiento o scrollbar, una barra de tipo Vertical llamada VScrollbar y otro de tipo Horizontal llamada HScrollBar:


Las 2 son exactamente iguales en lo que se refiere a las propiedades, métodos y eventos. Lo único que cambia es la disposición de las mismas
La función principal de estos controles es la de devolver un valor para luego utilizarlo ya sea para una función o rutina que tengamos en nuestro programa.
La propiedad mas importante de las barras de desplazamientos , es la propiedad Value.
Cuando movemos el botón deslizable el control cambia su propiedad Value, y también cambia el valor del mismo cuando movemos las flechas Arriba y abajo del control.
También posee 2 propiedades importantes llamadas Max y Min. La propiedad Min es el valor Mínimo que tendrá la barra y el valor Max es el valor Máximo.
Las propiedades Value, Max y Min las podemos establecer ya sea en tiempo de diseño desde la ventana de propiedades o en tiempo de ejecución
Pongamos un ejemplo que no tiene sentido pero que servirá para aclarar como funcionan estas 3 propiedades.
El ejemplo consiste en colocar un control Label1 en el formulario. Luego colocamos una barra de desplazamiento horizontal o vertical (en este caso es lo mismo). A la propiedad Max de la barra le estableceremos el valor 100. A la propiedad Min un valor de 0. Y a la propiedad Value un valor inicial de 50. Cuando movamos la barra ya sea con las flechas o con el botón que se encuentra en el medio (botón de scroll), se imprimrá el valor actual de la propiedad Value en el control Label
Entonces colocar un HScroll1. Desde la ventana de propiedades, teniendo la barra seleccionada, busca la propiedad Min y colocale 0. A la propiedad Max un valor de 100 y a Value 50.
Ahora doble Click sobre la barra para que se abra la ventana de código de Visual Basic. Al hacer esto se crea un procedimiento llamado HScroll1_Change.
Este evento es el evento por defecto del control. Todas las instrucciones que estén en este procedimiento se ejecutarán cuando el valor de la propiedad Value cambie, es decir cuando movamos lo botones mencionados antes.

Pega el siguiente código en el formulario:
Private Sub HScroll1_Change()Label1 = HScroll1.ValueEnd Sub
Como podés ver , al mover la barra, le asignamos al control Label1, el valor de la propiedad Value.
Hay otro evento importante llamado Scroll. Este evento se dispara siempre que movamos el botón de Scroll, pero no se ejecuta cuando presionamos las flechas de Arriba y Abajo del control. Para localizar el evento, desde la ventana de código, en la lista desplegable de la derecha, seleccionalo, para agregar un nuevo procedimiento de código, como muestra la imagen:
Ahora si probás el ejemplo, el valor de la propiedad Value se imprimirá en el Label solo cuando hagamos un Scroll, y no cuando movamos las flechas.
Una cosa importante es que el valor de la propiedad Value, Max y Min, deben ser valores de tipo Entero (Integer), es decir que estén en el rango entre -32768 a 32767. Por ejemplo si le establecemos en tiempo de ejecución los siguientes valores no daría error (estarían en el límite)

Private Sub Form_Load()HScroll1.Min = -32768HScroll1.Max = 32767HScroll1.Value = 100End Sub

Pero si hicieramos esto otro, daría un error al intentar asignarle a la propiedad Min un valor que supera el rango mensionado antes:

Private Sub Form_Load()HScroll1.Min = -60000HScroll1.Max = 32767HScroll1.Value = 100End Sub

El error que se produciría sería un error número 6 (Desbordamiento)

Volver al índice

Enlaces relacionados
· Colocar Barras de Scroll a un PictureBox
· Mover controles con ScrollBar en forma automática usando el Api
· Hacer Scroll a una imagen usando la función PaintPicture
· Control Ocx para cambiar el color de las barras de desplazamiento

Data






















En esta sección se ven algunos ejemplos muy simples del uso del control Data de visual BasicContenido :
· Breve descripción
· Ejemplo 1 : Crear una Agenda simple
· Ejemplo 2 - Propiedad Recordsource en tiempo de ejecución
· Enlazar un control Data con un DbGrid
· Acceder a una base de datos con Password
· Enlaces relacionados

1 - Breve descripción
El control Data se utiliza con el motor de base de datos Microsoft Jet para acceder a base de datos de diferentes formatos como por ejemplo: Microsoft Access, Dbase, Excel, FoxPro, Lotus y Paradox, aunque en los ejemplos solo se utilizará Microsoft Access como base de datos.
El control Data permite trabajar con controles enlazados, por ejemplo con controles Label, TextBox, ComboBox, controles Image etc.. para presentar los datos. Esto quiere decir que al colocar un control Data y enlazarlo a una base de datos y luego enlazar dichos controles con el control Data, los cambios que se realicen en los controles enlazados se reflejarán en la base de datos.
Para enlazar la base de datos con un control Data ubicado en el formulario, se utiliza la propiedad DataBaseName y Connect. En la propiedad Connect se especifica el tipo de base de datos, por ejemplo: Access. Luego, ya se puede seleccionar la base de datos. Para indicar con que tabla se encontrará unida al control se utiliza la propiedad RecordSource.
Nota: Antes de especificar la tabla en la propiedad RecordSource hay que indicar la propiedad DataBaseName y Connect, de lo contrario se producirá un error " Debe rellenar las propiedades DataBaseName y Connect para llevar a cabo la operación"
Si bien estas propiedades se pueden establecer en tiempo de ejecución, en el ejemplo solo se realizará en tiempo de diseño

2 - Ejemplo 1 : Crear una Agenda simple
El primer paso será crear una base de datos Access con los siguientes campos:
Nombre, Direccion y Telefono. El tipo de dato de los campos establecerle como de Tipo Texto
Luego guardar la tabla con el nombre Contactos
Colocar la base de datos en una carpeta cualquiera, donde se ubicará también el proyecto de ejemplo.
Iniciar un nuevo proyecto de tipo Exe y guardarlo en la carpeta anterior. En el formulario principal, lo primero será colocar un control Data llamado Data1.
Ahora seleccionar el control Data1, y desde la ventana de propiedades serciorarse que la propiedad Connect esté con el valor Access y en la propiedad DataBaseName elegir la base de datos anteriormente creada.
Manteniendo seleccionado siempre el control Data, ahora localizar la propiedad Recordsource para indicar la tabla a la cual estará enlazada, y seleccionamos la Tabla Contactos.
Colocar los siguiente controles en el formulario como está en la siguiente imagen:
· Textbox: txtNombre, txtDireccion y txtTelefono
· TextBox: txtNomEdit, txtDirEdit y txtTelEdit


· El commandButton Agregar colocarle el nombre CmdAgregar
· El botón de Eliminar CmdEliminar
· Refrescar: CmdRefresh
· Actualizar : CmdActualizar
· Modificar: CmdModificar

Ahora para enlzar los textBox llamados txtNombre, txtDireccion y txtTelefono, hay que indicarle en la propiedad DataField de cada uno de los TextBox, el campo por el cual se enlazará. Para el primero, seleccionar el campo Nombre en la propiedad DataField, el segundo Textbox el campo Direccion y el tercero el campo Telefono

El código del formulario:
'Botón para Agregar un Nuevo Registro
Private Sub CmdAgregar_Click()
Data1.Refresh
Data1.Recordset.AddNew
txtNombre.SetFocus
End Sub

'Botón para Eliminar el Registro Activo
Private Sub CmdEliminar_Click()

With Data1.Recordset
'Elimina
If Data1.Recordset.RecordCount = 0 Then Exit Sub
.Delete
'Posiciona en el siguiente
.MovePrevious
If Not .EOF Then .MoveLast
End With

End Sub

'Botón para Actualizar los cambios
Private Sub CmdActualizar_Click()
On Error GoTo errSub
'Actualiza el control data
Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified

Exit Sub
errSub:
If Err.Number = 524 Then
MsgBox "Para actualizar un registro primero agregue uno nuevo o" & _
"modifique algun registro activo", vbInformation
End If
End Sub
'Botón para modificar el registro activo
Private Sub CmdModificar_Click()

Data1.Recordset.Edit
If txtNomEdit <> "" Then Data1.Recordset("Nombre").Value = txtNomEdit
If txtDirEdit <> "" Then Data1.Recordset("Direccion").Value = txtDirEdit
If txtTelEdit <> "" Then Data1.Recordset("telefono").Value = Val(txtTelEdit)
Data1.Recordset.Update
End Sub
'Refresca el control
Private Sub CmdRefresh_Click()
Data1.Refresh

End Sub

'Evento que ocurre Cuando se produce un error en el control Data
Private Sub Data1_Error(DataErr As Integer, Response As Integer)

MsgBox "Error: " & Error$(DataErr)
Response = 0
End Sub
'Muestra la posición del registro activo del control Data
Private Sub Data1_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
'Mostramos el número de registro en el control Data en la propiedad caption
Data1.Caption = "Registro n° : " & (Data1.Recordset.AbsolutePosition + 1)
End Sub


Private Sub Data1_Validate(Action As Integer, Save As Integer)

Select Case Action
Case vbDataActionMoveFirst
Case vbDataActionMovePrevious
Case vbDataActionMoveNext
Case vbDataActionMoveLast
Case vbDataActionAddNew
Case vbDataActionUpdate
Case vbDataActionDelete
Case vbDataActionFind
Case vbDataActionBookmark
Case vbDataActionClose
Screen.MousePointer = vbDefault
End Select
Screen.MousePointer = vbHourglass
End Sub


Private Sub Form_Load()
'Acá especificar el path de la base de datos
Data1.DatabaseName = App.Path & "\bd1.mdb"

txtNomEdit = "": txtDirEdit = "": txtTelEdit = ""
txtSearchNom = "": txtSearchDir = "": txtSearchTel = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
End Sub

Agregar una opción para buscar un registro:
Añadirle al ejemplo anterior los siguientes controles:
· 3 TextBox: txtSearchNom, txtSearchDir y txtSearchTel
· Un Option1 y en el Caption: " Por nombre "
· Un Option2 y en el Caption: " Por Diercción "
· Un Option3 y en el Caption: " Por Teléfono "
· Un CommandButton llamado CmdBuscar



El código del procedimiento al pulsar el botón Buscar
Private Sub CmdBuscar_Click()
If Option1.Value = True Then
Data1.Recordset.FindFirst ("Nombre = '" & txtSearchNom & "'")
ElseIf Option2.Value = True Then
Data1.Recordset.FindFirst ("Direccion = '" & txtSearchDir & "'")
ElseIf Option3.Value = True Then
Data1.Recordset.FindFirst ("telefono = '" & txtSearchTel & "'")
End If
If Data1.Recordset.NoMatch Then MsgBox " Registro no encontrado", vbInformation
End Sub

Descargar ejemplo

3 - Ejemplo 2 - Propiedad Recordsource en tiempo de ejecución

El siguiente ejemplo muestra una forma de utilizar la propiedad Recordsource del control Data
El mismo consiste en un control Combo que tiene cargado los nombres de Clientes de una Tabla, y al seleccionar uno de ellos, poder mostrar otros datos del Cliente en unos TextBox, como muestra esta imagen:


Pasos para crear el ejemplo :
Crear una base de datos llamada base.MDB. Dentro de esta una tabla llamada Clientes en la cual tendrá los siguientes campos: Nombre, Telefono, Pais y Correo. Todos los campos dejarlos como de tipo texto.
Cargar algunos datos de ejemplo y Guardar la base de datos en una carpeta donde también se guardará el proyecto de Visual basic.
Ahora crear un nuevo proyecto en Visual basic y agregar en el formulario los siguiientes controles: Un control Data llamado Data1. Un control ComboBox llamado ComboNombres, Un textBox llamado txtTelefono, otro txtPais y otro txtCorreo
Ahora se enlazará en la propiedad DataField y DataSource de cada TextBox, el campo relacionado y el control Data1 como fuente de los registros.
Por ejemplo, para el txtTelefono seleccionar la propiedad DataSource y seleccionar el control Data1 y en la propiedad DataField escribir el nombre del campo, en este caso Telefono. Todo esto desde la ventana de propeidades como muestra la imagen:

Hacer lo mismo para los restantes Controles textBox

El código fuente del Formulario sería el siguiente:
Option Explicit

'Ejemplo 2 del control Data y la propiedad Recordsource en tiempo de ejecución



Private Sub ComboNombres_Click()

' Al hacer Click en el elemento del combo _
se selecciona mediante sql el registro _
y la cadena Sql se asigna al Recorsource del _
control data
Data1.RecordSource = _
"SELECT * FROM Clientes WHERE Nombre='" & ComboNombres & "'"

'Refresca el control data
Data1.Refresh

End Sub

Private Sub Form_Load()
Dim Path_Base_Dato As String, db As Database
Dim rst As Recordset


Path_Base_Dato = App.Path
Path_Base_Dato = Path_Base_Dato & "\base.mdb"

'Abre la base de datos
Set db = OpenDatabase(Path_Base_Dato)

'Abre el Recordset con la consulta: Selecciona los nombres ordenados
Set rst = db.OpenRecordset( _
"SELECT Nombre FROM Clientes ORDER BY Nombre", _
dbOpenSnapshot)

' Se mueve al primer registro
rst.MoveFirst
Do While Not rst.EOF
'Agrega el Nombre al Combo
ComboNombres.AddItem rst!Nombre

'siguiente registro
rst.MoveNext
Loop

'Cierra el recordset y la base
rst.Close
db.Close

'Se asigna la base de datos al Data1
Data1.DatabaseName = Path_Base_Dato

'Seleccionamos el primer elemento del combo
ComboNombres.ListIndex = 0

Me.Caption = " Ejemplo de la propiedad recordsource del control Data "

End Sub

Este mismo ejemplo lo podés descargar desde este enlace:
Descargar Ejemplo 2 - Control Data

4 - Enlazar un control Data con un DbGrid

Para enlazar un control Data a un control DbGrid, es muy simple. Una ves que el control Data ya tiene especificado en la propiedad DataBaseName el nombre de la base de datos, y en la propiedad Recordsource la fuente de los registros ( consulta sql o tabla) , solo hay que especificar en la propiedad DataSource del control DbGrid, el control Data al cual estará enlazado. Como muestra la imagen:


Para enlzar un control MsFlexGrid, se realiza de la misma forma, especificando en el control FlexGrid en la propiedad DataSource, el Data al cual enlazarlo.

Enlazar un control Data con un DbGrid y especificar el RecordSource en tiempo de ejecución
Este ejemplo es similar al anterior, es decir, se enlazará un control Data con un DbGrid, pero al cambiar la propiedad Recordsource del control Data en tiempo de ejecución, el DbGrid visualizará los nuevos datos.
Colocar un DbGrid llamado DbGrid1, un control Data llamado Data1, un control TextBox llamado Text1 , un CommonDialog1, y dos botones, Command1 y Command2
El Command1 será para seleccionar la base de datos. El Command2 para ejecutar la consulta sql que se escribirá en el control Text1.
Esta es una vista del ejemplo

Importante: Al control DbGrid, especificarle en la propiedad DataSource el control Data1

El código fuente del formulario:
Option Explicit

Private Sub Command1_Click()

On Error GoTo ErrSub

With Data1
'Se asigna el Recordsource al data
.RecordSource = Trim$(Text1.Text)
.Refresh 'refresca el control
End With

Exit Sub

ErrSub:
MsgBox Err.Description, vbCritical, " Error "
End Sub

Private Sub Command2_Click()

On Error GoTo ErrSub


'Abre el cuadro de diálogo para Seleccionar la base de datos
With CommonDialog1

.DialogTitle = " Seleccionar base de datos para anlzar con el Data "
.Filter = "Archivos de base de datos Access*.mdb"
.ShowOpen

If .FileName = "" Then
Exit Sub
Else
'Le especifica el path de la Bd al control data1
Data1.DatabaseName = .FileName
MsgBox " Ahora escriba una consulta en Text1 para " & _
"cargar el DbGrid ", vbInformation
End If

End With

Exit Sub

ErrSub:
MsgBox Err.Description, vbCritical, " Error "

End Sub



Private Sub Data1_Error(DataErr As Integer, Response As Integer)
Response = 0
End Sub

Private Sub Form_Load()
Me.Caption = " Ejemplo DbGrid y el control Data "

Command1.Caption = " Ejecutar consulta "
Command2.Caption = " Seleccionar BD "

' Tipo de base de datos para el Data
Data1.Connect = "Access"
End Sub


Descarga ejemplo


5 - Abrir una base de datos con Password

Estos dos ejemplos muestran como abrir una base de datos Microsoft Access con password para asociarla luego a un control Data
El primer ejemplo abre una Bd de tipo Access 2000, el segundo una Bd de tipo Access 97.

Este ejemplo requiere incluir la referencia a Microsoft DAO desde el menú Proyecto - Referencias e incluir un control Data llamado Data1
Option Explicit

Private Sub Form_Load()

Dim Path As String
Dim db As Database
Dim rst As Recordset


Path = App.Path & "\Bd1.mdb"


Set db = DBEngine.OpenDatabase(Path, False, False, "MS Access;PWD=EL_PASSWORD")

' Abre el recordset
Set rst = db.OpenRecordset("El_Campo")

' Asocia el recordset al control Data
Set Data1.Recordset = rst

End Sub

Abrir la base con Password en Access 97:
Private Sub Form_Load()

Dim Password As String


' Passsword de la base de datos
Password = ";PWD=" & "el_password"

'Path de la bd
Data1.DatabaseName = App.Path & "\bd1.mdb"

Data1.Connect = Password

Data1.Refresh



End Sub

6 - Enlaces relacionados
· Página de ejemplos usando Microsoft Dao
· 1 - Ejemplo para cargar una tabla en un DbGrid al seleccionarla en un control ListBox
·
· Vista del ejemplo:
·
·
· Descripción:
· Al seleccionar una base de datos mediante el Command "Abrir Base", se llama a un subrutina que mediante DAO recorre las tablas de la base y las agrega al control ListBox. Una ves cargadas los nombres de las tablas, al seleccionar una de ellas, se enlaza el control DbGrid con el control Data, es decir se le pasa a la propiedad RecordSource del Data el comando SQL con el nombre de la tabla, y automaticamente el control DbGrid presentará los datos de la misma.
· Para el ejemplo se requiere de un control Listbox llamado List1. Un control DbGrid llamado DbGrid1. Un CommonDialog para poder utilizar el cuadro de diálogo de windows para seleccionar el archivo de base de datos, un Command1 y Un control Data llamado Data1
· Luego de esto seleccionar el control Dbgrid y en la propiedad DataSource del mismo, desde la ventana de propiedades, especificar el control Data1, para que de esta forma quede enlazado
· Por último se debe agregar desde el menú Proyecto - > referencias, la referencia: Microsoft DAO.
·
· Código en un formulario:
· Option Explicit
·
· 'Botón para elegir el archivo MDB
· Private Sub Command1_Click()
· With CommonDialog1
·
· .Filter = "Archivo MDB*.mdb"
· .DialogTitle = "Seleccionar base de datos "
·
· .ShowOpen
·
·
· If .FileName = "" Then Exit Sub
·
· Call Cargar_Tabla(.FileName)
·
· End With
· End Sub
·
· Sub Cargar_Tabla(Path As String)
·
· Dim BD As Database
· Dim Tabla As TableDef
·
· 'Abre la base de datos
· Set BD = OpenDatabase(Path)
·
· List1.Clear
·
· ' Recorre la tala de la base en un bucle y las _
· agrega en el control ListBix
· For Each Tabla In BD.TableDefs
·
· 'Si no es una tabla de sistema
· If Left$(Tabla.Name, 4) <> "MSys" Then
· List1.AddItem Tabla.Name
· End If
· Next
·
· 'cierra la base de datos
· BD.Close
·
· ' Asigna la base de datos al control Data
· Data1.DatabaseName = Path
·
· End Sub
·
· 'recibe como parámetro el nombre de la tabla
· Sub Enlazar_DbGrid_Data(Tabla As String)
·
· Dim sql As String
·
· ' Cadena SQL
· sql = "SELECT * FROM " & "[" & Tabla & "]"
·
· ' Establece el RecordSource al Data, es decir el Sql
· Data1.RecordSource = sql
·
· 'Refresca
· Data1.Refresh
·
· End Sub
·
· Private Sub Form_Load()
· Command1.Caption = " Abrir base de datos"
· Me.Caption = " Ejemplo para enlazar un Data a un DbGrid"
· End Sub
·
·
· Private Sub List1_Click()
·
· If List1.ListIndex <> -1 Then
· 'Le envía el nombre de la tabla seleccionada en el List
· Call Enlazar_DbGrid_Data(List1.List(List1.ListIndex))
· End If
·
· End Sub
·
·
· 2 - Ejemplo para buscar datos - Método FindNext y FindPrevious del objeto Recordset
·
· El siguiente ejemplo es muy simple y permite mediante estos dos métodos buscar un registro. El primero buscará haci adelante y el FinPrevious hacia atrás. También hay otros dos métodos, uno llamado FindLast, que busca el último registro, y FindFirst que busca el último. pero en este ejemplo solo se verá el uso de los dos mencionados en el título.
· Para armar el ejemplo se necesita colocar en un formulario como muestra la imagen los siguientes controles:
·
·
·
· Un control Data llamado Data1. Dos controles Commandbutton para buscar los datos. y cuatro controles textBox. El text1, Text2 y text3, en la propiedad DataSource , indicar el control Data1 para que de esta menra queden enlazados a la base de datos. El text4 se utilizará para ingresar el dato a buscar.
· En le FormLoad, especificar lo siguiente:
· En la Propiedad DatabaseName del control data, la ruta de la base de datos:
· En la propiedad REcordSource, la Tabla.
· en la propiedad TextField de los Text1, Text2 y Text3, los campos que visualizará cda textBox.
· Nota: en este ejemplo se utiliza la base de datos que se instala con visual basic, llamada NWIND.MDB
·
· Código fuente en el formulario:
·
· 'Busca hacia adelante
· Private Sub Command1_Click()
· Data1.Recordset.FindPrevious "Ciudad Like '" & Text4 & "'"
· End Sub
·
· 'Busca hacia atrás
· Private Sub Command2_Click()
· Data1.Recordset.FindNext "Ciudad Like '" & Text4 & "'"
· End Sub
·
·
·
· Private Sub Form_Load()
· Path = "C:\Archivos de programa\Microsoft Visual Studio\VB98\NWIND.MDB"
·
· 'Path de la base de datos para la propiedad DatabaseName
· Data1.DatabaseName = Path
·
· 'Tabla para la propiedad RecordSource
· Data1.RecordSource = "Clientes"
·
· 'Especifica los DAtaField de los controles
· Text1.DataField = "Nombre_del_contacto"
· Text2.DataField = "Ciudad"
· Text3.DataField = "Teléfono"
·
·
· Command1.Caption = " Buscar hacia Atrás "
· Command2.Caption = " Buscar hacia adelante "
· Me.Caption = " Ejemplo del método Find para buscar datos"
·
· End Sub
·
·
· Ejemplo para filtrar con el operador Like
· Este otro sencillo formulario , utiliza un control data y un MsFlexgrid enlazado. Al escribir en un textbox , se filtran los datos utilizando el operador like de sql de microsoft jet.
· Nota : En este caso se utiliza los campos idProducto y NombreProducto, de la base de datos nwind del directorio de visual basic.
· Vista del form
·
·
· Descargar ejemplo
·
· 3 - Pasar datos desde Microsoft Excel hacia Access
· Este es un simple ejemplo que utiliza dos controles Data para exportar datos de una hoja de cálculo Excel hacia una base de datos mdb.
· Uno de los controles Data, se enlaza con la hoja de Excel, y otro control data para acceder a la base de datos.
· Formulario
·
·
· Para el ejemplo, la hoja debe tener tres campos o columnas con algunos datos, por ejemplo :
·
·
· 1 - Indicar en el código fuente, el nombre de la hoja del Excel y el nombre de la tabla en la propiedad Recordsource de cada control Data
· 2 - Crear tres campos dentro de la bd
· Importante: asi como está el ejemplo, los campos en la base de datos , deben ser del mismo tipo o similares, ya que sino dará error de conversión de tipos. Para este caso, se colocaron por default como de tipo " Texto "
·
· Código fuente en el formulario
· Option Explicit
·
· Private Sub Command1_Click()
·
· On Error GoTo Mensaje_Error
·
· ' path del excel
· Data1.Connect = "Excel 8.0;"
· Data1.DatabaseName = App.Path & "\archivo_Excel.xls"
·
· ' Especifica la Hoja que tiene los datos
· Data1.RecordSource = "Hoja1$"
· ' refresca
· Data1.Refresh
·
· ' path del archivo Access
· Data2.Connect = "Access"
· Data2.DatabaseName = App.Path & "\archivo_Access.mdb"
·
· 'indica el nombre de la tabla a usar
· Data2.RecordSource = "Tabla1"
·
· ' refresca
· Data2.Refresh
·
· ' Mueve al primer registro en la hoja
· Data1.Recordset.MoveFirst
·
· ' mientras haya registros
· Do While Data1.Recordset.EOF = False
·
· With Data2.Recordset
· .AddNew ' agrega uno nuevo
·
· ' asigna los datos a cada campo
· .Fields(0) = Data1.Recordset.Fields(0)
· .Fields(1) = Data1.Recordset.Fields(1)
· .Fields(2) = Data1.Recordset.Fields(2)
·
· ' actualiza la base de datos con los nuevos cambios
· .Update
·
· ' se posiciona en el siguiente registro
· Data1.Recordset.MoveNext
· End With
· Loop
· ' ok
· MsgBox " Datas exportados a Access correctamente !!!", vbInformation
·
· Exit Sub
· ' error
· Mensaje_Error:
· MsgBox Err.Description
·
· End Sub
·
· Private Sub Form_Load()
· Command1.Caption = " Datos desde Excel hacia Access "
· End Sub
·





Volver al índice

Image - Control de imagen

El control Image permite visualizar gráficos e imágenes de los formatos clásicos como gif, bmp, jpg, ico, cur, wmf etc... Pero no todos ellos son aceptados por este control como los png o lo s Tif, por decir algunos.
En comparación con el control PictureBox que parecen muy similares, el control Image tiene muchas menos características que este, por ejemplo una de ellas es que no se pueden utilizar los métodos gráficos para dibujar sobre el mismo, tampoco es un contenedor de controles como si lo es el PictureBox, no posee propiedad Hdc para interactuar con Apis, tampoco propiedad Hwnd y varias otras.

Por lo tanto el control Image consume menos recursos que un control Picture


Las principales propiedades del control Image:
· Propiedad Name: Especifíca el nombre del control para poder referenciarlo e identificarlo
· Propiedad Appearance: Esta propiedad determina si el Image posee o no efecto 3d con respecto a su apariencia. Los valores son: 1 - 3D y 0 - None. Para que esta propiedad se pueda utilizar, la propiedad BorderStyle debe estar con el valor 1
· Propiedad BorderStyle: Determina si el control Image posee o no un borde. Al igual que el anterior tiene dos posibles valores, 0 sin borde o 1 con borde
· Propiedad Picture: Esta es la propiedad principal del control, que también es la propiedad por defecto o default. Picture es la que establece la imagen o gráfico que mostrará el control.
· Propiedad Stretch: Esta es una de las propiedades mas importantes. Si está en True la imagen se ajustará al tamaño que posea el control Image, si está en False el control Image es el que se adaptará al tamaño y dimensiones de la imagen.
· Las demás propiedades son las clásicas y comunes para la mayoría de los controles, como la propiedad Index, Visible, Enabled, ToolTipText, Width, Height, etc...

Propiedad Picture

Para cargar una imagen en un image, desde la ventana de propiedades de Visual Basic una ves que está seleccionado el control, se puede cargar el gráfico con un cuadro de diálogo que abre Visual lbasic. Esta forma sería cargarla en tiempo de diseño.
Para cargar una imagen en tiempo de ejecución, por ejemplo al pulsar un CommandButton, se utiliza el método LoadPicture, este método también lo posee el control PictureBox y lagunos otros controles.

Un ejemplo para cargar un gráfico usando el método LoadPicture:

Coloca un CommandButton llamado Command1 y un control Image llamado Image1 y pega el siguiente código en el formulario:

Private Sub Command1_Click()Dim Ruta As String'la ruta de la imagen en el discoRuta = "c:\windows\plumas.bmp" 'Le pasamos al método LoadPicture la variable RutaImage1.Picture = LoadPicture(Ruta) End Sub

Asegurate de colocar una ruta válida, de lo contrario se producirá un error en tiempo de ejecución (Error 53: No se ha encontrado el archivo)
En el ejemplo anterior podemos pasar una variable LoadPicture o directamente la ruta, Lo siguiente también es válido:

'Le pasamos al método LoadPicture directamente la Ruta de la imagenImage1.Picture = LoadPicture("c:\windows\plumas.bmp")

Para eliminar una imagen que está cargada en un Image en tiempo de ejecución, se debe pasar una cadena vacía. Por ejemplo:

'Eliminamos la imagen del ImageImage1.Picture = LoadPicture("")

Como se dijo la propiedad Picture es la propiedad por defecto, por lo tanto no es necesario indicársela al control Image:

Dim Ruta As String 'la ruta de la imagen en el discoRuta = "c:\windows\plumas.bmp" Image1 = LoadPicture(Ruta)

Mediante el método LoadPicture no es la única manera de asignarle una imagen a un Image. Por ejemplo si quisiera mostrar o cargar un gráfico que está en un control PictureBox en un Image (es decir la misma imagen), podemos hacer lo siguiente:
'Cargamos la imagen del control Picture en el ImageImage1.Picture = Picture1.Picture

Nota: En el ejemplo anterior, si el control Picture no posee una imagen, no se produce un error en tiempo de ejecución, directamente el control Image no muestra la imagen del control Picture

Eventos principales del control Image

1. Evento Click: se dispara al hacer un Click sobre el control
2. Evento DobleClick: Se dispara la hacer dobleclick sobre el mismo
3. Evento MouseMove: Se produce cada ves que el mouse se mueve sobre el área del mismo
4. Evento MouseDown: Se produce cuando el mouse está presionado. Este se ejecuta antes que el evento click
5. Evento MouseUp. Se produce al soltar el Botón de Mouse.

Un ejemplo bien simple para ver como funcionan el evento MouseUp y MouseDown.
Coloca un control Image llamado Image1. Luego guarda el proyecto en algún directorio. Dentro de ese directorio colocá 2 imágenes de tipo .Ico llamadas "Imagen1.ico" e "Imagen2.ico" (o las que quieras pero luego cambialas en el código)

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Image1.Picture = LoadPicture(App.Path & "\imagen1.ico")End SubPrivate Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)Image1.Picture = LoadPicture(App.Path & "\imagen2.ico")End Sub

Como podés ver cuando el mouse está abajo, se carga el gráfico llamado imagen1.ico y al soltar el botón se ejecuta el MouseUp y carga la otra imagen image2.ico
Bueno esto es lo básico de este control, tiene algunas otras características, pero no es muy difícil descubrirlas, es cuestión de probarlas.

Enlaces relacionados
· Ejemplo para hacer un MouseOut, MouseOver en controles image con gráficos
· Ejemplo de los eventos Drag Drop - arrastrar y soltar
· Redimensionar una imagen mediante el mouse Ejemplos del control PictureBox



Volver al índice

DriveListBox , FileListBox y DirListBox



































































DriveListBox, DirListBox y FileListBox - controles para manipular unidades, archivos y directorios

Controles de visual basic para trabajar con las unidades del sistema, los archivos y directorios

-- -- Índice
· DriveListBox
· DirListBox
· FileListBox
· Ejemplo simple para utilizar los tres controles en conjunto





DriveListBox - Propiedades, métodos y eventos

Descripción
El Control DriveListBox es una especie de comboBox o lista desplegable que nos muestra las unidades que tengamos en la pc

Propiedades
Propiedad Drive
La propiedad mas importante de este control se llama Drive.
Esta propiedad nos retorna o devuelve la unidad que se encuentra seleccionada en el mismo.
Por ejemplo al ejecutar el siguiente fragmento de código, muestra la unidad mediante un cuadro de mensaje
Colocar el código en un formulario, e insertar un DriveListBox
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Form_Load()
4.
5. ' -- Mostramos la unidad que muestra el control mediante un mensaje
6. MsgBox "Unidad que muestra el control Drive es: " & Drive1.Drive, vbInformation
7.
8. End Sub
Option Explicit
Private Sub Form_Load()

' -- Mostramos la unidad que muestra el control mediante un mensaje
MsgBox "Unidad que muestra el control Drive es: " & Drive1.Drive, vbInformation

End Sub
ListCount y objeto List
Otra propiedad para saber la cantidad de unidades que tiene la lista es la propiedad ListCount y conjuntamente con el objeto List podemos recorrer la lista mediante un bucle, por ejemplo desde la primera unidad hasta la última en la lista, similar a recorrer los elementos de un control de lista como los ListBox y los ComboBox.
El ejemplo siguiente hace lo anteriormente dicho en un bucle For, y las va mostrando mediante un Mensaje:
Colocar un control Drive1 en el formulario y un botón.
Pegar el siguiente código
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. ' \\ -- Botón de comando para recorrer las unidades
5. Private Sub Command1_Click()
6.
7. Dim i As Integer
8. For i = 0 To Drive1.ListCount - 1
9. ' -- Mostramos la unidad que corresponde al elemento
10. ' -- de la propiedad List del Drive1
11.
12. MsgBox "unidad: " & Drive1.List(i), vbInformation
13.
14. Next
15.
16. End Sub
17.
18. Private Sub Form_Load()
19. Command1.Caption = "Ver unidades"
20. End Sub
Option Explicit

' \\ -- Botón de comando para recorrer las unidades
Private Sub Command1_Click()

Dim i As Integer
For i = 0 To Drive1.ListCount - 1
' -- Mostramos la unidad que corresponde al elemento
' -- de la propiedad List del Drive1

MsgBox "unidad: " & Drive1.List(i), vbInformation
Next

End Sub
Private Sub Form_Load()
Command1.Caption = "Ver unidades"
End Sub

Otras propiedades
Las demás propiedades son comunes a la mayoría de los demás controles, por ejemplo:
· Propiedades de apariencia : Font y ForeColor para establecer atributos de fuente, BackColor para el color de fondo
· Propiedades de comportamiento : Enabled para habilitar o no el control, Visible para mostrarlo u ocultarlo
· Propiedades de posición: Height y Width para establecer y recuperar el ancho del objeto, y Left y Top para la posición izquierda y superior en el objeto que lo contiene ( un formulario, picturebox o control Frame)

A continuación un ejemplo para utilizar la propiedad Width. Muchas veces es necesario, en tiempo de ejecución, cambiar y adaptar la anchura del control, por ejemplo supongamos que al redimensionar y cambiar el ancho del formulario, quisiéramos adaptar el ancho del Drive al de la ventana de formulario, entonces podemos modificar la propiedad Width dentro del evento resize del Form.
Colocar un Drive1. Pegar el siguiente código. Luego maximizar, achicar, y cambiar el tamaño de la ventana para ver como se adapta a las dimensiones de la misma.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. ' \\ -- El evento resize ocurre cuando se muestra un formulario
5. ' por primera vez o cuando cambia el tamaño, ya sea mediante
6. ' el mouse o maximizando la ventana
7. ' ---------------------------------------------------------------------------------
8. Private Sub Form_Resize()
9.
10. ' -- Establecer la posición izquierda
11. Drive1.Left = 10
12. ' -- Establecer el ancho para que sea igual al del form
13. Drive1.Width = Me.ScaleWidth - 20
14.
15. End Sub
Option Explicit
' \\ -- El evento resize ocurre cuando se muestra un formulario
' por primera vez o cuando cambia el tamaño, ya sea mediante
' el mouse o maximizando la ventana
' ---------------------------------------------------------------------------------
Private Sub Form_Resize()

' -- Establecer la posición izquierda
Drive1.Left = 10
' -- Establecer el ancho para que sea igual al del form
Drive1.Width = Me.ScaleWidth - 20

End Sub

Importante
El código anterior contiene un error que es el siguiente. Si minimizas la pantalla de formulario, visual basic te mostrará este error:
Este error ocurre por que justo en el momento de minimizar el form, la propiedad ScaleWidth del Formulario contiene el valor 0. entonces al ejecutar la línea
Drive1.Width = Me.ScaleWidth - 20
Se está asignando como nuevo ancho del Drive, el valor ( 0 - 20 ) , es decir el valor -20. Y En visual basic, no se puede establecer un valor negativo a la propiedad Width y Height de ningún tipo de control.
Para solucionar esto, puede haber varias formas, por ejemplo podríamos utilizar un bloque If que compruebe que el valor a asignar sea mayor a 0.
Texto planoCopiar código fuenteImprimir
1. Private Sub Form_Resize()
2.
3. ' -- Establecer la posición izquierda
4. Drive1.Left = 10
5. ' -- Establecer el ancho para que sea igual al del form
6.
7. ' -- Si esta operación (Me.ScaleWidth - 20), es mayor a 0, entonces si
8. ' -- Cambiar el ancho, si no ignorar el bloque de código para que no genere error
9. If (Me.ScaleWidth - 20) > 0 Then
10. Drive1.Width = Me.ScaleWidth - 20
11. End If
12.
13. End Sub
Private Sub Form_Resize()

' -- Establecer la posición izquierda
Drive1.Left = 10
' -- Establecer el ancho para que sea igual al del form

' -- Si esta operación (Me.ScaleWidth - 20), es mayor a 0, entonces si
' -- Cambiar el ancho, si no ignorar el bloque de código para que no genere error
If (Me.ScaleWidth - 20) > 0 Then
Drive1.Width = Me.ScaleWidth - 20
End If

End Sub
Otra solución posible sería, dentro del evento Resize, averiguar si se está intentando minimizar la ventana usando la propiedad WindowState
WindowState: Devuelve o establece en tiempo de ejecución el estado visual de una ventana de formulario. Si está maximizada, minimizada o en estado normal.
Al ejecutar el siguiente ejemplo, podés comprobar que no se genera error, ya que la instrucción If, al detectar que se minimiza el formulario, sale de la rutina para no ejecutar el bloque de código que cambia el ancho del control, y de esta manera evitar el error.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Form_Resize()
4.
5. ' -- Si se minimiza el form, salir de la rutina
6. ' -- para no ejecutar el código de abajo ya que daría error
7. If Me.WindowState = vbMinimized Then Exit Sub
8.
9. Drive1.Left = 10
10. Drive1.Width = Me.ScaleWidth - 20
11.
12. End Sub
Option Explicit
Private Sub Form_Resize()

' -- Si se minimiza el form, salir de la rutina
' -- para no ejecutar el código de abajo ya que daría error
If Me.WindowState = vbMinimized Then Exit Sub

Drive1.Left = 10
Drive1.Width = Me.ScaleWidth - 20

End Sub

Eventos
El evento mas importante del control Drive es el evento Change.
Este evento se dispara o ejecuta cada vez que el control cambia la unidad, es decir cuando el usuario selecciona de la lista una unidad diferente. Para probarlo como funciona, un simple ejemplo:
Pegar este código, y cuando se seleccione una unidad, se producirá el evento Change y mostrará la unidad seleccionada, consultando la propiedad Drive
Colocar un Drive1 en el formulario principal.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. ' \\ -- Evento que Ocurre cuando cambia el contenido del Drive
5. Private Sub Drive1_Change()
6. 'Mostramos la unidad seleccionada
7. MsgBox Drive1.Drive, vbInformation
8. End Sub
Option Explicit
' \\ -- Evento que Ocurre cuando cambia el contenido del Drive
Private Sub Drive1_Change()
'Mostramos la unidad seleccionada
MsgBox Drive1.Drive, vbInformation
End Sub

DirListBox - Propiedades, métodos y eventos

Descripción y propiedades:
Permite visualizar los directorios de una unidad determinada.
Propiedad Path
La propiedad mas importante se llama Path. A esta propiedad se le debe indicar la ruta para que cargue la lista de directorios
Por ejemplo, para poder visualizar las carpetas, cuando seleccionamos una unidad en un control Drive, se haría de la siguiente forma:
Colocar un control Drive1 y un control Dir1 y pegar el siguiente código en el formulario:
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Drive1_Change()
4.
5. ' -- Establecer la ruta del Dir1, de acuerdo a
6. ' -- la unidad seleccionada en el Drive
7. Dir1.Path = Drive1.Drive
8.
9. End Sub
10.
11. Private Sub Form_Load()
12. MsgBox "Cambia la unidad para que el Dir1 actualice el la propiedad Path"
13. End Sub
Option Explicit
Private Sub Drive1_Change()
' -- Establecer la ruta del Dir1, de acuerdo a
' -- la unidad seleccionada en el Drive
Dir1.Path = Drive1.Drive
End Sub
Private Sub Form_Load()
MsgBox "Cambia la unidad para que el Dir1 actualice el la propiedad Path"
End Sub

Si ejecutás el ejemplo anterior, podés ver que al cambiar de unidad en el control Drive se despliegan los directorios en el control Dir1. Pero también seguramente observaste que si seleccionás por ejemplo una unidad que no se encuentra disponible, como por ejemplo la disquetera, unidad de CD/DVD, y esta no contiene un diskette o CD, o se encuentra averiada, o no lo puede leer por algún otro motivo, se producirá un error 68 en tiempo de ejecución: "El dispositivo no está listo".
Para evitar esto podemos utilizar una simple rutina de error como la siguiente para solucionar el problema mediante un controlador de error.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Drive1_Change()
4.
5. On Error GoTo MensajeError
6.
7. ' -- Mostramos la lista de directorios pasandole la propiedad Drive
8. Dir1.Path = Drive1.Drive
9.
10.
11. Exit Sub
12. ' -- Rutina de error - Este bloque se ejecutará solo cuando se produzca un fallo
13. MensajeError:
14.
15. ' -- Si ocurre un error, entonces Primero comprobamos que es el 68
16. ' -- Si es el 68 ( unidad no disponible), mostramos un mensaje al usuario.
17. ' -- y proseguimos la ejecución del código mediante la instrucción Resume Next
18. If Err.Number = 68 Then
19. MsgBox "La unidad seleccionada no está disponible", vbInformation
20. Resume Next
21. Else
22. ' -- Si es otro error, también mostramos otro mensaje
23. MsgBox Err.Description, vbCritical, "Otro error"
24. End If
25.
26. End Sub
27.
28. Private Sub Form_Load()
29. MsgBox "Selecciona una unidad CD/DVD sin ningún CD/DVD"
30. End Sub
Option Explicit
Private Sub Drive1_Change()
On Error GoTo MensajeError

' -- Mostramos la lista de directorios pasandole la propiedad Drive
Dir1.Path = Drive1.Drive
Exit Sub
' -- Rutina de error - Este bloque se ejecutará solo cuando se produzca un fallo
MensajeError:
' -- Si ocurre un error, entonces Primero comprobamos que es el 68
' -- Si es el 68 ( unidad no disponible), mostramos un mensaje al usuario.
' -- y proseguimos la ejecución del código mediante la instrucción Resume Next
If Err.Number = 68 Then
MsgBox "La unidad seleccionada no está disponible", vbInformation
Resume Next
Else
' -- Si es otro error, también mostramos otro mensaje
MsgBox Err.Description, vbCritical, "Otro error"
End If
End Sub
Private Sub Form_Load()
MsgBox "Selecciona una unidad CD/DVD sin ningún CD/DVD"
End Sub

... de esta manera controlamos el error 68 mostrando un mensaje, y con la instrucción Resume Next, le decimos a vb que prosiga la ejecución del programa. Nota : Si no quisiéramos continuar la ejecución de la línea siguiente a la que produjo el error, simplemente podemos quitar la instrucción Resume Next.

DirListBox no enlazado a un DriveListBox
También a diferencia del ejemplo anterior, en muchos casos podríamos utilizar un Dir1 sin un control Drive.
Entonces para cambiar la propiedad Path del control DirListBox sin usar el control Drive, simplemente debemos pasarle la letra de la unidad o cualquier ruta válida que queramos a la propiedad Path, por ejemplo de esta manera:
Colocar dos botones y un Dir1. Pegar el siguiente código en el formulario
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Command1_Click()
4. Dir1.Path = "c:\"
5. End Sub
6.
7. Private Sub Command2_Click()
8. Dir1.Path = "c:\windows"
9. End Sub
10.
11. Private Sub Form_Load()
12. Command1.Caption = "c:\"
13. Command2.Caption = "c:\windows"
14. End Sub
Option Explicit
Private Sub Command1_Click()
Dir1.Path = "c:\"
End Sub
Private Sub Command2_Click()
Dir1.Path = "c:\windows"
End Sub
Private Sub Form_Load()
Command1.Caption = "c:\"
Command2.Caption = "c:\windows"
End Sub
Importante
Al igual que en el código anterior, donde se producía un error al intentar acceder a una unidad no disponible, si se le pasa a la propiedad path del Dirlistbox, una ruta que no existe, el programa generará un error en tiempo de ejecución. El error es el siguiente : Error de ruta de acceso
Para solucionarlo, podemos implementar una rutina o controlador de error , que verifique el numero 76. Si el error es el 76, entonces mostramos al usuario un mensaje para que sepa que la ruta indicada no es válida, y de esta forma, no se caiga el programa.
Este ejemplo demuestra lo dicho anteriormente
Colocar un botón y un Dir1. Al presionar el botón, se desplegará un cuadro de diálogo InputBox para escribir el path, y como demostración deberás escribir una ruta no válida para generar el error. Luego se mostrará un mensaje de información de que el path no es válido.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Command1_Click()
4.
5. On Error GoTo error_handler
6.
7. Dim sRuta As String
8.
9. ' -- Abrir un diálogo para escribir el path
10. sRuta = InputBox("Escribir una ruta que no exista en la pc")
11.
12. ' -- Si sRuta no es válido, se producirá el error y visual basic
13. ' -- saltará al bloque error_handler, y al comprobar el numero de error 76
14. ' -- Le mostrará al usuario que hubo un error en la ruta de acceso
15. Dir1.Path = sRuta
16.
17.
18. Exit Sub
19.
20. ' -- Rutina de error
21. error_handler:
22. If Err.Number = 76 Then
23. MsgBox "La ruta seleccionada no es válida, compruebe que la haya escrito correctamente", vbCritical
24. Else
25. MsgBox Err.Description, vbCritical
26. End If
27. End Sub
28.
29.
30. Private Sub Form_Load()
31. Command1.Caption = "Escribir ruta"
32. End Sub
Option Explicit
Private Sub Command1_Click()

On Error GoTo error_handler

Dim sRuta As String

' -- Abrir un diálogo para escribir el path
sRuta = InputBox("Escribir una ruta que no exista en la pc")

' -- Si sRuta no es válido, se producirá el error y visual basic
' -- saltará al bloque error_handler, y al comprobar el numero de error 76
' -- Le mostrará al usuario que hubo un error en la ruta de acceso
Dir1.Path = sRuta
Exit Sub
' -- Rutina de error
error_handler:
If Err.Number = 76 Then
MsgBox "La ruta seleccionada no es válida, compruebe que la haya escrito correctamente", vbCritical
Else
MsgBox Err.Description, vbCritical
End If
End Sub
Private Sub Form_Load()
Command1.Caption = "Escribir ruta"
End Sub

Propiedad ListCount, y objeto List
Con ListCount y el objeto List, podemos acceder al contenido actualmente cargado en el Dir, es decir a los directorios. Para recorrer todo el contenido , se debe utilizar un bucle For Next. Por ejemplo lo siguiente, recorre todo el contenido del control, y crea un archivo de texto con las rutas. El archivo de texto se creará en una unidad c:\ con el nombre 'Rutas.txt'
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. Private Sub Command1_Click()
5.
6. On Error GoTo error_handler
7. ' -- Crear archivo
8. Dim f As Integer
9. f = FreeFile
10. Open "c:\rutas.txt" For Output As #1
11.
12. ' -- recorrer el control
13. Dim i As Integer
14. For i = 0 To Dir1.ListCount - 1
15. ' -- Escribir en el archivo el path
16. Print #1, Dir1.List(i)
17. Next
18. ' -- Cerrar el archivo abierto
19. Close #f
20.
21. ' -- Fin
22. MsgBox "Archivo guardado en: c:\", vbInformation
23.
24. ' -- Rutina de error
25. Exit Sub
26. error_handler:
27. MsgBox Err.Description, vbCritical, "error al crear el archivo"
28. End Sub
29.
30. Private Sub Form_Load()
31. Command1.Caption = "Guardar rutas en archivo de texto"
32. End Sub
Option Explicit
Private Sub Command1_Click()

On Error GoTo error_handler
' -- Crear archivo
Dim f As Integer
f = FreeFile
Open "c:\rutas.txt" For Output As #1

' -- recorrer el control
Dim i As Integer
For i = 0 To Dir1.ListCount - 1
' -- Escribir en el archivo el path
Print #1, Dir1.List(i)
Next
' -- Cerrar el archivo abierto
Close #f

' -- Fin
MsgBox "Archivo guardado en: c:\", vbInformation

' -- Rutina de error
Exit Sub
error_handler:
MsgBox Err.Description, vbCritical, "error al crear el archivo"
End Sub
Private Sub Form_Load()
Command1.Caption = "Guardar rutas en archivo de texto"
End Sub

Nota Las demás propiedades, son similares a la de los demás controles.

Eventos
Al igual que el control Drive, el control Dir tiene un evento que es el mas importantes llamado Change, y que se disparará o ejecutará cada vez que el control Dir cambie la ruta, es decir la propiedad Path.
El siguiente ejemplo muestra un mensaje cada vez que seleccionamos un directorio diferente en el control.
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Dir1_Change()
4. MsgBox Dir1.Path, vbInformation
5. End Sub
Option Explicit
Private Sub Dir1_Change()
MsgBox Dir1.Path, vbInformation
End Sub
Mostrar la cantidad de carpetas y directorios
Si quisiéramos saber la cantidad de directorios que muestra el control Dir, podemos usar la propiedad ListCount.
Ejemplo:
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Dir1_Change()
4. MsgBox "El directorio seleccionado tiene: " & Dir1.ListCount & " directorios"
5. End Sub
Option Explicit
Private Sub Dir1_Change()
MsgBox "El directorio seleccionado tiene: " & Dir1.ListCount & " directorios"
End Sub


FileListBox - Propiedades, métodos y eventos

El control FileListBox permite ver en un listado los archivos de un path determinado.

Propiedad Path
La propiedad por defecto del control es la propiedad Path.
Por ejemplo para cargar en el control todos los ficheros de la unidad c:\windows al pulsar un botón:
Colocar un botón en el formulario y un control FileListBox. Pegar el siguiente código
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. ' \\ -- Establecer la ruta del File List Box al ghacer clic en el botón
5. Private Sub Command1_Click()
6. File1.Path = "c:\windows"
7. End Sub
8.
9. Private Sub Form_Load()
10. Command1.Caption = "Listar c:\windows"
11. End Sub
Option Explicit
' \\ -- Establecer la ruta del File List Box al ghacer clic en el botón
Private Sub Command1_Click()
File1.Path = "c:\windows"
End Sub
Private Sub Form_Load()
Command1.Caption = "Listar c:\windows"
End Sub

Importante : El FileListBox no contiene una opción para incluir los archivos de los subdirectorios, solo visualizará los ficheros de la carpeta actual.
La propiedad path es la propiedad por defecto del control FileListBox, por lo tanto no es necesario escribirla explícitamente, por lo cual esto también es válido :
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. Private Sub Command1_Click()
4. File1 = "c:\windows"
5. End Sub
Option Explicit
Private Sub Command1_Click()
File1 = "c:\windows"
End Sub

Nota. Los controles DirListBox y DriveListBox también tienen sus propiedades por defecto. Para el control Dir es la propiedad Path y para el Drive es la propiedad Drive, y por lo tanto cuando no escribamos ninguna propiedad, es decir solo se escriba el nombre del control y se le asigne el valor, se asumirá como Default ( la propiedad por defecto )
Propiedad Pattern - Para Filtrar Archivos
Por defecto el control FileListbox visualiza todos los archivos del directorio indicado. Para listar archivos en forma filtrada, por ejemplo solo los Txt, solo archivos bmp, o un conjunto de extensiones : Solo Exe, dll y Bat por mencionar algunos tipos de ficheros, se utiliza la propiedad Pattern. A esta propiedad le debemos indicar la extensión o las extensiones a filtrar:
Por ejemplo para filtrar una sola extensión. En este caso se visualizarán solo archivos TXT
Colocar un control FileListBox llamado File1 y un control DirListBox llamado Dir1. Cuando selecciones una ruta en el Dir1, solo se listarán en el FileList los archivos que posean la extensión .txt
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3. ' \\ -- Establecer el path del File al cambiar el Dir
4. Private Sub Dir1_Change()
5. File1.Path = Dir1.Path
6. End Sub
7.
8. Private Sub Form_Load()
9. ' -- Establecer el filtro ( propiedad Pattern )
10. File1.Pattern = "*.txt"
11. End Sub
Option Explicit
' \\ -- Establecer el path del File al cambiar el Dir
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Form_Load()
' -- Establecer el filtro ( propiedad Pattern )
File1.Pattern = "*.txt"
End Sub

Para filtrar varios archivos es de la misma forma que en el caso anterior, pero se debe establecer en la propiedad Pattern, separando las extensiones con un punto y coma ";".
Por ejemplo esto filtra y visualiza solo los archivos , Jpg, Bmp y Gif
File1,Pattern = "*.JPG;*.bMP;*.Gif"

En el ejemplo anterior se estableció la propiedad Pattern en tiempo de ejecución. Para establecerla en tiempo de diseño, se realiza desde la ventana de propiedades de Visual basic.

Propiedad FileName
Esta propiedad es muy importante y lo que hace es devolvernos el nombre del archivo seleccionado. Ojo, no la ruta entera (la propiedad path) , si no solo el nombre del archivo (el que se visualiza en el control).
El siguiente ejemplo, muestra un mensaje con el nombre del archivo seleccionado cuando hacemos Click en un archivo de la lista
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. Private Sub File1_Click()
5. MsgBox File1.FileName, vbInformation, "Nombre del archivo"
6. End Sub
7.
Option Explicit
Private Sub File1_Click()
MsgBox File1.FileName, vbInformation, "Nombre del archivo"
End Sub
Pero como obtener la ruta completa ?
Es muy simple , debemos unir la propiedad Path , mas la propiedad FileName
Colocar un botón y un FileListBox. Pegar el siguiente fragmento de código en el formulario
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. Private Sub Command1_Click()
5.
6. Dim sPath As String
7.
8. ' -- Guardar en a variable el path mas el nombre
9. sPath = File1.Path & "\" & File1.FileName
10.
11. ' -- mostrar el path completo
12. MsgBox sPath, vbInformation, "Nombre del archivo"
13.
14. End Sub
15.
16. Private Sub Form_Load()
17. Command1.Caption = "Mostrar"
18. End Sub
Option Explicit
Private Sub Command1_Click()

Dim sPath As String

' -- Guardar en a variable el path mas el nombre
sPath = File1.Path & "\" & File1.FileName

' -- mostrar el path completo
MsgBox sPath, vbInformation, "Nombre del archivo"

End Sub
Private Sub Form_Load()
Command1.Caption = "Mostrar"
End Sub

Propiedad ListCount y objeto List
Si necesitamos recorrer todos los ficheros de la lista, es igual que el ejemplo que se describió para el control Drive, es decir utilizando las propiedades ListCount y el objeto List.
Un ejemplo que no tiene ningún sentido práctico, pero que sirve para ver el funcionamiento de estas dos propiedades, consiste en recorrer todos los ficheros en un bucle For Next, y agregarlos a un control ListBox.
Colocar un botón llamado Command1, un ListBox llamado List1 y un FileListBox llamado File1 en el formulario principal del programa. Luego pegar el siguiente código

Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. ' \\ -- Botón para recorrer la lista en un bucle y agregar cada
5. ' -- archivo al listbox
6. Private Sub Command1_Click()
7.
8. ' -- Eliminar el listado antes de agregar
9. List1.Clear
10.
11. ' -- Recorrer
12. Dim i As Integer
13.
14. For i = 0 To File1.ListCount - 1
15. List1.AddItem File1.List(i)
16. Next
17.
18. End Sub
19.
20. Private Sub Form_Load()
21. Command1.Caption = "Pasar archivos al ListBox"
22. End Sub
Option Explicit
' \\ -- Botón para recorrer la lista en un bucle y agregar cada
' -- archivo al listbox
Private Sub Command1_Click()

' -- Eliminar el listado antes de agregar
List1.Clear

' -- Recorrer
Dim i As Integer
For i = 0 To File1.ListCount - 1
List1.AddItem File1.List(i)
Next

End Sub
Private Sub Form_Load()
Command1.Caption = "Pasar archivos al ListBox"
End Sub

System, Hidden, Normal, Archive - Propiedades
Estas propiedades permiten indicarle al control, si debe mostrar o no, archivos de acuerdo a sus atributos. Son cuatro propiedades
· System : Determina si un control FileListBox muestra archivos con el atributo Sistema
· Hidden : Determina si un control FileListBox muestra archivos con el atributo Oculto.
· Archive : Determina si un control FileListBox muestra los archivos con el atributo Modificado
· ReadOnly : Devuelve o establece un valor que determina si se muestran o no en la lista de archivos los archivos con el atributo Sólo lectura.

Eventos
Además de los eventos principales, como es el DobleClick, GotFocus, LostFocus y otros eventos comunes que poseen la gran mayoría de controles de vb, el FileListBox posee dos eventos exclusivos, ellos son :
· PathChange : Ocurre al cambiar la ruta de acceso estableciendo en el código las propiedades FileName o Path.
· PatternChange : Ocurre al cambiar el patrón de lista de archivos, como *.*, mediante FileName o Pattern en el código
Estos eventos le sirven al programador , en algunos casos que necesite saber cuando cambia alguna de las propiedades, y poder realizar alguna acción.
Ejemplo . Colocar dos botones y un File1
Texto planoCopiar código fuenteImprimir
1. Option Explicit
2.
3.
4. Private Sub Command1_Click()
5. ' -- Cambiar la ruta del File
6. File1.Path = "c:\"
7. End Sub
8.
9. Private Sub Command2_Click()
10. ' -- Cambiar el Pattern
11. File1.Pattern = "*.jpg"
12. End Sub
13.
14. Private Sub File1_PathChange()
15. MsgBox "Se ejecutó el evento PathChange", vbInformation
16. End Sub
17.
18. Private Sub File1_PatternChange()
19. MsgBox "Se ejecutó el evento PatternChange", vbInformation
20. End Sub
21.
22. Private Sub Form_Load()
23. Command1.Caption = "Cambiar Path"
24. Command2.Caption = "Cambiar Pattern"
25. End Sub
Option Explicit
Private Sub Command1_Click()
' -- Cambiar la ruta del File
File1.Path = "c:\"
End Sub
Private Sub Command2_Click()
' -- Cambiar el Pattern
File1.Pattern = "*.jpg"
End Sub
Private Sub File1_PathChange()
MsgBox "Se ejecutó el evento PathChange", vbInformation
End Sub
Private Sub File1_PatternChange()
MsgBox "Se ejecutó el evento PatternChange", vbInformation
End Sub
Private Sub Form_Load()
Command1.Caption = "Cambiar Path"
Command2.Caption = "Cambiar Pattern"
End Sub


Ejemplo utilizando los 3 controles vistos para navegar por las unidades y directorios del sistema y visualizar archivos bmp en un control image
Colocar un control File1, un Dir1 y un Drive1 y un control Image como está en la imagen:

Lo que hace el ejemplo es cada vez que seleccionemos una unidad diferente en el control Drive se actualiza y muestra los directorios de la misma. A su vez al cambiar de directorio en el Dir1 se actualiza el control File1 mostrando los archivos de dicha carperta, pero solo los bmp, utilizando el filtrado con la propiedad Pattern. Luego, Al seleccionar un archivo bmp en el FileListBox, se cargará la imagen en el control Image utilizando el método LoadPicture
Pegar el código del ejemplo en un formulario:
Texto planoCopiar código fuenteImprimir
1.
2. Option Explicit
3.
4.
5. Private Sub Dir1_Change()
6. ' -- Cada vez que cambiamos de directorio, le indicamos al
7. ' -- control FileListBox que muestre los archivos de ese directorio
8. File1.Path = Dir1.Path
9. End Sub
10. Private Sub Drive1_Change()
11. On Error GoTo error_handler
12.
13. ' -- Cada vez que cambiamos de unidad, indicamos al control
14. ' -- Dir Que muestre los directorios de esa unidad
15. Dir1.Path = Drive1.Drive
16.
17. ' -- Rutina de error en caso de que se seleccione una unidad no disponible
18. ' -- O que se produzca cualquier otro tipo de error
19. Exit Sub
20. error_handler:
21. MsgBox Err.Description, vbCritical
22.
23. End Sub
24.
25. Private Sub File1_Click()
26. On Error GoTo error_handler
27.
28. ' -- Mostramos en la barra de título del formulario el nombre del
29. ' -- archivo seleccionado en el control File1
30. Me.Caption = "Archivo Actual: " & File1.FileName
31. Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName)
32.
33. ' -- Rutina de error en caso de que no se pueda cargar la imagen en el Image
34. Exit Sub
35. error_handler:
36. MsgBox Err.Description, vbCritical
37. End Sub
38.
39. Private Sub Form_Load()
40. ' -- Para indicarle al control File que liste y filtre solo Bmp
41. File1.Pattern = "*.bmp"
42. ' -- Para reajustar la imagen en el control image
43. Image1.Stretch = True
44. End Sub
Option Explicit
Private Sub Dir1_Change()
' -- Cada vez que cambiamos de directorio, le indicamos al
' -- control FileListBox que muestre los archivos de ese directorio
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
On Error GoTo error_handler

' -- Cada vez que cambiamos de unidad, indicamos al control
' -- Dir Que muestre los directorios de esa unidad
Dir1.Path = Drive1.Drive

' -- Rutina de error en caso de que se seleccione una unidad no disponible
' -- O que se produzca cualquier otro tipo de error
Exit Sub
error_handler:
MsgBox Err.Description, vbCritical

End Sub
Private Sub File1_Click()
On Error GoTo error_handler
' -- Mostramos en la barra de título del formulario el nombre del
' -- archivo seleccionado en el control File1
Me.Caption = "Archivo Actual: " & File1.FileName
Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName)

' -- Rutina de error en caso de que no se pueda cargar la imagen en el Image
Exit Sub
error_handler:
MsgBox Err.Description, vbCritical
End Sub
Private Sub Form_Load()
' -- Para indicarle al control File que liste y filtre solo Bmp
File1.Pattern = "*.bmp"
' -- Para reajustar la imagen en el control image
Image1.Stretch = True
End Sub

En este otro enlace, hay otro ejemplo similar a este último, relacionado con estos tres controles.
Cargar una imagen centrada en un Picture



Volver al índice

Timer - Temporizadores






















Esta sección describe con ejemplos básicos, el uso del control Timer de visual basic.

Contenido :
· Descripción del control y la propiedad Interval
· Ejemplo 1 - mostrar la hora en un control Label
· Ejemplo 2 - Propiedad Enabled del Timer
· Ejemplo 3 - Cambiar el Interval en tiempo de ejecución
· Ejemplo 4 - Crear una marquesina de texto
· Ejemplo 5 - Crear una marquesina de texto en forma vertical
· Ejemplo 6 - Animar una secuencia de archivos Gif en un Picturebox
· Nota sobre la propiedad interval

El control Timer es un temporizador que nos permite ejecutar instrucciones de código, rutinas, funciones etc..., cada cierto intervalo de tiempo.
Este control es invisible en tiempo de ejecución, esto quiere decir que no tiene interfaz gráfica, solo es visible cuando lo agregamos a un formulario y estamos en modo de diseño .
La propiedad mas importante de este control es la propiedad Interval

Definición del propiedad Interval:
Devuelve o establece el número de milisegundos entre dos llamadas al evento Timer de un control Timer.
en castellano, esto quiere decir que la propiedad es la que determina el intervalo en el que ejecutará las instrucciones que estén en el evento llamado Timer, que es el único evento que posee el control
Por ejemplo, si agregás un Timer al formulario y le haces DobleClick sobre el mismo, al abrirse la ventana de código Visual Basic creará una rutina de evento como la siguiente:


En ese procedimiento ( controlador de evento ) es donde debemos escribir las instrucciones que queremos que se ejecuten cada cierto intervalo de tiempo.
Antes de hacer un ejemplo, hay que aclarar que la propiedad Interval está expresada en milisegundos, esto quiere decir que por ejemplo si quisieramos ejecutar una instrucción cada 3 segundos por decir un ejemplo, la propiedad Interval debe estar en 3000, si quisiera ejecutarla cada 10 segundos en 10000 etc...
Otra cosa importante es que si la propiedad Interval se encuentra en 0, el procedimiento Timer no se producirá.

Ejemplo 1 - utilizando la propiedad Interval para mostrar la hora
Coloca un Timer llamado Timer1, seleccionalo, y desde la ventana de propiedades en la propiedad Interval coloca el valor 1000. O sea que el Timer1 se va a ejecutar cada 1 segundo.
Ahora coloca un control Label1 en el formulario y en la propiedad Autosize del control Label1 coloca True, esto hará que el control Label1 se ajuste al contenido del mismo. Lo que hará el ejemplo será mostrar la hora del sistema en el control de etiqueta
Entonces dale doble Click en el Timer1 para crear el procedimiento que se describió arriba que es el que ejecuta el Timer. y pega está instrucción

Label1.caption = Time

El código del procedimiento quedaría así:

Private Sub Timer1_Timer()Label1.Caption = TimeEnd Sub

Ahora ejecuta el programa y podés ver como se actualiza el Label1 de acuerdo a la hora del sistema, usando claro la función Time de visual basic que devuelve la hora del sistema operativo.
Otra propiedad importante y que se utiliza mucho en este control es la propiedad Enabled. La propiedad enabled lo que hace es habilitar o deshabilitar un control. Si está en True funciona, si está en False no funciona. Esta propiedad es común en la mayoría de los controles de visual basic.

Ejemplo 2 - para para ver el funcionamiento de la propiedad Enabled:
Coloca 2 controels CommandButton llamados cmdActivar y otro CmdDesactiva. También un control laabel llamado Label1 que mostrará igual que el ejemplo anterior la hora del pc usando la función Time de Visual basic, pero en este ejemplo lo que harán los botones es activar y desactivar el control Timer1, mediante la propiedad Enabled
Dale doble click en el CmdActivar, es decir en el CommandButtonm y coloca la siguiente instrucción para activar el Timer1
Timer1.Enabled = True

Ahora Doble click en el otro botón para escribir las instrucción para desactivar el Timer1 cuando hagamos click en el botón

Timer1.Enabled = False

Una cosa que es muy común es asignar la propiedad Interval en tiempo de ejecución, es decir, en ves de hacerlo desde el modo diseño desde la ventana de propiedades, se asignará el Interval en el evento Load del formulario. Esto quiere decir que, apenas cargue y arranque el formulario, el control Timer1 tendrá el Interval en 1000.
Ahora DobleClick en el Formulario para que se abra la ventana de código y Visual Basic te muestre el procedimiento del evento Load y coloca la siguiente línea:

Timer1.interval = 1000

De esta manera ya sabés que desde cualquier punto del programa, podés cambiar la propiedad interval para que el temporizador se ejecute de acuerdo a tus necesidades. Hay veces que esto no es necesario es decir se mantiene igual y constante y no es necesario cambiar el interval, pero otras (depende de lo que se quiera hacer) si lo es.

Ejemplo 3 - Cambiar el Interval en tiempo de ejecución
Este ejemplo no tiene ningún sentido práctico pero para practicar vale.
Coloca en el formulario una barra de Scroll horizontal llamada HScroll1. Seleccionala y en la ventana de propiedades busca la propiedad Max y Min. A Min dejale el valor por defecto que tiene, osea 0. A lapropiedad Max colocale 3000 . Luego coloca un control Label llamado Label1 y un Timer1. Al Label1 en la propiedad Caption agregale algún texto. El formulario tiene que ser algo por el estilo:


Lo que hace esto es, que al mover la barra de scroll, se le cambia el valor de la propiedad interval al Timer1. Osea cuando lo llevamos al mínimo está en 0 y cuando movemos el scroll hasta el máximo valor queda en 3000 (cada 3 segundos). El valor de la propiedad de la barra que es Value , se lo asignamos a la propiedad interval del timer. Dentro del Timer, hay una simple instrucción que lo que hace es lo siguiente: Si el control Label1 está visible, lo ponemos invisible, si está Invisible lo hacemos visible. Esto hace que el Label1 parpadee. Mientras menos sea el valor de la propiedad interval, mas rápido parpadeará el Label1, en cambio mientras mas alto sea el valor mas lento parpadeará el Label1.
Como dije esto no tiene ningún sentido, pero es para que veas como podés asignar a la propiedad interval, valores de otros controles, datos variables etc.... en tiempo de ejecución

Private Sub HScroll1_Change()'Mostramos en la barra de titulo del form el valor del SCrollBarMe.Caption = "Intervalo: " & HScroll1.Value & " milisegundos"'Le colocamos el Interval al Timer, el valor de la barra (su propiedad Value)Timer1.Interval = HScroll1.ValueEnd SubPrivate Sub HScroll1_Scroll()HScroll1_ChangeEnd SubPrivate Sub Timer1_Timer()'Esta instrucción lo que hace es que si el Label1 está visible lo pone invisible'Si está Invisible lo hace visible. Cambiando la propiedad Visible'mediante el operador Not de Visual basicLabel1.Visible = Not Label1.VisibleEnd Sub

Ejemplo 4 - Crear una marquesina de texto
el siguiente ejemplo, cra una marquesina de texto que se desplaza a lo ancho del formulario utilizando nu control Label y por supuesto un Timer.
Coloca un control Frame en el formulario llamado Contenedor. Dentro del contenedor, es decir del Frame, coloca un Label1. Por último un control Timer llamado Timer1.
Desde el modo de Diseño debe verse mas o menos asi:



Lo que está seleccionado, es el control Frame, el Label asegurate que esté dentro del Frame, de lo contrario no funcionará.
Colocar en la propiedad Interval del Timer el valor 1
Ahora el siguiente código en el formulario:

Private Sub Form_Load()
Label1.Caption = " Hola Mundo "
End Sub

Private Sub Timer1_Timer()

With Label1

' Se desplaza el Label hacia la izquierda

.Move .Left - 30

'Si finalizó, vuelve a comenzar desde la parte derecha

If .Left + .Width < left =" Contenedor.Left" name="ejemplo5">Ejemplo 5 - Crear una marquesina de texto vertical
Este ejemplo es identico al anterior, pero el control Label, que estará dentro de un control Frame, se desplazará desde abajo hacia arriba, haciendo un efecto de Scroll vertical
Coloca un Label1 dentro de un Frame llamado contenedor, como está en la siguiente imagen:


Lo que se ve en amarillo es el control Frame, lo que está en Azul es el Label.
Nota: Los colores anteriores, solo están de muestra para distinguirlos, es decir no cambir los colores de fondo, y dejarlo con el color por defecto. O si se quiere especificar un color, que sean iguales, es decir si el frame está en amarillo, el color de fondo del Label también en amarillo, por decir un ejemplo.
Por último colocar un Timer llamado Timer1, y en la propiedad Interval colocarle el valor 1

Código fuente en el formulario:

Private Sub Form_Load()


'Valores para el tamaño y posición del Label
Label1.Height = 2500
Label1.Width = 2385
Label1.Left = 240
Label1.Top = 240

'Valores para el ancho ya alto del control Frame
Contenedor.Width = 3000
Contenedor.Height = 2000

' Texto del Label
Label1 = "Esto es una linea" & vbNewLine _
& "Otras linea mas" & vbNewLine _
& "Otra mas" & vbNewLine & vbNewLine _
& "... y otra" & vbNewLine & vbNewLine _
& "... y otra" & vbNewLine

End Sub

Private Sub Timer_Timer()

With Label1

' Se desplaza hacia arriba

.Move .Left, .Top - 10

'Si finalizó, vuelve a comenzar desde abajo

If .Top + .Height < top =" Contenedor.Top" href="http://www.recursosvisualbasic.com.ar/htm/listado-api/149-scroll-de-texto.htm">como crear una marquesina o Scroll de texto utilizando el Api de windows por ejemplo para las pantallas de créditos o " ... Acerca de ".
Otro ejemplo que tiene tan solo cuatro lineas de código, de una marquesina vertical, usando un picturebox que se encuentra dentro de otro picture y se va corriendo la propiedad Top mediante el timer para realizar el desplazamiento


Descargar
Ejemplo 6 - Animar una secuencia de archivos Gif
Este ejemplo muestra como a partir de una secuencia de archivos cargados en unos controles PictureBox, mediante un Timer y la función PaintPicture, copiar cada cuadro y generar la animación:

Descargar ejemplo

7 - Nota sobre la propiedad interval
La propiedad interval acepta como máximo el valor 65535. Es decir que si queremos asignar un valor superior nos dará un error por que desborda
Por eso , si queremos configurar el timer, con valores superiores , por ejemplo hacer que el timer se ejecute cada 10 minutos por decir un caso , podriamos hacer algo por el estilo :
Este código, ejecuta el temporizador cada 5 minutos ( el valor de la constante INTERVALO_EN_MINUTOS )

Código en el form con un timer1
Option Explicit

' Cantidad de minutos para el intervalo del timer _
en este caso para 5 minutos
Const INTERVALO_EN_MINUTOS As Integer = 5

Private Sub Form_Load()
' Ejecuta el timer cada 1 segundo
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
' variable estática para acumular la cantidad de segundos
Static Temp_Seg As Long
' incrementa
Temp_Seg = Temp_Seg + 1
' comprueba que los segundos no sea igual a la cantidad de minutos _
que queremos , en este caso 5 minutos
If (Temp_Seg * 60) >= (INTERVALO_EN_MINUTOS * 60) * 60 Then
' reestablece
Temp_Seg = 0
MsgBox "Se ejcutó el timer ", vbInformation
End If

End Sub

Para utilizar temporizadores en Visual Basic, no es la única forma mediante el control Timer, hay unas funciones del Api llamadas SetTimer y KillTimer que permiten crearlos sin utilizar el control estándar de Visual Basic.
En este enlace, Crear un Timer con el Api podés ver un ejemplo
También en este enlace podés descargar un módulo de clase para poder crear un timer con el api realizado por microsoft

Volver al índice