Visual Basic Anoche
Visual Basic Anoche
Visual Basic Anoche
Podemos utilizar el siguiente condicional en el evento Validate que no nos permitirá salir
del control si lo escrito en él no son números:
Pero para que las teclas "de letras" o "símbolos" no se puedan escribir es necesario:
Formatear un Textbox
Esto se utiliza para que un Textbox muestre un numero separados por unidades y
decimales.
Para realizar operaciones matemáticas con un Textbox formateado se debes cambiar la
función Val por CDbl, ejemplo:
Este control permite encapsular procedimientos para que sean utilizados por el usuario con
solo hacer click sobre él.
Algunas Propiedades
Style: Puede ser Graphical o Standard. Si es Graphical permite cambio de color entre otras.
Label (Etiqueta):
Algunas Propiedades
DataField y DataSorce: son iguales en todos los controles que las tengan.
Hacer que una etiqueta cambie de color cuando se pasa el mouse sobre ella
Algunas Propiedades
Algunas Propiedades
Algunas Propiedades
List: Permite crear uno a uno los elementos de la lista del ComboBox
ListBox (Lista)
Algunas Propiedades
Algunas Propiedades
Interval: Permite ingresar el valor del intervalo de tiempo. Un intervalo de 1000 equivale a
1 segundo.
Check1.FontBold = True
1 - Arreglos y vectores
2 - Matrices
1 - Arreglos y vectores
Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del
mismo tipo de dato, y todas estas bajo un mismo nombre.
Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan
nombres (nombre1, nombre2, etc..). si yo ahora quisiera pasar todas estas
cadenas a minúsculas tendría que utilizar la función Lcase con cada variable:
nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc..
For x = 0 To 30
nombres(x) = LCase(nombres(x))
Next
Para crear un arreglo se debe en primer lugar declararlo como cualquier otra
variable, la única diferencia es que debemos indicar la cantidad de elementos que
contendrá el arreglo, colocando el número de índice entre paréntesis. Por ejemplo
Importante: los arreglos se dividen en 2 grupos, los vectores y las matrices. Los
vectores son arreglos que contienen una sola dimensión y las matrices 2 o mas
dimensiones.
alumnos(1) = "juan"
alumnos(2) = "micaela"
alumnos(3) = "maría"
alumnos(4) = "ignacio"
Otro ejemplo
Next x
Por ejemplo:
Option Explicit
End Type
personas(1).nombre = "carlos"
personas(1).apellido = "Martínez"
personas(1).cpostal = 1900
personas(2).nombre = "Héctor"
personas(2).apellido = "rosales"
personas(2).cpostal = 1898
personas(3).nombre = "Albert"
personas(3).apellido = "Einstein"
personas(3).cpostal = 1324
End Sub
Para utilizar una estructura definida por nosotros en vectores o matrices, se hace
de la forma habitual, con la diferencia que debemos declarar el arreglo utilizando
el tipo de dato Type que hayamos creado, en este caso Dim personas(1 to 3) as
agenda
2 - Las matrices
Las matrices se declaran en el código de manera igual que los vectores, con la
diferencia que debemos indicar mas subíndices de acuerdo a la cantidad de
dimensiones que posea la matriz.
Si luego quisiera acceder a los datos de la misma basta con referirnos a los
subíndices
Por ejemplo:
para acceder a los datos sería exactamente de la misma manera pero debemos
utilizar un índice mas.
Ejemplo:
cubo (1, 1 , 1) = 50
cubo (1, 1 , 2) = 50
cubo (1, 1 , 3) = 50
cubo (1, 2 , 1) = 50
cubo (1, 2 , 2) = 50
cubo (1, 2 , 3) = 50
cubo (1, 3 , 1) = 50
cubo (1, 3 , 2) = 50
cubo (1, 3 , 3) = 50
cubo (2, 1 , 1) = 50
cubo (2, 1 , 2) = 50
cubo (2, 1 , 3) = 50
cubo (2, 2 , 1) = 50
cubo (2, 2 , 2) = 50
cubo (2, 2 , 3) = 50
cubo (2, 3 , 1) = 50
cubo (2, 3 , 2) = 50
cubo (2, 3 , 3) = 50
cubo (3, 1 , 1) = 50
cubo (3, 1 , 2) = 50
cubo (3, 1 , 3) = 50
cubo (3, 2 , 1) = 50
cubo (3, 2 , 2) = 50
cubo (3, 2 , 3) = 50
cubo (3, 3 , 1) = 50
cubo (3, 3 , 2) = 50
cubo (3, 3 , 3) = 50
En el ejemplo anterior, que es un poco extenso, es para que veas todos los
posibles valores que puedes almacenar en una matriz de 3 x 3 x 3, y que da como
resultado un arreglo de 27 valores posibles.
3 - Vectores dinámicos
Hasta ahora habíamos visto solo vectores o arreglos de tamaño fijo, ¿ pero qué
pasa cuando no sabemos el tamaño o el largo de un vector y queremos que sea
variable ?.
Visual basic posee una sentencia o función que nos permite cambiar el largo de un
vector en tiempo de ejecución, dándonos así mas flexibilidad, y de esta manera no
desperdiciar memoria y recursos de la pc creando vectores mas largos de lo que
realmente necesitamos.
alumnos(1) = "Luciano"
alumnos(2) = "Esteban"
alumnos(3) = "Mariano"
alumnos(4) = "Pedro"
alumnos(5) = "Karina"
alumnos(6) = "Raúl"
alumnos(7) = "Romina"
Para eliminar un array, arreglo o vector, podemos utilizar Erase, por ejemplo:
Erase Nombre_Del_Vector
Estas funciones son ideales para trabajar con vectores y matrices que han sido
declaradas dinámicamente
Lbound y Ubound nos devuelve un número de tipo Long que nos permite saber el
límite superior e inferior de un vector o una matriz.
4.1 - Ejemplo de Ubound y Bound
' Devuelve 1
LimiteInferior = LBound(UnVector)
' Devuelve 520
LimiteSuperior = UBound(UnVector)
' Devuelve 0
LimiteInferior = LBound(UnaMatriz, 1)
' Devuelve 20
LimiteSuperior = UBound(UnaMatriz, 1)
' Devuelve 5
LimiteInferior = LBound(UnaMatriz, 2)
' Devuelve 100
LimiteSuperior = UBound(UnaMatriz, 2)
' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 1)
' Devuelve 10
LimiteSuperior = UBound(OtraMatriz, 1)
' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 2)
' Devuelve 20
LimiteSuperior = UBound(OtraMatriz, 2)
' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 3)
' Devuelve 30
LimiteSuperior = UBound(OtraMatriz, 3)
End Sub
Como habrás visto en los ejemplos anteriores, para conocer los limites superiores
e inferiores en los vectores, solo se debe pasar como parámetro a las funciones
Lbound y Ubound, el nombre del vector con el cual queremos trabajar.
Visual basic en su sexta versión incorpora estas 3 funciones para trabajar solo
con vectores. Estas funciones están relacionadas con el tratamiento de las
cadenas de caracteres.
Función Join
Esta función se utiliza para unir en una sola variable el conjunto de subcadenas de
un vector. Esta función tiene solo 2 parámetros y es muy fácil de usar. Ejemplo:
vector(1) = "Carlos"
vector(2) = "Pedro"
vector(3) = "Juan"
Función Split:
Vector(0) = "maría"
Vector(1) = "natalia"
Vector(2) = "Romina"
End Sub
Filter (vector donde buscar, cadena a buscar, valor booleano que indica si
incluir o excluir la cadena)
Ejemplo:
' Vector
Dim Alumnos(1 To 4) As String
Alumnos(1) = "Luciano"
Alumnos(2) = "Lucas"
Alumnos(3) = "juan"
Alumnos(4) = "Natalia"
Hasta acá se vió los aspectos de los vectores y matrices como estructuras que
nos permiten almacenar datos y resolver problemas lógicos en nuestros
programas. Ahora veremos los Arreglos de controles o vectores de controles
En un arreglo de controles todos los controles deben ser del mismo tipo y además
no puede haber un control dentro del arreglo que tenga el mismo número de
índice, ya que sería imposible identificarlo en el conjunto, además VB no lo
permitiría y nos mostraría un error.
Ejemplo:
text1.enabled = False
y así para cada uno de los controles. en cambio haciendo un arreglo de controles,
recorremos mediante un For todos los controles refiriendonos al índice y
estableciéndole la propiedad Enabled en False para deshabilitarlos.
Dim i As Integer
For i = 0 To 9
text1(i).Enabled = False
Next
Para solucionar esto, y no tener que repetir código, podríamos crear en un módulo
de código, una SubRutina para que la puedan utilizar y acceder desde todos los
formularios.
Para poder pasar un vector como parámetro a una rutina, la variable o argumento
en la Subrutina, debe estar declarada como de tipo Object
Ejemplo
Option Explicit
Dim i As Integer
For i = 0 To El_TextBox.Count - 1
El_TextBox(i).Text = vbNullString
Next
End Sub
1 - introducción
2 - Sentencia Open
3 - Archivos secuenciales
4 - Diferentes tipos de acceso ( Append - Input Output )
5 - Leer datos de un archivo utilizando Line Input
6 - Ejemplo para leer un archivo de texto con Line Input
7 - Leer el contenido de un archivo de texto con la función Input
8 - Escribir datos en archivos de texto ( Print y Write )
9 - Archivos de acceso aleatorios o directos
10 - Grabar datos en archivos de acceso aleatorio ( Instrucción Put )
11 - Leer datos en archivos aleatorios ( instrucción Get )
12 - Posicionarse en un registro ( Seek )
13 - Funciones propias de vb para el manejo de ficheros y directorios
14 - Función Dir para buscar archivos y carpetas
15 - Función FileCopy para copiar
16 - Función MkDir para crear directorios
17 - Función kill para eliminar
18 - Función FileLen
19 - Función Name
20 - Función GetAttr y SetAttr para atributos
21 - Función RmDir para renombrar
1 -introducción
Esta sentencia es la encargada de abrir o crear un archivo, ya sea para leer datos
del mismo, sobre escribirlos y/o para agregarle datos.
Esta sentencia tiene una serie de parámetros que varían de acuerdo a lo que
queramos hacer.
Por ejemplo :
Este ejemplo abre un archivo para poder acceder a los datos que contenga en su
interior. cuando decimos abrir, estamos diciendo que se encuentra actualmente
abierto y alojado en la memoria ram para poder manipularlo.
Luego la palabra "As #1" indica el número de archivo que estamos utilizando. Este
número lo asignamos nosotros y va desde el rango 1 al 511. El "número de
archivo" se utiliza para poder diferenciar al archivo en el código. Cada archivo que
se encuentra abierto no se puede asignar un número de archivo igual, ya que nos
daría un error en tiempo de ejecución.
Una vez que terminamos de trabajar con un archivo que se encuentra abierto y
que no lo vamos a utilizar mas, debemos cerrarlo. para ello se utiliza la sentencia
Close seguido del número de archivo que lo identifica.
Por ejemplo:
Close #2
Esto cerrará al archivo abierto que anteriormente le asignamos el número de
archivo 2. También si tengo 3 archivos abiertos podría hacer lo siguiente:
Hay una función en Visual basic llamada FreeFile. Esta función lo que hace es
darnos un número de archivo que esté libre y que se pueda usar, para que de este
modo no intentamos abrir uno esté siendo utilizado, y evitar un error en tiempo de
ejecución. Para usar la función es muy fácil, por ejemplo:
NumeroArchivo = FreeFile
3 - Archivos secuenciales
Por lo general se suelen utilizar los archivos secuenciales, para trabajar con
archivos que contengan una estructura de datos no muy compleja. por que por
ejemplo, si utilizáramos un archivo para almacenar 50000 nombres con sus
respectivos datos (apellido, teléfono, dirección etc...) , este mecanismo resultaría
ineficiente, ya que si quisiera recuperar por ejemplo el registro n° 3650, para leer
este dato tendría que pasar previamente por los 3649 registros anteriores a este,
haciendo mas lento el acceso y por lo tanto desperdiciando recursos del sistema.
4 - Diferentes tipos de acceso
Ejemplo :
Input: la sentencia Input se utiliza para leer datos de un archivo de texto, ejemplo:
Este ejemplo abre un archivo para leer los datos del mismo. En las próximas
líneas veremos ejemplos de como leer los datos , escribir y guardar.
Una cosa importante con respecto a leer datos de un archivo con Input es que, si
el archivo que queremos abrir, no existe, se producirá un error en tiempo de
ejecución al intentar abrir un archivo que no existe, por eso debemos verificar la
ruta del mismo siempre que esté bien escrita en la sentencia Open y evitarnos
dolores de cabeza, y simpre añadir algún manejador de error para este caso
Output: esta sentencia se utiliaza para crear un archivo de texto y grabar datos.
Esta es igual que Append salvo por un gran detalle:
Ejemplo:
Wend
Close #1
En el ejemplo anterior aparece una función nueva llamada EOF. Esta función
significa End Of File o fin de archivo.
Cuando abrimos un archivo para leer información con Input, debemos saber en
que momento llegamos al final del archivo, por que de lo contrario la sentencia
Line Input o Input seguiría leyendo líneas donde no existen datos después del fin
del archivo, y por lo tanto se produciría un error en tiempo de ejecución por
querer leer un dato que no existe.
Mediante la condición Not Eof(1) leeremos los datos hasta que llegue al final del
archivo, y en cada pasada del bucle While se almacenará en la variable
mivariable, línea por línea los datos del mismo. Es evidente que como está
planteado el ejemplo habría que manipular los datos leídos y agregar otras
instrucciones, por que en este ejemplo la variable mivariable solo almacenaría los
datos de la línea que está leyendo y borrando los datos de las líneas que
almacenó anteriormente. Mas adelante veremos como solucionar esto.
conclusión : para leer datos de un archivo se utiliza la sentencia Line Input y luego
de la coma debemos poner una variable nuestra para almacenar los datos que se
van leyendo de la línea actual
Option Explicit
'Lee la linea
Line Input #n_File, Linea
List1.AddItem Linea
Loop
Exit Sub
errSub:
'error
MsgBox "Número de error: " & Err.Number & vbNewLine & _
"Descripción del error: " & Err.Description, vbCritical
End Sub
End Sub
Este otro ejemplo, lo que hace es leer un archivo de texto para contar las líneas
del mismo
Dim F As Integer
Dim Lineas As Long
Dim str_Linea As String
End Function
End Sub
La función input, a diferencia de Line Input que Lee por línea, Input lee todo el
contenido del archivo de una sola ves, es decir no necesitamos, como en el
ejemplo anterior, utilizar un bucle.
Un ejemplo:
El Textbox que mostrará los datos del fichero, colocarle el nombre txt_Contenido
Código en un botón:
Exit Sub
Err_Sub:
Ejemplo:
Close #1
En este ejemplo agregamos datos a un archivo existente llamado miArchivo.txt con la sentencia
Print.
Primero abrimos el archivo con Open. luego la sentencia Print lleva 2 parámetros.
el primero indica el archivo que estamos manipulando (el archivo n°1, dentro del
código), el segundo parámetro indica los datos que se agregarán en el mismo. En
el segundo parámetro podemos poner un dato directamente (una cadena, número,
etc...),, por último cerramos el archivo.
Ejemplo:
Close #1
Como podemos ver la sentencia Write escribe los datos en el archivo separados
por coma. En la primera línea escribirá el contenido de las variables nombre y
apellido . También se pueden pasar los datos directamente a Write sin usar
variables, por ejemplo:
Para que esta página no sea tan extensa, he armado 10 ejercicios que utilizan
todo lo visto hasta aquí, o sea el tema relacionado a los archivos secuenciales.
Dentro del código se encuentra detallado cada paso y lo puedes descargar al final
de esta página.
Por ejemplo si tuviesemos 25 registros, cada uno con datos (apellido, email,
telefono,etc..), y quisiera acceder al registro 17, puedo leer los datos del registro
17 sin tener que leer los 16 registros anteriores, ganando con ello mas velocidad y
teniendo una estructura de datos definida.
Para abrir un archivo aleatorio para trabajar con él, se utiliza la sentencia Open
con algunos cambios en lo que se refiere a los archivos secuenciales
Ejemplo:
Como podemos ver para abrir un archivo de acceso aleatorio se utiliza la palabra
Random (aleatorio). Luego debemos indicar el número de archivo para
identificarlo, y por último una opción nueva : Len.
cada registro en el archivo, que es una estructura de datos Type, tiene que tener
una longitud fija. Mediante la función Len de visual Basic debemos indicar el
tamaño de la estructura de datos que vamos a utilizar. para que quede mas claro
un ejemplo:
nombre As String * 20
apellido As String * 15
dirección As String * 30
edad As Integer
End Type
empleados.nombre = "Carlos"
empleados.apellido = "Martinez"
empleados.dirección = "Avenida 9 de julio n° 2054"
empleados.edad = 45
Ahora grabamos en el registro n°1 del archivo los datos de esta forma:
empleados.nombre = "María"
empleados.apellido = "Gonzales"
empleados.dirección = "Avenida 13 n° 1100"
empleados.edad = 35
Close #1
como vemos ver la sentencia Put lleva 3 parámetros. El primero indica el numero
de archivo abierto en el cual estamos trabajando. en el segundo debemos indicar
el número de registro en el que se grabarán los datos. Si no ponemos el número
de registro, los datos se grabarán en el último registro. Por último en el tercer
parámetro le pasamos la variable asociada con la estructura de datos.
Para leer los registros o datos de un archivo aleatorio se utiliza la sentencia Get.
Esta sentencia es exactamente igual que Put, pero la diferencia es que en vez de
grabar los datos los recupera para poder utilizarlos luego en el programa.
Supongamos que tenemos un archivo aleatorio que contiene 452 registros. Ahora
queremos recuperar los datos del registro 258. Para posicionarse en un
determinado registro hay una sentencia , hay una sentencia llamada Seek.
Ejemplo:
Nota: Desde este enlace puedes ver un simple código fuente de una Agenda de
contactos utilizando Archivos Directos - Aleatorios
Visual basic posee varias funciones para manejar archivos y directorios de nuestro
sistema. Las principales son.
14 - Función Dir
La función Dir se utiliza o para buscar archivos y devuelve una cadena que
representa el nombre de un archivo o directorio de acuerdo a un determinado
patrón de búsqueda. La sintaxis de la función es:
Dir (ruta, atributos)
Ejemplo:
Archivoabuscar = Dir("c:\autoexec.bat")
En este ejemplo devuelve el primer archivo exe que encuentra, si es que existe.
Archivoabuscar = Dir("c:\windows\*.exe")
archivo = Dir("c:\*.exe")
While archivo <> ""
archivo = Dir
Wend
En el ejemplo anterior buscará todos los archivos exe en el directorio c:\. cuando
ya no encuentre mas devolverá una cadena vacía y saldrá del bucle While.
If Len(Trim$(Dir$(path))) Then
Verificar_Existe = True
Else
Verificar_Existe = False
End If
MsgBox Verificar_Existe
End Function
Call Verificar_Existe("c:\autoexec.bat")
End Sub
El siguiente enlace muestra un ejemplo de como utilizar la función Dir para buscar
archivos y también ordenarlos enforma alfabética y luego agregar la lista en un
control Listbox
Este otro enlace muestra como buscar ficheros mediante el Api de windows
15 - Función FileCopy
FileCopy nos permite copiar archivos. Esta función es muy fácil de usar. ejemplo:
16 - Función MkDir
Esta función se utiliza para crear directorios, pero crea un directorio por vez, es
decir que no crea varios niveles al mismo tiempo. La sintaxis es:
para poder crear un Directorio que contiene varios subdirectorios, podemos hacer
lo siguiente:
Dim i As Integer
Dim Array_Dir As Variant
Dim Sub_Dir As String
Dim El_Path As String
El_Path = vbNullString
Sub_Dir = Array_Dir(i)
End Sub
17 - Función kill
La función kill se utiliza para eliminar archivos. También es muy fácil de utilizar, y
el único parámetro que lleva es la ruta del archivo que queremos eliminar. Si
queremos eliminar varios archivos de un directorio podemos utilizar el comodín"*",
y si queremos excluir ciertos archivos utilizamos el comodín "?".
kill "c:\*.txt"
18 - Función FileLen
Ejemplo:
Dim tamaño As Long
tamaño = FileLen("c:\windows\system32\control.exe")
FileLen es muy útil para trabajar con archivos aleatorios, ya que si queremos
conocer la cantidad de registros que tiene el archivo, debemos dividir el tamaño
del archivo por el tamaño de la estructura.
Ejemplo:
nombre As String * 20
apellido As String * 20
End Type
End Sub
19 - Función Name
Ejemplo:
Name "path del archivo viejo a renombrar" as "path y nombre nuevo del archivo"
También con esta sentencia podemos mover archivos y directorios a otra
ubicación. para ello debemos cambiar en el segundo parámetro la ruta del archivo.
0 - normal
1 - solo lectura
2 - oculto
4 - archivo de sistema
16 - directorio
32 - archivo modificado
Option Explicit
End Sub
21 - Función RmDir
Ejemplo:
Contenido
1 - Introducción
2 - El objeto App
3 - El objeto screen
4 - El objeto ClipBoard
5 - Menues en visual basic
6 - Los menues de cabecera y submenues
7 - Agregar elementos en un menú
8 - Menues contextuales o popup menú
9 - Ejemplo para crear un menú PopUp
10 - Enlaces relacionados
1 - Introducción
Estos objetos que tienen sus propiedades y métodos definidos como cualquier otro
objeto, son fundamentales para utilizarlos en tiempo de ejecución, y nos permiten
obtener información y realizar tareas específicas y variadas como por ejemplo:
2 - El objeto App
Propiedad Path
Esta propiedad nos devuelve una cadena con la ruta donde se encuentra el
ejecutable de nuestro programa. Esta propiedad es de suma importancia, ya que
nosotros siempre debemos "programar las rutas" de nuestra aplicación de forma
relativa, es decir en donde realmente se encuentre nuestra aplicación, ya que el
usuario puede instalar nuestro programa en un directorio cualquiera y de este
modo si nosotros hemos puesto, por ejemplo de un archivo externo en una ruta
absoluta (por ejemplo "c:\Archivos de programa", puede darse el caso de que la
aplicación no encuentre dicho archivo ya que se ha instalado en otro directorio,
ejecutarse en otra plataforma, etc..
Para resolver estos problemas sobre las referencias a las rutas de archivos,
podemos utilizar el objeto App.path, y lo que hace esta propiedad es devolvernos
el path de nuestra aplicación.
Ejemplo
Nota: lo que hay que tener en cuenta para que no se produzca un error en tiempo
de ejecución, es que el objeto App.path nos devuelve solo el nombre de directorio
de nuestra aplicación pero sin la barra invertida al final, es decir que si
deseamos por ejemplo hacer referencia a un archivo de nuestra aplicación para
trabajar con él, debemos agregarlo nosotros.
Otro ejemplo podría ser el siguiente, supongamos que tenemos un programa que
carga una imagen en un formulario. Si nosotros hacemos una referencia al archivo
de imagen mediante una ruta absoluta estaremos cometiendo un error, lo correcto
sería
Me.Picture = LoadPicture(Ruta)
De este modo si se intenta abrir el programa mas de una vez, podemos mostrar un
mensaje informativo y descargar la aplicación mediante la sentencia End, o no
mostrar nada y terminar la ejecución. Este ejemplo muestra un mensaje cuando se
intenta abrir mas de una ves, y luego de aceptar el mensaje se cierra con End
Private Sub Form_Initialize()
End If
End Sub
3 - Objeto Screen
MsgBox "La resolución en Pixeles del monitor es de: " & vbNewLine & _
"Ancho: " & Ancho & vbNewLine & _
"Alto: " & Alto, vbInformation
Para obtener el alto y el ancho en pixeles debemos hacer una simple conversión
ya que mediante las propiedades width y height obtenemos el ancho y el alto del
monitor pero expresado en twips, para obtener ese valor en pixeles hay que
dividirlo por la propiedad TwipsPerPixelX y TwipsPerPixelY, que son propiedades
que las podemos acceder desde el objeto Screen
Ejemplo para poder obtener una lista de las fuentes instaladas en el sistema
El objeto screen posee un objeto o colección llamado Fonts que es un vector que
contiene las fuentes del sistema y una propiedad llamada FontCount para saber la
cantidad de fuentes.
Next La_Fuente
Mediante 4 líneas de código tenemos un control ListBox que muestra el nombre de
todas las fuentes del sistema.
Nota: Para poder obntener las fuentes pero de una impersora, se realiza igual que
en el paso anterior , con la diferencia que en ves de usar el Objeto Screen, se usa
el Objeto Printer.
Por ejemplo
Option Explicit
Private Sub Combo1_Click()
Ver_fuentes Combo1.ListIndex
End Sub
End Sub
Dim i As Integer
List1.Clear
End Sub
Enlaces relacionados
4 - El objeto ClipBoard
Ejemplo:
cadena = Clipboard.GetText
MsgBox cadena
Con el método Clear del objeto ClipBoard podemos borrar el contenido del
portapapeles (no requiere ningún parámetro)
Clipboard.clear
Con la siguiente línea podemos copiar una imagen del portapapeles a un control
picture, si es que la hay, usando el método Getdata del objeto Clipboard
Picture1.Picture = Clipboard.GetData
Clipboard.SetData Picture1.Picture
Casi todas las aplicaciones por mas pequeñas que sean, poseen un acceso a
determinadas o casi todas las opciones de un programa por medio de un menú.
Visual Basic incorpora una herramienta llamada editor de menúes para poder
crearlos
Los menúes de cabecera son los menúes principales que contienen otros
submenues. Por ejemplo en el menú del internet explorer, el menú archivo es el
menú de cabecera o de primer nivel, y las opciones internas de este (abrir,
guardar, imprimir, cerrar, etc...) son los submenues que están en un nivel por
debajo del menú archivo.
Crear un menú
1. Archivo : Este menú contendrá los submenues " Abrir ", " Guardar ", "
Imprimir " y " Cerrar "
2. Edición: Contendrá los submenues " Cortar ", " Copiar ", " Pegar ", "
Seleccionar todo "
3. Ayuda : Tendrá los submenues " Ayuda " y " Acerca de.. "
El cuadro de diálogo del editor de menú de visual basic posee los siguientes
campos para rellenar. Algunos son opcionales y otros son obligatorios, como la
propiedad Caption y Name:
Pasos a seguir:
1. Una vez abierto el editor de menú, hay que ingreasar los elementos que
componen el mismo. Para crear el menú "Archivo" que es un menú de
cabecera o de nivel superior, debemos ingresar en la propiedad Caption la
cadena &Archivo.
Ahora le asignaremos un nombre en el campo Name.
G Generalmente se suele utilizar en este campo el mismo nombre del menú
pero con el prefijo mnu para luego poder distinguirlo fácilmente en el
código. Entonces ingresamos en este campo mnuarchivo
2. El segundo paso será ingresar los submenues que están por debajo del
menu archivo. Para ello presionamos el botón "siguiente" donde
ingresaremos el menú "Abrir". como este es un submenú debemos indicarlo
con el botón que tiene una flecha hacia la Derecha. Al presionarlo ahora el
mismo se marca con una doble comilla (""""), para indicarnos que este
menú deriva o está contenido en el menú de cabecera "Archivo". Ahora
pasamos a ingresarle el nombre y la leyenda del menú. En la propiedad
Caption ingresamos &Abrir y en el campo Name : mnuabrir.
3. Ahora repetimos los pasos anteriores para ingresar los submenues
restantes del menú Archivo.
4. Si habrás observado los clásicos menues de las aplicaciones, los
submenues se agrupan en secciones. Por ejemplo en el menú archivo del
internet explorer, el submenú Salir está separado del resto por una línea.
para lograr esto se debe crear un submenú como cualquier otro justo arriba
del menú que queremos que aparezca la línea divisoria, y en la propiedad
caption del mismo le colocamos el caracter menos -
5. Ahora ingresaremos el código para que muestre la leyenda en el control
Label cada vez que presionemos un menú.
6. Como habrás notado, el menú se va incorporando al formulario en tiempo
de diseño como cualquier otro control de visual basic. Para ingresar el
código necesario diremos que cada menú responde a un evento llamado
click y que se dispara cuando presionamos el menú con el mouse o cuando
le damos un enter, para ingresar el código en el menú "Abrir" le damos un
click en el mismo menú desde la ventana de diseño. Una vez abierta la
ventana de código aparecerá una rutina como la siguiente:
Private Sub mnuabrir_click()
End Sub
Ahora dentro del evento Click del menú colocamos lo siguiente para que la
etiqueta muestre la propiedad caption del menu abrir al pulsar sobre el menú
Label1.Caption = mnuarchivo.Caption
Nota: cabe aclarar que estas rutinas las podemos invocar o llamar como cualquier
otra rutina de código , por ejemplo en el caso anterior, por ejemplo si coloco esto
en un botón se llamaría al procedimiento Click del menú y se ejecutaría el código.
Call mnuabrir_click
Sabiendo esto , para desplegarlo por ejemplo cuando el usuario presiona el botón
sobre un área del formulario, podemos utilizar el evento MouseUp o MouseDown
del mismo y consultar la variable Button del procedimiento y mediante una
estructura IF - Then comprobar si el botón que presionamos es el derecho ,
utilizando las constantes VbRightButton, vbLeftButton
End Sub
Iniciar un nuevo proyecto Exe, añadir un formulario MDI y dejarlo por defecto con
el nombre Mdi Form1. También agregar un formulario y renombrarlo a
FrmDocumento
El menú Edición:
Menú Archivo:
1. Abrir: mnuAbrir
2. Nuevo: mnuNuevo
3. Guardar: mnuGuardar
4. Guardar Como: mnuGuardarComo
5. Salir: mnuSalir
Menú edición
1. Copiar: mnuCopiar
2. Cortar: mnuCortar
3. Pegar: mnuPegar
4. Seleccionar todo: mnuSeleccionar
Nota: si no sabés como crear los menúes con el editor de visual basic, puedes
chequear este enlace que explica resumidamente como crear uno:
Option Explicit
'Menú abrir
Private Sub mnuAbrir_Click()
CommonDialog1.ShowOpen
FrmDoc.Show
ActiveForm.Caption = CommonDialog1.FileName
ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
End If
Exit Sub
errSub:
End Sub
If Forms.Count = 1 Then
MsgBox "No hay documentos para guardar", vbInformation
Exit Sub
End If
CommonDialog1.ShowSave
Exit Sub
errSub:
End Sub
If Forms.Count = 1 Then
MsgBox "No hay documentos para guardar", vbInformation
Exit Sub
End If
If InStr(1, ActiveForm.Caption, sCaption) Then
CommonDialog1.ShowSave
If CommonDialog1.FileName = "" Then Exit Sub
ActiveForm.RichTextBox1.SaveFile CommonDialog1.FileName
Else
ActiveForm.RichTextBox1.SaveFile ActiveForm.Caption
End If
Exit Sub
errSub:
End Sub
'Menú pegar
Private Sub mnuPegar_Click()
On Local Error Resume Next
ActiveForm.RichTextBox1.SelText = Clipboard.GetText
End Sub
'Menú salir
Private Sub mnuSalir_Click()
Set FrmDoc = Nothing
End
End Sub
ActiveForm.RichTextBox1.SelStart = 0
ActiveForm.RichTextBox1.SelLength = Len(ActiveForm.RichTextBox1.Text)
End Sub
Option Explicit
If flagGuardar Then
ret = MsgBox(" Guardar cambios", vbYesNoCancel)
End If
Exit sub
errSub:
End Select
End Sub
En este enlace está el código fuente para descargar del proyecto anterior, que
incluye una barra de herramientas para las opciones ( abrir, guardar etc.. ) y un
cuadro de buscar y reemplazar para los documentos
Sección que explica los aspectos básicos del uso del los métodos gráficos
de Visual basic.
1 - Método Line :
Los primeros dos parámetros son las coordenadas para X e Y, luego el color de la
línea y por último el parámetro BF al igual que el color, es un parámetro de tipo
opcional, y aquí podemos pasar como valor: B o BF o ningún valor
Ejemplos:
Lo siguiente dibuja una línea de color Azul en el formulario:
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbBlue
Como se ve en el ejemplo anterior, los valores que tomará y utilizará LINE para las
coordenadas X e Y, serán los establecidos en el ScaleMode del Objeto donde
dibujar, en este caso se colocó en Pixeles ( vbPixels )
Este otro dibuja una línea horizontal y otra vertical a lo ancho y alto del Formulario,
al mover el puntero del mouse. A la primer línea se le aplica el color verde, a la la
línea horizontal el color Rojo, utilizando las constantes de color de vb. ( VbgGreen
y VbRed )
Option Explicit
End Sub
Option Explicit
Form1.BackColor = vbBlack
Form1.ScaleHeight = 100
Form1.ScaleWidth = 100
Timer1.Interval = 500
End Sub
Este código dibuja lineas, como si fuese un lapiz, es deicir al mantener presionado
el mouse en el formulario:
Option Explicit
Flag = True
End Sub
Me.ScaleMode = vbPixels
Me.ScaleMode = vbPixels
El siguiente ejemplo dibuja una línea vertical de color verde una al lado de la otra
en todo el ancho del formulario, en un bucle:
Next
End Sub
End Sub
End Sub
End Sub
End Sub
ScaleMode = vbPixels
End Sub
Este otro ejemplo, dibuja un cuadrado uno al lado del otro , a lo ancho del
formulario, el rectángulo es de 10 pixeles de ancho por 10 pixeles de alto, y cada
cuadrado está separado por 5 pixeles ente uno y otro.
Me.ScaleMode = vbPixels
Me.AutoRedraw = True
For Izquierda = 0 To Me.ScaleWidth Step 15
Me.Line (Izquierda, 10)-Step(10, 10), vbBlue, B
Next
End Sub
Este otro dibuja rectángulos de 25 x 25 pixeles uno al lado del otro, en todo el
formulario mediante dos bucles For. El primer bucle es para los rectángulos
horizontales y el otro para los verticales.
Me.Cls
Next
Next
End Sub
Me.ScaleMode = vbPixels
End Sub
Dibujar cuadrícula
Option Explicit
Sub Dibujar_cuadricula( _
Objeto As Object, _
CountX As Single, _
CountY As Single, _
Optional x_Color As Long = vbBlack, _
Optional y_Color As Long = vbBlack)
Dim i As Integer
Dim mx As Long
Dim my As Long
mx = CLng(Objeto.ScaleWidth / CountX)
my = CLng(Objeto.ScaleHeight / CountY)
Objeto.ForeColor = y_Color
End Sub
With Me
.BackColor = vbWhite
.ForeColor = vbBlue
.FontSize = 12
.AutoRedraw = True
End With
End Sub
Propiedad DrawWidth
Este ejemplo dibuja líneas una al lado de la otra, separadas por 20 pixeles,
mediante un bucle y va incrementando el DrawWidth en 1 en cada pasada. El
dibujo se realiza en un control PictureBox llamado Picture1
Picture1.Cls
Picture1.ScaleMode = vbPixels
Picture1.DrawWidth = Picture1.DrawWidth + 1
Next
Picture1.DrawWidth = 1
End Sub
Este otro ejemplo dibuja un borde y un degradado en un formulario utilizando el
método Line, como muestra la siguiente captura:
End With
End Sub
Sub Dibujar_Borde()
Me.DrawStyle = 0
Me.DrawWidth = 10
Line (0, 0)-(ScaleWidth - 1, ScaleHeight - 1), &HFFC0C0, B
End Sub
vForm.DrawStyle = vbInsideSolid
vForm.DrawWidth = 2
'vForm.ScaleHeight = 256
Me.CurrentX = 20
Me.CurrentY = 20
Me.Print " Ejemplo para dibujar un borde a un formulario "
End Sub
2 - Método Circle
El método Circle permite dibujar un círculo, una elipse o un arco sobre un objeto.
Color: Valor que indica el color que tendrá el círculo o elipse para su contorno. Se
puede pasar cualquier valor admitido en visual basic, por ejemplo un Long, un
valor Rgb etc..
Los parámetros Start y End son opcionales , y se utilizan para dibujar parte de una
elipse o círculo
Por último el parámetro Aspect, se utiliza para definir el aspecto del círculo. Este
valor es opcional. Ver ejemplos mas abajo.
Picture1.Cls
With Picture1
End With
End Sub
Picture1.ScaleMode = vbPixels
End Sub
Este ejemplo dibuja un círculo con un radio aleatorio entre 10 y 100 pixeles, al
hacer click en el formulario, es decir el centro del círculo ( x1 e y1 ), son los
valores x e y del evento MouseDown del Form:
ScaleMode = vbPixels
Me.DrawWidth = 2
End Sub
End Sub
ScaleMode = vbPixels
'Grosor de la línea
Me.DrawWidth = 2
Command1.Caption = "Limpiar"
End Sub
'Dibuja el círculo
Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _
RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd))
End Sub
Dibujar Elipses
Combo1.AddItem i
Next
Combo1 = Combo1.List(0)
End Sub
End Sub
End Sub
Picture1.Cls
End Sub
Nota: la forma y variaciones en las que se dibuja el punto u otras figuras mediante
los métodos gráficos, dependen de las propiedades DrawStyle y DrawMode del
objeto.
Este es otro ejemplo que utiliza Pset para dibujar un punto al presionar en el
formulario, tomando como valores el x e y del evento MouseDown del Form, luego
se dibuja una línea desde un punto hacia el otro punto mediante el método Line
Código fuente
Dim X1 As Single
Dim Y1 As Single
DrawWidth = 10
X1 = X
Y1 = Y
End Sub
End
End Sub
Tiempo = Timer + 5
While Tiempo >= Timer
' valores para la posición x e y
Posicion_X = Rnd * ScaleWidth
Posicion_Y = Rnd * ScaleHeight
' Dibuja el punto en la coordenada y con el color indicado con Pset
PSet (Posicion_X, Posicion_Y), Color
DoEvents
Wend
End Function
End Sub
4 - Función QBColor:
Es decir, esta función tiene como parámetro, un número entre el 0 y 15, es decir
16 valores posibles para retornar un color especifico.
Colocar una matriz de Label1. Label1 (0), Label1(1) .... hasta el Label1(15)
Dim i As Integer
For i = 0 To 15
' Asigna el color devuelto por la función QBColor _
al color de fondo del Label
Label1(i).BackColor = QBColor(i)
End Sub
Sección que explica los aspectos básicos del uso del los métodos PaintPicture,
LoadPicture y SavePicture de visual basic , que permiten leer , guardar , dibujar y
copiar gráficos e imágenes
Función LoadPicture
Función SavePicture
Método PaintPicture
1 - Función LoadPicture :
Esta función se utiliza para cargar una imagen o gráfico en un control Form,
PictureBox o Image.
Esta función requiere como parámetro obligatorio, el path del archivo de imagen a
cargar en el objeto.
Picture1.Picture = LoadPicture("c:\archivo.bmp")
Lo mismo sería para un control Image o Formulario, o cualquier objeto que soporte
la carga de un archivo de imagen de formato compatible a las que soporta Visual
basic ( BMP, JPG, GIF, WMF, algunos ICO etc..) , no así los archivos PNG o TIFF
por ejemplo, ya para estos últimos habría que utilizar el Api de windows o algún
componente externo, para poder leerlos.
Nota: En este enlace hay un Módulo de clase que permite visualizar gráficos e
imágenes de tipo PNG
Image1.Picture = LoadPicture("c:\archivo.bmp")
También hay otras propiedades de algunos controles, que requieren por lo general
el uso de esta función para cargar un archivo gráfico a dicha propiedad, como es
el caso de:
Me.MousePointer = vbCustom
Me.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Text1.MousePointer = vbCustom
Text1.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Picture1.Picture = La_Imagen
Lo anterior carga en el la variable " La_Imagen " el archivo gráfico, y luego se
puede pasar dicha variable a un objeto que tenga la propiedad Picture, en este
caso se paso un control Picture1.
Exit Sub
'Error
errSub:
If Err.Number = 53 Then
MsgBox "No se puede cargar el archivo, verifique la ruta", vbCritical
End If
2 - Método SavePicture:
Este posee dos parámetros, uno que especifica el Objeto Picture, y otro la ruta del
archivo a generar
Esto lo que es cargar en un control Image, un gráfico del disco, y luego mediante
otro botón, utilizando un control CommonDialog, guarda el archivo cargado en el
Image en la ruta especificada:
With CommonDialog1
.ShowOpen
Image1.Picture = LoadPicture(.FileName)
End With
Exit Sub
'Error
errSub:
If Err.Number = 53 Then
MsgBox "No se puede cargar dicho archivo, verifique la ruta", vbCritical
End If
End Sub
'Botón que guarda el contenido del control Image en un nuevo archivo
.ShowSave
End Sub
Nota, debe haber una imagen válida en el ClipBoard, si no dará error. Para probar,
se puede copiar al portapapeles la imagen de la pantalla presionando la tecla Print
Screen, y luego ejecutar el siguiente código para generar el archivo
'Guarda la imagen
SavePicture Clipboard.GetData(vbCFBitmap), "c:\Archivo.BMP"
Else
End If
El_objeto.PaintPicture La_Imagen, x1, y1, Ancho1, Alto1, x2, y2, Ancho2, Alto2,
Opecode
El_Objeto:
La_Imagen
Este parámetro es de tipo StdPicture, y es la imagen a dibujar. Los formatos
pueden ser un archivo Gif, Bmp, Jpg, Wmf, Dib, Ico . Esta imagen puede estar
cargada en un control, por ejemplo en un Picture, Form, Image, o también en una
variable de tipo StdPicture, IpictureDisp o de tipo Picture. Ver mas adelante un
ejemplo de esto último de como utilizar gráficos cargados en variables
X1 e y1:
Son las coordenadas de destino, es decir la posición Izquierda y Arriba ( Left - Top
), donde se presentará la imagen a dibujar en el objeto destino
Ancho1 y Alto1:
Estos parámetros especifican el ancho y alto que tendrá la imagen a dibujar. Estos
parámetros son opcionales, y si se omiten, la imagen se dibujará en el objeto con
las dimensiones que tenga.
x2 e y2 :
Ancho1 y Ancho2:
Ejemplos:
Ejemplo 2:
Este ejemplo es igual al anterior, pero se utilizarán cuatro controles TextBox para
indicar la posición x1, y1, ancho1 y ancho2.
Nota: el código no tiene una rutina de error para comprobar que algunos valores
sean correctos, es decir si por ejemplo colocamos un valor que no sea numérico,
dará error. también se producirá un error en tiempo de ejecución , si pasamos a
PaintPicture, en Ancho1 y Alto1, el valor 0
End Sub
Como se ve, en los parámetros que especifican el alto y ancho, se pasó las
dimensiones que tenga Pic_destino, ( ScaleWidth y ScaleHeight )
'Limpia el formulario
Me.Cls
End Sub
Luego en Pos_x y Pos_y se calcula el centro del formulario, restando al ancho del
form, el ancho de la imagen dividido por 2
Estos valores serán en pixeles, y esos mismos valores se utilizarán para la función
PaintPicture para dibujar dicha área
Option Explicit
Private Sub Dibujar_Imagen(x As Single, y As Single, _
ancho As Single, alto As Single)
End Sub
Pic_Destino.ScaleMode = vbPixels
Pic_Origen.ScaleMode = vbPixels
End Sub
End Sub
El ejemplo anterior, al colocar valores en los TextBox para los ejes x e y, el ancho
y alto, se dibuja mediante el método Line el recuadro ( área ) en el picture origen,
luego se le pasan esos mismos valores a la función PaintPicture que dibuja esa
porción de imagen en el otro PictureBox
Option Explicit
With Shape1
.Width = 500
.Height = 500
.BorderWidth = 2
.BorderColor = vbRed
End With
Ancho = Shape1.Width
Alto = Shape1.Height
End Sub
'Dibuja en Pic_Destino
Pic_Destino.PaintPicture Pic_Origen, 0, 0, _
Pic_Destino.ScaleWidth, Pic_Destino.ScaleHeight, _
(X - Ancho / 2), (Y - Alto / 2), Ancho, Alto
End Sub
Dibujar un fondo ( imagen JPG , BMP ) a un formulario o picturebox
Este es un simple código fuente que utiliza la función PaintPicture para dibujar un
gráfico JPG para el fondo del formulario y otra imagen para un picbox alineado en
la parte superior.
En este caso , se dibuja el fondo en los eventos Resize del formulario y del
picturebox superior que actúa como simple menú de opciones.
Descargar
Nota: En este enlace puedes ver un ejemplo simple que hice de como hacer un
Scroll en un gráfico mediante la función PaintPicture, para desplazar la imagen
cuando la misma es superior ( Alto y ancho ) al contenedor, es decir a al
PictureBox o Formulario
Scroll de imagen
http://www.academia.edu/6580018/CUADERNO_DE_EJERCICIOS_Y_PRACTICA
S_VISUAL_BASIC_CUADERNO_DE_EJERCICIOS_Y_PRACTICAS_VISTUAL_B
ASIC_Cuaderno_de_Ejercicios_PowerPoint_para_Ni%C3%B1os_por_Licencia_Cr
eative_Commons_Atribuci%C3%B3n_CUADERNO_DE_EJERCICIOS_Y_PRACTI
CAS_VISUAL_BASIC_Contenido
http://www.youtube.com/watch?v=nQdoqow9c74