Sección de tutoriales y manuales vb
Ahora vamos a realizar un programa un poco mas complicado que el anterior:
Nota importante: cuando hice este ejemplo, lo realicé en windows 98, por lo tanto habría que hacerle algunas modificaciones para que funcione en Windows NT, en la sección Api hay un ejemplo de como Establecer el papel tapiz para estas versiones de windows
El ejemplo consistirá en una aplicación que cambie el papel tapiz del escritorio cada cierto intervalo de tiempo. Para ello utilizaremos 2 funciones Api:
La que se encargará de cambiar el papel tapiz se llama SystemParametersInfo y la que controlará el intervalo de tiempo se llama GetTickCount
La imagen del ejemplo:
Pasos a seguir:
1 - Abre el vb y en el formulario principal (Form1) agregá los siguientes controles:
2 - Ahora copia y pega este código en el Form1:
'Variable para almacenar el path del archivo Dim pathArchivo As String Private Sub Command1_Click() Private Sub Command2_Click() On Error GoTo mensaje 'Elimina un path del Listbox
End Sub Private Sub Command3_Click() 'Abre el Form2 para configurar el tiempo End Sub Private Sub Dir1_Change() Private Sub Drive1_Change() Private Sub File1_Click() Private Sub Form_Load() |
Este código permitirá en el Form1, navegar por el disco en busca de imágenes. El Command1 será el que agregue las rutas de las imágenes al List1, pasándole como parámetro al método Additem, la variable patharchivo que contiene la ruta de la imagen
3 - Añade otro formulario al proyecto. Este Form tendrá la función de definir el intervalo de tiempo entre cada imagen. Ahora ingresá los siguientes controles al form2:
El código del Form2
'Función Api SystemParametersInfo para establecer
el papel Tapiz Private Declare Function SystemParametersInfo Lib "user32" Alias _ "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As _ Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long _ 'Función Api GetTickCount para establecer
el retardo Private Sub Command1_Click() tiempo = (Combo1 * 60 * 60) + (Combo2 * 60) * 1000 For i = 0 To Form1.List1.ListCount - 1 End Sub Private Sub Command2_Click() Private Sub Form_Load() 'Cargamos el Combo1 con las horas
|
La función Api SystemParametersInfo será la encargada de establecer
el papel tapiz. Ya habrás visto que esta función parece un
choclo indescifrable, pero vas a ver que es no es tan así.
Esta función tiene varios parámetros, en este caso a nosotros nos interesa solo uno y es el tercero "lpvParam". (mas simple imposible)
Este parámetro lleva la ruta o path del archivo de imagen que queremos cambiar.
La otra función Api GetTickCount, lo que hace es lo siguiente: La función devuelve un número de tipo Long Este número representa la cantidad de milisegundos desde que inició windows.
Nosotros lo que haremos es almacenar entre cada intervalo de cada imagen
la cantidad de milisegundos en una variable llamada inicioWin antes de entrar
en un bucle While.
Luego al bucle le pasamos como condición que compare el valor de
GetTickCount actual con otro valor que es la suma de la variable inicioWin
+ la variable tiempo, que es la que almacena el valor seleccionado
de los ComboBox
Si este valor es menor o igual se termina el bucle.
La sentencia DoEvents dentro del bucle While se utiliza para que el programa no se apodere de todos los recursos del sistema.
Por último queda explicar que el bucle For, en la condición, tendrá como índice menor el 0 y como mayor la cantidad de imágenes que haya en el list1, o mejor dicho la cantidad de índices o elementos que tenga el control.
Justo cuando termina el bucle While llamamos a la función api SystemParametersInfo y le pasamos como parámetro la ruta guardada en el control ListBox, o mejor dicho comenzamos desde el elemento 0 hasta el último elemento que lo determina la variable "i" del bucle For y se la pasamos al método List del control de lista, y que obviamente tendrá la cadena o ruta del elemento actual del mismo.
Nota: este programa es solo para que veas el mecanismo de estas 2 funciones Api, con lo cual el programa está a modo de ejemplo y puede ser mejorado. Por ejemplo puedes cambiar la interfaz gráfica, esconder u ocultar el formulario en la barra Tray cuando se ejecuta, agregarle por ejemplo la opción de cambiar el papel tapiz cuando inicia Windows y algunas cosas mas.
Vamos a utilizar una función que nos permite dejar un formulario siempre visible o también llamado "Allways On Top" en inglés.
Esta función es muy útil cuando queremos que un programa o ventana de nuestra aplicación, siempre se encuentre visible por mas de que cambiemos a cualquier otra ventana de windows o de otra aplicación.
Para ello usaremos una función Api muy sencilla llamada SetWindowPos.
La declaración completa de la función Api SetWindowPos:
Private Declare Function SetWindowPos Lib "User32" (ByVal
hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal
Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
As Long |
Descripción de la función:
Esta función que tiene 7 parámetros, nosotros utilizaremos solo 3 de ellos.
En el primero, Hwnd de tipo Long, debemos especificar cual es el formulario o ventana que queremos dejar siempre visible.
En el segundo parámetro le pasaremos 2 constantes. Si queremos dejar la ventana siempre visible enviaremos aquí la constante HWND_TOPMOST, que tiene el valor -1. Si queremos dejar la ventana en estado normal enviamos la constante HWND_NOTOPMOST, que tiene el valor -2.
El último parámetro, wFlags, se utiliza para que el formulario no cambie de tamaño ni de posición en la pantalla. para esto utilizamos la unión de 2 constantes SWP_NOMOVE con el valor 2 (para que no cambie de posición), y SWP_NOSIZE con el valor 1 (para que el formulario no cambie de tamaño, si no por defecto windows redimencionará el formulario).
Pasos a seguir:
1 - Abre el visual basic con nuevo proyecto. En la zona de declaraciones
copia y pega la función api con sus las constantes mencionadas:
'Constantes para usar en la función
Const HWND_TOPMOST = -1 'Situa el form encima de
todos |
2 - Ahora crearemos un procedimiento o función de ajuste para hacer mas entendible el uso de esta función Api. Copia y pega el siguiente código:
'A esta función le enviamos la ventana o formulario
con un valor boolean 'indicando si queremos o no dejar siempre visible la ventana Private Sub MiFuncionDeAjuste(Formulario As Form, Estado As Boolean) 'Variable de retorno de la función If Estado = True Then End Sub |
Como podés ver la función tiene 2 parámetros. el primero recibirá el formulario que queremos mandar a la función Api, que es de tipo Form. El segundo , de tipo boolean, recibirá el parámetro true cuando queramos la ventana "Always On Top". Si queremos el estado de ventana normal, le pasamos al parámetro el valor False
3 - Ahora podemos colocar en el formulario dos Command, uno que diga "siempre visible" y el otro "ventana normal".
El código para llamar a nuestra función de ajuste sería así:
'Este Command pone la ventana AlwaysOnTop Private Sub Command1_Click() MiFuncionDeAjuste Me, True End Sub 'Este Command pone la ventana normal MiFuncionDeAjuste Me, False End Sub |
Windows posee una función Api llamada GetDriveType en la cual nosotros le enviamos en un parámetro de tipo String una letra de unidad cualquiera, como por ejemplo la c:\, y esta nos retorna el tipo de unidad que se trata, como por ejemplo una unidad de disco removible, disco duro o fija, disco remoto o de red, disco de cd-rom, o una unidad de disco virtual.
En realidad la función no nos devuelve un valor de tipo String, si no un número. para saber, por medio de este número que devuelve que tipo de unidad es, esta función utiliza una serie de constantes.
Esta es la declaración de la Api GetDriveType y las constantes con sus respectivos valores.
'Declaración de la función Api GetDriveType Private Declare Function GetDriveType Lib "Kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long ' Valores de retorno de GetDriveType Const NO_EXITE = 1 |
Esta función es de lo mas fácil de utilizar, y como vemos tiene un solo parámetro "nDrive" de tipo String, donde debemos enviarle la unidad a la que queremos que nos retorne información sobre la misma.
En el parámetro "nDrive" debemos enviarle la letra de unidad con los 2 puntos y la barra (a:\), de lo contrario la función retornará el valor 1, y este valor indíca que la unidad no existe.
Los demás valores los puedes ver en las constantes, el valor de retorno 2 significa "disco removible", el 3 "disco duro", el 4 "disco remoto", el 5 "disco de cd rom", el 6 "disco virtual".
Ejemplo:
En el formulario principal, luego de declarar la función api con
las constantes mencionadas mas arriba, agrega un command1,
un control combo1, que tenga el valor de las unidades donde
seleccionar (a:\,c:\, etc...).
El código completo:
Private Sub Command1_Click()
unidad = Combo1.Text 'Llamamos a la función GetDriveType pasandole la unidad Select Case retorno Case NO_EXITE Case DRIVE_REMOVABLE Case DRIVE_FIXED Case DRIVE_REMOTE Case DRIVE_CDROM Case DRIVE_RAMDISK End Select End Sub |
Api parte 1 - Api parte 2 - Api parte 3
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar