Anda di halaman 1dari 200

Captulo1 - Introduccin al Tutorial de Visual Basic

6.0
Contenido
1 - Introduccin
2 - Breve historia y alcance del lenguaje
3 - La interface del Visual basic - El IDE
4 - Formularios, propiedades, mtodos y eventos
5 - Primer ejemplo
6 - Sobre los proyectos en Visual Basic
1 - Introduccin
Bienvenido a la introduccin de este tutorial bsico de visual basic
Esta gua esta destinado para aquellos que nunca han entrado en contacto con este
lenguaje de programacin. ( para que te des una idea se va a realizar en este captulo
algo parecido al Hola mundo), si sos nuevo puede venirte como anillo al dedo, si no, te
recomiendo que no pierdas ni un segundo leyendo de gusto y cierres la ventana, jeje.
Este tutorial est basado en la versin 6.0 de visual basic, aunque con otras
versiones no creo que tengas problemas.
Entrando en el tema, con este lenguaje de programacin pods realizar casi cualquier
tipo de programa para plataformas windows, esto quiere decir, que pods programar
utilitarios para windows, bases de datos, aplicaciones comerciales y de gestin, juegos,
etc.. .
Sin embargo lo que no pods desarrollar son por ejemplo: aplicaciones que administren
bases de datos gigantes, drivers para dispositivos , juegos que utilicen una interfaz
grfica compleja, ya que tendras que utilizar otro entorno de desarrollo o lenguaje ,
como por ejemplo el C, el C++, Delphi , .NET u otros, es decir lenguajes que sean mas
rpidos y que tengan soporte para este tipo de proyectos y programas.
2 - Breve historia y alcance del lenguaje
Las siglas Basic significan (beginner's all-purpose simbolic instruction Codic). El
lenguaje Basic fue creado en el ao 1964 y se modific varias veces hasta que en el
ao 1978 se estableci el Basic estndar. Este anteriormente se llamo "gwbasic",
luego "QuickBasic" y asi fue evolucionando y finalmente llegamos al "Visual Basic",
todas con sus diferentes versiones, la 1, 2 , etc.. hasta la 6.0
Las aplicaciones que se puden desarrollar con visual basic 5 y 6 son aplicaciones de
32 bits solo para plataformas Windows.
Mas informacin sobre la historia de visual basic en la Wikipedia
3 - La interface del Vb - El IDE
El IDE significa interface de entorno de desarrollo, y se refiere a la interface del
propio programa, es decir a las distintas partes que componen el propio Visual Basic
para poder desarrollar nuestros proyectos (es el entorno de trabajo)
En esta parte, se describir un pantallazo de las secciones principales de este entorno
Para inicializar el programa, luego de haberlo instalado obviamente, desde el men
inicio > programas > microsoft visual basic 6.0, te pods crear un Acceso directo en
tu escritorio para tenerlo mas a mano.
En la imagen superior pods ver la barra de controles. Esta barra contiene los controles
estndar de Visual Basic. Se los llama estndar porque que son los controles que por
defecto aade Visual Basic cuando creamos un programa desde 0. A los controles no
estndar, u otro tipo de controles, por ejemplo los creados por nosotros, los que
tengamos instalados en el sistema, y dems que se instalan con el VB, hay que
agregarlos a mano, es decir uno mismo, esto se hace desde el Men Componentes o
presionando las combinaciones de tecla Ctrl+T. Cuando se agrega un control no
estndar, se aade a la barra y ya lo pods utilizar..
Los controles estndar son los controles bsicos, por ejemplo los Command Button o
botones de comando, Control TextBox o caja de texto, Picture Box o caja de
imagen. El control FileListBox para ver archivos, y varios otros que se explican en
los siguientes captulos.
La imagen anterior, nos muestra los formularios (ventanas) , mdulos de cdigo, y
otros tipos de objeto que componen el proyecto que estamos realizando.
Desde esta ventana podemos hacer varias operaciones, por ejemplo al seleccionar un
formulario, en los botones "Ver Objeto" y "Ver cdigo" en la parte superior,
accedemos a la vista de diseo del formulario, mientras que si elegimos Ver cdigo,
se abre una ventana que muestra el cdigo de ese formulario seleccionado.
Tambin podemos desde esta ventana, Guardar el formulario, eliminarlo y varias
otras acciones.
Esta otra ventana acoplable que est debajo de la ventana de Proyecto, se llama
Ventana de propiedades de Visual Basic.
Desde la Ventana de Propiedades podemos modificar las caractersticas del objeto o
control seleccionado actualmente. Por ejemplo si agrego un formulario y lo selecciono,
puedo establecerle el color de fondo, el ancho, alto, el nombre que va a tener para
poder identificarlo y muchas otras propieades.
Lo importante que quede claro es que esta ventana cambia cada ves que seleccionamos
un objeto o control diferente, si seleccionamos un botn o Command Button,
visualizar las propiedades de ese botn, si seleccionamos un formulario las
propiedades de ese formulario, si seleccionamos un TextBox, mostrar ls propiedades
de ese textBox , etc..
Esta es la barra de menues y barra de herramientas de Visual Basic. Para no
hacerla pesada y describir todas las opciones ya que no tiene sentido describir todo,
desde aqu se puede configurar todo el entorno o IDE, elegir el tipo de proyecto que
vamos a crear, ( por ejemplo un programa Exe comn , una Dll ActiveX o un Proyecto
Ocx), Tambin Compilar el proyecto en un ejecutable, Acceder a la ayuda, (tens que
tener instalados los CD del Msdn), Abrir un proyecto, Guardar, El acceso a los distintos
modos y opciones de depuracin de errores, y muchas opciones mas.
4 - Formularios, propiedades, mtodos y eventos
En esta parte se realizar un ejemplo simple que consistir en una ventana o
formulario que contendr un botn, y al presionar este botn nos mostrar o abrir
otra ventana con un mensaje, como las que utiliza windows cuando nos informa sobre
algo . Este mensaje visualizar un texto con la descripcin"Mi primer programa". Pero
antes de realizar este ejercicio veamos un par conceptos bsicos necesarios
Formulario
Es la ventana o contenedor donde colocamos y agregamos controles de comando ,
como un botn, una caja de texto, un control de imagen, etc... Cuando hacemos un
programa podemos tener varios formularios. Por ejemplo podemos tener un
formulario1 con un botn y al presionar este botn hacer aparecer otro formulario en
este caso un formulario2.
Propiedades:
Cuando hablamos de propiedades nos estamos refiriendo a las caractersticas que
puede tener un control u objeto, por ejemplo: los botones llamados
commandbutton tienen una propiedad llamada caption. Esta propiedad establece el
texto que va a mostrar el botn en el propio botn.
Los formularios tambin poseen esta propiedad caption y muchos otros controles
tambin la poseen, pero no todos. Otro ejemplo de una propiedad puede ser el color
de fondo de un control, el ancho, el alto, el nombre que lleva para poder
identificarlos, etc.. .
En resumen las propiedades, haciendo una comparacin, seran como para las personas
tener 2 brazos, 2 piernas, el color del pelo, el color de los ojos, el nombre de la
persona, donde vive, su cdigo postal, etc...
Los Eventos
Los controles y objetos poseen Eventos, pero no son todos iguales para todos los
controles. Ejemplos de eventos serian:
Para un botn: el evento click (cuando lo presionamos), para un formulario: load
(este evento se ejecuta cuando se carga el formulario en la memoria), para un textbox
o caja de texto: keypress (este evento se dispara cuando presionamos una tecla y el
foco est puesto dentro de la caja de texto).
Los Mtodos
Los mtodos de un objeto son funciones propias que tiene cada objeto. Por
ejemplo los formularios poseen un mtodo llamado show , y lo que hace es cargarlo
y hacerlo visible. Para un control combobox este tiene un mtodo llamado additem,
y lo que hace es agregar elementos en dicho control. Pero los mtodos al igual que las
propiedades y eventos, no estn presentes en todos los controles de manera igual, es
decir algunos objetos y controles pueden compartirlos, pero otros no. Por ejemplo el
mtodo Show de los formularios, no lo posee ningn control estndar excepto los
formularios.
5 - Pasos para realizar el ejemplo
1 - Abr el Visual Basic y te aparecer una ventana para que puedas elegir el tipo de
Proyecto o programa que quers realizar. Como vers hay muchas opciones, nosotros
elegiremos la opcin Estndar EXE como muestra la imagen:
2 - Ya abierto el VB pods ver que tens un formulario llamado Form1, este es
agregado automticamente cuando comenzs un nuevo programa o proyecto, y es el
nombre por defecto que se le asigna, obviamente esto se puede cambiar utilizando la
propiedad Name queposeen los controles.
3 - Como se dijo nuestro programa va a consistir en un formulario con un botn que
al presionarlo muestre un texto diciendo "Mi Primer programa", entonces agreg un
botn a nuestro formulario. Para agregarlo lo pods hacer desde la barra de controles,
en la parte izquierda del IDE, y busc entre todos ellos un control llamado Command
Button (Botn de comando). Haciendo doble click sobre el control, o dibujandolo sobre
el formulario.
4 - Como te dars cuenta, el texto que muestra el botn por defecto es "Command1".
Nosotros lo vamos a cambiar por "Mostrar mensaje". Para ello tenemos que cambiarle
la propiedad Caption del botn. Entonces seleccion con un click el command1
(serciorate que est seleccionado, cuando al rededor del botn aparece unos puntos
azules) y en la ventana de propiedades de los controles que esta ubicada en la parte
derecha del IDE, te mostrar las propiedades del control que est seleccionado
actualmente. En este caso como est seleccionado el botn solo nos mostrar las
propiedades del Command1. Ahora busc en la lista de propiedades la propiedad
Caption y vers que dice Command1, borrala y escribe: "Mostrar mensaje". Como
pods ver el texto o leyenda del botn a cambiado.
NOTA: Nosotros todava no hemos ejecutado nuestro programa por que obviamente lo
estamos diseando. A esto se lo denomina trabajar en "Tiempo de diseo". La otra
forma de trabajo se denomina "Tiempo de ejecucin", que es cuando nuestro
programa est siendo ejecutado o cargado en memoria.
Tendras que tener algo por el estilo en tu formulario Form1
5 - Ahora vamos a agregar las instrucciones o lneas de cdigo para que cuando
pulss el botn se despliegue un mensaje. Hac Doble click sobre el botn y pods ver
que se habre una ventana donde escribir el cdigo. Esta se llama precisamente
ventana de Cdigo. Al abrirse la ventana muestra una serie de instrucciones
Private Sub Command1_Click()
End Sub
A esto se lo llama Subrutina o procedimiento de cdigo, y estas subrutinas tienen
un comienzo y un fin.
Despus se explica mas adelante que es eso de Private sub, End Sub, procedimientos,
funciones...etc
Por ahora lo que te tiene que quedar claro es que nosotros vamos a ingresar el cdigo
necesario para mostrar, por medio de una ventana, el mensaje "mi primer
programa".
Entre la declaracin Private sub Command1_click y End sub escribe lo siguiente
Msgbox "Mi primer programa"
El cdigo tendra que quedarte de la siguiente manera
Private Sub Command1_click()
MsgBox "Mi primer programa"
End Sub
6 - Ac lo que se hizo fue utilizar una funcin llamada MsgBox , que sirve para
mostrar mensajes. Ya podemos ejecutar o probar el ejemplo, para ello hay varias
opciones y formas:
Desde la barra de herramientas y presionas la flecha azul
Ir al men Ejecutar > opcin Iniciar
La mas sencilla de todas que es presionando la tecla F5.
Cuando ejecuts el programa y presions el Command1, se mostrar el mensaje.
En este momento nuestro programa est en ejecucin, para volver a la pantalla de
vista de diseo y detener el programa , tenemos que presionar el cono con un
cuadrado azul (stop) o ir al men ejecutar y elegir la opcin terminar.
6 - Sobre los proyectos en Visual Basic
Por ltimo para cerrar esta intruduccin muy bsica una aclaracin sobre los
Proyectos.
Cada vez que inicias un programa nuevo Standar Exe Visual Basic Hace lo siguiente:
Crea un formulario llamado "Form1" y tambin un proyecto de trabajo llamado por
defecto "Proyecto1".
Cuando lo guards, desde el men Archivo > Guardar proyecto, se crear un archivo
llamado "proyecto1.vbp", otro archivo con los formularios que tengas en el proyecto,
en nuestro caso "Form1.frm" y otro archivo en este caso "Proyecto1.vbw" que es un
archivo de configuracin.
Este ltimo archivo a nosotros no nos interesa, ya que lo usa Visual Basic para
configurar el proyecto cada vez que lo abrimos.
Para guardar proyectos, hay que ir al men archivo y elegir guardar proyecto,
tambin te pedir que guardes el formulario form1.frm . En ambos casos puedes
asignarle el nombre que quieras.
Captulo 2 - Los Formularios
Contenido
1.1 - Mas sobre formularios, mtodos y eventos
1.2 - Ejemplo sobre mtodos y eventos
1.3 - Otro ejemplo sobre mtodos y eventos en los formularios
2 - Los controles estndar de vb
1 - Formularios , propiedades mtodos y eventos
En esta seccin se ven las caractersticas principales de los Formularios.
Como vimos en la pgina anterior, los formularios son las ventanas que contienen a
otros controles y en ellos podemos incluir controles de comando, como botones, cajas
de texto, controles para bases de datos, y por supuesto el cdigo necesario de nuestros
programas.
Tambin se dijo, los controles e inclusive los Formularios tienen sus propias
caractersticas, como las propiedades (un ejemplo el color del fondo o propiedad
Backcolor), sus eventos (el evento load que se ejecuta cuando cargamos el
formulario en memoria), y sus mtodos (por ejemplo el mtodo show que es para
mostrar el formulario y el mtodo hide que es para ocultarlo, en el caso de un
formulario.
Ac hay que hacer una cosa muy importante. Cuando se comienza a programar, suele
ser muy casual confundir mtodos y eventos y no son lo mismo. Los mtodos son
funciones propias de cada objeto, por ejemplo el mtodo hide de un formulario no
lo posee un command button. Con los eventos suele ocurrir lo mismo. Un formulario
posee el evento load y un command button no lo posee (a no ser que pertenezca un
arreglo de controles pero ese es otro tema que se ver en otra ocacin).
Pero otros eventos si los comparten ambos. Siguiendo el ejemplo del formulario y el
botn, los dos tienen un evento llamado click, y todas las instrucciones de cdigo que
escribamos en la rutina de cdigo o procedimiento que estn bajo este evento, se
ejecutarn cuando hagamos un click con el mouse sobre el objeto. El evento Click lo
poseen la mayora de los controles, pero no tiene porque ser as.
Para seguir con el tema de los mtodos y eventos, vamos a hacer un ejemplo simple
de ejercicio. Este ejemplo, consistir en un formulario que contendr un botn y , al
presionarlo nos mostrar otro formulario.
1.1 - Ejemplo sobre mtodos y eventos
Pasos a seguir para el ejemplo:
1 - Comenz un nuevo proyecto Exe. Por defecto visual basic te agrega un formulario
llamado Form1. este formulario contendr el botn que al presionarlo muestre otro
formulario, en este caso un Form2.
2 - Desde la barra de controles agreg un Commandbutton al formulario. Por defecto
el texto que muestra es Command1 , nosotros lo cambiaremos por : "Mostrar
formulario 2".
Ahora selecciona el botn para que te muestre la lista de propiedades del mismo. Por si
ya te olvidaste, la ventana de propiedades est a la derecha y te muestra las
propiedades del objeto seleccionado actualmente en el entorno de trabajo del vb. Una
ves seleccionado el botn, busc la propiedad caption y escrib : mostrar
formulario 2
3 - Ahora hay que agregar el otro formulario es decir el Form2 a nuestro proyecto.
Como en la barra de controles no tienes la opcin de agregar otros formularios, tendrs
que agregarlo desde la barra de men >proyecto> Agregar formulario.
Te va a aparecer un cuadro de dilogo y eliges la opcin formulario. Como pods ver
se ha agregado otro formulario llamado form2, y la ventana del explorador de
proyectos ahora contiene 2 formularios.
4 - Ahora tenemos que introducir el cdigo en el command1 que insertamos en el
Form1, para que cuando ejecutemos el programa , al presionar el Command1 nos
muestre el form2 que agregamos anteriormente. Para esto tens que volver a ir al
Form1, haciendo un click en la ventana de explorador de proyectos (la imagen de
arriba) y seleccion el form1.
5 - Para ingresar el cdigo al botn, hac doble click en el mismo e ingres la
siguiente instruccin de cdigo: Form2.show.
La rutina de cdigo del botn command1 te quedara algo parecido a esto:
Nota: Como seguro te diste cuenta, cuando escribs Form2 y presionas el punto ".",
visual basic te muestra una lista con todas las propiedades y mtodos que tiene
form2, y as ocurre con todos los objetos que tienen propiedades y mtodos. En este
caso el mtodo show mostrar el Form2 en pantalla, es decir el mtodo Show lo que
hace es cargar en la memoria un formulario y automticamente lo hace visible.
6 - Corre el programa pulsando la tecla F5 para ver como funciona. Para terminarlo
pulsa el cono con la imagen de un cuadrado azul desde la barra de herramientas.
1.2 - Otro ejemplo sobre formularios
Ahora vamos a hacer un programa de ejemplo parecido al anterior, pero con algunas
variantes.
En la primera parte, el programa que hicimos consista en un formulario que tena un
botn (Command1), y al presionarlo mostraba otro formulario . Este lo llevamos a
cabo con el mtodo show que tienen los formularios y sirve para mostrarlos en
pantalla.
El objetivo de este programa es mostrar cuatro mtodos que poseen los
formularios, ellos son: Load, Unload, Hide y Show.
El mtodo Load tiene la funcin de cargar el formulario en la memoria y unload
descargarlo de la memoria. Esto no significa que si el mtodo load carga el
formulario, automticamente se muestre en la pantalla, quiere decir que solo
permanece cargado en memoria, luego para mostrarlo tendramos que utilizar el
mtodo show por ejemplo (hay otras opciones para hacer lo mismo pero no vienen al
caso detallarlas para este ejemplo).
El mtodo Hide oculta el formulario pero sigue permaneciendo en la memoria.
Para descargarlo completamente de la memoria ram, tendramos que usar el mtodo
Unload.
Imagen previa del ejemplo:
Pasos a seguir
1 - Crea un nuevo proyecto exe.
2 - Desde la barra de controles agrega 4 command button.
3 - Ahora selecciona el Command1 y en la propiedad caption borrale el "command1" y
escribe "Cargar formulario en memoria (Load)".
A hora lo mismo pero en el command2 desde la propiedad caption escrib "Mostrar
formulario 2 (Show)".
En el Command3 "Descargar formulario de la memoria (UnLoad)"
E n el Command4 , "Ocultar formulario (Hide)".
4 - Ya terminando, ubic los botones en el formulario de forma similar, como muestra
la imagen anterior.
Para mover los botones o cualquier otro objeto dentro de un formulario, solo tens que
seleccionar el objeto que quieras, mantener presionado el botn izquierdo del
mouse y soltarlo en el lugar que quieras. lo mismo pasa con el tamao de los
controles, cuando los seleccionas pods cambiarle el tamao.
5 - Ahora vamos a escribir el cdigo para los botones. Por si ya te olvidaste lo que
bamos a hacer, lo que harn estos botones son:
El Command1 Cargar en la memoria mediante Load el Formulario pero no lo hace
visible.
El Command2 hace las 2 cosas al mismo tiempo, es decir lo carga y lo hace visible.
El Command3 Descarga completamente el Formulario de memoria
El Command4, mediante Hide lo oculta, aunque est oculto sigue permaneciendo
cargado.
En el Command1 entonces , hac doble click en dicho botn y tipea: Load Form2 .
Para el Command2 que mostrar el Form2: Form2.show.
El botn Command3: Unload form2
El Command4: Form2.hide .
6 - El ltimo paso que nos queda para poder correr nuestro programa es ingresar un
nuevo formulario, entonces desde el men proyecto eliges la opcin agregar formulario
y agregas uno nuevo al proyecto.
Ahora puls F5 y prueba el programa.
Nota : seguro que te preguntars para que sirve el mtodo Load, si para que
aparezca en pantalla el Form2 tengo que usar la instruccinshow. Supongamos que
tenemos un programa con varios formularios y que estos tienen muchos controles y es
medio "pesado" (me refiero en bytes), entonces a veces conviene cargar dichos
formularios en la memoria, para que cuando necesitamos llamarlos o mostrarlos en
pantalla, estos se muestren de forma mas rpida. Esta es una de las posibilidades del
uso no es la nica.
El cdigo completo sera el siguiente:
'Carga el form2 pero no lo muestra
Private Sub command1_click()
Load Form2
End Sub
'Carga y muestra el Form2
Private Sub command2_click()
Form2.Show
End Sub
'Descarga completamente de la memoria el Form2
Private Sub command3_click()
Unload Form2
End Sub
'lo oculta pero no descarga el Form2 de la memoria
Private Sub command4_click()
Form2.Hide
End Sub
Nota Sobre los comentarios en el cdigo
Para colocar comentarios en nuestros programas, se antepone la comilla simple o la
palabra Rem (esta ltima prcticamente no se utiliza).
Es fundamental escribir comentarios sobre los bloques de cdigo que componen las
distintas partes del programa, para que cuando echemos una mirada al cdigo sepamos
de que se trata. Estos comentario o lneas descriptivas no se ejecutan y no influye en
nada a la ejecucin de los procedimientos, solo es informacin que ayuda a entender
cada lnea o seccin de un bloque de cdigo.
2 - Controles Estndar de Visual basic
Para ver una descripcin bsica de los controles estndar de visual basic, es decir
los que aparecen por defecto en el cuadro de controles en la parte izquierda del IDE,
pods acceder a esta seccin apartada del tutorial en el siguiente enlace, donde se
explica el funcionamiento bsico de los mismos con algunos ejemplos prcticos:
Tutorial de los controles de Visual Basic
Tambin en la misma pgina hay ejemplos de los controles no estndar, es decir
controles que debemos incorporarlos nosotros y que visual basic no los incorpora por
defecto al iniicar un proyecto
Captulo 3 - Variables y Tipos de datos
En esta seccin se describen las variables, constantes, tipos de datos, operadores y
estructuras de control
1 - Introduccin
2 - Las Variables
3 - Los diferentes tipos de datos
4 - Las constantes
5 - Las Estructuras de control
6 - Los Operadores
1 - Introduccin
Todos los lenguajes utilizan este sistema o metodologa para la programacin de
aplicaciones, pero varan la forma en que se utilizan, su sintaxis etc...
Cuando uno recin empieza a programar, parece muy complicado entender estos
temas, pero con la prctica todo se va aclarando.
Lo bueno de comprender los fundamentos de la programacin, es que nos permite
luego poder programar en casi cualquier lenguaje, por que la forma de programar en
general no vara demasiado, lo que cambia en cada uno de ellos es su sintaxis y
funciones y cosas propias del lenguaje. Aunque tampoco es tan as, ya que esto no
significa que por que uno sea experto por ejemplo programando en lenguaje C, lo sea
en Visual Basic y Viceversa.
2 - Las Variables
Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen
la propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a
cualquier tipo de datos, por ejemplo un nombre, una fecha, un color, un nmero etc... .
A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear
una variable llamada fecha y esta almacenar una fecha. A los nombres de las variables
se los denomina identificadores. Cuando creamos variables, tenemos que tratar de
asignarles un nombre que se relacione con el tipo de dato que queremos almacenar.
Por ejemplo no tendra mucho sentido crear una variable llamada m y all guardar o
almacenar un nombre o un apellido, por que cuando echemos vista al cdigo resultara
mas difcil deducir que tipo de dato estoy guardando. Por ejemplo en este ltimo caso
sera mucho mas lgico crear una variable llamada nombres y all guardar "Luciano",
"Pedro", "Natalia" etc..
En visual basic a las variables conviene declararlas, o sea, avisarle a vb que
vamos a utilizar dichas variables. A estas se las declara en el comienzo del cdigo y se
les antepone la palabra reservada Dim, luego el nombre que nosotros queramos y
seguido el tipo de dato que almacenar, por ejemplo si quiero almacenar en una
variable llamada Numero
Dim numero As Integer
La palabra Integer le avisa a vsiaual basic que voy a guardar un nmero entero.
Despus de declararla le podemos asignar un valor con el operador "=", ejemplo:
Dim numero As Integer
numero = 1500
Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo
integer, no podramos almacenar en ella una cadena de caracteres como por ejemplo
un nombre o cualquier otro tipo de datos que no sea un nmero entero. Si
sucedera esto nuestro programa dara un error en tiempo de ejecucin, mostrndonos
un feo cartel dicindoos que no coinciden los tipos de datos..
3 - Tipos de datos:
Los tipos de datos, indican el tipo de valor que puede almacenar una variable. Los
principales tipos de datos:
Nmeros enteros: dentro de los nmeros enteros tenemos varios tipos de datos
dependiendo el rango que queramos utilizar:
Byte: puede almacenar nmeros enteros dentro del rango desde 0 a 255
Integer: puede almacenar nmeros enteros dentro del rango -32.768 a 32.767
Long: puede almacenar nmeros enteros dentro del rango -2.147.483.648
hasta 2.147.483.648 .
Nmeros decimales: para almacenar nmeros decimales contamos con los siguientes
tipos de datos:
Single: almacena nmeros decimales en el rango +/- 1e-45 hasta 3e38
Double: desde +/- 5e-324 hasta 1.8e308
Cadenas de caracteres: las cadenas de caracteres se definen con la palabra String y
tienen un rango de hasta 2 billones de caracteres.
Tipos de valores lgicos: para almacenar tipos de valores lgicos como verdadero o
falso, se utiliza la palabra Boolean y sus 2 posibles valores son True (verdadero) y
False (falso).
Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date
Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de valor,
pero ocupan mas memoria.
Nota: hay mas tipos de datos, incluso nosotros podemos crear los nuestros.
4 - Constantes:
Las constentes, como las variables, se utilizan para guardar datos y valores para
nuestro programa, pero a diferencia de estas ltimas (las variables), el contenido que
almacenen no cambia, siempre es constante.
A diferencia de las variables que se declaran con la palabra Dim, las Constantes se
declaran con la palabra Const.
Ejemplo:
Const numero = 53
En la lnea anterior he creado una constante, que la llam numero y va a almacenar un
nmero , y este valor, cuando se ejecute mi programa se mantendr invariable.
Un ejemplo:
1 - En la siguiente lnea se declaran 2 tipos de variables de tipo Integer llamadas num1
y num2. Luego se les asigna un valor a cada una y luego las sumamos, y mediante la
funcin MsgBox que es una funcin de Visual Basic para mostrar mensajes, mostramos
el resultado de esa suma.
Coloca un botn (CommandButton) llamado Command1. Hac dobleClick sobre el botn
para que se abra la ventana de cdigo de Visual Basic. Dentro del procedimiento Click
pega este cdigo:
Dim num1 As Integer
Dim num2 As Integer
num1 = 10
num2 = 20
'se mostrar un mensaje con la suma de las variables con el resultado
30
MsgBox num1 + num2
Al ejecutar el programa, pods ver como se presenta una caja de mensaje con el
resultado al sumar las 2 variables num1 y num2
2 - Ahora vamos a declarar y crear 2 variables de tipo String, es decir vamos a
almacenar cadenas de caracteres en cada una de ellas. En el ejemplo se crean 2
variables, una llamada nombre y otra apellido. Despus le asignamos un valor, y por
ultimo mostramos las variables con un mensaje usando la funcin MsgBox como en el
ejemplo anterior. Pero antes hay que aclarar algo importante, las cadenas en visual
basic se encierran entre comillas dobles como pods ver en el ejemplo, de lo contrario
se va a producir un error.
Dim nombre As String
Dim apellido As String
'le establecemos valores
nombre = "Carlos"
apellido = "Peres"
'mostramos un mensaje con el valor de las variables
MsgBox nombre
MsgBox apellido
3 - Ahora un ejemplo que produce un error en tiempo de ejecucin. Creamos 2
variables exactamente igual que en el ejemplo anterior, pero en ves de declarar las
variables nombre y apellido como de tipo String lo hacemos como de tipo Integer.
Dim Nombre As Integer
Dim Apellido As Integer
'Le establecemos valores numericos
Nombre = "Carlos"
Apellido = "Peres"
Si probs el ejemplo, visual basic te mostrar un mensaje de error como el
siguiente: "no coinciden los tipos de datos":
...ya que las variables estn declaradas como de tipo Integer, y le ests asignando un
tipo de dato que no lo acepta.
4 - Un ejemplo que almacena un nmero en una variable de tipo Byte (nmeros de 0 a
255). Primero declaramos la variable y le damos un nombre, por ejemplo si queremos
almacenar el nmero 88 hacemos por ejemplo as.
Dim Edad As Byte
Para asignarle un valor a esa variable:
Edad = 88
Para mostrar el valor de la variable Edad en un control TextBox cuando presionamos un
botn Command1, sera de esta manera:
Private Sub Command1_Click()
'Declaramos la variable
Dim Edad As Byte
'Le asignamos un valor que no sea inferior a 0 ni mayor a 255
Edad = 88
'Lo mostramos en el control llamado Text1
Text1 = Edad
End Sub
Si probaras cambiando el valor 88 por ejemplo a 300, ocurrira lo mismo que en el
ejemplo anterior, es decir un Error 13 en tiempo de ejecucin "No coinciden los
tipos de datos"
5 - Estructuras de control:
Las estructuras de control se utilizan para controlar el flujo del programa en una
rutina o funcin. Mediante ellas podemos controlar, mediante una condicin, que se
ejecute una determinada lnea o bloque de lneas de cdigo .. o que no se ejecuten.
Estructura If - Then - Else
Esta estructura permite mediante una condicin, que se ejecute o no se ejecute
determinada tarea o lnea de cdigo.
Por ejemplo supongamos que tenemos en un formulario un control Label con la
propiedad Caption con el valor 50
If Label1.Caption = "50" Then
msgbox "mi label tiene un valor de 50"
else
msgbox "mi label NO tiene un valor de 50"
end if
Esto traducido al espaol significara lo siguiente:
Si (If) la propiedad caption del label1 que tengo en el formulario es igual (=) a "50"
entonces (Then) que muestre un determinado mensaje, si no (Else) que muestre el
otro mensaje.
En conclusin lo que hace esta estructura es evaluar una condicin, si se cumple, que
se ejecute determinada tarea. si no se cumple, se ejecutar las lneas de cdigo que
estn bajo la clusula Else. Luego tenemos que cerrar la estructura con la palabra end
if.
Tenemos que aclarar que no es obligatorio usar If y else juntos en la misma
clusula. Por ejemplo podramos utilizar solo una estructura If sin else. Por ejemplo:
Private Sub Command1_Click()
'Si la propiedad caption del Label1 es "Hola" entonces se termina el
programa
If Label1.Caption = "Hola" Then
End
End If
'Si no, se prosigue con esta lnea
MsgBox "No se ejecut el bloque If Anterior porque el Caption del
control Label1 no era Hola"
End Sub
Coloca un Label1 y un Command1. En la propiedad caption del Label1 escribe "Hola". Al
ejecutar el programa y presionar el Command1, se termina el programa con la
sentencia End de Visual Basic (End sirve para finalizar completamente la ejecucin
de nuestro programa). En cambio si ahora le cambia el caption al Label1 y volvs a
ejecutar el proyecto, pods ver que la instruccin End no se ejecuta, si no que la pasa
por alto y sigue con las restantes lneas, en este caso ejecuta la funcin MsgBox con el
mensaje.
Estructura While - Wend
Esta estructura de control repetir sin detenerse un determinado cdigo mientras se
cumpla una condicin.
Por ejemplo supongamos que tenemos una variable llamada x que tiene un valor de
100.
while x = 100
...se ejecutan todas las lneas de cdigo que estn aqu
wend
Esto traducido al espaol significara lo siguiente:
Mientras (While) la variable x sea igual a 100, y no cambie su valor, se formar un
bucle interminable, hasta que x cambie a cualquier otro valor disto de 100. Si x cambia
el valor, por ejemplo a 234 saldra del bucle While - wend y seguira ejecutando el
resto del cdigo, si es que hay mas cdigo o instrucciones a ejecutar.
Un ejemplo, agrega un Command1 al formulario y un control Text1. Cuando
ejecutemos el ejemplo, se deber escribir un nmero dentro del control textBox.
Entonces se crear un bucle While, que mostrar en el Caption del formulario, es decir
en la barra de ttulo, el intervalo desde 0 hasta el nmero que hayamos ingresado en el
Text1. Es decir si ingresamos el nmero 9000, en el caption del formulario se
imprimirn los nmero desde 0 hasta 9000.
Para hacer esto, dentro del bucle While pondremos una variable llamada Contador,
que en cada pasada se incrementar en 1, pero cuando la variable Contador sea igual
al nmero que haya en el Text1, se finalizar el bucle y se mostrar un mensaje que
finaliz el mismo
Private Sub Command1_Click()
Dim contador As Integer 'Declaramos la variable
While contador <> Text1
'Mostramos en el formulario el valor de la variable contador
Me.Caption = contador
'Incrementamos la variable en 1
contador = contador + 1
Wend
MsgBox "Termin el bucle"
End Sub
Estructura For - next
La estructura es utilizada para generar una repeticin de instrucciones o bucle, pero no
evala una condicin como en el caso del bucle While, si no que lo hace entre un
nmero inicial y un nmero final que le debemos indicar al mismo.
Por ejemplo, tenemos un formulario con un Label1 y declaramos una variable de tipo
integer llamada "contador" como en el caso anterior
Private Sub Command1_Click()
Dim contador As Integer
For contador = 0 To 1000
Label1.Caption = contador
Next contador
End Sub
Esto traducido significara lo siguiente:
Primero, tenemos una variable llamada "contador". Mediante el bucle For - next
podemos controlar la cantidad de veces que queremos repetir un determinado proceso
o instruccin. Esta posee un principio y un fin, en este caso el principio sera 0 y el fin
1000, de manera que la variable contador se incrementar en 1 hasta que llegue
a 1000, y repetir 1000 veces todas las instrucciones que estn bajo la clusula For-
next. En este caso nuestro control Label1 mostrara el contenido de la variable
contador
Para ver en forma detallada y paso a paso esto, pongamos un ejemplo que lo que hace
es repetir 10 veces (desde el 1 hasta el 10 en el intervalo del bucle For) y mostrar un
mensaje con el valor de la variable Contador. Una ves que llegue a 10, terminar.
Coloc un Command1. Doble Click en el botn para escribir dentro del procedimiento
que se ejecutar cuando lo presionemos. El cdigo:
Dim contador As Integer
For contador = 1 To 10
MsgBox "La variable Contador vale: " & contador
Next contador
MsgBox "Fin del bucle For"
Estructura Select case
La estructura Select Case se suele utilizar para evitar el uso de muchas clusulas If y
de esta manera no tener que anidarlas. La clasula Select evala una condicin y las
clusulas case contienen valores, si el valor que contiene la clusula case es igual a la
condicin que se evalu, ejecutar las instrucciones en dicha clusula.
Dim Nombre As String
Nombre = Text1
Select Case Nombre
Case "Jorge"
MsgBox "Se ejecut la clusula case: " & Nombre
Case "Pedro"
MsgBox "Se ejecut la clusula case: " & Nombre
Case "Carolina"
MsgBox "Se ejecut la clusula case: " & Nombre
End Select
Esta estructura es muy prctica. En el ejemplo anterior, la clusula Select case
contiene como condicin el valor de la variable llamada Nombre. Esa Variable toma el
valor que tenga un control Text1, entonces buscar en todas las clusulas case, y si
encuentra una igual a la condicin, ejecutar solo las instrucciones de la clusula case
que tenga el mismo valor, por ejemplo si ingresara el nombre "Martn" no se ejecutar
ninguna clusula Case. En cambio si ingreso "Jorge" se ejecutar solo las instrucciones
que estn en la seccin Case "Jorge" y asi...
En el caso anterior solo hemos colocado un valor para cada Case. Si quisieramos
colocar mas valores podramos hacerlo de esta forma:
Private Sub Form_Load()
Dim x As Integer
x = 10 'Le ponemos un valor a x
Select Case x
Case 5, 10
MsgBox "Se ejecut el case que tiene el 5 y el 10"
'Se ejecuta esta seccin
Case 15, 20
'Esto no se ejecuta
Case 25, 30
'Esto tampoco
End Select
End Sub
es decir que podemos listar los valores en los Case separados por comas. En el caso
anterior se ejecutar el case 5, 10 ya que la variable x vale 10
6 - Operadores de Visual basic
Los operadores nos permiten operar, validar, comparar, asignar, distinguir, etc.., los
datos e instrucciones de cdigo de nuestros programas. A continuacin los operadores
mas importantes.
Operadores aritmticos
Estos operadores nos permiten trabajar con clculos matemticos como la suma (+),
resta (-), divisin (/) y multiplicacin (*).
Ejemplos:
a = 5
b = 15
c = a + b ' en este caso la variable c contendra el valor 20
ganancia = 500
perdida = 200
total = ganancia - perdida 'la variable total pasara a valer 300
x = 100
y = 20
z = x / y ' La Variable z vale 5
x = 100
y = 20
z = x * y ' La Variable z vale 2000
Operadores lgicos
Se utilizan en expresiones para devolver resultados del tipo True o False, es decir
Verdadero o falso. Los mas comunes son el operador And y el operador Or
Ejemplos:
If (x = 10) And (nombre = "mara") Then
'solo se ejecutar el cdigo dentro de este bloque IF si la variable
'x vale 10 y la variable nombre es igual a mara
End If
If (m = 10) Or (nombre = "pedro") Then
'el cdigo se ejecutar si por lo menos una variable es correcta
'es decir si por lo menos se cumple una condicin
End If
Operadores de comparacin
Los operadores de comparacin se utilizan para comparar expresiones de cualquier tipo.
Los mas importantes son: El operador de igualdad (=), menor que (<), mayor que
(>), distinto a(<>)
Ejemplos:
If label1.Caption = "06/08/1978" Then
'si el control label1 en su caption contiene esa fecha
'se ejecutar el cdigo que este aqu
End If
if x > 6 then
'si la variable x es mayor que 6 se ejecutar el cdigo que este aqu
end if
If pas <> "Estados unidos" Then
'si la variable pas es distinta a "Estados unidos" se ejecutar el
cdigo
End If
While c <= 87
'mientras la variable c sea menor o igual a 87 se ejecutar
'el bucle While
Wend
Por ltimo quedara por ver el operador de concatenacin (&) que se utiliza para
unir cadenas de caracteres.
Por ejemplo:
nombre = "Jose"
apellido = "Peralta"
nombrecompleto = nombre & apellido
'La variable nombrecompleto pasara a contener la unin de las otras
dos variables
'es decir Jose Peralta
Captulo 4 - Subrutinas de cdigo, procedimientos y funciones en vb
En esta cuarta seccin del tutorial bsico se ven las subrutinas de
cdigo, procedimientos y funciones
1 - Subrutinas y procedimientos
1.2 - Pasar parmetros a los procedimientos
1.3 - Pasar parmetros por valor y por referencia ( ByVal y ByRef )
1.4 - Ejemplo de envo de parmetros por valor ( ByVal )
1.5 - Ejemplo de envo de parmetros por Referencia ( ByRef )
2 - Las Funciones en visual basic
3 - Ejercicios de ejemplo sobre procedimientos y funciones
1 - Subrutinas de cdigo
Se denomina subrutina a una porcin de cdigo que tiene como principal funcin
ejecutar una determinada tarea. Estas tienen un nombre para poder identificarlas y
luego poder llamarlas para poder utilizarlas.
Las subrutinas tienen un principio y un fin y estas pueden tener distinto tipo de
alcance, o sea pueden ser de tipo privadas o pblicas.
En el siguiente ejemplo se muestra una subrutina que crea visual basic
automticamente cuando en un formulario insertamos un botn llamado Command1 y
desde la ventana de eventos seleccionamos el evento click del mismo
Private Sub Command1_Click()
End Sub
Ahora, si colocamos por ejemplo un control TextBox llamado TextPedidos y hacemos
doble click sobre el mismo, se crea el procedimiento por defecto para los TextBox, que
es el evento Change
Private Sub TextPedidos_Change()
End Sub
En estos 2 ltimos ejemplos tenemos una subrutina o procedimiento de tipo Privado,
esto quiere decir que la podemos utilizar solo en el formulario o mdulo donde est
declarada o escrita
La palabra sub le sigue el nombre de la rutina que la identifica. En este caso
Command1_click() y en el otro ejemplo TxtPedidos_Change().
Si quisiramos que estos procedimientos se puedan llamar desde otro formulario, lo
que tendramos que hacer es cambiar el alcance del procedimiento, en ves de Private
Sub cambiarlo por Public Sub. si hacemos esto, ese procedimiento de cdigo puede ser
utilizado desde cualquier parte del proyecto.
Subrutinas y Procedimientos propios
Tambin podemos crear nuestros propios Procedimientos y Subrutinas de cdigo para
ejecutar una determinada tarea.
Para crear un procedimiento de cdigo se debe escribir la palabra Private sub o Public
sub (depende el alcance), seguida del nombre del procedimiento (un nombre que
queramos) y los parmetros, si es que le enviaremos parmetros (los parmetros son
opcionales). Adems el procedimiento debe ser escrito en un lugar vaco de la ventana
de cdigo, es decir nno se puede crear un procedimiento dentro de otro
Un ejemplo para crear un procedimiento:
Private Sub ProcedimientoBorrar()
label1 = ""
label2 = ""
label3 = ""
End Sub
En este ejemplo creamos un procedimiento muy simple que tendr la funcin especfica
de borrar el contenido de 3 controles label.
Pero ahora te preguntars como hago para que se ejecute el procedimiento que he
creado ?.
Muy fcil. Solo debemos escribir el nombre del procedimiento en el lugar donde
queremos que se ejecute. Por ejemplo supongamos que tenemos un formulario con 3
controles Label (Label1, Label2 y Label3), Tambin un Commandbutton llamado
Command1 y en la ventana de cdigo hemos escrito el procedimiento del ejemplo
anterior. Si nosotros queremos llamar al procedimiento, que borrar el contenido de los
label cuando hagamos click en el Command1 lo haramos as:
Private Sub command1_click()
ProcedimientoBorrar
End Sub
Al presionar el Command1 visual basic detectara el nombre ProcedimientoBorrar, y
automticamente saltara al lugar donde creamos el procedimiento y ejecutara las
lneas de cdigo que haya en ese procedimiento.
Tambin podemos llamar a un procedimiento utilizando la palabra Call, que quiere decir
llamar, seguida del nombre del procedimiento, pero en este caso si utilizamos call y
nuestro procedimiento contiene parmetros, debemos pasarlos entre parntesis ( los
parmetros de procedimientos y funciones se explican a continuacin)
una vez que se ha terminado de ejecutar las instrucciones que estn dentro del bloque
del procedimiento, volvera a la lnea siguiente de donde fue llamado el mismo, y
ejecutara todas las lneas restantes de cdigo. En este caso no ejecutara nada mas por
que no hemos puesto ninguna otra instruccin debajo de ProcedimientoBorrar.
La principal ventaja de crear procedimientos de cdigo es que evita tener que escribir
varias veces las mismas instrucciones en un programa, el cdigo se hace mucho mas
funcional y entendible, se pueden dividir un problema (una rutina), en varios
procedimientos y probarlos independientemente, y adems la posibilidad de enviar
parmetros a los procedimientos
1.1 - Pasar parmetros a los procedimientos:
Se utilizan los parmetros en los procedimientos para que el procedimiento no ejecute
siempre las mismas lneas de cdigo y pueda variar, teniendo la posibilidad de hacerlo
mas dinmicamente. En ciertas ocaciones no es necesario enviar parmetros, pero en
otras es prcticamente fundamental. Los parmetros son datos, casi de cualquier tipo,
que se pasan seguido del nombre del procedimiento, y si es mas de uno deben ir
separados por comas (,). Ejemplo:
DatosPersonales "Luciano", 25, "La plata"
En este ejemplo pasamos tres parmetros: El primero es un nombre y es un dato de
tipo String y por ende debe ir entre comillas. El segundo es un nmero y el tercero
tambin un string. , o sea una cadena de caracteres
Pero la cosa no queda ac. Si nosotros vamos a pasar parmetros a un procedimiento,
cuando creamos el procedimiento debemos establecer que tipo de parmetros va a
recibir el mismo. Ejemplo:
Private Sub DatosPersonales(nombre As String, edad As Integer, ciudad
As String)
Label1 = nombre
Label2 = edad
Label3 = ciudad
End Sub
siguiendo, el ejemplo anterior creamos un procedimiento con tres parmetros. Cada
parmetro se declara como se hace con las variables, o sea que debemos darles un
nombre a la variable y definir el tipo de dato ( sin utilizar la palabra Dim ) que recibir
cuando las llamemos.
Ahora podramos por ejemplo, en el evento click de un Command1, llamar al
procedimiento y pasarle los parmetros.
Coloca un Command1 , 3 controles Label, copia en la ventana de cdigo el
procedimiento anterior llamado DatosPersonales, y ahora pega el siguiente cdigo
Private sub command1_click()
DatosPersonales "Luciano", 25, "La plata"
End sub
Al presionar el botn se llamar al procedimiento que habamos creado anteriormente,
y le pasar los valores de los parmetros en el orden en que estn establecidos
declarados en el procedimiento. Esto quiere decir que el primer parmetro con el valor
"Luciano" se almacenar o asignar a la variable nombre , el valor 25 se le asignar a
la variable edad y el ltimo valor a la variable ciudad.
Despus que las variables ya cargaron el valor las podemos utilizar dentro del
procedimiento, como en el ejemplo anterior que le asignamos a un control Label1 el
contenido de la variable nombre, al Label2 el contenido de edad y al Label3 el contenido
de la variable ciudad.
Es muy importante respetar el orden en que pasamos los parmetros en un
procedimiento, por que por ejemplo en el caso anterior si hubisemos pasado los
parmetros de esta forma:
DatosPersonales 25, "Luciano", "La plata"
el segundo parmetro "Luciano" se almacenara en la variable Edad que es de tipo
Integer y se producira un error en tiempo de ejecucin por no coincidir los tipos
de datos, ya que la variable espera un valor numrico de tipo Integer y nosotros le
estamos pasando una cadena de caracteres, un dato de tipo String
Otra cosa importante es que cuando creamos, por ejemplo un procedimiento que va a
recibir 2 parmetros, cuando lo llamemos, no podemos enviarle solo 1 parmetro,
debemos obligatoriamente pasarle los 2 parmetros que hubisemos declarado
en el mismo. Un ejemplo que dara un error en tiempo de ejecucin por no pasar
adecuadamente los parmetros sera:
Private Sub sumar(a As Integer, b As Integer)
Label1 = a + b
End Sub
hasta aqu creamos un procedimiento llamado sumar que recibir 2 parmetros de tipo
Integer, si nosotros llamamos al procedimiento y le pasamos un solo valor, por
ejemplo:
Call sumar ( 456 )
Esto dara un error de compilacin por que el procedimiento espera recibir 2 parmetros
..y nosotros le estamos pasando o enviando solo uno de ellos.
Precisamente el cartel de error que te mostrara visual basic sera el siguiente:
Nota: hay una sentencia llamada Optional que SI permite pasar parmetros de forma
opcional, por ejemplo:
Private Sub Con_Parametro_Opcional(Nombre As String, _
Optional Email As String)
MsgBox Nombre
MsgBox Email
End Sub
Ahora si llamas a la rutina anterior, y omites el parmetro Email, esta no dar error,
por ejemplo:
Call Con_Parametro_Opcional("Maria")
Nota: Los parmetros opcionales, si o si deben estar declarados al final de la lista de
parmetros, por ejemplo esto no se puede hacer:
Private sub una_Rutina ( Optional Email As String, Nombre as String )
Funcin IsMissing
Esta funcin se utiliza cuando utilizamos parmetros opcionales en una funcin o
procedimiento, y nosotros, dentro del mismo queremos saber y averiguar si se han
enviado los parmetros opcionales
El uso de IsMissing muy simple. Esta funcin retorna el valor True si NO se ha enviado
el parmetro que queremos comprobar, y devuelve False si el parmetro ha sido
enviado:
por ejemplo , colocar dos CommandButton
Private Sub Mostrar_Dato(Optional Nombre As Variant)
' Si IsMissing devuelve Verdadero, es por que no se env
If IsMissing(Nombre) = True Then
MsgBox " NO Se ha enviado el parmetro NOMBRE ", vbInformation
Else
MsgBox " Se ha enviado el parmetro NOMBRE ", vbInformation
End If
End Sub
'Ac No se enva el parmetro
Private Sub Command1_Click()
Mostrar_Dato
End Sub
'Ac Si se enva el parmetro
Private Sub Command2_Click()
Mostrar_Dato "Mara"
End Sub
1.3 - Pasar parmetros por valor y por referencia ( ByVal y ByRef )
los parmetros en las funciones y procedimientos, se pueden enviar de dos maneras:
por Valor y por Referencia.
Si estn declarados como ByVal, los mismos sern por valor, si se declaran como ByRef
sern por referencia.
La diferencia entre uno y otro mtodo de paso de parmetros, es que en ByVal se enva
una copia de la variable, y de esta manera si se efecta un cambio en el procedimiento,
solo tendr efecto dentro del procedimiento o funcin, una ves que termine y finalice el
mismo, la variable original pasar a valer el dato que tena, es decir no se modifica
En los parmetros enviados por Referencia, lo que se hace es enviar un puntero de la
variable original. Entonces, si en la funcin o procedimiento se cambia el valor de la
variable, el cambio seguir mantenindose una ves que finalice la ejecucin del
procedimiento o funcin.
1.4 - Ejemplo de envo de parmetros por Valor ( ByVal )
Cdigo de ejemplo
Private Sub Command1_Click()
Dim Un_Valor As Long
Un_Valor = 100
'Se enva la variable por Valor ( ByVal )
Call Sumar(Un_Valor)
'Muestra el valor que es 100, ( no se modific en la funcin Sumar )
MsgBox Un_Valor
End Sub
Sub Sumar(ByVal Valor As Long)
'Modifica la variable
Valor = Valor + 100
End Sub
En el ejemplo anterior hay una Sub llamada Sumar que recibe como parmetro una
variable enviada por valor con ByVal ( es decir es una copia de la variable original ). al
presionar el Commmand1.
Al entrar en la Sub Sumar, el dato se modifica ( Valor = Valor + 100). Cuando finaliza
el procedimiento Sumar y retorna a la lnea siguiente de la llamada a la Sub sumar,
muestra mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200 que
es el cambio que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).
Con esto queda visto que en realidad al enviarla como ByVal, se enva una copia de la
variable original y cualquier cambio que se produzca, ser solo en el mbito del
procedimiento o funcin
1.5 - Ejemplo de envo de parmetros por Referencia ( ByRef )
Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se
declara con ByRef ( por Referencia )
Cdigo
Private Sub Command1_Click()
Dim Un_Valor As Long
Un_Valor = 100
'Se enva la variable por Referencia ( ByRef ) con el valor 100
Call Sumar(Un_Valor)
'Muestra el valor que ahora es 200, ( ya que se modific en la Sub
Sumar)
MsgBox Un_Valor
End Sub
Sub Sumar(ByRef Valor As Long)
'Modifica la variable
Valor = Valor + 100
End Sub
Al probar el cdigo, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO
de 100 como en el ejemplo de ByVal.
Esto demuestra que al enviar la variable como referencia, si la misma se modifica
dentro del procedimiento o funcin, se est modificando la variable REAL, es decir
cualquier cambio que se le haga a la misma, se mantendr, ya que se est modificando
la variable Real ( no es una copia )
Nota Importante: cuando no se indica a un parmetro de una funcin o Rutina ni
ByVal, ni ByRef, se asume que la misma se est enviando como referencia (ByRef).
Es decir lo siguiente recibe el parmetro como Referencia
Sub Sumar(Valor As Long)
.. que es lo mismo a esto:
Sub Sumar(ByRef Valor As Long)
2 - Las Funciones en visual basic
Las funciones son casi exactamente iguales que los procedimientos con respecto a la
forma en que se los llama y se los crea o declara en el cdigo, en como se le pasa los
parmetros etc..
La diferencia fundamental con respecto a los procedimientos o subrutinas es que estos,
luego de ejecutar el cdigo que tengan en su interior, al final retornan un valor, y
este valor luego lo podemos utilizar para una determinada tarea. En cambio los
procedimientos, solo ejecutan el cdigo que contienen y luego mueren por decirlo de
alguna manera.
Para declarar o crear una funcin podramos escribir lo siguiente:
Private Function Total(Valor1 As Integer, Valor2 As Integer) As Long
Total = Valor1 + Valor2
End Function
Seguramente notaste que declaramos la funcin llamada Total, y al final de los
parmetros dice As Long , esto es por que como dijimos las funciones retornan o
devuelven un valor, o sea que en este caso la funcin es de tipo Long, o mejor dicho
devolver un valor de tipo Long., y luego ese valor devuelto lo podemos utilizar en otra
parte del programa.
Las Funciones pueden retornar casi cualquier tipo de datos, como nmeros, cadenas,
fechas, arreglos y vectores
Para llamar a la funcin anterior podramos hacerlo de la siguiente manera:
Label1.caption = Total 502, 1478
En este caso el control Label1 llamara a la funcin Total , la funcin realizara la suma
de los valores pasados como parmetros y por ltimo el valor final de la suma se lo
asignara al control label1.
Nota : En el siguiente link , hay un ejemplo de una funcin que retorna un array de tipo
string
469 - Retornar a un array los archivos en un cuadro de dilogo Multiseleccin
Seleccionar mltiples archivos en cuadro de dilogo y pasarlo a
un array
Funcin en visual basic que separa la propiedad filename de un cuadro de dilogo, para
devolverla en un array de tipo string con el listado
Nota. el valor 0 de la matriz retorna el directorio, desde el ndice 1 del vector hasta el
final para los archivos seleccionados
Controles
un Command Button
y un control CommonDialog
Cdigo fuente en un formulario
Texto planoCopiar cdigo fuenteImprimir
1. Option Explicit
2.
3.
4. ' agegar al proyecto un botn y un cuadro de dilogo
5. ''''''''''''''''''''''''''''''''''''''''''''''''''''
6.
7. Private Sub Command1_Click()
8. Dim array_Files() As String
9.
10. ' configura el CommonDialog
11. '''''''''''''''''''''''''''''''''''''''''''''''''''''''
12. With CommonDialog1
13. .Filename = vbNullString
14. .DialogTitle = "Seleccionar mltiples archivos"
15. .Filter = "Todos los tipos *.*|*.*"
16.
17. ' establece el los atributos de flags para seleccin mltiple
18. .Flags = cdlOFNExplorer Or _
19. cdlOFNNoDereferenceLinks Or _
20. cdlOFNAllowMultiselect Or _
21. cdlOFNFileMustExist
22.
23. 'Devuelve o establece el tamao mximo del nombre de _
24. archivo abierto usando el control CommonDialog.
25. .MaxFileSize = 32767
26.
27. ' abre
28. .ShowOpen
29.
30. If .Filename <> vbNullString Then
31. ' retorna ( el primer elemento es el directorio, _
32. a partir de 1 los archivos )
33. array_Files = split_files(.Filename)
34. End If
35. End With
36. End Sub
37.
38. 'funcin que retorna un array de tipo string con la lista
39. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
40. Public Function split_files(Filename As String) As String()
41.
42. Dim array_temp() As String
43. Dim i As Long
44. Dim p As Long
45.
46. ' separar el string con la funcin Split, y devilverla en el vector
47. array_temp = Split(Filename, Chr(0))
48.
49. ' si es solo uno
50. If UBound(array_temp) = 0 Then
51. ' redimensiona el array a dos elementos : _
52. el 0 es para el directorio, el uno el fichero
53. ReDim Preserve array_temp(0 To 1)
54. ' cambia de posicin
55. array_temp(1) = array_temp(0)
56. ' posicin del ltimo backslash
57. p = InStrRev(array_temp(0), "\")
58. ' Extrae el Dir
59. array_temp(0) = Left$(array_temp(0), p)
60. Else ' ..si es mas de un archivo
61.
62.
63. ' directorio
64. '''''''''''''''''
65. If Right(array_temp(0), 1) <> "\" Then
66. array_temp(0) = array_temp(0) & "\"
67. End If
68.
69. ' ficheros
70. '''''''''''''''''
71. ' recorre el array temporal y aade los archivos
72. For i = 1 To UBound(array_temp)
73. array_temp(i) = array_temp(0) & array_temp(i)
74. Next
75. End If
76.
77. ' retorna el temporal a la funcin con la lista
78. split_files = array_temp
79.
80. End Function
81.
82. Private Sub Form_Load()
83. Command1.Caption = "Abrir"
84. End Sub
3 - Ejercicios de ejemplo sobre procedimientos y funciones
Estos ejercicios y ejemplos tratan los temas vistos en esta seccin, pods descargarlos
en los enlaces de abajo. Los archivos en formato zip, contienen el cdigo fuente y la
descripcin de los mismos en el mismo cdigo fuente.
Estos ejercicios y ejemplos tratan los temas vistos en esta seccin, pods descargarlos
en los enlaces de abajo. Los archivos en formato zip, contienen el cdigo fuente y la
descripcin de los mismos en el mismo cdigo fuente.
1. Ejemplo que llama a una subrutina, desde otra subrutina
2. Ejemplo en el que creamos un procedimiento sencillo para sumar valores
3. Ejemplo que utiliza un procedimiento dentro de otro procedimiento
4. Este ejercicio ejecuta un procedimiento dependiendo de una condicin,
utilizando una estructura de control if - then
5. Este ejercicio utiliza un procedimiento que recibe parmetros numricos y los
multiplica
6. Ejemplo de como utilizar un procedimiento que recibe un parmetro de tipo
boolean
7. Ejemplo que muestra como pasar parmetros de tipo string y algunas cosas mas
8. Ejemplo que muestra una sencilla funcin que suma 2 variables y luego retorna
el valor, mostrndolo en un control label
9. Ejemplo de una funcin de tipo integer que recibe 2 parmetros
10. Ejemplo de una funcin de tipo boolean que es ejecutada de acuerdo a una
condicin If.
Captulo 5 - Funciones propias de Visual Basic
En esta quinta parte del tutorial de Visual Basic se describen las funciones propias del
lenguaje que permiten trabajar con cadenas de caracteres, con nmeros, fechas, horas,
presentar mensajes en pantalla y muchas otras funciones para formatar datos
especficos
Contenido
1 - Funciones para el tratamiento de cadenas
1.1 - Funcin Lcase y Ucase
1.2 - Funcin Trim, LTrim y RTrim
1.3 - Funcin Len
1.4 - Funcin Asc y Chr
1.5 - Funcin InsTr
1.6 - Funcin Left, Right y Mid
1.7 - Funcin Str y Val
2 - Funciones para el tratamiento de nmeros
2.1 - Funcin Round
2.2 - Rnd y Randomize - Nmeros aleatorios
2.3 - Otras funciones
3 - Funciones de formato
4 - Funciones de formato para fechas y hora
4.1 - Funciones para calcular fechas
4.2 - Funciones para obtener la fecha y hora de la PC
6 - Funciones para presentar mensajes - InputBox y MSgbox
7 - Ejemplos
1 - Funciones para el tratamiento de cadenas
Las funciones de cadena , como su nombre lo indica, se utilizan para trabajar y tratar
las cadenas de caracteres.
A continuacin las mas importantes de ellas.
1.1 - Funcin Lcase y Ucase
Estas dos funciones se utilizan para convertir cadenas de texto a minscula y
mayscula.
La funcin Lcase cambia o convierte una cadena de texto a minscula y un ejemplo de
como utilizarla sera as:
Lcase (cadena que queremos convertir a minsculas)
Ejemplo:
Dim cadena As String
cadena = "HOLA MUNDO"
'Convertimos
cadena = LCase(cadena)
'La variable cadena ahora vale "hola mundo"
La funcin Ucase funciona de la misma manera que Lcase pero convierte el contenido
de una cadena a maysculas.
Por ejemplo, si tenemos un control Label1 que contiene un texto que dice: "Porcentaje
de sueldos", escribiendo la siguiente lnea:
Label1 = UCase(Label1)
El control Label1 pasara a mostrar o mejor dicho contener en su propiedad
caption:"PORCENTAJE DE SUELDOS".
1.2 - Funcin Trim, LTrim y RTrim
Estas tres funciones se utilizan para eliminar los espacios vacos de una cadena.
LTrim elimina los espacios vacos de la parte izquierda de la cadena, RTrim de la parte
derecha y Trim de ambas partes.
Ejemplos:
Tenemos una variable llamada ciudad con el valor " Barcelona". Para eliminar los
espacios vacos de la izquierda haramos lo siguiente:
ciudad = LTrim(ciudad)
Si en un TextBox quisieramos borrar todos los espacios vacos de la parte derecha de la
cadena:
MiText = RTrim(MiText)
La Funcin Trim elimina todos los espacios vacos de ambos lados de la cadena.
Ejemplo:
Pais = " Argentina "
Pas = Trim(Pais)
Ahora el valor de Pas es igual a: "Argentina".
1.3 - Funcin Len
La funcin Len nos permite conocer la cantidad de caracteres que tiene una
determinada cadena. O sea que esta funcin nos devuelve un nmero.
Ejemplo:
Len (Aqu va la cadena que queremos averiguar su tamao)
Como la funcin Len devuelve un nmero debemos asignar ese nmero devuelto en
una variable de tipo numrica.
Ejemplo:
Dim TamanoCadena As Long
Dim MiCadena As String
MiCadena = "Me Llamo Eustaquio"
TamanoCadena = Len(MiCadena)
El valor de la variable TamanoCadena pasara a valer 18.
Hay que tener en cuenta que la funcin Len tambin toma en cuenta los espacios
vacos.
1.4 - Funcin Asc y Chr
La funcin Asc nos permite obtener el cdigo ASCII de un de terminado caracter.
Ejempos:
Si queremos obtener el cdigo ASCII del caracter "a", que es el nmero 97 podramos
hacer lo siguiente:
Dim num As Integer
num = Asc("a")
En definitiva la funcin Asc lleva un solo parmetro de tipo String del cual queremos
obtener dicho nmero.
La Funcin Chr acta a la inversa de la funcin Asc, esto quiere decir, que a partir de
un determinado nmero nos devolver el caracter ASCII.
Obviamente que en vez de pasarle a la funcin un parmetro String es decir la letra,
debemos pasarle un nmero ASCII y nos devolver el carcter asociado.
Ejemplo:
Dim letra As String
letra = Chr(97)
La variable pasa a valer en este caso el caracter "a"
1.5 - Funcin InsTr
La funcin InStr se utiliza para buscar una cadena o parte de una cadena dentro de
otra cadena.
Si la funcin encuentra la cadena a buscar devuelve un nmero que representa la
posicin donde encontr la cadena, si no la encuentra devuelve un 0.
Los parmetros que lleva esta funcin son:
InStr (comienzo, Cadena donde buscar , La Cadena a buscar)
Como esta funcin devuelve un nmero debemos almacenarla en una variable de tipo
numrica para utilizarla.
Ejemplo:
Dim posicion As Integer
posicion = InStr("Estoy tomando mate", "mate")
En este ejemplo la funcin encontr la cadena "mate" en la posicin 15, o sea que la
variable posicin pasa a valer 15.
Si observamos bien, la funcin en el primer parmetro, denominado comienzo, nos pide
que le digamos desde que posicin comenzar a buscar. En nuestro ejemplo, este
parmetro lo obviamos, esto quiere decir que comenzar desde la posicin 0 de la
cadena a buscar. Pero podramos especificar una posicin en particular, por ejemplo
desde la 5 , 10 etc..., segn lo que necesitemos hacer.
Otro ejemplo de InsTr :
Este ejemplo, muestra como buscar dentro de un control TextBox, el cual tiene dos
opciones, un botn para buscar la primera frase, y otro que sigue buscando a partir de
donde est ubicda la seleccin.
Para armar el ejemplo colocar un Textbox llamado Text_Buscar que es donde se
ingresar la frase y otro TextBox llamado Text1 que tendr el texto. Este ultimo con la
propiedad Multiline en True.
Tambin colocar dos CommandButton: Command1 y Command2
Colocar el siguiente cdigo fuente en el formulario:
Option Explicit
Private m_Pos As Integer
Sub buscar_cadena(ByVal Posicion As Integer)
Dim p As Integer, Frase As String
Frase = txt_Buscar
p = InStr(Posicion, Text1, Frase)
If p > 0 Then
m_Pos = p
With Text1
.SelStart = m_Pos - 1
.SelLength = Len(Frase)
.SetFocus
End With
Else
MsgBox "No se encontr la frase", vbInformation
Text1.SetFocus
End If
End Sub
Private Sub Command1_Click()
'Busca a pratir de la primera pocicin
Call buscar_cadena(1)
End Sub
Private Sub Command2_Click()
'Busca a partir del valor que tenga m_Pos
Call buscar_cadena(m_Pos + 1)
End Sub
Private Sub Form_Load()
Command1.Caption = "Buscar"
Command2.Caption = "Buscar siguiente"
Me.Caption = "Ejemplo de InStr "
End Sub
Nota: tambin hay una funcin similar a Instr llamada InstrRev , y lo que hace es
devolver la posicin de la primera concurrencia de una cadena dentro de otra cadena,
pero comenzando por el extremo derecho de la misma
En este enlace hay un ejemplo que usa la funcin instrRev
Extraer de un path o ruta, solo la extensin del archivo
Funcin Left, Right y Mid
Estas funciones son utilizadas para extraer partes de una cadena.
La funcin Left:
tiene 2 parmetros: El primero es la cadena de la cual se extraern caracteres, y el
segundo un nmero desde el cual comenzar a extraer caracteres desde la parte
izquierda.
Ejemplo:
Dim Cadena As String
Cadena = Left("Ya es la madrugada", 9)
'Cadena, que es un string, sera igual a: "Ya es la"
Funcin Right:
Es igual que la funcin Left pero comienza a extraer caracteres desde el lado derecho
de la cadena.
La funcin Mid:
Tiene la misma funcin que las anteriores pero posee tres parmetros. Su sintaxis es:
Mid (cadena, inicio, longitud)
El parmetro cadena es la cadena a extraer caracteres. El parmetro Inicio es donde
comenzar y el parmetro longitud, es la cantidad de caracteres a extraer de la cadena
de caracteres
Ejemplos:
Dim nombre As String
nombre = Mid("River perdi la copa", 7, 6)
'La variable nombre sera igual a: "perdi"
Este Otro ejemplo usa la funcin Mid para realizar un simple efecto tipo mquina de
escribir.
Colocar en un formulario un CommandButton y el siguiente cdigo fuente en el form.
Option Explicit
Sub Pausa(Segundos As Double)
Dim inicio As Double
' Devuelve la cantidad de segundos desde que inicio windows
inicio = Timer
Do While (Timer - inicio) < Segundos
' pausa
DoEvents
Loop
End Sub
Private Sub Command1_Click()
Dim texto As String
texto = "... Hola mundo --->>> "
Call MostrarTexto(texto, 0.1, Me)
End Sub
Private Sub MostrarTexto(Frase As String, _
Segundos As Double, _
Destino As Object)
Dim LenFrase As Integer
Dim i As Integer
Dim Caracter As String
Dim texto As String
LenFrase = Len(Frase)
Do While i <= LenFrase
Destino.Cls
DoEvents
i = i + 1
' Obtiene el siguiente caracter
Caracter = Mid(Frase, i, 1)
' texto actual
texto = texto & Caracter
Destino.Print texto ' Imprimi e/ dibuja el texto
' pausa o delay
Pausa Segundos
DoEvents
Loop
End Sub
Private Sub Form_Load()
Me.FontSize = 12
Me.Font.Bold = True
Me.ForeColor = vbRed
Command1.Caption = " Efecto de texto con mid "
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
1.6 - Funcin Str y Val
La funcin Val convierte una cadena en un nmero yla funcin Str un nmero en una
cadena.
Ejemplos:
cadena = "123456"
cadena = Val(cadena)
'Ahora cadena vale 123456
cadena2 = 123456
cadena2 = Str(cadena2)
'Ahora cadena2 vale "123456"
2 - Funciones para el tratamiento de nmeros
Visual Basic posee muchas funciones para tratar nmeros. A continuacin las
principales funciones.
2.1 - Funcin Round
La funcin Round se utiliza para redondear un nmero decimal, devolviendo un
nmero entero.
Ejemplo:
Dim Mimumero As Long
Minumero = Round(245.8) '(La funcin devuelve 246)
Minumero = Round(245.3) '(La funcin devuelve 245)
Minumero = Round(245.5) '(La funcin devuelve 245)
Round posee un parmetro opcional por si queremos incluir los dgitos decimales.
2.2 - Rnd y Randomize - Nmeros aleatorios
Para generar nmeros aleatorios, Visual Basic incluye 2 funciones: Rnd y Randomize.
La funcin Rnd devuelve un nmero aleatorio, y esta posee un solo parmetro.
Ejemplo :
Rnd (nmero)
Pero para poder generar dichos nmeros aleatorios, debemos utilizar previamente la
funcin Randomize con la siguiente frmula:
Dim LimiteInferior As Integer
Dim LimiteSuperior As Integer
LimiteInferior = 20
LimiteSuperior = 40
MsgBox Int((LimiteInferior - LimiteSuperior + 1) * Rnd +
LimiteInferior)
En el ejemplo anterior, se generarn nmeros aleatorios comprendidos entre el 20 y el
40
Nota: en este enlace pods ver un ejemplo que permite generar nmeros aleatorios no
repetidos
Funciones matemticas
Las principales funciones matemticas provistas por Visual Basic son:
Abs: Devuelve el valor absoluto de una expresin numrica.
Atn: Devuelve el arco tangente de un nmero.
Cos: Devuelve el coseno de un ngulo.
Exp: Devuelve el nmero "e" elevado a una potencia.
Log: Devuelve el logaritmo natural de un nmero.
Sgn: Devuelve un valor indicando el signo de un nmero.
Sin: Devuelve el seno de un ngulo.
Sqr: Devuelve la raz cuadrada de un nmero.
Tan: Devuelve la tangente de un ngulo.
3 - Funciones de formato
Visual Basic posee varias funciones para darle formato a distintos tipos de datos e
informacin. A continuacin se ve algunos ejemplos de las principales funciones:
FormatCurrency: Esta funcin se utiliza para trabajar con nmeros con
formato en dinero. Ejemplo:
si tenemos un nmero 3 y utilizamos la funcin nos devolvera "$3".
FormatPercent: Esta funcin es utilizada para trabajar con porcentajes.
Ejemplo :
si tendramos un nmero 321, nos devolvera: "32,1%" .
FormatDateTime: Esta funcin trabaja con fechas y horas.
FormatNumber: Formatea expresiones nmeros
Resultado = FormatPercent(321) 'devuelve: "32.100,00%"
Resultado = FormatCurrency(3) 'devuelve: "$3,00"
Resultado = FormatDateTime("6-8-1978") 'La funcin devolvera:
"06/08/1978"
NumDigitsAfterDecimal: Parmetro de tipo opcional. Este indicar cuantos nmeros
decimales devolver la funcin:
Ejemplo
cadena = FormatCurrency(325, 3) 'Devuelve: "$325,000"
Ejemplo de la funcin FormatDateTime
Esta funcin, en el primer parmetro se le debe pasar la fecha u hora a formatear, y el
segundo parmetro es el tipo de formato, pueden ser 5 tipos.
vbGeneralDate, vbLongDate, vbShortDate, vbLongTime y vbShortTime.
Este parmetro es de tipo opcional. al colocar la coma dentro de la funcin , visual basic
despliega la lista de constanetas mencionadas, como muestra el grfico:
Un ejemplo para ver estos formatos utilizando FormatDateTime: Colocar cinco option
Button, cada botn de opcin mostrar los diferentes formatos en el caption del
formulario, es decir en la barra de ttulo.
Cdigo en el formulario:
Private Sub Form_Load()
Option1.Caption = " vbGeneralDate "
Option2.Caption = " vbLongDate "
Option3.Caption = " vbShortDate "
Option4.Caption = " vbLongTime "
Option5.Caption = " vbShortTime "
End Sub
Private Sub Option1_Click()
Me.Caption = FormatDateTime(Now, vbGeneralDate)
End Sub
Private Sub Option2_Click()
Me.Caption = FormatDateTime(Now, vbLongDate)
End Sub
Private Sub Option3_Click()
Me.Caption = FormatDateTime(Now, vbShortDate)
End Sub
Private Sub Option4_Click()
Me.Caption = FormatDateTime(Now, vbLongTime)
End Sub
Private Sub Option5_Click()
Me.Caption = FormatDateTime(Now, vbShortTime)
End Sub
FormatNumber - Ejemplos:
Formatea 0.489698 a 0,49
Dim Numero As Double
Numero = 0.489698
Numero = FormatNumber(Numero, 2, vbFalse)
MsgBox Numero
Formatea 1.958754 a 1,96
Dim Numero As Double
Numero = 1.958754
Numero = FormatNumber(Numero, 2)
MsgBox Numero
Funcin Format:
La funcin Format es mas completa que las anteriores funciones, porque puede
manejar mas tipos de datos, y no devuelve solo cadenas, esta tambin puede devolver
nmeros y fechas.
La funcin Format posee dos parmetros:
Format (Expresin, formato)
En el primero debemos colocar cualquier expresin vlida. El segundo es opcional y a
continuacin veremos una descripcin de los formatos de VB:
GeneralNumber: Devuelve el nmero sin formato.
Currency: Devuelve el nmero en formato moneda, con el smbolo "$" y 2
decimales a las derecha.
Fixed: Devuelve como mnimo un dgito a la izquierda y 2 ala derecha del
decimal.
Standar: Similar a Fixed pero incluye un separador de miles.
Percent: Multiplica el nmero por cien y le agrega el smbolo "%"
True/False: Devuelve Verdadero para un valor distinto de 0,y Falso para 0.
On/OFF: Devuelve "Activado" para un valor distinto de 0, y "Desactivado" para
0.
La forma de pasar el parmetro es entre comillas.
Ejemplo:
cadena = Format(75, "Currency") ' Devolvera: "$75,00"
Nota: Si ingresamos un nmero decimal, debemos utilizar el "." y no la coma "," ya
que la coma determina el comienzo de otro parmetro dentro de la funcin y Visual
basic dara error de sintaxis
4 - Funciones de formato para fechas y hora
Ejemplos de los principales Formatos con nombre para el manejo de Fechas y Horas:
Funciones para Fechas
Dim cadena As String
cadena = Format("06/08/78", "General Date") ' Devuelve: "06/08/1978"
cadena = Format("19/08/79", "Long Date") ' Devuelve : "Jueves 19 de
Agosto de 1979".
cadena = Format("19/8/79", "Medium Date") ' Devuelve: "19-Ago-1979"
cadena = Format("17:08", "Short Time") ' "05:08"
cadena = Format("17:08", "Medium Time") ' "05:08 PM"
cadena = Format("17:08", "Long Time") ' "05:08:00 PM"
4.1 - Funciones para calcular fechas
Visual basic cuenta con una serie de funciones que nos permiten calcular fechas y
horas, por ejemplo generar un intervalo de fechas, sumar y restar fechas y horas y
otras operaciones y clculos
DateAdd : Devuelve un Variant que contiene una fecha que indica el intervalo de
tiempo que se ha agregado
DateDiff : Devuelve el nmero de intervalos de tiempo entre dos fechas determinadas
DatePart : Devuelve una parte especfica de una fecha dada
DateSerial : Devuelve un valor Date para un ao, mes y da determinados
Ejemplos
El siguiente ejemplo utiliza la funcin DateDiff para mostrar el itervalo entre dos fechas.
El intervalo lo muestra en segundos , minutos, dias, semanas meses y aos, como
muestra el siguiente grfico
Colocar en el formulario un Command1.
Option Explicit
' recibe las dos fechas como parmetros
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Calcular(Fecha_Inicial As Date, _
Fecha_Final As Date)
Const Formato As String = "#,##0"
Me.Cls
Me.Print "Calcular Intervalos entre las fechas " & Fecha_Inicial
& _
" hasta :" & Fecha_Final & vbNewLine & String(150, "-")
& vbNewLine
Me.Print Format(DateDiff("s", Fecha_Inicial, Fecha_Final),
Formato) & " segundos"
Me.Print Format(DateDiff("n", Fecha_Inicial, Fecha_Final),
Formato) & " minutos"
Me.Print Format(DateDiff("h", Fecha_Inicial, Fecha_Final),
Formato) & " horas"
Me.Print Format(DateDiff("y", Fecha_Inicial, Fecha_Final),
Formato) & " dias"
Me.Print Format(DateDiff("WW", Fecha_Inicial, Fecha_Final),
Formato) & " semanas"
Me.Print Format(DateDiff("m", Fecha_Inicial, Fecha_Final),
Formato) & " meses"
Me.Print Format(DateDiff("yyyy", Fecha_Inicial, Fecha_Final),
Formato) & " aos"
End Sub
Private Sub Command1_Click()
' le pasa las dos fechas a la funcin
Call Calcular("01/01/2000", Date)
End Sub
Private Sub Form_Load()
Me.AutoRedraw = True
Command1.Caption = "calcular intervalos "
End Sub
Ejemplo con DateAdd
Lo siguiente, muestra como aadir y restar fechas
' agrega 10 aos a la fecha actual
MsgBox DateAdd("yyyy", 10, Date)
' Agrega cinco meses a la fecha actual
MsgBox DateAdd("m", 5, Date)
' resta 1 dias a la fecha actual ( usa el signo -)
MsgBox DateAdd("y", -1, Date)
Nota: para restar, usar el signo negativo, como se usa en el ltimo ejemplo.
Para poder restar y agregar segundos a una hora, usar en el parmetro intervalo la "S",
para minutos usar la "n", para horas la "h", para restar y sumar semanas la "ww"
En el siguiente enlace pods ver algunos otros ejemplos que trabajan con dichas
funciones
Funciones para trabajar con fechas en visual basic
Calcular edad de una persona usando DateDiff
Averiguar con Dateserial, el Primer y ltimo da de un mes
4.2 - Funciones para obtener la fecha u hora actual de la PC
Dim Cadena As String
Cadena = Date ' Devuelve el da del sistema en este formato:
"02/08/2004"
Cadena = Time ' Devuelve la hora del sistema en este formato:
"17:32:51"
'Funciones para establecer la fecha u hora de la PC:
Date = (La fecha que queremos establecer)
Time = (La hora que queremos establecer)
5 - Funciones para presentar mensajes
Visual Basic posee 2 tipos de funciones para presentar mensajes, ellas son MsgBox e
InputBox.
Funcin InputBox:
La funcin InputBox presenta un mensaje al usuario, permitindole ingresar un valor
en una caja de texto:
Como se dijo la funcin InputBox presenta un cuadro de dilogo donde el usuario
puede ingresar un texto y luego aceptar o cancelar dicho cuadro de dilogo.
Los parmetros principales de esta funcin son:
InputBox (Promt,Title, Default)
El parmetro Prompt especfica la leyenda que mostrar la caja de mensajes.
El parmetro Title especifica el ttulo que llevar el cuadro de dilogo.
El parmetro Default es el texto que mostrar la caja de texto.
El aspecto mas importante de InputBox es que nos devuelve una cadena con lo que
haya ingresado el usuario en la caja de texto. Luego podemos realizar una tarea
especfica dependiendo del valor devuelto.
Ejemplo:
Dim retorno As String
retorno = InputBox("Ingrese algo en la caja de texto", "Ejemplo")
MsgBox "Usted ingres:" & retorno
En el ejemplo anterior, en la variable Retorno se almacenar el valor que haya
ingresado el usuario cuando haga Click en el botn de Aceptar.
Cuando el usuario presiona Candelar, el InputBox devuelve una cadena vaca. Esto es
importante tenerlo en cuenta para realizar una o tal accin
Si quiseramos por ejemplo desplegar un InputBox, y que este no se cierre hasta que el
usuario si o si haya ingresado un valor, podemos hacerlo de la siguiente forma,
utilizando una condicin en un bucle Do Loop
Cdigo fuente en el formulario
Private Sub Form_Load()
Dim Dato As String
' Hasta que no se ingrese un dato, _
el InputBox no se cerrar
Do
Dato = InputBox("Ingresar algun dato", " Ejemplo ")
Loop Until Dato <> ""
'Muestra el valor
MsgBox Dato, vbInformation
End Sub
Enlace relacionado :
InputBox con PasswordChar
Funcin MsgBox:
La funcin MsgBox, que ya se vi varias veces en distintos ejemplos, es muy fcil de
usar y se utiliza para mostrar distintos tipos de mensajes.
Ejemplos de mensajes o cajas de texto con la funcin MsgBox que podemos mostrar:
Como se ve en los grficos anteriores, con MsgBox podemos tener variedad a la hora de
mostrar un determinado mensaje, utilizando para ello las diferentes constantes que
incorpora la funcin.
Los parmetros mas importantes son:
Title : Es la leyenda que aparecer en el ttulo del mensaje.
Texto : Es el Texto que mostrar el mensaje.
Botones: En este parmetro se colocan las constantes que determinarn si la
caja tiene uno o varios botones y el tipo de mensaje: informativo, de
exclamacin de alerta etc... Cuando escribimos la coma dentro de la funcin en
el parmetro botones, Visual Basic despliega una lista con las opciones o
constantes que podemos utilizar.
Enlaces sobre MsgBox
Como crear MsgBox con imagenes e conos personalizados
32 - Crear un MsgBox con mas opciones, como agregarle imgenes en el mensaje e conos
en el ttulo
Este ejemplo usa las siguientes funciones Api: SetWindowText, GetWindow,
GetClassName, SendDlgItemMessage, LoadImage, SendMessage, GetWindowLong y
SetTimer
Una previa del MsgBoxEx
Para llamar a la funcin que crea el Msgbox se utiliza la funcin MsgBoxEx con los
siguientes parmetros:
MsgBoxEx "Hola Gente", vbQuestion, "Ejemplo de un MsgBoxEx", , , App.Path &
"\1.ico", App.Path & "\1.ani"
Donde el primer parmetro es el Mensaje, el segundo es opcional y si no se muestran
grficos se visualiza un MsgBox comn de vb. El tercero es el ttulo. El cuarto y quinto
no son importantes y son opcionales. El 6 y 7 son el archivo de cono del ttulo y el gif
animado o mapa de bits esttico para el mensaje.
En un formulario:
Texto planoCopiar cdigo fuenteImprimir
1. 'Funcin Api ShellExecute
2. Private Declare Function ShellExecute _
3. Lib "shell32.dll" _
4. Alias "ShellExecuteA" ( _
5. ByVal hwnd As Long, _
6. ByVal lpOperation As String, _
7. ByVal lpFile As String, _
8. ByVal lpParameters As String, _
9. ByVal lpDirectory As String, _
10. ByVal nShowCmd As Long) As Long
11.
12.Private Sub Form_Load()
13.
14.'Llamamos a la funcin
15. MsgBoxEx "Hola Gente", _
16. vbQuestion, _
17. "Ejemplo de un MsgBoxEx", , , _
18. App.Path & "\1.ico", App.Path & "\1.ani"
19.
20.End Sub
Colocar en un mdulo de cdigo .bas
' Funcin que establece el texto de una ventana
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long
' Funcin que devuelve el manipulador de una ventana
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
' Funcin que devuelve el nombre de clase de una ventana
Private Declare Function GetClassName Lib "user32" _
Alias "GetClassNameA" _
(ByVal hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
' Funcin que devuelve el ID del control de un cuadro de dilogo
Private Declare Function GetDlgCtrlID Lib "user32" _
(ByVal hwnd As Long) As Long
' Funcin que enva un mensaje al control de un cuadro de dilogo
Private Declare Function SendDlgItemMessage Lib "user32" _
Alias "SendDlgItemMessageA" _
(ByVal hDlg As Long, _
ByVal nIDDlgItem As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) As Long
' Funcin que devuelve el manipulador de una imagen
Private Declare Function LoadImage Lib "user32" _
Alias "LoadImageA" _
(ByVal hInst As Long, _
ByVal lpsz As String, _
ByVal un1 As Long, _
ByVal n1 As Long, _
ByVal n2 As Long, _
ByVal un2 As Long) As Long
' Funcin que enva un mensaje a una ventana
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
' Funcin que devuelve el manipulador de la ventana activa en ese momento
Private Declare Function GetForegroundWindow Lib "user32" () As Long
' Funcin que devuelve informacin de una ventana
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
' Funcin que crea un Timer de sistema
Private Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
' Funcin que destruye un timer de sistema
Private Declare Function KillTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long) As Long
' constante para escribir un texto
Private Const WM_SETTEXT = &HC
' constante para establecer un icono
Private Const WM_SETICON = &H80
' constante para establecer la imagen de un control Static
Private Const STM_SETIMAGE = &H172
' constante que indica que se llama a una imagen tipo icono
Private Const IMAGE_ICON = 1
' constante que indica que la imagen proviene de un fichero
Private Const LR_LOADFROMFILE = &H10
' constante para llamar a una ventana hija
Private Const GW_CHILD = 5&
' constante para llamar a la siguiente ventana
Private Const GW_HWNDNEXT = 2&
' constante de estilo para poder contener un icono
Private Const SS_ICON = &H3&
' constante para devolver informacin del estilo de una ventana
Private Const GWL_STYLE = (-16)
' variables globales de MsgBoxEx
Private hMsgBox As Long
Private hIconWindow As Long
Private hIconBar As Long
Private Title2 As String
Private ButtonsText(1 To 7) As String
Private Tm As Long
Public Function MsgBoxEx( _
Prompt, _
Optional buttons As VbMsgBoxStyle = vbOKOnly, _
Optional Title, _
Optional HelpFile, _
Optional Context, _
Optional IconBar As String, _
Optional IconWindow As String, _
Optional BtOk As String, _
Optional BtCancel As String, _
Optional BtAbort As String, _
Optional BtRetry As String, _
Optional BtIgnore As String, _
Optional BtYes As String, _
Optional BtNo As String) As VbMsgBoxResult
If hMsgBox = 0 Then
ButtonsText(1) = BtOk ' Texto botn Ok - IDControl = vbOk = 1
ButtonsText(2) = BtCancel ' Texto botn Cancelar/Aceptar - IDControl = vbCancel
= 2
ButtonsText(3) = BtAbort ' Texto botn Anular - IDControl = vbAbort = 3
ButtonsText(4) = BtRetry ' Texto botn Reintentar - IDControl = vbRetry = 4
ButtonsText(5) = BtIgnore ' Texto botn Ignorar - IDControl = vbIgnore = 5
ButtonsText(6) = BtYes ' Texto botn S - IDControl = vbYes = 6
ButtonsText(7) = BtNo ' Texto botn No - IDControl = vbNo = 7
' si se ha indicado un icono para la barra de ttulo
If IconBar <> "" Then
' se obtiene un manipulador de la imagen
hIconBar = hIcon(IconBar, 16&)
' aadimos unos cuantos blancos para hacer sitio
' en la barra de ttulo para el icono, pues el
' MsgBox no est originalmente preparado para ello
Title2 = Title
Title = Title & String(6, Chr(32))
Else
' si no, ponemos posibles valores anteriores de hIconBar a 0
hIconBar = 0
End If
' necesitamos comprobar que se puede cargar la imagen
' correspondiente a la ventana cliente del MsgBox, para
' configurar el espacio correspondiente al icono. Si la
' ruta fuera incorrecta y no se comprobara, quedara un
' espacio en blanco correspondiente al control Static
' que contiene estos iconos.
If IconWindow <> "" Then
hIconWindow = hIcon(IconWindow, 32&)
' si se ha podido cargar la imagen, anulamos cualquier
' llamada del usuario a los iconos de mensaje
' predeterminados ...
If hIconWindow Then
If (buttons And vbCritical) = vbCritical Then
buttons = buttons - vbCritical
ElseIf (buttons And vbExclamation) = vbExclamation Then
buttons = buttons - vbExclamation
ElseIf (buttons And vbInformation) = vbInformation Then
buttons = buttons - vbInformation
ElseIf (buttons And vbQuestion) = vbQuestion Then
buttons = buttons - vbQuestion
End If
' y ponemos nosotros uno cualquiera de ellos.
' De esta manera aseguramos que existir un control
' Static para contener nuestro icono/imagen personalizado.
buttons = buttons + vbCritical
End If
Else
hIconWindow = 0
End If
' Creamos un timer que se ejecutar a la dcima de segundo
Tm = SetTimer(0&, 0&, 10, AddressOf TimerProc)
' llamamos al MsgBox de manera normal
On Error GoTo AnularTimer
' llamamos al MsgBox de VBA con los parmetros normales
MsgBoxEx = MsgBox(Prompt, buttons, Title, HelpFile, Context)
End If
Exit Function
AnularTimer:
' si ha habido algn error, se cancela la operacin
Call KillTimer(0&, Tm)
MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
End Function
' Esta funcin se ejecutar una dcima de segundo despus de llamar
' al MsgBox (en modo asncrono) y "capturar" el cuadro de dilogo
' y sus controles para poder manipularlos
'
Private Sub TimerProc( _
ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal idEvent As Long, _
ByVal dwTime As Long)
Dim cnt As Long
' capturamos el manipulador del MsgBox
hMsgBox = GetForegroundWindow
' si se ha indicado un icono para la barra de ttulo
If hIconBar Then
' se carga
Call SendMessage(hMsgBox, WM_SETICON, 0&, ByVal hIconBar)
Call SetWindowText(hMsgBox, Title2)
End If
' si se ha indicado un icono para la ventana de cliente
If hIconWindow Then
' se carga - CtrlId devolver el ID del control que contiene el icono
Call SendDlgItemMessage(hMsgBox, CtrlId, STM_SETIMAGE, IMAGE_ICON,
hIconWindow)
End If
' ponemos el texto a los botones (si lo hay)
For cnt = 1 To 7
' si se ha indicado un texto para alguno de los botones
If ButtonsText(cnt) <> "" Then
' se cambia su texto.
' cnt = nmero de ID de control de cada uno de los botones
' dentro del cuadro de dilogo
Call SendDlgItemMessage(hMsgBox, cnt, WM_SETTEXT, 0&, ButtonsText(cnt))
End If
Next
' anulamos el timer, ya que slo se ejecutar una vez (de momento)
Call KillTimer(0&, Tm)
hMsgBox = 0
End Sub
' funcin que devuelve el manipulador de una imagen
' para este cdigo me he basado en el ejemplo que amablemente proporciona
' Klaus Probst en http://www.mvps.org/access/api/api0043.htm
'
Function hIcon(IconPath As String, IconSize As Long) As Long
hIcon = LoadImage(0&, IconPath, IMAGE_ICON, IconSize, IconSize,
LR_LOADFROMFILE)
End Function
' Esta funcin devuelve el ID del control Static que contiene los iconos
' de la ventana cliente del MsgBox.
' El ID de este control, junto con el ID del control Static que contiene
' el texto del MsgBox vara entre versiones, tanto de Access como del sistema
' operativo, as que he tenido que crear una funcin que lo localizara.
' Se le puede localizar, primero por el tipo de control (Static) y
' despus por el estilo SS_ICON, que es un estilo (atributo) que permite al
' control contener un icono y expandirse segn su tamao
'
Function CtrlId() As Long
Dim buffer As String * 100
Dim hwnd As Long
Dim CurStyle As Long
' obtenemos la primera ventana hija del MsgBox
hwnd = GetWindow(hMsgBox, GW_CHILD)
Do While hwnd
' obtenemos el nombre de la clase de ventana
GetClassName hwnd, buffer, 100
' si es de la clase Static
If UCase(Left(buffer, 6)) = "STATIC" Then
CurStyle = GetWindowLong(hwnd, GWL_STYLE)
' si tiene el estilo SS_ICON
If (CurStyle And SS_ICON) = SS_ICON Then
' obtenemos el nmero de ID del control
CtrlId = GetDlgCtrlID(hwnd)
Exit Function
End If
End If
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
Loop
End Function
167 - Cambiar el texto a un botn de un MsgBox
Ejemplo que utiliza el Api para crear un Hook y poder cambiar el
texto o caption de un MsgBox
El siguiente ejemplo muestra como usar las funciones del Api SetWindowsHookEx (
Instala el hook) UnhookWindowsHookEx ( remueve el Hook) y el Api SetDlgItemText
que es el que cambia el texto del botn de la caja de mensajes.
El funcionamiento es mas o menos el siguiente :
Antes de llamar al MsgBox clsico, hay que instalar el Hook. Lo que hace el hook es
interceptar el momento en que se activa el MsgBox para poder cambiarle el texto. El
texto del botn como se mencion , se cambia con el Api SetDlgItemText.
Esta ltima funcin tiene tres parmetros. Los que interesan son los ltimos dos
(nIDDlgItem as Long y lpString As String)
En el primer parmetro ( nIDDlgItem ) , debemos indicar el botn que se va a cambiar.
Ac podemos pasar los valores de constantes de vb para indicar los botones (vbAbort,
vbCancel, vbIgnore, vbNo , vbOK , vbRetry y vbYes)
El otro parmetro ( lpString ) es un String con el texto para el botn.
En base a esto, hice la siguiente funcin de ajuste llamada MsgBoxExText.
Esa funcin es exactamente igual a un MsgBox comn y corriente, la nico diferencia es
que tiene dos parmetros mas al final de todo. Uno que indica el botn que se cambiar
( El_Boton As Ebuttons ) y el otro el texto: ( TextButton As String )
Function MsgBoxExText(Prompt As String, _
Buttons As VbMsgBoxStyle, _
Title As String, _
El_Boton As Ebuttons, _
TextButton As String) As VbMsgBoxResult
Notar que la funcin devuelve un tipo de dato vbMsgBoxResult, exactamente igual que
un MsgBox de vb
A continuacin se lista el cdigo para agregar en un mdulo bas ( debe estar en un
mdulo bas si o si ya que los Hook NO se pueden implementar en un formulario )
Cdigo en el mdulo
Texto planoCopiar cdigo fuenteImprimir
1. Option Explicit
2.
3. ' Declaraciones del Api
4. '**************************************************************************
****
5. ' Establece el Hook
6. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHoo
kExA" ( _
7. ByVal idHook As Long, _
8. ByVal lpfn As Long, _
9. ByVal hmod As Long, _
10. ByVal dwThreadId As Long) As Long
11.
12. ' Destruye el Hook
13. Private Declare Function UnhookWindowsHookEx Lib "user32" ( _
14. ByVal hHook As Long) As Long
15.
16. ' Cambia el texto al botn del Msgbox
17. Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA
" ( _
18. ByVal hDlg As Long, _
19. ByVal nIDDlgItem As Long, _
20. ByVal lpString As String) As Long
21.
22.
23. 'Contantes
24. Private Const WH_CBT = 5
25. Private Const HCBT_ACTIVATE = 5
26.
27. 'Enumeraciones para el botn que se va a modificar
28. Enum Ebuttons
29. ' Para el Botn OK
30. [OK] = 1
31. ' Para el Botn Cancelar
32. [Cancel] = 2
33. ' Para el Botn Abortar
34. [ABORT] = 3
35. ' Para el Botn Reintentar
36. [RETRY] = 4
37. ' Para el Botn Ignorar
38. [Ignore] = 5
39. ' Para el Botn Si
40. [YES] = 6
41. ' Para el Botn No
42. [NO] = 7
43. End Enum
44.
45. ' variables que toman los valores de la funcin _
46. MsgBoxExText y los usa dentro del HOOK
47.
48. Dim m_Boton As Long ' Elbotn que se va a modificar
49. Dim m_Texto_Boton As String ' Texto del botn
50.
51. ' Mantiene el valor para luego finalizar el Hook
52. Private Id_Hook As Long
53.
54. Function MsgBoxExText(Prompt As String, _
55. Buttons As VbMsgBoxStyle, _
56. Title As String, _
57. El_Boton As Ebuttons, _
58. TextButton As String) As VbMsgBoxResult
59.
60. m_Boton = El_Boton
61. m_Texto_Boton = TextButton
62. Hook
63.
64. MsgBoxExText = MsgBox(Prompt, Buttons, Title)
65.
66.
67. End Function
68.
69. Private Sub Hook()
70.
71. ' Inicia el Hook
72. Id_Hook = SetWindowsHookEx(WH_CBT, AddressOf winProc, 0, App.ThreadID)
73.
74. End Sub
75. ' Procedimiento que intercepta los mensajes
76. Public Function winProc( _
77. ByVal uMsg As Long, _
78. ByVal wParam As Long, _
79. ByVal lParam As Long) As Long
80.
81. Dim ret As Long
82.
83. If uMsg = HCBT_ACTIVATE Then
84.
85. ' Cambia el texto
86. ret = SetDlgItemText(wParam, m_Boton, m_Texto_Boton)
87.
88. ' Elimina el Hook
89. ret = UnhookWindowsHookEx(Id_Hook)
90. m_Texto_Boton = vbNullString
91.
92. End If
93.
94. winProc = 0
95.
96. End Function
Ejemplos para usar el MSgBox
Lo siguiente llama a un MsgBox con el botn VbYesNo, y le cambia el texto al botn " Si
" por el texto " Continuar "
ret = MsgBoxExText(" Ejemplo ", vbYesNo + vbExclamation, _
"Titulo", YES, " .. Continuar ")
Lo siguiente llama a un MsgBox con el botn VbYesNo, y le cambia el texto al botn "
NO " por el texto " No Continuar "
Dim ret As VbMsgBoxResult
ret = MsgBoxExText(" Desea continuar ? ", vbYesNo + vbQuestion, _
"Titulo", NO, " No Continuar ")
If ret = vbYes Then
' ....
Else
' .....
End If
Esto otro despliega un MsgBox con los botones Si , No y Cancelar ( vbYesNoCancel ), y
le cambia el texto al botn Cancelar por el texto " Salir "
Dim ret As VbMsgBoxResult
ret = MsgBoxExText(" Continuar ? ", vbYesNoCancel + vbQuestion, _
"Titulo", Cancel, " Salir ")
Importante: Cualquier error que se produzca mientras se ejecuta el Hook, se cerrar
el Ide de visual basic por completo y por lo tanto si no hubisemos guardado los
cambios ..perderemos todo lo realizado
Ejemplo para cambiar el texto de los botones de un MsgBox
6 - Ejemplos para descargar
1. Ejemplo que muestra como utilizar la funcin Ucase y Lcase para
convertir un texto a mayscula o minscula.
2. Ejemplo muy simple que utiliza las funciones LTrim, RTrim y Trim para
eliminar espacios vacos en una cadena de texto
3. Ejemplo que utiliza la funcin Chr para mostrar en un control label la
tecla que presionemos, utilizando el evento keypress del formulario.
4. Este ejemplo muestra como podemos localizar una cadena de texto
dentro de otra utilizando la funcin InsTr
5. Muestra un ejemplo de como usar las funciones Left y Right para extraer
partes de una cadena a partir de otra cadena.
6. Ejemplo para ver las funciones Randomize y Rnd , para generar nmeros
aleatorios, a partir de un valor mnimo y un valor mximo.
7. Ejemplo sencillo que muestra como utilizar la funcin FormatCurrency,
FormatPercent y FormatDatetime.
8. Programa de ejemplo que utiliza la funcin Date para establecer la fecha
del sistema
9. Muestra como utilizar un mensaje de informacin en caso de que ocurra
un error en tiempo de ejecucin, utilizando la sentencia GoTo
10. Ejemplo que muestra como utilizar un mensaje con dos botones y
ejecutar una instruccin determinada de a acuerdo a una estructura If-Then-Else
Los arreglos, matrices, vectores y vectores de controles
Contenido
1 - Arreglos y vectores
1.1 - Declaracin de los arreglos en el cdigo
1.2 - Acceder a los datos de un arreglo
1.3 - Arreglos y estructuras (UDT)
2 - Matrices
2.1 - Ejemplo de matriz de 2 dimensiones
3 - Arreglos y vectores dinmicos
3.1 - Ejemplo para crear un Vector dinmico
4 - Funciones de VB para trabajar con Arreglos - LBound y UBound
4.1 - Ejemplos de Lbound y Ubound
4.2 - Funcin Join, Split y Filter
5 - Los arreglos de controles
5.1 - Ejemplo para crear un arreglo de controles
5.2 - Pasar arreglo de controles como parmetro a un procedimento
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
minsculas tendra que utilizar la funcin Lcase con cada variable: nombre1 =
Lcase(nombre1), nombre2 = Lcase(nombre2), etc..
En cambio si utilizara un arreglo solucionara mi problema solo a esto
Dim nombres(30) As String
For x = 0 To 30
nombres(x) = LCase(nombres(x))
Next
Siguiendo el ejemplo anterior: en vez de escribir la sentencia Lcase 30 veces para cada
variable, hemos utilizado un arreglo llamado nombres con un nmero de ndice 30 ,
es decir que almacena 30 datos de tipo String
1.1 - Declaracin de los arreglos en el cdigo
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 nmero de ndice entre parntesis. Por ejemplo :
Lo siguiente crea un arreglo de 15 elementos o datos de tipo integer
Dim miArreglo (1 to 15) as integer
Esto crea un arreglo de 11 elementos o datos de tipo String
Dim empleados (10) as String
Como podemos ver en el primer ejemplo hemos declarado un arreglo llamado
miArreglo y entre parntesis hemos declarado el rango de capacidad del mismo, es
decir la cantidad de datos que podr contener
El primer nmero , el 1 , indica el lmite inferior del mismo, y el nmero 15 indica el
lmite mximo del arreglo, conformando de esta manera un arreglo que podr
almacenar 15 datos de tipo string.
En el segundo ejemplo, declaramos un arreglo de 11 elementos de tipo string. Como
pods ver hemos indicado solo un nmero que representa el valor mximo del mismo.
Cabe aclarar que hemos puesto de ndice el nmero 10, pero en realidad el arreglo
contiene 11 elementos ya que cuando NO indicamos el limite inferior , se asume que el
mismo comienza desde el 0.
Importante: los arreglos se dividen en 2 grupos, los vectores y las matrices. Los
vectores son arreglos que contienen una sola dimensin y las matrices 2 o mas
dimensiones.
1.2 - Acceder a los datos de un arreglo
Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el ndice o
nmero del elemento del mismo. Por ejemplo:
Dim alumnos(1 To 4) As String
alumnos(1) = "juan"
alumnos(2) = "micaela"
alumnos(3) = "mara"
alumnos(4) = "ignacio"
Primero declaramos un arreglo llamado alumnos, de tipo string y que contendr 4
elementos. Luego le asignamos un valor de cadena como a cualquier otra variable de
tipo string, pero con la diferencia que para referirnos al elemento utilizamos el n de
ndice del mismo.
Otro ejemplo
Dim paises(2) As String
' Llena el vector con datos
paises(0) = "Argentina"
paises(1) = "Per"
paises(2) = "Brasil"
' Recorre los elementos del vector
For x = 0 To 2
MsgBox "Nombre del pas : " & paises(x)
Next x
En este ltimo ejemplo, declaramos y creamos un vector de 3 elementos que contendr
el nombre de 3 pases. Luego en un bucle For utilizamos la funcin MsgBox para
mostrar los elementos del arreglo, pasndole como parmetro del ndice la variable x
del bucle For
1.3 - Utilizar una estructura Type o UDT en un arreglo
Como vimos, en un arreglo podemos almacenar datos de cualquier tipo pero no
mezclarlos, es decir podemos crear arreglos de tipo string, de tipo Integer etc,,, pero
sin duda que lo mas importante y de mas utilidad a la hora de programar es la
utilizacin de datos definidos por nosotros mediante una estructura Type
Por ejemplo:
Option Explicit
' Estructura de dato para el vector
Private Type agenda
nombre As String
apellido As String
cpostal As Integer
End Type
' Declaramos el vector
Dim personas(1 To 3) As agenda
Private Sub Form_Load()
' Llenamos con datos para el elemento 1 del arreglo
personas(1).nombre = "carlos"
personas(1).apellido = "Martnez"
personas(1).cpostal = 1900
' Llenamos con datos para el elemento 2 del arreglo
personas(2).nombre = "Hctor"
personas(2).apellido = "rosales"
personas(2).cpostal = 1898
' Llenamos con datos para el elemento 3 del arreglo
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
Como se dijo anteriormente, las matrices son arreglos de mas de 1 dimensin (2 o
mas), a diferencia de los vectores que poseen una sola dimensin.
Podemos imaginar una matriz bidimensional ( 2 dimensiones) , como una cuadrcula
con filas y columnas, donde las filas representaran las coordenadas x y las columnas
las coordenadas y.
A una matriz de 3 dimensiones o tridimensional se la puede imaginar con las
coordenadas x, y, z, y esta es ideal para representar figuras en el espacio por ejemplo.
Las matrices se declaran en el cdigo de manera igual que los vectores, con la
diferencia que debemos indicar mas subndices de acuerdo a la cantidad de
dimensiones que posea la matriz.
por lo general no se suele utilizar matrices de mas de 3 dimensiones..
2.1 - Ejemplo de matriz de 2 dimensiones
Matriz bidimensionales de 6 x 8 (de 2 dimensiones).
Dim personas (1 to 6, 1 to 8) as string
Si luego quisiera acceder a los datos de la misma basta con referirnos a los subndices
Por ejemplo:
personas (1, 1) = "Natalia"
personas (2, 1) = "pedro"
personas (1, 7) = "valeria"
personas (1, 8) = "jos"
personas (2, 2) = "carolina"
personas (4, 1) = "raquel"
personas (6, 2) = "eustaquio"
personas (6, 5) = "maria"
personas (6, 8) = "mariana"
El total de ndices posibles para almacenar datos o valores en el ejemplo anterior es de
48 datos, ya que si multiplicamos 6 x 8 nos da como total 48 valores posibles para
utilizar en la matriz bidimensional.
En este ejemplo creamos una matriz de 3 dimensiones de 3 x 3 x 3
Dim cubo (1 to 3, 1 to 3, 1 to 3) as integer
para acceder a los datos sera 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 dinmicos
Hasta ahora habamos visto solo vectores o arreglos de tamao fijo, pero qu pasa
cuando no sabemos el tamao o el largo de un vector y queremos que sea variable ?.
Visual basic posee una sentencia o funcin que nos permite cambiar el largo de un
vector en tiempo de ejecucin, dndonos as mas flexibilidad, y de esta manera no
desperdiciar memoria y recursos de la pc creando vectores mas largos de lo que
realmente necesitamos.
Esta funcin se llama ReDim y ReDim Preserve , y un ejemplo de como aplicarla sera
de la siguiente manera:
3.1 - Ejemplo de vectores y arreglos dinmicos
En lo siguiente, primero declaramos un vector de la forma como lo hacemos siempre
con la diferencia de que en vez de colocar un tamao declaramos el vector solo con los
parntesis :
Dim alumnos () as string
Ahora le establecemos un tamao, por ejemplo de 4 elementos y le agregamos valores:
ReDim alumnos(1 To 4) As String
alumnos(1) = "Luciano"
alumnos(2) = "Esteban"
alumnos(3) = "Mariano"
alumnos(4) = "Pedro"
Ahora para redimensionar el tamao del vector por ejemplo a 7 elementos, utilizamos
la funcin ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3
valores mas:
ReDim Preserve alumnos(1 To 7)
alumnos(5) = "Karina"
alumnos(6) = "Ral"
alumnos(7) = "Romina"
Nota: si utilizamos la sentencia ReDim, o mejor dicho si redimensionamos el vector sin
utilizar la sentencia ReDim preserve, los valores que contena el vector anteriormente
se perdern
Eliminar o vaciar un vector
Para eliminar un array, arreglo o vector, podemos utilizar Erase, por ejemplo:
Erase Nombre_Del_Vector
4 - Funciones de VB para trabajar con Arreglos - LBound y
UBound
Estas funciones son ideales para trabajar con vectores y matrices que han sido
declaradas dinmicamente
Lbound y Ubound nos devuelve un nmero de tipo Long que nos permite saber el
lmite superior e inferior de un vector o una matriz.
4.1 - Ejemplo de Ubound y Bound
Private Sub Form_Load()
'Variables Para almacenar los lmites superior e inferior
Dim LimiteInferior As Long
Dim LimiteSuperior As Long
'Declaramos 3 matrices, de una dimensin, _
de dos dimensiones y de 3
Dim UnVector(1 To 520) As Integer
Dim UnaMatriz(20, 5 To 100) As String
Dim OtraMatriz(10, 20, 30) As Long
' 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 habrs visto en los ejemplos anteriores, para conocer los limites superiores e
inferiores en los vectores, solo se debe pasar como parmetro a las funciones Lbound
y Ubound, el nombre del vector con el cual queremos trabajar.
En cambio en las matrices se aade un segundo parmetro en el cual debemos indicar
el nmero de la dimensin en la cual queremos recuperar los valores.
Ejemplo 2 de LBound y UBound:
Si deseamos recorrer todos los elementos de un vector o una matriz podemos hacerlo
mediante un bucle For de la siguiente manera:
For x = LBound(vector) To UBound(vector)
MsgBox vector(x)
Next i
4.2 - Funcin Join, Split y Filter :
Visual basic en su sexta versin incorpora estas 3 funciones para trabajar solo con
vectores. Estas funciones estn relacionadas con el tratamiento de las cadenas de
caracteres.
Funcin Join
Esta funcin se utiliza para unir en una sola variable el conjunto de subcadenas de un
vector. Esta funcin tiene solo 2 parmetros y es muy fcil de usar. Ejemplo:
Dim micadena as string
Dim vector(1 To 3) As String
vector(1) = "Carlos"
vector(2) = "Pedro"
vector(3) = "Juan"
Ahora ejecutando Join, la variable micadena pasara a valer "Carlos-Pedro-Juan"
micadena = join (vector, "-")
Nota: En el primer parmetro de la funcin debemos indicar el vector en el cual
trabajar, y en el segundo se debe indicar un delimitador de caracter para separar las
cadenas. Si no especificamos ninguno, visual basic utilizar por defecto un espacio
vaco o en blanco (" ") para separar cada subcadena .
Funcin Split:
Esta funcin hace el trabajo inverso de la funcin Join.
Split se utiliza para rellenar un vector dinmico que contiene un nmero de subcadenas
a partir de una cadena que le pasamos como parmetro a la funcin.
Para aclarar un poco un ejemplo
Private Sub Form_Load()
'Una variable para almacenar una cadena
Dim Micadena As String 'Vector dinmico
Dim Vector() As String
'Le damos un valor a la variable
Micadena = "maria/natalia/romina"
'Ejecutamos la funcin Split
Vector = Split(Micadena, "/")
'Ahora el vector dinmico pasara a _
contener los siguientes valores:
Vector(0) = "mara"
Vector(1) = "natalia"
Vector(2) = "Romina"
End Sub
Nota: una cosa importante es que en el vector anterior no se ha declarado un rango ,
ya que la funcin devuelve un vector cuya cantidad de elementos se ignora, es
decir no se conoce.
Enlaces relacionados a split
Pasar un archivo de texto a un array o matriz usando split
Funcin Filter :
La funcin Filter se utiliza para filtrar subcadenas de un vector dependiendo de un
determinado criterio de bsqueda. Los parmetros que lleva la funcin son los
siguientes:
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
' Vector dinmico para almacenar el resultado
Dim Resultado() As String
Alumnos(1) = "Luciano"
Alumnos(2) = "Lucas"
Alumnos(3) = "juan"
Alumnos(4) = "Natalia"
' Ejecutamos Filter
Resultado = Filter(Alumnos, "Lu", True)
' Ahora el vector dinmico "resultado" pasa a contener
MsgBox Resultado(0), vbInformation ' Luciano
MsgBox Resultado(1), vbInformation ' Lucas
5 - Arreglos de controles en visual basic
Hasta ac se vi los aspectos de los vectores y matrices como estructuras que nos
permiten almacenar datos y resolver problemas lgicos en nuestros programas. Ahora
veremos los Arreglos de controles o vectores de controles
Un arreglo de controles es un conjunto de controles, todos de la misma clase (todos
TextBox, todos Label, etc...) que poseen un mismo nombre y cada uno posee un
nmero de ndice que los identifica y los hace nicos con respecto a los dems, y
conformando entonces un vector de controles. por ejemplo en vez de tener 3
Command, llamados command1, command2 y command3, puedo crear un arreglo de 3
botones. Estos 3 botones comparten el mismo nombre pero cada botn se distingue del
resto por un nmero de ndice, es decir si por ejemplo nuestro botn de comando se
llama cmd pasara a tener un cmd(1), un cmd (2) y un cmd(3).
En un arreglo de controles todos los controles deben ser del mismo tipo y adems no
puede haber un control dentro del arreglo que tenga el mismo nmero de ndice, ya
que sera imposible identificarlo en el conjunto, adems VB no lo permitira y nos
mostrara un error.
Las ventajas principales que tenemos cuando trabajamos con un vector de controles
son las siguientes:
1. Todos los controles que forman el arreglo comparten el mismo procedimiento de
cdigo, con lo cual si tenemos muchos controles que tienen que ejecutar la misma
instruccin no debemos escribir cdigo de ms en cada control.
2. Tener 20 cajas de texto, por ejemplo, consumen mucha mas memoria que
utilizar un vector de 20 cajas de texto.
3. Es posible crear controles en tiempo de ejecucin, a partir de un arreglo de
controles ya creado.
4. Es mas fcil manipular y establecer las propiedades en un vector de controles
refiriendonos al subndice de los mismos.
5.1 - Ejemplo para crear un arreglo de controles
Para crear un arreglo de controles podemos hacerlo de 2 maneras.
La primera opcin es copiar un control ya dibujado y pegarlo en el formulario. Luego
visual basic nos mostrar un dilogo preguntndonos si queremos crear una matriz
de controles. Al contestar que si, ya se ha creado un arreglo con 2 controles, en este
caso el primer control tendr el ndice 0 y el que pegamos el ndice 1. Si queremos
seguir agregando mas controles cuando peguemos nuevamente otro control visual basic
no nos preguntar nuevamente si deseamos crear una matriz del control ya que esta
ya est creada, y por lo tanto agregar un nuevo control y le agregar el nmero de
ndice correspondiente para diferenciarlo del resto, en este caso el 2. Ahora si
observas en la propiedad index de los controles que forman el arreglo vers que
estos tienen un nmero de ndice que antes no tenan al no formar parte de un arreglo
de controles
Nota: cualquier control de visual basic que no tenga un arreglo creado, la propiedad
index de los mismos no tendr ningn nmero o valor, ya que esta propiedad est
reservada para los controles que formen parte de un vector o arreglo.
La otra opcin para crear un arreglo, es ingresar directamente el nmero de ndice
en la propiedad index del control del cual queremos crear un arreglo.
Ejemplo:
El ejemplo consiste en crear 10 Arreglos de TextBox y lo que se va a hacer es
mediante un bucle poner la propiedad Enabled de los controles en False, es decir los
vamos a deshabilitar a todos.
Como te dars cuenta, si tuvieses que hacer esto manualmente, es decir deshabilitar
cada TextBox individualmente tendras que escribir
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 establecindole
la propiedad Enabled en False para deshabilitarlos.
Create un arreglo de 10 TextBox Para eso coloca un text1 en el formulario. despus
copialo y pegalo, vb te va a preguntar si quers hacer un arreglo, decile que si, hasta
que tengas 10 o los que quieras.
Si te fijs ahora en la ventana de propiedades, cuando seleccionas un textBox en la
propiedad index te vas a dar cuenta que poseen un nmero, ese es el ndice que los
identifica, y por medio de ese ndice nos vamos a referir en el bucle For
El cdigo de este ejemplo bien simple quedara as:
Dim i As Integer
For i = 0 To 9
text1(i).Enabled = False
Next
Como pods ver, le pasamos en el parmetro ndice el valor de la variable i para
referirnos a ese text1 en particular y asignarle la propiedad Enabled en False
5.2 - Pasar un arreglo de controles como parmetro
Una tarea habitual es la de poder pasar un arreglo o vector de controles como
parmetro a una Sub o function.
Por ejemplo supongamos que tenemos un programa que tiene muchos formularios. y
varios de esos formularios tienen una funcin que se encarga de limpiar todas los
textBox y eliminar el contenido de los mismos
Para solucionar esto, y no tener que repetir cdigo, podramos crear en un mdulo de
cdigo, una SubRutina para que la puedan utilizar y acceder desde todos los
formularios.
Para poder pasar un vector como parmetro a una rutina, la variable o argumento en la
Subrutina, debe estar declarada como de tipo Object
Ejemplo
Colocar en un formulario un arreglo de textBox, por ejemplo TextBox1(0), TextBox1(1)
y TextBox1(2)
Colocar un CommandButton para limpiar el contenido de las cajas de texto
Cdigo fuente en el formulario
Option Explicit
Private Sub Command1_Click()
Call Limpiar_TextBox(Text1)
End Sub
' Recibe el vector como parmetro
Sub Limpiar_TextBox(El_TextBox As Object)
Dim i As Integer
For i = 0 To El_TextBox.Count - 1
El_TextBox(i).Text = vbNullString
Next
End Sub
Manejo de Archivos en visual basic - parte 7
En esta parte se describen los conceptos bsicos para el
tratamiento y acceso a los archivos en visual basic
->> Contenido
1 - introduccin
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 funcin 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 ( Instruccin Put )
11 - Leer datos en archivos aleatorios ( instruccin Get )
12 - Posicionarse en un registro ( Seek )
13 - Funciones propias de vb para el manejo de ficheros y directorios
14 - Funcin Dir para buscar archivos y carpetas
15 - Funcin FileCopy para copiar
16 - Funcin MkDir para crear directorios
17 - Funcin kill para eliminar
18 - Funcin FileLen
19 - Funcin Name
20 - Funcin GetAttr y SetAttr para atributos
21 - Funcin RmDir para renombrar
1 -introduccin
En esta seccin se ve un repaso bsico de las tres formas de trabajar con diferentes
tipos de archivos en visual basic: Archivos secuenciales, archivos aleatorios y archivos
binarios.
Por ltimo en el final de la seccin, se describe como utilizar sentencias y funciones
propias de visual basic para trabajar con archivos y directorios del sistema operativo,
como por ejemplo la sentencia Dir para buscar ficheros, Filecopy para copiar , ChDir,
Mkdir para crear carpetas y algunas otras funciones relacionadas.
2 - Sentencia Open
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 parmetros que varan de acuerdo a lo que queramos
hacer.
Por ejemplo :
Open "c:\prueba.txt" For Input As #1
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.
En el primer parmetro indicamos el path del archivo en el que queremos trabajar.
Luego la palabra "As #1" indica el nmero de archivo que estamos utilizando. Este
nmero lo asignamos nosotros y va desde el rango 1 al 511. El "nmero de archivo" se
utiliza para poder diferenciar al archivo en el cdigo. Cada archivo que se encuentra
abierto no se puede asignar un nmero de archivo igual, ya que nos dara un error en
tiempo de ejecucin.
Por ejemplo no podramos hacer esto:
Open "archivo1.txt" For Input As #1
Open "otroarchivo1.txt" For Input As #1
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 nmero de archivo que lo identifica.
Por ejemplo:
Close #2
Esto cerrar al archivo abierto que anteriormente le asignamos el nmero de archivo 2.
Tambin si tengo 3 archivos abiertos podra hacer lo siguiente:
Close #1, #2, #3
Si utilizamos la sentencia Close sin ningn parmetro, o mejor dicho ningn nmero de
archivo, se cerrarn todos los archivos cargados en memoria por nuestra aplicacin (los
que nosotros abrimos con Open).
Por lo general, si trabajamos con varios archivos abiertos simultneamente, es
aconsejable utilizar la sentencia Close sin ningn parmetro, de este modo cuando
termine de ejecutarse el procedimiento se cerrarn todos los archivos abiertos.
Hay una funcin en Visual basic llamada FreeFile. Esta funcin lo que hace es darnos un
nmero 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 ejecucin.
Para usar la funcin es muy fcil, por ejemplo:
Dim NumeroArchivo As Integer
NumeroArchivo = FreeFile
Open "La ruta de un archivo" For Input As #NumeroArchivo
3 - Archivos secuenciales
Los archivos secuenciales se denominan de esta manera por que la forma de escribir y
leer los datos en un archivo es, desde el principio hasta el fin del archivo, es decir, si yo
quisiera acceder a un determinado dato del archivo y este dato se encuentra en la
mitad del archivo, para llegar a ese dato necesito pasar por todos los dems datos, de
forma secuencial.
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
utilizramos un archivo para almacenar 50000 nombres con sus respectivos datos
(apellido, telfono, direccin etc...) , este mecanismo resultara ineficiente, ya que si
quisiera recuperar por ejemplo el registro n 3650, para leer este dato tendra 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
Append: esta sentencia se utiliza para agregar informacin a un archivo de texto.
Ejemplo :
Open "c:\miarchivo.txt" For Append As #1
Si el archivo ya contiene datos, se le agregarn al mismo al final del archivo, si no
contena datos los agrega igual. Si el archivo no existe, lo crea y le agrega los datos.
Input: la sentencia Input se utiliza para leer datos de un archivo de texto, ejemplo:
Open "c:\miarchivo.txt" For Input As #2
Este ejemplo abre un archivo para leer los datos del mismo. En las prximas lneas
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 ejecucin 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 aadir algn 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:
Output crea el archivo y le agrega informacin, pero si el archivo exista y contena
informacin previa, sobre escribe todos los datos del archivo por los datos nuevos,
perdiendo los anteriores datos.
Si accedemos con Output a un archivo que no existe, no se produce un error, si no que
se crea dicho archivo.
Conclusin : si vamos a aadir datos a un archivo existente (para actualizarlo por
ejemplo) hay que utilizar la sentencia Append. si vamos a crear un archivo vaco y
nuevo para grabar nuevos datos, hay que utilizar la sentencia Output. si vamos a
abrir un archivo para leer datos utilizamos la sentencia Input.
5 - Leer datos de un archivo utilizando Line Input
C omo se coment antes , para leer datos de un archivo se utiliza la sentencia Input.
pero para leer los datos del archivo y poder utilizarlos en nuestro programa se utilizan 2
sentencias o instrucciones: Line Input e Input.
Ejemplo:
Dim mivariable As String
Open "c:\nombres.txt" For Input As #1
While Not EOF(1)
Line Input #1, mivariable
Wend
Close #1
En el ejemplo anterior aparece una funcin nueva llamada EOF. Esta funcin significa
End Of File o fin de archivo.
Cuando abrimos un archivo para leer informacin con Input, debemos saber en que
momento llegamos al final del archivo, por que de lo contrario la sentencia Line Input
o Input seguira leyendo lneas donde no existen datos despus del fin del archivo, y
por lo tanto se producira un error en tiempo de ejecucin por querer leer un dato
que no existe.
Mediante la condicin 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, lnea
por lnea los datos del mismo. Es evidente que como est planteado el ejemplo habra
que manipular los datos ledos y agregar otras instrucciones, por que en este ejemplo la
variable mivariable solo almacenara los datos de la lnea que est leyendo y borrando
los datos de las lneas que almacen anteriormente. Mas adelante veremos como
solucionar esto.
conclusin : 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 lnea actual
Line Input #1, nuestravariable
6 - Ejemplo para leer un archivo de texto utilizando Line Input
Lo siguiente, lee un archivo de texto lnea por lnea, y carga el contenido en un control
ListBox. colocar un control List1, un Command1 y un Text1 para indicar el path del
archivo a leer:
Option Explicit
Private Sub Command1_Click()
On Error GoTo errSub
Dim n_File As Integer
Dim Linea As String
'Elimina el contenido del listbox
List1.Clear
'Nmero de archivo libre
n_File = FreeFile
'Abre el archivo para leer los datos
Open text1.Text For Input As n_File
'Recorre linea a linea el mismo y aade las lineas al control List
Do While Not EOF(n_File)
'Lee la linea
Line Input #n_File, Linea
List1.AddItem Linea
Loop
Exit Sub
errSub:
'error
MsgBox "Nmero de error: " & Err.Number & vbNewLine & _
"Descripcin del error: " & Err.Description, vbCritical
End Sub
Private Sub Form_Load()
Command1.Caption = " Cargar en Listbox "
End Sub
Este otro ejemplo, lo que hace es leer un archivo de texto para contar las lneas del
mismo
Colocar un command1 en el formulario y pegar el siguiente cdigo fuente
Public Function Contar_Lineas(ByVal strTextFile As String) As Long
Dim F As Integer
Dim Lineas As Long
Dim str_Linea As String
' Nmero de archivo libre
F = FreeFile
' Abre el archivo de texto
Open strTextFile For Input As #F
'Recorre todo el archivo de texto _
linea por linea hasta el final
Do
'Lee una lnea
Line Input #F, str_Linea
' Incrementa la cantidad de lineas leidas
Lineas = Lineas + 1
' Leer hasta que llegue al fin de archivo
Loop While Not EOF(F)
' Cierra el archivo de texto abierto
Close #F
' Retorna a la funcin el nmero de lineas del fichero
Contar_Lineas = Lineas
End Function
Private Sub Command1_Click()
Dim Path As String
Path = InputBox(" Ingrese la ruta de un archivo de texto ", _
" Contar lneas ")
If Path = vbNullString Then Exit Sub
MsgBox " Cantidad de lineas: " & Contar_Lineas(Path)
End Sub
7 - Leer el contenido de un archivo de texto con la funcin Input
La funcin input, a diferencia de Line Input que Lee por lnea, Input lee todo el
contenido del archivo de una sola ves, es decir no necesitamos, como en el ejemplo
anterior, utilizar un bucle.
El modo de usarlo es el siguiente:
Primero se abre el archivo con Open, por ejemplo:
Open Path_Archivo For Input As #1
Luego se asigna a una variable, el contenido que devolver la funcin Input:
Contenido = Input(LOF(1), #1)
Un ejemplo:
Lo siguiente lee el contenido de un archivo txt y lo carga en un textBox multilnea
Colocar un TextBox llamado txt_Path ( para especificar la ruta del archivo ).
El Textbox que mostrar los datos del fichero, colocarle el nombre txt_Contenido
Cdigo en un botn:
On Error GoTo Err_Sub
Dim n_File As Integer
Dim Contenido As String
'Nmero de archivo libre
n_File = FreeFile
'Abre el archivo indicado
Open txt_Path For Input As n_File
'Lee todo los datos del archivo y lo almacena en la variable
Contenido = Input$(LOF(n_File), #n_File)
'Cierra el archivo abierto
Close n_File
'Carga el contenido de la variable en el TextBox
txt_Contenido = Contenido
Exit Sub
Err_Sub:
MsgBox Err.Description, vbCritical
8 - Escribir datos en archivos de texto
Para escribir datos en archivos de texto se utiliza la sentencia Print y Write.
Ejemplo:
Dim nombre As String
Dim edad As Integer
Dim telefono As String
Open "c:\miarchivo.txt" For Append As #1
Print #1, "esta es una lnea"
Print #1, "esta es otra lnea"
Print #1, nombre, edad, telefono
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 parmetros. el
primero indica el archivo que estamos manipulando (el archivo n1, dentro del cdigo),
el segundo parmetro indica los datos que se agregarn en el mismo. En el segundo
parmetro podemos poner un dato directamente (una cadena, nmero, etc...),, por
ltimo cerramos el archivo.
Escribir datos con la sentencia Write
A diferencia de Print, la sentencia Write escribe datos en un archivo separados por
comas.
Ejemplo:
Dim nombre As String
Dim apellido As String
apellido = "Peres"
nombre = "Carlos"
Open App.Path & "\Archivo.txt" For Output As #1
Write #1, nombre, apellido
Close #1
Como podemos ver la sentencia Write escribe los datos en el archivo separados por
coma. En la primera lnea escribir el contenido de las variables nombre y apellido .
Tambin se pueden pasar los datos directamente a Write sin usar variables, por
ejemplo:
Write #1, "Un dato", "Otro dato", "Otro mas"
Nota importante: cuando escribimos datos con la sentencia Print se utiliza la
sentencia Line Input para leer los datos del archivo. En cambio cuando escribimos datos
separados por comas con la sentencia Write debemos utilizar la sencia Input
Para que esta pgina 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
cdigo se encuentra detallado cada paso y lo pods descargar al final de esta pgina.
9 - Archivos aleatorios o directos
A diferencia de los archivos secuenciales, los archivos aleatorios almacenan datos en
forma de registros. Como habamos dicho en el captulo anterior para leer datos de un
archivo secuencial haba que leer todo el archivo, es decir que no podamos leer por
ejemplo los datos que estuviesen en la lnea 35 del mismo sin antes pasar por todos los
datos anteriores, por eso su nombre de archivo secuencial.
En cambio los archivos aleatorios, tambin llamados archivos directos, almacenan los
datos con una estructura diferente. Los datos se guardan en registros mediante una
estructura definida de tipo Type (estructura definida por nosotros) tambin llamada
UDT
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:
open "elarchivo.dat" for random as #1 len = len(mivariable)
Como podemos ver para abrir un archivo de acceso aleatorio se utiliza la palabra
Random (aleatorio). Luego debemos indicar el nmero de archivo para identificarlo,
y por ltimo una opcin nueva : Len.
cada registro en el archivo, que es una estructura de datos Type, tiene que tener una
longitud fija. Mediante la funcin Len de visual Basic debemos indicar el tamao de la
estructura de datos que vamos a utilizar. para que quede mas claro un ejemplo:
Primero definimos una estructura de datos:
Private Type t_clientes
nombre As String * 20
apellido As String * 15
direccin As String * 30
edad As Integer
End Type
Despus creamos una variable llamada clientes de tipo t_clientes
Dim clientes As t_clientes
ahora abrimos nuestro archivo, y en el parmetro de la funcin Len le pasamos la
variable para que visual basic calcule el tamao de la estructura t_clientes
Open "datos.dat" For Random As #1 Len = Len(clientes)
La estructura de datos debe tener un tamao fijo, no datos variables como en el caso
de los archivos secuenciales, de ah que se indicara en el Type en las variables
mediante el asterisco en el caso de los String.
En cada campo de la estructura de datos debemos indicar el tamao de la variable. En
el caso del campo nombre de tipo string le hemos asignado una longitud fija de 20
bytes, en el apellido 15 y en la direccin 30 bytes. La variable o el campo edad que es
de tipo integer, no debemos indicar el tamao de la variable, ya que sabemos que un
nmero integer ocupa 2 bytes.
En total esta estructura t_clientes tiene una longitud de 67 bytes (30 + 20 + 15 + 2 ).
Si no indicramos en la sentencia Open el tamao de la estructura, visual basic, por
defecto asumira la estructura de un tamao de 128 bytes, y si nuestra estructura
tendra mayor tamao ocurrira un error en tiempo de ejecucin, por lo cual siempre
debemos utilizar la funcin len para calcular el tamao de la misma.
10 - Grabar datos en archivos aleatorios
Para grabar datos en un archivo de acceso aleatorio se utiliza la sentencia Put.
Un ejemplo paso a paso:
primero declaramos una estructura de datos que contendr la informacin de cada
registro:
Private Type t_empleados
nombre As String * 15
apellido As String * 15
direccin As String * 30
edad As Integer
End Type
Luego creamos una variable que sea de tipo t_empleados.
Dim empleados As t_empleados
Ahora abrimos el archivo e indicamos en la funcin Len el tamao de la estructura
Open "datos.dat" For Random As #1 Len = Len(clientes)
Ahora le asignamos un valor a cada campo de la estructura de esta forma:
empleados.nombre = "Carlos"
empleados.apellido = "Martinez"
empleados.direccin = "Avenida 9 de julio n 2054"
empleados.edad = 45
Ahora grabamos en el registro n1 del archivo los datos de esta forma:
Put #1, 1, empleados
Si queremos grabar mas datos, por ejemplo en el registro n 2 del archivo hacemos lo
siguiente:
empleados.nombre = "Mara"
empleados.apellido = "Gonzales"
empleados.direccin = "Avenida 13 n 1100"
empleados.edad = 35
Put #1, 2, empleados
Close #1
como vemos ver la sentencia Put lleva 3 parmetros. El primero indica el numero de
archivo abierto en el cual estamos trabajando. en el segundo debemos indicar el
nmero de registro en el que se grabarn los datos. Si no ponemos el nmero de
registro, los datos se grabarn en el ltimo registro. Por ltimo en el tercer parmetro
le pasamos la variable asociada con la estructura de datos.
11 - Leer datos en archivos aleatorios
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.
12 - Posicionarse en un registro determinado
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:
Seek #1, 258
Get #1, , mivariable
si queremos posicionarnos en un registro determinado, pero en vez de leer, queremos
grabar datos, hacemos la misma operacin pero con la sentencia Put:
Seek #1, 258
Put #1, , mivariable
Nota: Desde este enlace pods ver un simple cdigo fuente de una Agenda de
contactos utilizando Archivos Directos - Aleatorios
13 - Funciones propias de vb para el manejo de ficheros y
directorios
Visual basic posee varias funciones para manejar archivos y directorios de nuestro
sistema. Las principales son.
14 - Funcin Dir
La funcin 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 patrn de bsqueda.
La sintaxis de la funcin es:
Dir (ruta, atributos)
En el parmetro ruta debemos indicar el path de un archivo, directorio o unidad. Si el
path no existe, la funcin Dir devuelve una cadena vaca.
En el parmetro atributos podemos especificar los siguientes:
vbnormal : cualquier atributo de archivo.
vbreadonly : archivos de solo lectura.
vbhidden: archivos ocultos
vbsystem : archivos de sistema
vbvolume : etiqueta de volumen de una unidad
vbdirectory : directorios
Ejemplo:
Si el archivo existe Dir devuelve "autoexec.bat"
Archivoabuscar = Dir("c:\autoexec.bat")
Tambin podemos utilizar los comodines * y ? para filtrar bsquedas.
En este ejemplo devuelve el primer archivo exe que encuentra, si es que existe.
Archivoabuscar = Dir("c:\windows\*.exe")
En este ejemplo la funcin Dir devuelve directorios adems de archivos
Archivoabuscar = Dir("c:\, vbdirectory")
El nico inconveniente de esta funcin es que siempre devuelve el primer archivo que
encuentra. Para que contine buscando los dems archivos debemos poner la funcin
sin parmetros. Ejemplo
Dim archivo As String
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 vaca y saldr del bucle While.
Este otro ejemplo verifica si un archivo existe:
Private Function Verificar_Existe(path) As Boolean
If Len(Trim$(Dir$(path))) Then
Verificar_Existe = True
Else
Verificar_Existe = False
End If
MsgBox Verificar_Existe
End Function
Private Sub Form_Load()
Call Verificar_Existe("c:\autoexec.bat")
End Sub
El siguiente enlace muestra un ejemplo de como utilizar la funcin Dir para buscar
archivos y tambin ordenarlos enforma alfabtica y luego agregar la lista en un control
Listbox
Este otro enlace muestra como buscar ficheros mediante el Api de windows
15 - Funcin FileCopy
FileCopy nos permite copiar archivos. Esta funcin es muy fcil de usar. ejemplo:
FileCopy "origen", "destino"
Nota: si el archivo existe la funcin lo sobre escribe.
16 - Funcin MkDir
Esta funcin se utiliza para crear directorios, pero crea un directorio por vez, es decir
que no crea varios niveles al mismo tiempo. La sintaxis es:
MkDir "Ruta directorio"
para poder crear un Directorio que contiene varios subdirectorios, podemos hacer lo
siguiente:
El ejemplo despliega un InputBox para ingresar el path a crear:
Private Sub Command1_Click()
Dim i As Integer
Dim Array_Dir As Variant
Dim Sub_Dir As String
Dim El_Path As String
El_Path = InputBox("Escriba la ruta del directorio a crear" & _
"con los subdirectorios", " Crear varios niveles de
directorios")
If El_Path = vbNullString Then Exit Sub
'Desglosa el path
Array_Dir = Split(El_Path, "\")
El_Path = vbNullString
'Recorre el array anterior para ir creando uno por uno
For i = LBound(Array_Dir) To UBound(Array_Dir)
Sub_Dir = Array_Dir(i)
If Len(Sub_Dir) > 0 Then
El_Path = El_Path & Sub_Dir & "\"
If Right$(Sub_Dir, 1) <> ":" Then
' Verificamos que no exista
If Dir$(El_Path, vbDirectory) = vbNullString Then
'Crea la carpeta
Call MkDir(El_Path)
End If
End If
End If
Next i
End Sub
17 - Funcin kill
La funcin kill se utiliza para eliminar archivos. Tambin es muy fcil de utilizar, y el
nico parmetro que lleva es la ruta del archivo que queremos eliminar. Si queremos
eliminar varios archivos de un directorio podemos utilizar el comodn"*", y si queremos
excluir ciertos archivos utilizamos el comodn "?".
kill "c:\*.txt"
18 - Funcin FileLen
E sta funcin nos devuelve el tamao en bytes de un archivo.
Ejemplo:
Dim tamao As Long
tamao = FileLen("c:\windows\system32\control.exe")
MsgBox tamao & " bytes"
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 tamao del archivo por el
tamao de la estructura.
Ejemplo:
Private Type t_personas
nombre As String * 20
apellido As String * 20
End Type
Dim cant_reg As Long
Private Sub Form_Load()
cant_reg = FileLen("c:\miarchivo.dat") / Len(t_personas)
End Sub
19 - Funcin Name
Name se utiliza para renombrar archivos y directorios. Esta funcin no se puede utilizar
para renombrar archivos abiertos.
Ejemplo:
Name "path del archivo viejo a renombrar" as "path y nombre nuevo del archivo"
Tambin con esta sentencia podemos mover archivos y directorios a otra ubicacin.
para ello debemos cambiar en el segundo parmetro la ruta del archivo.
20 - Funcin GetAttr y SetAttr
La funcin Getattr permite recuperar informacin sobre los atributos de un archivo o
directorio. Ejemplo:
GetAttr "ruta del archivo"
los valores devueltos por la funcin pueden ser los siguientes:
0 - normal
1 - solo lectura
2 - oculto
4 - archivo de sistema
16 - directorio
32 - archivo modificado
El siguiente ejemplo lo que hace es mostrar en un MsgBox los atributos de un archivo.
Colocar un TextBox llamado Text1 y un Command1.
Cdigo en el formulario:
Option Explicit
Private Sub Command1_Click()
Dim ret As Long
Dim Atributos As String
ret = GetAttr(Text1.Text)
If ret And vbNormal Then
Atributos = " Normal = Si" & vbNewLine
Else
Atributos = " Normal = No" & vbNewLine
End If
If ret And vbReadOnly Then
Atributos = Atributos & " Solo Lectura = Si" & vbNewLine
Else
Atributos = Atributos & " Solo Lectura = No" & vbNewLine
End If
If ret And vbHidden Then
Atributos = Atributos & " Oculto = Si" & vbNewLine
Else
Atributos = Atributos & " Oculto = No" & vbNewLine
End If
If ret And vbSystem Then
Atributos = Atributos & " Sitema = Si" & vbNewLine
Else
Atributos = Atributos & " Sitema = No" & vbNewLine
End If
If ret And vbDirectory Then
Atributos = Atributos & " Directorio = Si" & vbNewLine
Else
Atributos = Atributos & " Directorio = No" & vbNewLine
End If
'Muestra los atributos del archivo elegido
MsgBox Atributos, vbInformation, " Atributos "
End Sub
La funcin SetAttr lo que hace es establecer los atributos de un archivo .
Ejemplo:
SetAttr "ruta del archivo", valores de los atributos
21 - Funcin RmDir
RmDir elimina directorios o carpetas. Pero antes de eliminar directorios tenemos que
estar seguros que la carpeta no contiene archivos, de lo contrario nos dar un error
en tiempo de ejecucin. Si el directorio contiene archivos debemos eliminarlos
previamente con la sentencia kill.
Ejemplo:
RmDir "path del directorio a remover"
8 - Los Objetos de Visual basic y los mens
En esta seccin 8 se describen algunos de los principales objetos de visual basic que
permiten trabajar por ejemplo con el portapapeles , datos de nuestra aplicacin,
informacin de la pantalla y fuentes del sistema Tambin se ve el uso de los menues y
menues contextuales
Contenido
1 - Introduccin
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 - Introduccin
Estos objetos que tienen sus propiedades y mtodos definidos como cualquier otro
objeto, son fundamentales para utilizarlos en tiempo de ejecucin, y nos permiten
obtener informacin y realizar tareas especficas y variadas como por ejemplo:
Trabajar con la pantalla (objeto Screen), obtener datos referentes a nuestra aplicacin (
objeto App), el objeto Clipboard ( para trabajar con el portapapeles de windows) y
algunos otros
2 - El objeto App
El objeto App posee una serie de propiedades para obtener informacin de nuestra
aplicacin
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 aplicacin de forma relativa, es decir en
donde realmente se encuentre nuestra aplicacin, 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 aplicacin 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 aplicacin.
Ejemplo
ruta = App.Path & "\config.dat"
En el ejemplo anterior, si nuestra aplicacin contiene un archivo de configuracin del
programa, un grfico o cualquier otro fichero, para poder localizarlo lo hacemos
mediante el objeto App.path mas el archivo que deseamos e interponindole la barra
invertida.
Nota: lo que hay que tener en cuenta para que no se produzca un error en tiempo de
ejecucin, es que el objeto App.path nos devuelve solo el nombre de directorio de
nuestra aplicacin pero sin la barra invertida al final, es decir que si deseamos por
ejemplo hacer referencia a un archivo de nuestra aplicacin para trabajar con l,
debemos agregarlo nosotros.
Otro ejemplo podra 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 sera
Dim Ruta As String
Ruta = App.Path & "\imagen.gif"
Me.Picture = LoadPicture(Ruta)
Propiedad PrevInstance del objeto App
Esta propiedad se utiliza para comprobar si nuestro programa ya est cargado en
memoria devolvindonos un valor de tipo boolean, True en caso correcto o False si no
est abierto o cargado en memoria.
La propiedad PervInstance es importante ya que un usuario, por error, puede abrir
mas de una instancia de la aplicacin, algo que no tendra mucho sentido en la
mayora de los casos.
De este modo si se intenta abrir el programa mas de una vez, podemos mostrar un
mensaje informativo y descargar la aplicacin mediante la sentencia End, o no mostrar
nada y terminar la ejecucin. 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()
If App.PrevInstance = True Then
MsgBox " La aplicacin ya se encuentra cargada en memoria",
vbInformation
' Finaliza el programa
End
End If
End Sub
Otras propiedades del objeto App
ExeName: Con ExeName podemos recuperar el nombre del ejecutable de la
aplicacin en tiempo de ejecucin
Hinstance: Esta propiedad nos retorna el handle o manipulador de nuestra
aplicacin. Mediante esta propiedad y algunas Apis relacionadas con este tema
podemos controlar nuestra algunas cosas
Taskvisible: es una propiedad de tipo boolean que se utiliza para determinar si
nuestra aplicacin aparecer en la lista de tareas. Esta propiedad solo funciona
si nuestra aplicacin tiene la propiedad visible en false
3 - Objeto Screen
Con el objeto Screen se puede determinar y obtener informacin sobre las fuentes
instaladas en el sistema operativo, la resolucin actual de la pantalla, el formulario y/o
control que est activo,
Un ejemplo para poder obtener la resolucin del monitor:
Dim Ancho As Integer
Dim Alto As Integer
Ancho = (Screen.Width / Screen.TwipsPerPixelX)
Alto = (Screen.Height / Screen.TwipsPerPixelY)
MsgBox "La resolucin 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 conversin 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 coleccin llamado Fonts que es un vector que
contiene las fuentes del sistema y una propiedad llamada FontCount para saber la
cantidad de fuentes.
Ejemplo para cargar las fuentes del sistema en un control ListBox
Dim La_Fuente As Integer
'Recorre las fuentes
For La_Fuente = 0 To Screen.FontCount - 1
'Aade el nombre de la fuente al control
List1.AddItem Screen.Fonts(La_Fuente)
Next La_Fuente
Mediante 4 lneas de cdigo 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
Colocar un ComboBox en el formulario donde se listarn las impresoras instaladas, y en
agregar un Control ListBox donde agregarn las fuentes
Cdigo fuente en el formulario
Option Explicit
Private Sub Combo1_Click()
Ver_fuentes Combo1.ListIndex
End Sub
Private Sub Form_Load()
Dim ObjPrinter As Printer
' Recorre la lista de impresoras instaladas _
en el sistema y agrega el nombre en el combo
For Each ObjPrinter In Printers
Combo1.AddItem ObjPrinter.DeviceName
Next
End Sub
' Enumera las fuentes en el ListBox de la _
impresora seleccionada en el Combo
Sub Ver_fuentes(Impresora As String)
' Referencia a la impersora
Set Printer = Printers(Impresora)
Dim i As Integer
List1.Clear
' Lista las fuentes soportadas de la impresora
For i = 0 To Printer.FontCount - 1
List1.AddItem Printer.Fonts(i)
Next
End Sub
Enlaces relacionados
Listar las fuentes de windows y previsualizarlas
4 - El objeto ClipBoard
Con ClipBoard podemos trabajar con el portapapeles de windows, ya sea para
establecer o recuperar datos del mismo.
Ejemplo:
Para recuperar el texto guardado en el portapapeles:
Dim cadena As String
cadena = Clipboard.GetText
MsgBox cadena
Con este otro ejemplo podemos grabar o asignar un texto en el portapapeles
Clipboard.SetText "cadena de texto a grabar o variable string"
Con el mtodo Clear del objeto ClipBoard podemos borrar el contenido del
portapapeles (no requiere ningn parmetro)
Clipboard.clear
Con la siguiente lnea podemos copiar una imagen del portapapeles a un control
picture, si es que la hay, usando el mtodo Getdata del objeto Clipboard
Picture1.Picture = Clipboard.GetData
Lo siguiente copia una imagen cargada en un control de imagen al portapapeles, es
decir hacer lo contrario:
Clipboard.SetData Picture1.Picture
5 - Menues en visual basic
Ejemplo para crear menes y menes contextuales o tambin llamados men PopUp,
que son aquellos que se despliegan con el botn derecho del mouse.
Casi todas las aplicaciones por mas pequeas que sean, poseen un acceso a
determinadas o casi todas las opciones de un programa por medio de un men.
Si bien las opciones las podemos encontrar en la interface misma de la aplicacin, ya
sea por medio de botones, barras de herramientas etc.., nunca est dems que estn a
mano por medio de un men.
Visual Basic incorpora una herramienta llamada editor de menes para poder crearlos
Nota: El editor de Manes se encuentra en el men herramientas y solo est
disponible desde la vista diseo del formulario, es decir que si ests visualizando la
ventana de cdigo o un mdulo de cdigo debers cerrarlas y dejar visible el formulario
que ests diseando para que la opcin est habilitada.
6 - Los menues de cabecera y submenues
Los menes de cabecera son los menes 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 estn en un nivel por debajo del men archivo.
Crear un men
1. El primer paso es disear un buen diagrama que incluya la mayora de las
opciones, para que el usuario las pueda tener a mano tambin en el men.
2. Si observas otras aplicaciones, estas respetan el orden y ubicacin de sus
menues, es decir que si ests creando un programa que tiene opciones para imprimir
una hoja, esta se encontrarn en la seccin del men archivo, si tienes opciones de
edicin del documento como cortar copiar, pegar , seleccionar todo, etc..., las
encontrars en el men "edicin", si deseas crear un formulario "acerca de..", lo
ubicars en el men ayuda con el "nombre acerca de...". esta forma de diseo y
diagramacin es fundamental para que el programa sea estndar y aceptado por
todos, por llamarlo de alguna manera, ya que si bien nosotros recordamos el nombre y
donde se encuentra ubicada cada opcin, un usuario o tercero debe resultarle lo mas
sencillo posible el acceso a las opciones del mismo.
7 - Agregar elementos en un men
El siguiente ejemplo consiste en un formulario que contiene solo un control label que
nos mostrar una leyenda con el texto del men que seleccionamos o presionamos.
El men estar compuesto por 3 menues de cabecera, el primero llamado "Archivo", el
segundo "Edicin" y el ltimo "Ayuda". A su vez cada men tendr los siguientes
submenues:
1. Archivo : Este men contendr los submenues " Abrir ", " Guardar ", " Imprimir
" y " Cerrar "
2. Edicin: Contendr los submenues " Cortar ", " Copiar ", " Pegar ", "
Seleccionar todo "
3. Ayuda : Tendr los submenues " Ayuda " y " Acerca de.. "
El cuadro de dilogo 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:
Caption: en este campo debemos colocar la leyenda que mostrar el men, es
decir el texto que mostrar el mismo.
Name: en este campo debemos introducir un nombre para cada men. Este es
obligatorio y no puede estar duplicado ya que por medio de este nombre
identificaremos al men en el cdigo.
Index: en este campo que es opcional podemos introducir un nmero para
formar vectores de menues o arreglos de menues, en este ejemplo no se usa,
por ejemplo para crear menues en forma dinmica en tiempo de ejecucin
helpcontextid: este campo opcional podemos introducir un n para el tpico de
ayuda, por si el usuario presiona la tecla F1 justo cuando est posicionado en el
men.
Shortcut: Podemos ingresar una tecla de acceso rpido al men para que se
despliegue el mismo automticamente, como por ejemplo Ctrl + a, Ctrl + b,
etc...
Checked: este campo indica si el men tendr un tilde a la izquierda o no. Si
est en true lo muestra si est en False no. El campo es de tipo opcional.
Enabled : propiedad booleana que determina si el men est habilitado o no.
Esta propiedad es exactamente igual a la propiedad Enabled de cualquier control
de visual basic. El campo por defecto, mejor dicho la propiedad est en True
Visible : propiedad opcional y de tipo booleana que determina si el men estar
visible o no. Esta propiedad es ideal para crear los menues contextuales o
PopUp (mas adelante hay un ejemplo de como crear uno).
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 fcilmente en el cdigo. Entonces
ingresamos en este campo mnuarchivo
2. El segundo paso ser ingresar los submenues que estn por debajo del menu
archivo. Para ello presionamos el botn "siguiente" donde ingresaremos el men
"Abrir". como este es un submen debemos indicarlo con el botn 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 habrs observado los clsicos 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 lnea. para lograr esto se debe crear un
submen como cualquier otro justo arriba del men que queremos que aparezca la
lnea divisoria, y en la propiedad caption del mismo le colocamos el caracter menos -
5. Ahora ingresaremos el cdigo para que muestre la leyenda en el control Label
cada vez que presionemos un men.
6. Como habrs notado, el men se va incorporando al formulario en tiempo de
diseo como cualquier otro control de visual basic. Para ingresar el cdigo 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
cdigo en el men "Abrir" le damos un click en el mismo men desde la ventana de
diseo. Una vez abierta la ventana de cdigo 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 cdigo , por ejemplo en el caso anterior, por ejemplo si coloco esto en un
botn se llamara al procedimiento Click del men y se ejecutara el cdigo.
Call mnuabrir_click
Esto es til si tenemos una barra de herramientas, ya que no tendremos que escribir
cdigo 2 veces, y podemos usar un solo procedimiento haciendo una simple llamada al
mismo
8 - Menues contextuales o popup men
Los menues contextuales, esos que se despliegan cuando presionamos el botn
derecho del mouse, son simples menues pero con la diferencia de que los mismos
poseen la propiedad Visible en False, y luego se visualizan utilizando el mtodo
PopUpMenu
El mtodo PopUpMenu , se encuentra disponible solo para los formularios.
Los parmetros de este mtodo son los siguientes:
Nombreformulario.PopUpMenu "Elmenu", "flags", x , y, opcion
Menu: este es el men popup que debe estar en el formulario, es decir el
nombre
Flags: este parmetro indica la apariencia del men en el formulario. Ac
podemos utilizar las siguientes constantes para ubicar el men:
vbpopupmenuleftalign ubica el men en el lado izquierdo con respecto a x.
vbpopupmenucentertalign alinea en el centro de la coordenada x.
vbpopupmenurightalign lo alinea en el lado izquierdo. En la mayora de los
casos este parmetro no se utiliza.
X e Y: podemos indicar, aunque no se suele utilizar, las posiciones x e y donde
debe desplegarce el men.
opcion: en este parmetro opcional , podemos indicar el nombre de un
submen para que aparezca resaltado en negrita.
Si bien el men PopUp lo podemos llamar en cualquier momento, lo mas comn es
utilizarlo y desplegarlo cuando el usuario presiona el botn derecho sobre un control,
formulario etc...
Sabiendo esto , para desplegarlo por ejemplo cuando el usuario presiona el botn 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 botn que presionamos es el derecho , utilizando las constantes
VbRightButton, vbLeftButton
9 - Ejemplo para crear un men PopUp
Crear un men llamado mnuContextual con la propiedad visible en False y pegar esta
rutina en el formulario:
Private Sub form_mouseup(button As Integer, shift As Integer, x As
Single, y As Single)
' Consultamos si el botn presionado es el derecho
If button = vbRightButton Then
' Depliega el men PopUP
Me.PopupMenu mnucontextual
End If
End Sub
250 - Crear y eliminar un Men dinmicamente
Ejemplo simple para crear un menu en tiempo de ejecucin con la
funcin Load y eliminar los mismos con la funcin Unload
Nota: Cada Men tiene un Submen en forma oculta con la propiedad Index en 0 para
poder crear y eliminar los sub menu a partir de este usando la funcin Load ( carga y
crea uno a partir del ndice especificado ) y para eliminarlo con Unload tambin con el
ndice
Luego los sub mens se eliminan a partir del caption , recorriendo en un bucle For-Each
todos ellos y coparando el texto escrito en el text1, si es igual lo elimina
31 - Ocx para menu xp
Control Free hook Menuxp
Este ocx est bastante bueno y permite de una manera mas que fcil colocar men al
estilo Xp para proyectos en visual basic.
Nota: En este enlace , hay otra versin de este control, pero que permite aplicarle la
apariencia de Office 2003 a los menues
Como muestra las siguiente imgenes, se puede personalizar con varias opciones (
Color de fondo, borde , color de fuente, colores del menu seleccionado etc.. )
vista previa
Principales caractersticas de Hook Menu Xp:
1. Personalizar el tamao del cono al men y el color de la mscara ( en algunos
casoso la detecta automticamente )
2. Tiene en la ventana de propiedades la opcin "Personalizada" para configurar los
conos y dems para que sea mas fcil insertarlos y no tener que hacerlo medianete
cdigo
3. Configurar los colores de casi todos los aspectos del men, como el color de
cada opcin seleccionada, el backcolor de fondo, el color del separador, el color de la
fuente, del borde del men, el de la sombra etc..
4. Establecer los bitmap en tiempo de ejecucin si se desea con los mtodos
SetBitmap y SetBitmapByCaption.
Al crear el men desde Visual basic, cuando se selecciona la ventana de propiedades la
opcin , debemos elegir el men que queremos de la lista y luego presionar el botn
Nuevo, y aparecer al costado del item de men , un asterisco. Debajo hay un botn
Abrir para seleccionar el archivo de imagen que tendr el elemento del men en
cuestin.
Nota: Si no hacemos esto, las opciones para aadir el cono estar deshabilitada.
Una previa de esta ventana:
Ejemplo de un editor de texto usando formularios MDI
El siguiente ejemplo es un editor de texto muy simple utilizando un formulario Mdi, y
formularios secundarios o hijos para cada archivo de texto, es decir similar a como lo
hace el Word u otras aplicaciones que utilizan mltiples documentos
Crear un editor de texto simple utilizando forms mdi
Enalces relacionados con Mdi
1 - Pasos para crear el ejemplo:
Iniciar un nuevo proyecto Exe, aadir un formulario MDI y dejarlo por defecto con el
nombre Mdi Form1. Tambin agregar un formulario y renombrarlo a FrmDocumento
Las opciones que tendr el editor sern:
1. En el men Archivo: Abrir, Nuevo, guardar , guardar como y salir
2. El men Edicin : Copiar, Cortar, Pegar y seleccionar Todo.
La vista de los menes quedar similar a los siguientes grficos:
El men Archivo:
El men Edicin:
Los nombres de los menues debern ser los siguientes:
Men Archivo:
1. Abrir: mnuAbrir
2. Nuevo: mnuNuevo
3. Guardar: mnuGuardar
4. Guardar Como: mnuGuardarComo
5. Salir: mnuSalir
Men edicin
1. Copiar: mnuCopiar
2. Cortar: mnuCortar
3. Pegar: mnuPegar
4. Seleccionar todo: mnuSeleccionar
Nota: si no sabs como crear los menes con el editor de visual basic, pods chequear
este enlace que explica resumidamente como crear uno:
Crear menes en visual basic
Ahora hay que especificar en el formulario Mdi, en la propiedad MdiChild, que se
encuentre en True, para que de esta manera los formularios se abran dentro de este.
Ahora indicar en el men Proyectos > Propiedades de proyecto, que el formulario de
inicio sea el MDI, en la opcin Objecto inicial.
Luego agregar un control CommonDialog llamado CommonDialog1 en el formulario Mdi
y tambin otro en el formulario frmDocumento para poder utilizar los Cuadros de
dilogo Abrir Archivo y Guardar como. ( El control CommonDialog lo acceds desde
el men proyecto, Componentes > Microsoft Common Dialog Control ).
En el formulario frmDocumento, colocar un control RichTextBox llamado
RichTextBox1 y establecerle a este desde la ventana de propiedades, la propiedad
Multiline en True, La propiedad Scrollbars en 3. ( opara que muestre Ambas barras
de desplazamiento)
Por ltimo colocar un mdulo bas al proyecto
Agregar el cdigo fuente a los formularios y al mdulo bas
Cdigo fuente a colocar en el Formulario Mdi
Option Explicit
Private Sub MDIForm_Initialize()
CommonDialog1.Filter = "Documento de texto|*.txt|Todos los
Archivos|*.*"
End Sub
'Men abrir
Private Sub mnuAbrir_Click()
On Error GoTo errSub
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Set FrmDoc = New frmDocumento
FrmDoc.Show
ActiveForm.Caption = CommonDialog1.FileName
ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
End If
Exit Sub
errSub:
Select Case Err.Number
Case 70
ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
Resume Next
End Select
End Sub
'Menu Guardar Como
Private Sub mnuGuarcomo_Click()
On Error GoTo errSub
If Forms.Count = 1 Then
MsgBox "No hay documentos para guardar", vbInformation
Exit Sub
End If
CommonDialog1.ShowSave
If CommonDialog1.FileName = "" Then Exit Sub
ActiveForm.RichTextBox1.SaveFile CommonDialog1.FileName
Exit Sub
errSub:
Select Case Err.Number
Case 91
Resume Next
End Select
End Sub
'Men para guardar el archivo
Private Sub mnuGuardar_Click()
On Error GoTo errSub
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:
Select Case Err.Number
Case 91
Resume Next
End Select
End Sub
'Men nuevo archivo
Private Sub mnuNuevo_Click()
Set FrmDoc = New frmDocumento
nForms = nForms + 1
FrmDoc.Caption = sCaption & nForms
FrmDoc.Show
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
'Menu para seleccionar todo el texto
Private Sub mnuSeleccionar_Click()
On Local Error Resume Next
ActiveForm.RichTextBox1.SelStart = 0
ActiveForm.RichTextBox1.SelLength = Len(ActiveForm.RichTextBox1.Text)
End Sub
'Men Copiar texto
Private Sub mnuCopiar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
End Sub
'Men cortar texto
Private Sub mnuCortar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
ActiveForm.RichTextBox1.SelText = ""
End Sub
Cdigo fuente a colocar en el formulario frmDocumento
Option Explicit
Public flagGuardar As Boolean
Private Sub Form_Resize()
'Redimensionamos el control RichtextBox al ancho y alto del formulario
RichTextBox1.Move ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight
If WindowState = vbMaximized Then
'mdiform1.Caption = Me.Caption
Else
mdiform1.Caption = ""
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo errSub
Dim ret As Integer
If flagGuardar Then
ret = MsgBox(" Guardar cambios", vbYesNoCancel)
End If
Select Case ret
Case vbYes:
If InStr(1, Me.Caption, sCaption) Then
CommonDialog1.ShowSave
RichTextBox1.SaveFile CommonDialog1.FileName
Else
RichTextBox1.SaveFile Me.Caption
End If
Case vbCancel:
Exit Sub
End Select
Set FrmDoc = Nothing
Exit sub
errSub:
Select Case Err.Number
Case 75
Resume Next
End Select
End Sub
Private Sub RichTextBox1_Change()
flagGuardar = True
End Sub
Cdigo fuente a colocar en el Mdulo bas
Public FrmDoc As frmDocumento
Public nForms As Integer
Public Const sCaption = "Nuevo documento sin ttulo "
En este enlace est el cdigo 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
vista previa del mdi
Nota. Si quers poder aadir en el men archivo del formulario Mdi, la lista de los
archivos abiertos recientemente por el programa ( como lo hacen muchas aplicaciones
que utilizan formularios MDI, como por ejemplo el Word, o inicluso el Visual basic ),
pods ver este ejemplo que graba en el registro de windows las rutas de los ficheros, y
al cargar crea en forma dinmica los menes en tiempo de ejecucin. Luego al hacer
click en el elemento del men se ejecuta el archivo
Por ejemplo como muestra esta imagen:
Mtodos grficos - 1
Seccin que explica los aspectos bsicos del uso del los mtodos
grficos de Visual basic.
En la parte 1 se explica el uso de Line, para dibujar lneas y rectngulos, el mtodo
Circle para dibujar crculos, y el mtodo Pset y Point para puntos.
En la segunda pgina: los mtodos LoadPicture, PaintPicture, SavePicture y algunas
otras.
Mtodo Line - lneas y rectngulos
Mtodo Circle - Crculos, arcos y elipses
Mtodo Pset y Point
Funcin QbColor
1 - Mtodo Line :
Con este mtodo podemos dibujar Lneas y rectngulos en un objeto donde se permita
utilizar dicho mtodo, como por ejemplo en los Formularios, los controles PictureBox, el
objeto Printer.
Los parmetros de Line son:
El_Objeto.Line (X1, Y1) - ( X2, Y2), El_Color, BF
Donde El_Objeto es donde vamos a dibujar.
Los primeros dos parmetros son las coordenadas para X e Y, luego el color de la lnea
y por ltimo el parmetro BF al igual que el color, es un parmetro de tipo opcional, y
aqu podemos pasar como valor: B o BF o ningn valor
Si pasamos B, se dibujar un rectngulo sin relleno. Si pasamos BF el rectngulo tendr
de relleno el color especificado en el parmetro Color. Si no pasamos nada se dibuja
una lnea
Ejemplos:
Lo siguiente dibuja una lnea 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, sern los establecidos en el ScaleMode del Objeto donde dibujar, en
este caso se coloc en Pixeles ( vbPixels )
Este otro dibuja una lnea horizontal y otra vertical a lo ancho y alto del Formulario, al
mover el puntero del mouse. A la primer lnea se le aplica el color verde, a la la lnea
horizontal el color Rojo, utilizando las constantes de color de vb. ( VbgGreen y VbRed )
Option Explicit
Private Sub Form_MouseMove(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
' Limpia el Form
Cls
'Dibuja la lnea vertical
Line (X, ScaleTop)-(X, ScaleHeight), vbGreen
'Dibuja la lnea Horizontal
Line (Me.ScaleLeft, Y)-(Me.ScaleWidth, Y), vbRed
End Sub
En este otro ejemplo, se dibuja en el formulario, una cantidad x de lineas con colores
aleatorios, utilizando la funcin Rnd de visual basic para generar el color aleatorio y
para la cantidad de lineas :
colocar un control timer
Cdigo fuente en el formulario
Option Explicit
Private Sub Form_Load()
Form1.BackColor = vbBlack
Form1.ScaleHeight = 100
Form1.ScaleWidth = 100
Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
Dim x As Long
Dim x1 As Long, x2 As Long
Dim y1 As Long, y2 As Long
Dim Color As Long
' si el form est minimizado sale
If Form1.WindowState = vbMinimized Then
Exit Sub
End If
' limpia el formulario
Me.Cls
' Int(Rnd * 50) + 1, es la cantidad de lineas
For x = 0 To Int(Rnd * 50) + 1
DoEvents
' valores x e y para la linea actual
x1 = Int(Rnd * 101)
x2 = Int(Rnd * 101)
y1 = Int(Rnd * 101)
y2 = Int(Rnd * 101)
' color aleatorio de 1 a 15 que luego se usa con Qbcolor
Color = Int(Rnd * 15)
' dibuja la linea
Form1.Line (x1, y1)-(x2, y2), QBColor(Color)
Form1.Line (x1, y2)-(x2, y1), QBColor(Color)
Form1.Line (x2, y1)-(x1, y2), QBColor(Color)
Form1.Line (y1, y2)-(x1, x2), QBColor(Color)
Next x
End Sub
Este cdigo dibuja lineas, como si fuese un lapiz, es deicir al mantener presionado el
mouse en el formulario:
Option Explicit
Dim Flag As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'Establece el CurrentX y el CurrentY
CurrentX = X
CurrentY = Y
Flag = True
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Flag = False Then
Exit Sub
End If
'Dibuja la linea
Line -(X, Y)
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Flag = False
End Sub
Lo siguiente dibuja un rectngulo sin relleno de color Rojo, pasndole la B como
parmetro al mtodo Line
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbRed, B
Ahora, en ves de especificar B, se indica el valor BF para rellenar el rectngulo :
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbRed, BF
Cuando se dibujan rectngulos, es decir se utiliza B o BF, X1 , Y1, X2 e Y2 sera
equivalente a :
El_Objeto.Line (Izquierda, Arriba) - (Ancho, Alto).
El siguiente ejemplo dibuja una lnea vertical de color verde una al lado de la otra en
todo el ancho del formulario, en un bucle:
Private Sub Form_Paint()
Me.ScaleMode = vbPixels
For i = 0 To Me.ScaleWidth Step 10
Line (i, 10)-(i, Me.ScaleHeight - 10), vbGreen
Next
End Sub
Propiedad CurrentX y CurrentY
CurrentX devuelve o establece las coordenadas horizontales para el siguiente mtodo
de dibujo. CurrentY devuelve o establece las coordenadas verticales para el siguiente
mtodo de dibujo, en este caso para el mtodo Line.
Lo siguiente, dibuja al presionar un Command1, un rectngulo de 25 pixeles de ancho
por 50 pixeles de alto. Y la posicin izquierda y la posicin superior (x1 e y1), es decir
el CurrentX y el CurrentY, se puede ver como no cambian su valor, y se mantienen
igual. Es decir, la primera ves que se presiona para dibujar el primer rectngulo,
Currentx y Currenty valen 0. Luego la segunda ves, Currentx tiene el valor 25 y
Currenty el valor 50. si se sigue presionando el Command1, mientras no se cambie
explicitamente el valor , currentx y Currenty mantendrn dichos valores, x2 e y2.
Private Sub Command1_Click()
Me.Line (CurrentX, CurrentY)-(25, 50), vbRed, B
MsgBox "Pos x: " & CurrentX
MsgBox "Pos y: " & CurrentY
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Siguiendo el ejemplo anterior, si quisieramos que las coordenadas x2 e y2 sean
relativas a x1 e y1, podemos utilizar la palabra reservada Step.
Este cdigo es exactamente igual al anterior, con la diferencia de que se utiliza Step
para especificar el Currentx y el Currenty para que x2 e y2 sea relativo a x1 e y1, el
resultado sera esto:
Este es igual al anterior pero la posicin Superior (y1) es fija, y lo que se desplaza es la
posicin horizontal, es decir el CurrentX, y cada ves que se presione el Command1 , el
Currentx (la posicin izq ) se incrementar de 25 en 25 pixeles.
Private Sub Command1_Click()
Me.Line (CurrentX, 20)-Step(25, 50), vbRed, B
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Tambin se podra haber hecho lo mismo sin utilizar Step:
Private Sub Command1_Click()
Me.Line (CurrentX, 0)-(CurrentX + 25, 50), vbRed, B
End Sub
Private Sub Form_Load()
ScaleMode = vbPixels
End Sub
Este otro ejemplo, dibuja un cuadrado uno al lado del otro , a lo ancho del formulario,
el rectngulo es de 10 pixeles de ancho por 10 pixeles de alto, y cada cuadrado est
separado por 5 pixeles ente uno y otro.
Private Sub Form_Load()
Dim Izquierda As Single
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 rectngulos de 25 x 25 pixeles uno al lado del otro, en todo el
formulario mediante dos bucles For. El primer bucle es para los rectngulos horizontales
y el otro para los verticales.
Private Sub Command1_Click()
Me.Cls
For Horizontal = 0 To ScaleWidth Step 30
For vertical = 0 To ScaleHeight Step 30
Line (Horizontal, vertical)-Step(25, 25), &H808080, B
Next
Next
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Dibujar cuadrcula
Lo siguiente dibuja una cuadracula mediante el mtodo Line en el objeto indicado,
puede ser un picturebox o formulario, indicando la cantidad de cuadros para la forma
horizontal y la cantidad para el vertical.
Cdigo fuente en el formulario
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
' limpiar objeto
Objeto.Cls
mx = CLng(Objeto.ScaleWidth / CountX)
my = CLng(Objeto.ScaleHeight / CountY)
' cambiar color del lpiz
Objeto.ForeColor = x_Color
' dibujar las lneas verticales de la cuadricula
For i = 0 To CountX
Objeto.Line (i * mx, 0)-(i * mx, Objeto.ScaleHeight)
Next i
Objeto.ForeColor = y_Color
' dibujar las lneas horizontales de la cuadricula
For i = 0 To CountY
Objeto.Line (0, i * my)-(Objeto.ScaleWidth, i * my)
Next i
End Sub
Private Sub Form_Load()
With Me
.BackColor = vbWhite
.ForeColor = vbBlue
.FontSize = 12
.AutoRedraw = True
End With
Call Dibujar_cuadricula(Me, 25, 25, vbBlue, vbRed)
'Call Dibujar_cuadricula(Me, 5, 10, vbBlue, vbRed)
'Call Dibujar_cuadricula(Me, 25, 50, vbBlue, vbRed)
End Sub
Propiedad DrawWidth
Para establecer el grosor de la lnea de dibujo se utiliza la propiedad DrawWidth.
Este ejemplo dibuja lneas 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
Private Sub Command1_Click()
Picture1.Cls
Picture1.ScaleMode = vbPixels
For i = 0 To ScaleWidth Step 25
Picture1.Line (i, 10)-(i, Picture1.ScaleHeight - 10),
vbGreen
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
mtodo Line, como muestra la siguiente captura:
Para crear le ejemlo colocar la propiedad BorderStyle del formulario en 0 - None, y
pegar el siguiente cdigo:
Private Sub Form_Load()
With Me
'Algunas propiedades del formulario
.AutoRedraw = True
.ScaleMode = 3
.FontSize = 16
.ForeColor = &HC0FFFF
End With
End Sub
Private Sub Form_Resize()
'Esto dibuja el degradado al formulario
Degradado Me
'Esto dibuja el borde al formulario
Call Dibujar_Borde
End Sub
Sub Dibujar_Borde()
Me.DrawStyle = 0
Me.DrawWidth = 10
Line (0, 0)-(ScaleWidth - 1, ScaleHeight - 1), &HFFC0C0, B
End Sub
Sub Degradado(vForm As Form)
Dim intContador As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawWidth = 2
'vForm.ScaleHeight = 256
For intContador = 0 To 255
vForm.Line (0, intContador)-(Screen.Width, _
intContador - 1), _
RGB(0, 0, 255 - intContador), B
Next
Me.CurrentX = 20
Me.CurrentY = 20
Me.Print " Ejemplo para dibujar un borde a un formulario "
End Sub
2 - Mtodo Circle
El mtodo Circle permite dibujar un crculo, una elipse o un arco sobre un objeto.
La sintaxis del mtodo es la siguiente:
EL_Objeto.Circle (Step As Integer, X As Single, Y As Single, Radius As Single, Color As
Long, Start As Single, End As Single, Aspect As Single)
Los valores para X e Y especifican el punto donde estar el centro del crculo a dibujar.
Radius es el valor del radio del mismo. El parmetro es obligatorio.
Color: Valor que indica el color que tendr el crculo o elipse para su contorno. Se
puede pasar cualquier valor admitido en visual basic, por ejemplo un Long, un valor
Rgb etc..
Los parmetros Start y End son opcionales , y se utilizan para dibujar parte de una
elipse o crculo
Por ltimo el parmetro Aspect, se utiliza para definir el aspecto del crculo. Este valor
es opcional. Ver ejemplos mas abajo.
El siguiente ejemplo crea un crculo en el centro de un control PictureBox, con un radio
de 50 pixeles.
Private Sub Command1_Click()
Picture1.Cls
With Picture1
Picture1.Circle (.ScaleWidth / 2, .ScaleHeight / 2), _
50, _
vbBlue
End With
End Sub
Private Sub Form_Load()
Picture1.ScaleMode = vbPixels
End Sub
Este ejemplo dibuja un crculo con un radio aleatorio entre 10 y 100 pixeles, al hacer
click en el formulario, es decir el centro del crculo ( x1 e y1 ), son los valores x e y del
evento MouseDown del Form:
Private Sub Form_Load()
ScaleMode = vbPixels
Me.DrawWidth = 2
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Circle (X, Y), Int((100 - 10 + 1) * Rnd + 10), vbRed
End Sub
Rellenar las circunferencias
Para esto se utiliza las propiedades FillColor y FillStyle. FillColor es el color de relleno,
para FillStyle ver las opciones de estilos para los rellenos: 0 - Slido, 1 - transparente,
2 - Lnea Horizontal, 3 - Lnea Vertical etc..
Un ejemplo: este es igual al anterior, pero rellena el crculo de un color aleatorio,
siempre y cuando la propiedad FillStyle no sea transparente:
Colocar un Command1 y un Combo1 en el formulario:
Private Sub Combo1_Click()
Me.FillStyle = Combo1.ListIndex
End Sub
Private Sub Command1_Click()
Me.Cls
End Sub
Private Sub Form_Load()
ScaleMode = vbPixels
'Grosor de la lnea
Me.DrawWidth = 2
'Opciones de estilo de relleno
With Combo1
.AddItem " 0 - Solido "
.AddItem " 1 - Transparente "
.AddItem " 2 - Linea Horizontal "
.AddItem " 3 - Linea Vertical "
.AddItem " 4 - Diagonal Arriba "
.AddItem " 5 - Diagonal Abajo "
.AddItem " 6 - Cross "
.AddItem " 7 - Diagonal Cross "
End With
Command1.Caption = "Limpiar"
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'color de relleno aleatorio
Me.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd))
'Dibuja el crculo
Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _
RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd))
End Sub
Dibujar Elipses
Para dibujar Elipses se debe especificar en el parmetro Aspecto los siguientes valores.
Por ejemplo si pasamos un 1, el crculo ser una circunferencia perfecta, si pasamos 0.5
, el radio horizontal del mismo ser el doble que el radio vertical, si pasamos un 2 lo
contrario.
Para el ejemplo del grfico, colocar un Combo1 y este cdigo en el Form:
Private Sub Form_Load()
ScaleMode = vbPixels
'Grosor de la linea
Me.DrawWidth = 2
For i = 0.1 To 2.1 Step 0.1
Combo1.AddItem i
Next
Combo1 = Combo1.List(0)
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _
RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)), ,
, CSng(Combo1)
End Sub
3 - Mtodo Point y mtodo Pset :
El mtodo Point lo que hace es devolver , como un nmero entero ( un Long ), el color
RGB del punto que se le especifique, puede ser utilizado tanto en un Formulario como
en un PictureBox.
El mtodo Pset establece un color determinado para un punto de un objeto.
El siguiente ejemplo utiliza los dos mtodos.
Cargar un grfico en un Picture1 y tambin colocar un Picture2. Al hacer click en el
Picture1, en el evento MouseDown, se obtendr el color de ese pixel, y ese valor se le
aplicar al BackColor del Picture2, como se ve en el grfico, el punto verde es el
establecido con el mtodo Pset.
Private Sub Form_Load()
'Modo de escala en pixeles
Picture2.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
'Grosor del punto
Picture1.DrawWidth = 3
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Picture1.Cls
' Establece el color del Picture2 mediante el mtodo Point
Picture2.BackColor = Picture1.Point(X, Y)
' Dibuja el punto
Picture1.PSet (X, Y), vbGreen
'Valor Hexadecimal del color
Me.Caption = "Valor del color: " & Hex(Picture2.BackColor)
End Sub
Nota: la forma y variaciones en las que se dibuja el punto u otras figuras mediante los
mtodos grficos, 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 lnea desde un punto hacia el otro punto mediante el mtodo Line
Cdigo fuente
Dim X1 As Single
Dim Y1 As Single
Private Sub Form_Load()
AutoRedraw = True
End Sub
Private Sub Form_MouseDown(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
DrawWidth = 10
'Dibuja el punto con Pset pasandole el x e y donde se hizo click
PSet (X, Y), vbBlack
If X1 <> 0 And Y1 <> 0 Then
DrawWidth = 3
'Dibuja la linea
Line (X1, Y1)-(X, Y), vbWhite
End If
X1 = X
Y1 = Y
End Sub
Este otro ejemplo dibuja puntos en el formulario en forma aleatoria
Colocarle al formulario la propiedad WindowState en Maximized y tambien agregar un
control CommandButton
Cdigo fuente en el formulario
Dim Tiempo As Long
Private Sub Command1_Click()
' dibuja los puntos en el formulario
Call Dibujar_Puntos(vbBlue)
' dibuja los puntos en el formulario
Call Dibujar_Puntos(vbButtonFace)
End
End Sub
Function Dibujar_Puntos(Color As Long)
Dim Posicion_X
Dim Posicion_Y
Tiempo = Timer + 5
While Tiempo >= Timer
' valores para la posicin 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
Private Sub Form_Load()
' modo de escala en pixeles y grosor del lapiz para el formulario
ScaleMode = 5
DrawWidth = 10
End Sub
4 - Funcin QBColor:
Definicin de la funcin QBColor de Visual basic:
Esta funcin devuelve el cdigo de color RGB de un nmero de color especificado de
una lista de colores estndar predefinidos
Es decir, esta funcin tiene como parmetro, un nmero entre el 0 y 15, es decir 16
valores posibles para retornar un color especifico.
El siguiente ejemplo, muestra el uso de esta funcin. Lo que hace es recorer en un
bucle, desde el 0 hasta el 15, y le cambia el BackColor a un arreglo de controles Label.
Colocar una matriz de Label1. Label1 (0), Label1(1) .... hasta el Label1(15)
Private Sub Form_Load()
Me.Caption = " Ejemlpo de la funcin QBColor"
Dim i As Integer
For i = 0 To 15
' Asigna el color devuelto por la funcin QBColor _
al color de fondo del Label
Label1(i).BackColor = QBColor(i)
' Asigna el caption
Label1(i).Caption = " Valor de QBColor: >> " & i
Next i
End Sub
Al ejecutar el formulario se ver algo por el estilo:
Nota: cualquier valor que no est entre el 0 y el 15, producir error
Cdigo fuente para dibujar usando los mtodos grficos de Visual Basic
Ejemplo que muestra como podemos utilizar los mtodos grficos
del visual Basic para dibujar lneas, crculos y rectngulos sobre
un control PictureBox
El cdigo es muy fcil y nada complicado, ni siquiera utiliza funciones Api.
El autor del mismo es HiT_MaN
Se pueden dibujar crculos, polgonos, con o sin relleno, lneas continuas, puntos y
establecerle el color a las figuras haciendo uso de los Mtodos grficos de visual basic:
Line, Circle, PSe
Colocar dentro de un formulario como muestra la imagen, los siguiente controles:
Picture1
Un control Frame1
Dentro del Frame1: 1 Label1 y abajo un Combo1. Al costado del combo1 un
Check1
A la derecha del Frame, un Shape1 y al costado 3 HScrollBar (HScroll(0),
HScroll(1) y HScroll(2))
Nota: no hace falta poner los valores de los controles ya que se hacen por cdigo:
vista previa
Cdigo fuente en el Formulario:
Texto planoCopiar cdigo fuenteImprimir
1.
2. '* Description : Ejemplo de programa para dibujar en un picturebox
3. '**************************************************************************
*
4.
5. 'Variables para almacenar las coordenadas _
6. para los rectngulos y para los crculos
7. Dim X1 As Long
8. Dim Y1 As Long
9. Dim X2 As Long
10. Dim Y2 As Long
11.
12. Private Sub Combo1_Click()
13. Label1.Caption = "Tipo de dibujo: " & Combo1.Text
14. If Combo1.ListIndex = 1 Then
15. Check1.Enabled = True
16. Else
17. Check1.Enabled = False
18. End If
19. End Sub
20.
21. Private Sub Combo1_KeyPress(KeyAscii As Integer)
22. KeyAscii = 0
23. End Sub
24.
25. Private Sub Form_Load()
26.
27. 'Agregamos los valores al combo1 que _
28. muestra los posibles dibujos a realizar
29.
30. With Combo1
31. .AddItem "Continuo"
32. .AddItem "Rectangulo"
33. .AddItem "Circulo"
34. .AddItem "Punto"
35. End With
36.
37. HScroll(0).Min = 0: HScroll(1).Min = 0: HScroll(2).Min = 0
38. HScroll(0).Max = 255: HScroll(1).Max = 255: HScroll(2).Max = 255
39. Combo1.ListIndex = 0
40.
41. End Sub
42.
43. Private Sub Form_Resize()
44.
45. 'Redimensionamos los controles
46. On Error Resume Next
47.
48. Frame1.Left = (Me.Width - Frame1.Width) / 2
49. Frame1.Top = Me.Height - (Frame1.Height + 480)
50.
51. Picture1.Width = Me.Width - 360
52. Picture1.Height = Frame1.Top - 180
53.
54. End Sub
55.
56. Private Sub HScroll_Change(Index As Integer)
57.
58. 'Esto le da el color de borde al shape1 _
59. de acuerdo al valor de los ScrollBar
60. Shape1.BorderColor = RGB(HScroll(0).Value, HScroll(1).Value, HScroll(2)
.Value)
61.
62. 'Esto le da el color de fondo al shape1 _
63. de acuerdo al valor de los ScrollBar
64. Shape1.FillColor = RGB(HScroll(0).Value, HScroll(1).Value, HScroll(2).V
alue)
65.
66. End Sub
67.
68. Private Sub Picture1_MouseDown(Button As Integer, _
69. Shift As Integer, _
70. X As Single, Y As Single)
71.
72. 'Almacenamos en estas variables los valores del ratn
73. X1 = X
74. Y1 = Y
75. X2 = X
76. Y2 = Y
77.
78. If Combo1.Text = "Rectangulo" Or Combo1.Text = "Circulo" Then
79. Picture1.PSet (X, Y), Shape1.FillColor
80. End If
81. End Sub
82.
83. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _
84. X As Single, Y As Single)
85.
86. If Button = vbLeftButton Then
87. 'Lnea continua
88. If Combo1 = "Continuo" Then
89. Picture1.Line (X1, Y1)-(X, Y), Shape1.FillColor
90. X1 = X: Y1 = Y
91. End If
92. 'Para dibujar los puntos
93. If Combo1 = "Punto" Then
94. Picture1.PSet (X, Y), Shape1.FillColor
95. End If
96. End If
97.
98. End Sub
99.
100. Private Sub Picture1_MouseUp(Button As Integer, _
101. Shift As Integer, _
102. X As Single, _
103. Y As Single)
104. On Error Resume Next
105.
106. X1 = 0
107. Y1 = 0
108. 'Si estamos en modo de rectngulo
109. If Combo1 = "Rectangulo" Then
110.
111. If Check1.Value = 0 Then
112. 'Si no tiene relleno
113. Picture1.Line (X2, Y2)-(X, Y), Shape1.FillColor, B
114. Else
115. 'si tiene relleno
116. Picture1.Line (X2, Y2)-(X, Y), Shape1.FillColor, BF
117. End If
118. End If
119.
120. 'Para los crculos
121. If Combo1 = "Circulo" Then
122. 'sin relleno
123. If X > X2 Then
124. Picture1.Circle (X2, Y2), X - X2, Shape1.FillColor
125. End If
126.
127. 'Con relleno
128. If X2 > X Then
129. Picture1.Circle (X2, Y2), X2 - X, Shape1.FillColor
130. End If
131. End If
132. End Sub
133.
Mtodos grficos 2
Seccin que explica los aspectos bsicos del uso del los mtodos PaintPicture,
LoadPicture y SavePicture de visual basic , que permiten leer , guardar , dibujar y
copiar grficos e imgenes
Funcin LoadPicture
Funcin SavePicture
Mtodo PaintPicture
1 - Funcin LoadPicture :
Esta funcin se utiliza para cargar una imagen o grfico en un control Form, PictureBox
o Image.
Esta funcin requiere como parmetro obligatorio, el path del archivo de imagen a
cargar en el objeto.
Por ejemplo lo siguiente carga un grfico en un control PictureBox:
Picture1.Picture = LoadPicture("c:\archivo.bmp")
Lo mismo sera 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 habra que utilizar el Api de windows o algn componente
externo, para poder leerlos.
Nota: En este enlace hay un Mdulo de clase que permite visualizar grficos e
imgenes de tipo PNG
Para cargar en un control Image:
Image1.Picture = LoadPicture("c:\archivo.bmp")
Para cargar en un Form:
El_Formulario.Picture = LoadPicture( La ruta)
Tambin hay otras propiedades de algunos controles, que requieren por lo general el
uso de esta funcin para cargar un archivo grfico a dicha propiedad, como es el caso
de:
La propiedad Icon de los formularios. La propiedad MouseIcon para establecer un icono
personalizado al mouse. La propiedad DragIcon que permite establecer el icono que se
va a mostrar como puntero en una operacin de arrastrar y colocar, y algunas otras.
lo siguiente establece un archivo de cono al puntero del Mouse para el formulario:
Me.MousePointer = vbCustom
Me.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Para establecer el cono en un control TextBox:
Text1.MousePointer = vbCustom
Text1.MouseIcon = LoadPicture(La_Ruta_Del_Icono)
Adems de los controles, se pueden cargar archivos con la funcin LoadPicture, por
ejemplo en los siguientes tipos de variables: IPictureDisp, Picture stdPicture.
Aclarar que al cargar un grfico en la variable, se debe establecer con la instruccin
Set, por ejemplo:
Dim La_Imagen As Picture
Set La_Imagen = LoadPicture("c:\windows\plumas.bmp")
Picture1.Picture = La_Imagen
Lo anterior carga en el la variable " La_Imagen " el archivo grfico, y luego se puede
pasar dicha variable a un objeto que tenga la propiedad Picture, en este caso se paso
un control Picture1.
Para eliminar de la memoria la variable, se utiliza el valor Nothing tambin con la
instruccin Set , por ejemplo:
If Not La_Imagen Is Nothing Then
'Descarga la variable de la memoria
Set La_Imagen = Nothing
End If
Capturar el error 53.
Cuando cargamos un archivo con la funcin, y el path del archivo no existe, es decir
que no se encuentra el fichero, se produce el error 53.
Un ejemplo para capturar el error:
On Error GoTo errSub
Picture1.Picture = LoadPicture(Ruta)
Exit Sub
'Error
errSub:
If Err.Number = 53 Then
MsgBox "No se puede cargar el archivo, verifique la ruta",
vbCritical
End If
2 - Mtodo SavePicture:
Este mtodo lo que hace es guarda en un archivo en disco, un grfico cargado en un
control Form, PictureBox o un control Image.
Este posee dos parmetros, uno que especifica el Objeto Picture, y otro la ruta del
archivo a generar
Savepicture Picture As IPictureDisp,FileName as String
Su uso es muy simple. A continuacin una serie de ejemplos:
Esto lo que es cargar en un control Image, un grfico del disco, y luego mediante otro
botn, utilizando un control CommonDialog, guarda el archivo cargado en el Image en
la ruta especificada:
Colocar un Control CommonDialog1, un control Image1 y dos controles
CommandButton, Command1 y Command2:
Cdigo en el formulario:
'Botn que carga el el archivo de imagen en el control Image
Private Sub Command1_Click()
On Error GoTo errSub
With CommonDialog1
.DialogTitle = "Seleccionar un archivo"
.Filter = "Archivos BMP|*.bmp|Archivos JPG|*.bmp|Todos|*.*"
.ShowOpen
If .FileName = "" Then Exit Sub
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
'Botn que guarda el contenido del control Image en un nuevo archivo
Private Sub Command2_Click()
With CommonDialog1
.DialogTitle = "Guardar el archivo"
.Filter = "Todos los Archivos|*.*"
.ShowSave
If .FileName = "" Then
MsgBox "No se especific ningn nombre", vbCritical
End If
If Image1.Picture <> 0 Then
SavePicture Image1.Picture, .FileName
Else
MsgBox "No hay un grfico cargado para poder guardar",
vbExclamation
End If
End With
End Sub
Private Sub Form_Load()
Command1.Caption = "Abrir"
Command2.Caption = "Guardar"
End Sub
Este otro ejemplo, guarda el contenido del portapapeles de windows, en un nuevo
archivo de tipo BMP.
Nota, debe haber una imagen vlida 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 cdigo para generar el archivo
If Clipboard.GetFormat(vbCFBitmap) = True Then
'Guarda la imagen
SavePicture Clipboard.GetData(vbCFBitmap), "c:\Archivo.BMP"
Else
'Error: no coincide el Formato
MsgBox "La imagen del portapales no es vlida", vbCritical, "No se
pudo guardar"
End If
3 - El Mtodo PaintPicture de Visual basic
La definicin de este mtodo es la siguiente:
El mtodo PaintPicture permite dibujar el contenido de un archivo de grficos en un
Formulario, en un PictureBox o un objeto Printer.
La sintxis del mtodo es la siguiente:
El_objeto.PaintPicture La_Imagen, x1, y1, Ancho1, Alto1, x2, y2,
Ancho2, Alto2, Opecode
El_Objeto:
Es como se coment, donde vamos a dibujar el grfico, puede ser un form, un picture o
en el objeto Printer
La_Imagen
Este parmetro 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 tambin en una variable de tipo
StdPicture, IpictureDisp o de tipo Picture. Ver mas adelante un ejemplo de esto ltimo
de como utilizar grficos cargados en variables
X1 e y1:
Son las coordenadas de destino, es decir la posicin Izquierda y Arriba ( Left - Top ),
donde se presentar la imagen a dibujar en el objeto destino
Ancho1 y Alto1:
Estos parmetros especifican el ancho y alto que tendr la imagen a dibujar. Estos
parmetros son opcionales, y si se omiten, la imagen se dibujar en el objeto con las
dimensiones que tenga.
x2 e y2 :
Son las coordenadas a tomar en la imagen, es decir es la zona de recorte de la misma.
Con estos parmetros podemos copiar un trozo del grfico, si se omite, ya que es
opcional, se toma la imagen completa.
Ancho1 y Ancho2:
Al igual que x2 e y2 son opcionales, y determinan el ancho y alto de la imagen en el
objeto destino
Ejemplos:
Cargar en un control PictureBox un grfico. Luego al presionar un command1, se
copiar la imagen del Picture en el formulario.
El cdigo del CommandButton sera:
Private Sub Command1_Click()
'Copia el grfico en el formulario
Me.PaintPicture Picture1.Picture, 0, 0
End Sub
Como se ve en el cdigo, indicamos que copie la imagen del picture1 en el formulario,
es decir en el primer parmetro le pasamos la propiedad Picture del control. Luego, se
indica la posicin izquierda y Arriba ( Left - Top ) en el objeto destino, en este caso el
Form. Los dems parmetros son opcionales, y como en este caso se omitieron, la
imagen se copiar con las dimensiones que tenga, es decir una copia exacta.
Si en cambio en ves de especificar 0 para x y 0 para y, le especificaramos 500, y 500,
el resultado sera el siguiente:
Importante. Los valores para las dimensiones y posiciones del mtodo PaintPicture, ya
sea para las coordenadas x1, y1, ancho1, alto1, ancho2 y alto2, depende de la
propiedad ScaleMode del objeto destino. En el ejemplo anterior, se asume que se copi
en la posicin izquierda y Top, usando Twips como medida, por lo que si haces la
prueba y cambias la propiedad ScaleMode del formulario, por ejemplo a vbPixels, la
imagen se copiar tomando dicho modo de escala, es decir en pixeles. Lo mas comn,
es trabajar con pixeles, es mas cmodo.
Ejemplo 2:
Este ejemplo es igual al anterior, pero se utilizarn cuatro controles TextBox para
indicar la posicin x1, y1, ancho1 y ancho2.
Nota: el cdigo no tiene una rutina de error para comprobar que algunos valores sean
correctos, es decir si por ejemplo colocamos un valor que no sea numrico, dar error.
tambin se producir un error en tiempo de ejecucin , si pasamos a PaintPicture, en
Ancho1 y Alto1, el valor 0
Cdigo fuente en el formulario:
Private Sub Command1_Click()
'Limpia el contenido del formulario
Me.Cls
'Copia el grfico en el formulario con los valores
Me.PaintPicture Picture1.Picture, CSng(Text1), _
CSng(Text2), _
CSng(Text3), _
CSng(Text4)
End Sub
Private Sub Form_Load()
' Modo de escala del formulario en pixeles
Me.ScaleMode = vbPixels
End Sub
Ejemplo 3
Lo siguiente copia el grfico cargado en un PictureBox llamado Pic_Origen, a otro
PictureBox llamado Pic_Destino.
Private Sub Command1_Click()
'Copia el grfico con el ancho y alto que tenga _
Pic_Destino
Pic_Destino.PaintPicture Pic_Origen, 0, 0, _
Pic_Destino.ScaleWidth, _
Pic_Destino.ScaleHeight
End Sub
Como se ve, en los parmetros que especifican el alto y ancho, se pas las dimensiones
que tenga Pic_destino, ( ScaleWidth y ScaleHeight )
Ejemplo 4 - Dibujar con PaintPicture un grfico centrado
Para dibujar una imagen centrada, por ejemplo en un formulario, podemos cargar la
misma en una variable, como se coment antes, que sea de tipo Picture, IpictureDisp o
StdPicture, y luego pasarla como parmetro a PaintPicture, y en los parmetros X1 e Y1
( posicin Left y Top ) lo siguiente :
'Variable de tipo Picture para cargar mediante LoadPicture en _
tiempo de ejecucin un grfico
Dim Una_Imagen As Picture
Private Sub Command1_Click()
Dim Pos_x As Single
Dim Pos_y As Single
'Limpia el formulario
Me.Cls
'Carga en la variable la imagen
Set Una_Imagen = LoadPicture("c:\bart.jpg")
' Obtiene la posicin x e y para centrar la imagen
Pos_x = (Me.ScaleWidth - ScaleX(Una_Imagen.Width, vbHimetric,
vbPixels)) / 2
Pos_y = (Me.ScaleHeight - ScaleY(Una_Imagen.Height, vbHimetric,
vbPixels)) / 2
' Dibuja el grfico centrado en el formulario
Me.PaintPicture Una_Imagen, Pos_x, Pos_y
End Sub
Private Sub Form_Load()
' Modo de escala en pixeles
Me.ScaleMode = vbPixels
Me.Caption = " Dibujar imagen centrada "
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Elimina la imagen/Variable
If Not Una_Imagen Is Nothing Then Set Una_Imagen = Nothing
End Sub
El resultado al presionar el commandButton sera algo por el estilo:
En el cdigo anterior, se declara una variable de tipo Picture para almacenar el grfico
mediante la funcin LoadPicture. Pero como es una variable de objeto, se debe utilizar
la palabra clave Set.
Tambin como se coment, el grfico a cargar debe ser un formato de imagen de los
que soporta visual basic: bmp, gif, jpg etc... , no asi los Png o los tif por decir algunos.
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
Nota: La propiedad Width y Height de la imagen, no devuelve un valor en pixeles, si no
en una medida llamada Himetric. Por ese motivo se utiliza la funcin Scalex y Scaley
para convertir el valor de dicha escala a pixeles, ya que en el FormLoad se estableci el
modo de escala del Formulario, que en este caso es donde se va a dibujar, en vbPixels.
Aclaro que no se si es la nica forma de convertir esto, pero al menos es la que
conozco.
Ejemplo 5 - Recortar y estirar una imagen - Parmetros X2, y2 ,
Ancho2 y Alto2
Ahora se ve un ejemplo para ver estos parmetros opcionales que no se vieron en los
ejemplos anteriores, y que los mismos permiten seleccionar partes de la imagen a
copiar en el objeto destino, es decir un rea especfica. Si no se entiende demasiado,
seguro viendo la siguiente imagen se aclara un poco el tema:
Para el ejemplo colocar un Picture llamado Pic_Origen y cargarle un grfico. Agregar
otro PictureBox llamado Pic_Destino. Tambin Cuatro TextBox en un arreglo:
Text1(0), Text1(1), Text1(2) y Text1(3), para la posicin x, posicin y, para el ancho
ancho y alto respectivamente.
Estos valores sern en pixeles, y esos mismos valores se utilizarn para la funcin
PaintPicture para dibujar dicha rea
Cdigo fuente en el formulario:
Option Explicit
Private Sub Dibujar_Imagen(x As Single, y As Single, _
ancho As Single, alto As Single)
' Limpia - Borra los dos picture
Pic_Destino.Cls
Pic_Origen.Cls
'dibuja el cuadrado en el Picture Origen
Pic_Origen.Line (x, y)-Step(ancho, alto), vbRed, B
'Dibuja la porcin de imagen en Pic_Destino
Pic_Destino.PaintPicture Pic_Origen.Picture, 0, 0, , , x, _
y, _
ancho, _
alto
End Sub
Private Sub Form_Load()
' Escala en pixeles para los dos Picture Box
Pic_Destino.ScaleMode = vbPixels
Pic_Origen.ScaleMode = vbPixels
'Para que al dibujar con Line y PaintPicture mantenga la imagen
Pic_Origen.AutoRedraw = True
Pic_Destino.AutoRedraw = True
'algunos valores iniciales
Text1(0) = 10
Text1(1) = 10
Text1(2) = 50
Text1(3) = 50
End Sub
Private Sub Text1_Change(Index As Integer)
On Local Error Resume Next
'Llama a la sub que dibuja con PaintPicture
Call Dibujar_Imagen(CSng(Text1(0)), _
CSng(Text1(1)), _
CSng(Text1(2)), _
CSng(Text1(3)))
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 mtodo Line el recuadro ( rea ) en el picture origen, luego
se le pasan esos mismos valores a la funcin PaintPicture que dibuja esa porcin de
imagen en el otro PictureBox
Ejemplo 6 - Estirar una imagen haciendo un efecto de Zoom
El siguiente ejemplo es similar al anterior, con la diferencia de que se captura un rea
de un grfico cargado en un picture, y se dibuja en otro picturebox, pero estirando la
imagen como si fuese un zoom. Para capturar el rea se utiliza un shape que se
posiciona al mover el puntero del mouse sobre el picture que tiene la imagen:
Colocar dos PictureBox y un control shape. A un Picture renombrarlo a Pic_Origen y
cargarle un grfico. Al otro picture renombrarlo a Pic_destino que es donde se copiar
la porcin de la imagen. El shape dejarlo con el nombre Shape1
Cdigo fuente en un formulario
Option Explicit
Dim Ancho As Single
Dim Alto As Single
Private Sub Form_Load()
' Algunas propiedades para el shape
With Shape1
.Width = 500
.Height = 500
.BorderWidth = 2
.BorderColor = vbRed
'Coloca el shape dentro de Pic_Origen
Set .Container = Pic_Origen
End With
Ancho = Shape1.Width
Alto = Shape1.Height
End Sub
Private Sub Pic_Origen_MouseMove(Button As Integer, Shift As Integer,
_
X As Single, Y As Single)
' Mueve el Shape en el centro del puntero del mouse
Shape1.Move X - Ancho / 2, Y - Alto / 2
'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 cdigo fuente que utiliza la funcin PaintPicture para dibujar un
grfico 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 acta como simple men de opciones.
Descargar
Nota: En este enlace pods ver un ejemplo simple que hice de como hacer un Scroll en
un grfico mediante la funcin 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
Definiciones de Visual basic - Trminos - Pgina 1
Listado de trminos y definiciones de visual basic, del archivo de
ayuda VEENDF98.CHM ( ordenados alfabeticamente )
Pginas : 1 - 2 - 3
Pgina 1 : Indice : A - H
Alcance
Define la visibilidad y vida de una variable, procedimiento u objeto. Por ejemplo, una
variable declarada Public est disponible para todos los procedimientos en todos los
mdulos de todas las aplicaciones, a menos que Option Private Module est en efecto.
Cuando Option Private Module est en efecto, el mdulo es privado y por lo tanto no es
visible a los proyectos referidos. Las variables declaradas en procedimientos son
visibles solamente dentro del procedimiento y pierden su valor entre llamadas a menos
que se declaren Static.
Enlaces relacionados : variables y constantes y tipos de datos
Aplicacin
Coleccin de cdigo y elementos visuales que trabajan juntos como un programa nico.
Los programadores puede desarrollar y ejecutar aplicaciones dentro del entorno de
programacin, mientras que los usuarios normalmente ejecuta aplicaciones como
archivos ejecutables fuera del entorno de programacin.
aplicacin host
Cualquier aplicacin que acepta el uso de Visual Basic, Edicin para aplicaciones. Por
ejemplo, Microsoft Excel, Microsoft Project, etc.
archivo de recursos
Archivo en un proyecto de Visual Basic con una extensin de nombre de archivo .res
que puede contener mapas de bits, cadenas de texto usuario otros datos. Almacenando
estos datos en un archivo separado, puede cambiar la informacin sin modificar el
cdigo. Slo se puede asociar un archivo de recursos con un proyecto.
enlaces relacionados : reproducir Sonido desde Archivos de recursos ,
archivo ejecutable
Una aplicacin basada en Windows que se puede ejecutar fuera del entorno de
programacin. Un archivo ejecutable tiene una extensin de nombre de archivo .exe.
argumento
Constante, una variable o una expresin pasadas a un procedimiento.
Ejemplo :
Sub Procedimiento(Parametro As String)
MsgBox Parametro
End Sub
Private Sub Form_Load()
Call Procedimiento("Mensaje")
End Sub
argumentos con nombre
Argumentos con nombres predefinidos en la biblioteca de objetos. En lugar de dar
valores a los argumentos en el orden esperado por la sintaxis, puede utilizar
argumentos con nombre para asignar valores en cualquier orden. Por ejemplo, suponga
que un mtodo acepta tres argumentos:
HaceAlgo nombrearg1, nombrearg2, nombrearg3
Asignando valores a los argumentos con nombre, puede utilizar la siguiente instruccin:
HaceAlgo nombrearg3 := 4, nombrearg2 := 5, nombrearg1 := 20
Observe que los argumentos no necesitan estar en el orden normal.
biblioteca de objetos
Un archivo con una extensin de nombre de archivo .OLB que proporciona a los
controladores de Automatizacin OLE (como Visual Basic) informacin sobre los objetos
de Automatizacin OLE disponibles. Puede utilizar el Examinador de objetos para
examinar el contenido de una biblioteca de objetos y obtener informacin sobre los
objetos que proporciona.
biblioteca de tipos
Un archivo o un componente incluido en un archivo que contiene descripciones estndar
de Automatizacin OLE de objetos, propiedades y mtodos expuestos. Los archivos de
biblioteca de objetos (.olb) contienen bibliotecas de tipos.
biblioteca de vnculos dinmicos (DLL)
Una biblioteca de rutinas cargadas y vinculadas en las aplicaciones durante el tiempo de
ejecucin. Los archivos DLLs se crean con otros lenguajes de programacin como C,
MASM o FORTRAN.
carcter de continuacin de lnea
La combinacin de un espacio seguido de un subrayado ( _); se utiliza en el entorno de
desarrollo para ampliar una sola lnea lgica del cdigo hasta dos o ms lneas fsicas.
Observe que los caracteres de continuacin de lnea no se pueden utilizar para
continuar una lnea de cdigo dentro de una expresin de tipo cadena.
carcter de declaracin de tipo
Un carcter adjunto al nombre de una variable que indica el tipo de datos de una
variable. Como opcin predeterminada, las variables son del tipo Variant, a menos que
la instruccin Del tipo correspondiente est presente en el mdulo.
clase
Definicin formal de un objeto. La clase acta como plantilla desde la que se crea una
instancia de un objeto en tiempo de ejecucin. La clase define las propiedades del
objeto y los mtodos utilizados para controlar su comportamiento.
Enlaces relacionados : mdulos de clase
clase de base
Clase original de la que otras clases se derivan por herencia.
cdigo de caracteres
Nmero que representa un carcter en particular de un juego de caracteres, como el
juego de caracteres ANSI.
coleccin
Objeto que contiene un conjunto de objetos relacionados. La posicin de un objeto en la
coleccin puede cambiar cada vez que se produzca un cambio en la coleccin; por lo
tanto, la posicin de un objeto especfico de la coleccin puede variar.
comentario
Texto agregado a un cdigo por un programador, que explica cmo funciona el cdigo.
En Visual Basic cada lnea de comentario comienza con un apstrofo (') o con la palabra
clave Rem seguida por un espacio.
Ejemplo
'Esto es un comentario
Dim x As Long
x = 100
x = x + 250
comparacin bit a bit
Comparacin bit a bit de los bits ubicados en posiciones idnticas en dos expresiones
numricas.
comparacin de cadenas
Una comparacin de dos secuencias de caracteres. Utilice Option Compare para
especificar comparacin de texto o binaria. En espaol, las comparaciones binarias
reconocen maysculas y minsculas; las comparaciones de texto no reconocen
maysculas ni minsculas.
complemento
Herramienta que agrega capacidades al entorno de programacin de Visual Basic.
enlaces relacionados : MZ-Tolls - Complemento para el IDE del vb , complemento para
usar el scroll en el ide
configuracin regional
Conjunto de informacin que corresponde a un idioma y pas determinado. Los valores
de la configuracin regional afectan al idioma de los trminos como palabras clave y
define los valores de la configuracin regional especfica como los separadores
decimales y de listas, formatos de fecha y ordenacin de caracteres.
Los valores de la configuracin regional del sistema afectan al comportamiento del
funcionamiento de la configuracin regional independiente, por ejemplo, cuando
muestra nmeros o convierte cadenas a fechas. Establezca la configuracin regional del
sistema utilizando los programas del Panel de Control que proporciona el sistema
operativo.
Aunque la configuracin regional del cdigo y del sistema generalmente tienen el
mismo valor, puede ser diferentes en algunas situaciones. Por ejemplo, en Visual Basic
edicin estndar y Visual Basic edicin profesional, el cdigo no se traduce del Ingls
(Estados Unidos). La configuracin regional del sistema se puede establecer al idioma y
el pas del usuario, pero la configuracin regional del cdigo se establece siempre a
Ingls (Estados Unidos) y no se puede cambiar. En este caso se utilizan los separadores
del Ingls (Estados Unidos), marcadores de posicin de formatos y ordenacin.
Enlaces relacionados : Obtener datos de la configuracin regional de windows , abrir el
cuadro de dilogo con la funcin shell
constante
Un elemento con nombre que mantiene un valor constante a travs de la ejecucin de
un programa. Las constantes pueden ser cadenas o literales numricos, otras
constantes o cualquier combinacin que incluya operadores aritmticos o lgicos
exceptuando Is y la exponenciacin. Cada aplicacin principal puede definir su propio
conjunto de constantes. El usuario puede definir constantes adicionales con la
instruccin Const. Puede utilizar constantes en cualquier lugar del cdigo en lugar de
valores reales.
Enlaces : variables y constantes
constante de cadena
Cualquier constante (definida con la palabra clave Const) que consista en una secuencia
de caracteres contiguos interpretados como caracteres por s mismos, en vez de como
algn valor numrico.
Ejemplo
Const MENSAJE As String = "hola mundo"
constante de compilacin condicional
Un identificador de Visual Basic que se define utilizando la directiva de compilador
#Const, o bien en la aplicacin principal y se utiliza en otras directivas de compilador
para determinar si determinados bloques de cdigo Visual Basic estn compilados, y
cundo.
constantes intrnsecas
Constante proporcionada por una aplicacin. Las constantes de Visual Basic se
enumeran en la biblioteca de objetos y se pueden mostrar con el Examinador de
objetos. Ya que no puede deshabilitar constantes intrnsecas, no puede crear una
constante definida por el usuario con el mismo nombre.
contenedor
Objeto que puede contener otros objetos, por ejemplo un picturebox o Frame
control
Objeto que puede colocar en un formulario que tiene su propio conjunto de
propiedades, mtodos y eventos reconocidos. Puede utilizar controles para recibir
entradas del usuario, mostrar resultados y desencadenar procedimientos de evento.
Puede manipular la mayora de los controles utilizando mtodos. Algunos controles son
interactivos (responden a acciones del usuario) mientras que otros son estticos (slo
son accesibles mediante cdigo).
control ActiveX
Objeto que coloca en un formulario para habilitar o deshabilitar la interaccin del
usuario con una aplicacin. Los controles ActiveX tienen eventos que se pueden
incorporar en otros controles. Estos controles tienen una extensin de nombre de
archivo .ocx.
Enlaces : Descargar controles activex , ocx
control dependiente
Control de datos protegidos que puede proporcionar acceso a un campo o campos
especficos en una base de datos mediante un control Data. Normalmente un control de
datos protegido depende de un control Data mediante sus propiedades DataSource y
DataField. Cuando un control Data se mueve de un registro al siguiente, todos los
controles dependientes conectados al control Data cambian para mostrar los datos de
los campos del registro activo. Cuando los usuarios cambian los datos en un control
dependiente y despus se mueven a un registro diferente, los cambios se guardan
automticamente en la base de datos.
cuadro Objeto
Cuadro de lista que aparece en la esquina superior izquierda de la ventana Cdigo que
enumera el formulario y los controles de formulario al que se adjunta el cdigo o un
cuadro de lista colocado en la parte superior de la ventana Propiedades que enumera el
formulario y sus controles.
cuadro Procedimiento
Cuadro de lista colocado en la esquina superior derecha de la ventana Cdigo y la
ventana Depuracin que muestra los procedimientos reconocidos por el objeto
mostrado en el cuadro Objeto.
DBCS
Juego de caracteres que utiliza 1 o 2 bytes para representar un carcter, que permite
representar ms de 256.
declaracin
Cdigo no ejecutable que asigna nombre a una constante, variable o procedimiento y
especifica sus caractersticas (como el tipo de datos). Para procedimientos DLL, las
declaraciones especifican nombres, bibliotecas y argumentos.
directivas de compilacin
Comando utilizado para modificar la accin del compilador.
diseador
Proporciona un generador de ventana visual en el entorno de programacin de Visual
Basic. Puede utilizar esta ventana para generar visualmente nuevas clases. Visual Basic
generadores de formularios incorporados. Las ediciones Profesional y Empresarial de
Visual Basic incluyen generadores de controles ActiveX y documentos ActiveX.
documento
Cualquier trabajo con un contenido autnomo creado con una aplicacin y se especifica
con un nombre de archivo nico.
Empty
Un valor que indica que una variable Variant no tiene asignado ningn valor inicial. Las
variables Empty son iguales a 0 (en un contexto numrico) o de longitud cero ("") (en
un contexto de cadena).
en proceso
Ejecucin en el mismo espacio de direcciones como una aplicacin.
enfoque
La capacidad para recibir clics del mouse (ratn) o entradas por teclado en cualquier
momento. En el entorno de Microsoft Windows, solamente una ventana, un formulario o
un control tienen esta capacidad simultneamente. El objeto que "tiene el foco" se
indica normalmente por un ttulo o una barra de ttulos resaltados. Se puede establecer
el foco tanto por el usuario como por la aplicacin.
entorno de programacin
Parte de la aplicacin donde escribe el cdigo, crea controles, establece las propiedades
del control y el formulario, etc... Esto es lo contrario a la ejecucin de la aplicacin.
error de sintaxis
Un error que ocurre cuando el sistema no comprende una lnea de cdigo que acaba de
ser introducida.
Observe que las reglas de sintaxis para palabras clave individuales estn definidas en la
seccin de sintaxis del tema de la Ayuda asociado. Para obtener ayuda sobre una
palabra clave desde el entorno de desarrollo, seleccione la palabra clave y presione F1.
error en tiempo de ejecucin
Un error que ocurre cuando el cdigo se est ejecutando. Un error de ejecucin aparece
cuando una instruccin intenta llevar a cabo una operacin no vlida.
error lgico
Un error de programacin que hace que el cdigo produzca resultados incorrectos o que
detenga la ejecucin. Por ejemplo, un error puede ser causado por nombres de
variables incorrectos, tipos de variables incorrectos, bucles infinitos, fallos en las
comparaciones lgicas o problemas de matrices.
etiqueta de lnea
Una etiqueta de lnea se usa para identificar una sola lnea de cdigo. Puede ser
cualquier combinacin de caracteres que comience con una letra y que termine con dos
puntos (:). Las etiquetas de lnea no distinguen maysculas y minsculas y deben
empezar en la primera columna.
Examinador de objetos
Un cuadro de dilogo que le permite examinar el contenido de una biblioteca de objetos
para obtener informacin sobre los objetos que proporciona.
expresin
Una combinacin de palabras clave, operadores, variables y constantes, que produce
una cadena, un nmero o un objeto. Una expresin puede realizar un clculo,
manipular caracteres o verificar datos.
expresin Boolean
Expresin cuyos valores son True o False.
expresin de cadena
Cualquier expresin cuyo valor es equivalente a una secuencia de caracteres contiguos.
Los elementos de la expresin pueden incluir una funcin que devuelve una cadena, un
literal de cadena, una constante de cadena, una variable de cadena, una cadena Variant
o una funcin que devuelve una cadena Variant (VarType 8).
expresin de fecha
Toda expresin que se puede interpretar como una fecha. Esto incluye cualquier
combinacin de literales de fechas, nmeros que parecen fechas, cadenas que parecen
fechas y fechas devueltas por funciones. Una expresin de fecha se limita a nmeros o
cadenas, en cualquier combinacin, que pueda representar una fecha desde el 1 de
enero del ao 100 hasta el 31 de diciembre del ao 9999.
Las fechas se guardan como parte de un nmero real. Los valores a la izquierda del
decimal representan la fecha; los valores a la derecha del decimal representan la hora.
Los nmeros negativos representan las fechas anteriores al 30 de diciembre de 1899.
enlaces relacionados : funciones de vb para tratamiento de Fechas , funciones tiles
para calcular fechas
expresin de hora
Cualquier expresin que puede ser interpretada como una hora. Esto incluye cualquier
combinacin de literales de hora, nmeros que parecen horas, cadenas que parecen
horas y horas devueltas por funciones.
Las horas se almacenan como parte de un nmero real. Los valores a la derecha del
decimal representan la hora. El medioda (12:00 P.M.) se representa con 0,5.
Enlaces : Ver enlace anterior
expresin de inspeccin
Expresin definida por el usuario que le permite observar el comportamiento de una
variable o expresin. Las expresiones de inspeccin aparecen en la ventana Inspeccin
del Editor de Visual Basic y se actualiza automticamente cuando entra en el modo de
interrupcin. La ventana Inspeccin muestra el valor de una expresin dentro de un
contexto determinado. Las expresiones de inspeccin no se guardan con el cdigo.
expresin de objeto
Una expresin que especifica un objeto particular. Esta expresin puede incluir
cualquier elementos del objeto. Por ejemplo, si la aplicacin tiene un objeto Aplicacin
que contiene un objeto Documento, el cual a su vez contiene un objeto Texto.
expresin de tipo variant
Cualquier expresin que se pueda evaluar a datos numricos, de cadena o de fecha, as
como a los valores especiales Empty y Null.
expresin numrica
Cualquier expresin que puede ser evaluada como un nmero. Los elementos de una
expresin pueden incluir cualquier combinacin de palabras clave, variables, constantes
y operadores que dan como resultado un nmero.
formato automtico
Caracterstica que da formato a cdigos automticamente, a medida que se introducen,
colocando maysculas en la primera letra de las palabras clave, igualando los espacios,
agregando la puntuacin y configurando los colores del primer plano y del fondo.
formato de fecha universal
El formato de fecha universal es #aaaa-mm-dd hh:mm:ss#. Sin embargo, tanto el
componente de fecha (#aaaa-mm-dd#) como el componente de hora (#hh:mm:ss#)
se pueden representar por separado.
formulario
Ventana o cuadro de dilogo. Los formularios son contenedores para controles. Una
formulario de interfaz de mltiples documentos (MDI) tambin puede actuar como un
contenedor para formularios secundarios y algunos controles.
formulario MDI
Ventana que compone el segundo plano de una aplicacin de interfaz de mltiples
documentos (MDI). El formulario MDI es el contenedor de cualquiera de los formularios
secundarios MDI en la aplicacin.
Enlaces : Ejemplo de forms mdi
Ejemplo de un editor de texto usando formularios MDI
El siguiente ejemplo es un editor de texto muy simple utilizando un formulario Mdi, y
formularios secundarios o hijos para cada archivo de texto, es decir similar a como lo
hace el Word u otras aplicaciones que utilizan mltiples documentos
Crear un editor de texto simple utilizando forms mdi
Enalces relacionados con Mdi
1 - Pasos para crear el ejemplo:
Iniciar un nuevo proyecto Exe, aadir un formulario MDI y dejarlo por defecto con el
nombre Mdi Form1. Tambin agregar un formulario y renombrarlo a FrmDocumento
Las opciones que tendr el editor sern:
1. En el men Archivo: Abrir, Nuevo, guardar , guardar como y salir
2. El men Edicin : Copiar, Cortar, Pegar y seleccionar Todo.
La vista de los menes quedar similar a los siguientes grficos:
El men Archivo:
El men Edicin:
Los nombres de los menues debern ser los siguientes:
Men Archivo:
1. Abrir: mnuAbrir
2. Nuevo: mnuNuevo
3. Guardar: mnuGuardar
4. Guardar Como: mnuGuardarComo
5. Salir: mnuSalir
Men edicin
1. Copiar: mnuCopiar
2. Cortar: mnuCortar
3. Pegar: mnuPegar
4. Seleccionar todo: mnuSeleccionar
Nota: si no sabs como crear los menes con el editor de visual basic, pods chequear
este enlace que explica resumidamente como crear uno:
Crear menes en visual basic
Ahora hay que especificar en el formulario Mdi, en la propiedad MdiChild, que se
encuentre en True, para que de esta manera los formularios se abran dentro de este.
Ahora indicar en el men Proyectos > Propiedades de proyecto, que el formulario de
inicio sea el MDI, en la opcin Objecto inicial.
Luego agregar un control CommonDialog llamado CommonDialog1 en el formulario Mdi
y tambin otro en el formulario frmDocumento para poder utilizar los Cuadros de
dilogo Abrir Archivo y Guardar como. ( El control CommonDialog lo acceds desde
el men proyecto, Componentes > Microsoft Common Dialog Control ).
En el formulario frmDocumento, colocar un control RichTextBox llamado
RichTextBox1 y establecerle a este desde la ventana de propiedades, la propiedad
Multiline en True, La propiedad Scrollbars en 3. ( opara que muestre Ambas barras
de desplazamiento)
Por ltimo colocar un mdulo bas al proyecto
Agregar el cdigo fuente a los formularios y al mdulo bas
Cdigo fuente a colocar en el Formulario Mdi
Option Explicit
Private Sub MDIForm_Initialize()
CommonDialog1.Filter = "Documento de texto|*.txt|Todos los
Archivos|*.*"
End Sub
'Men abrir
Private Sub mnuAbrir_Click()
On Error GoTo errSub
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Set FrmDoc = New frmDocumento
FrmDoc.Show
ActiveForm.Caption = CommonDialog1.FileName
ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
End If
Exit Sub
errSub:
Select Case Err.Number
Case 70
ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
Resume Next
End Select
End Sub
'Menu Guardar Como
Private Sub mnuGuarcomo_Click()
On Error GoTo errSub
If Forms.Count = 1 Then
MsgBox "No hay documentos para guardar", vbInformation
Exit Sub
End If
CommonDialog1.ShowSave
If CommonDialog1.FileName = "" Then Exit Sub
ActiveForm.RichTextBox1.SaveFile CommonDialog1.FileName
Exit Sub
errSub:
Select Case Err.Number
Case 91
Resume Next
End Select
End Sub
'Men para guardar el archivo
Private Sub mnuGuardar_Click()
On Error GoTo errSub
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:
Select Case Err.Number
Case 91
Resume Next
End Select
End Sub
'Men nuevo archivo
Private Sub mnuNuevo_Click()
Set FrmDoc = New frmDocumento
nForms = nForms + 1
FrmDoc.Caption = sCaption & nForms
FrmDoc.Show
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
'Menu para seleccionar todo el texto
Private Sub mnuSeleccionar_Click()
On Local Error Resume Next
ActiveForm.RichTextBox1.SelStart = 0
ActiveForm.RichTextBox1.SelLength = Len(ActiveForm.RichTextBox1.Text)
End Sub
'Men Copiar texto
Private Sub mnuCopiar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
End Sub
'Men cortar texto
Private Sub mnuCortar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
ActiveForm.RichTextBox1.SelText = ""
End Sub
Cdigo fuente a colocar en el formulario frmDocumento
Option Explicit
Public flagGuardar As Boolean
Private Sub Form_Resize()
'Redimensionamos el control RichtextBox al ancho y alto del formulario
RichTextBox1.Move ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight
If WindowState = vbMaximized Then
'mdiform1.Caption = Me.Caption
Else
mdiform1.Caption = ""
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo errSub
Dim ret As Integer
If flagGuardar Then
ret = MsgBox(" Guardar cambios", vbYesNoCancel)
End If
Select Case ret
Case vbYes:
If InStr(1, Me.Caption, sCaption) Then
CommonDialog1.ShowSave
RichTextBox1.SaveFile CommonDialog1.FileName
Else
RichTextBox1.SaveFile Me.Caption
End If
Case vbCancel:
Exit Sub
End Select
Set FrmDoc = Nothing
Exit sub
errSub:
Select Case Err.Number
Case 75
Resume Next
End Select
End Sub
Private Sub RichTextBox1_Change()
flagGuardar = True
End Sub
Cdigo fuente a colocar en el Mdulo bas
Public FrmDoc As frmDocumento
Public nForms As Integer
Public Const sCaption = "Nuevo documento sin ttulo "
En este enlace est el cdigo 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
vista previa del mdi
Descargar notepad con mdi
Nota. Si quers poder aadir en el men archivo del formulario Mdi, la lista de los
archivos abiertos recientemente por el programa ( como lo hacen muchas aplicaciones
que utilizan formularios MDI, como por ejemplo el Word, o inicluso el Visual basic ),
pods ver este ejemplo que graba en el registro de windows las rutas de los ficheros, y
al cargar crea en forma dinmica los menes en tiempo de ejecucin. Luego al hacer
click en el elemento del men se ejecuta el archivo
Por ejemplo como muestra esta imagen:
Crear lista de archivos recientes en un men
Relacionados - Recursos vb6
Ejemplo para minimizar, vista en cascada, Mosaico etc..
Ocx para colocar una imagen o grfico en un formulario Mdi
Tener solo un formulario abierto en un MDI
Interceptar una tecla con el Api
Mdi con fichas o pestaas

Anda mungkin juga menyukai