Você está na página 1de 116

Lenguaje de Programación I

INDICE
1.- Caracteristicas generales de VB.
2.- Entorno de trabajo.
Barra de herramientas,explorador de proyectos,etc.
3.- Objetos en VB.
4.- Controles label,textbox,commnabutton,frame, y sus propiedades
5.- Convención para nombrar objetos en Visual Basic
6.- Operadores: Basicos,Comparacion, Etc.
7.- Variables y Tipo de Datos en VB.
8.- Manejo de Formularios:Eventos, Metodos, Modales y no Modales, MDI.
Practica 1
9.-Instrucciones Condicionales,Controles optionButton,Checkbox, Evento keypress y
Change
10.-Funciones de conversión de datos
11.-CUADROS DE DIALOGO
Ejemplo practico
12.-Funciones de Cadenas,Numéricas y Fechas
13.-Evento Gotfocus, LostFocus, MouseDown, MouseUp y MouseMove
14.-Instrucciones Repetitivas, Sentencia Exit.
Practica3
15.- Barras de desplazamiento (Scroll Bars)
16.- Función RGB
17.- Control Timer
18.- CONTROLES GRÁFICOS:Line,Shape,Image,Picturebox
19.- Metodos graficos:Pset,Line,Circle.
20.- CUADRO DESPLEGABLES(COMBOBOX) Y LISTAS (LIST BOX)
21.- ARREGLOS:ESTATICOS,DINAMICOS,CONTROLES
Aplicacion :AHORCADO
22.- MSFLEXGRID
Practica4
23.- PROCEDIMIENTOS Y FUNCIONES
Practica 5
24.- Registros
25.- Controles ACTIVE X (ToolBar, ImageList, ProgressBar, StatusBar,
ShockWaveFlash)
Ejemplo de Presentacion de Un Sistema
26.- Manejo de Archivos, Comandos (Dir , Kill, FileCopy, etc.) Controles DRIVE, DIR
y FILE
27.- VISUAL BASIC Y BASE DE DATOS
Objetos Recordset, propiedades, metodos, etc.

-1-
Lenguaje de Programación I

Semana 1: Entorno de Desarrollo Visual Basic

1.1 .- Características Generales de Visual-Basic


Visual-Basic es una herramienta de diseño de aplicaciones para Windows, en la que estas
se desarrollan en una gran parte a partir del diseño de una interface gráfica. En una
aplicación Visual - Basic, el programa está formado por una parte de código puro, y otras
partes asociadas a los objetos que forman la interface gráfica.
Es por tanto un termino medio entre la programación tradicional, formada por una sucesión
lineal de código estructurado, y la programación orientada a objetos. Combina ambas
tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos
tipos de programación, debemos inventar una palabra que la defina : PROGRAMACION
VISUAL.
1.2.- Entorno de Trabajo de Visual Basic

Visual Basic es un entorno de desarrollo diseñado para la creación de aplicaciones para los
entornos de trabajo Microsoft Windows 95, 98, NT y 2000.
Este lenguaje auna las posibilidades de un lenguaje de alto nivel con las herramientas de
diseño gráfico, lo cual nos dá acceso a todas las funciones de los sistemas anteriormente
citados.
Para entrar a desarrollar en visual basic nos vamos al menu Inicio- Programas – Microsoft
Visual Studio 6 – Microsoft
Visual Basic 6
OJO: El ejecutable que abre
el Visual Basic 6 se llama
VB6.EXE

La primera pantalla que nos


saldra sera la sgte:

Aquí escogemos
el tipo de proyecto
que queremos
realizar que en
este caso sera
EXE
STANDARD ya
que es el ideal
para crear
aplicaciones
OJO: Los otros
tipos de proyecto
permite crear
cosas distintas
como por ejemplo

-2-
Lenguaje de Programación I

ActiveX Control Crea un control para poder usarlo en tus aplicaciones e incluso en
una página WEB.
DLL ActiveX Crea Librerias dinamicas que se podra utilizar desde cualquier lenguaje
que tenga compatibilidad.
Una vez que hemos escogido el proyecto a desarrollar el sistema nos respondera de la
siguiente manera:
Barra de Menu

Explorador
Barrra de de
Herramientas Proyecto

Diseñador
de
Formulario
Ventana de
Propiedades

Cuadro de
Herramientas

Los elementos del entrono de desarrollo de Visual Basic son:


Barra de herramientas:Permite un acceso rápido a los comando más utilizados
Si en caso no se muestra la barra Nos vamos al Menu Ver-Barra de Herramientas-Estandard
Diseñador de formularios Es la ventana en la que se diseñará la interfaz de la aplicación,
en ella se pueden agregar controles gráficos e imágenes. Cada formulario de una aplicación
aparecerá en su propia ventana.
Para mostrarla debemos hacer doble clic al formulario el cual queremos diseñar
Cuadro de herramientas En el cuadro de herramientas podemos encontrar un conjunto de
herramientas que permiten insertar los objetos o controles en el formulario durante en
tiempo de diseño, los objetos más comunes son botones(command), etiqueta (label),
cuadros de imagen(Picture), imágenes(Image), etc...
Si hacemos doble click con el ratón sobre alguno de ellos se insertará automáticamente en
la ventana del formulario.
Ventana de propiedades Los objetos tiene asociados unas propiedades que describen sus
atributos, valores, comportamiento y apariencia del objeto.
Para sacar las propiedades se hace clic derecho y propiedades o se pulsa F4.
Explorador de proyectos Contiene la lista de los archivos que forman parte de la
aplicación

-3-
Lenguaje de Programación I

Ventana editor de código

En esta ventana es donde se


incluye el código de la apliación.
Se creará una ventana de código
para cada formulario o módulo
de la aplicación.
Para tener acceso a la ventana de
edició, la forma más sencilla es
hacer doble click sobre el
formulario o sobre el objeto al
cual quiera incluir código.

1.3.- Objetos en Visual Basic


Un objeto en Visual Basic se caracteriza por tres componentes: propiedades, métodos y
eventos.
NOTA: Los objetos vienen a ser los controles como TextBox, Label, Etc.

Las propiedades son aquellas características o atributos que permiten establecer la


apariencia de un objeto como el color, tamaño, posición, etc... O el estado del mismo:
activo, maximizado, ect... Existen propiedades que sólo están disponibles en tiempo de
diseño y otras que sólo están disponibles en tiempo de ejecución.
Ejemplo de Propiedades: alignment, autosize, caption, name, etc.

Los métodos son pequeños programas que actúan sobre un determinado objeto y que
establecen su comportamiento. Así un objeto puede moverse, ocultarse, etc... Puedes
utilizar cualquier método que forme parte del objeto.
Ejemplo de Metodos: show, hide, etc.

Los eventos son las situaciones que se producen y que nos interesan identificar para
establecer algún tipo de de respuesta por parte del objeto. Así, puedes hacer click sobre un
determinado objeto, creando de esta forma un evento reconocible por el objeto. Que suceda
algo o no como respuesta a este evento dependerá de que hayas programado alguna acción
en el correspondiente procedimiento de evento.
Ejemplo de Eventos: click, dobleclicke ,mousemove, keypress, etc.

1.4.- Controles Label, TextBox, CommandButton, Frame y sus Propiedades

-4-
Lenguaje de Programación I

* Label o Etiquetas .- Las etiquetas son controles que nos permiten mostrar texto en los
formularios y que tienen la particularidad de que el usuario no puede modificar solo
muestra información acerca de algo.
El control de etiqueta es:
Algunas propiedades del control etiqueta son:
Propiedad Definición
Alignment Establece la alineación del texto de la etiqueta(derecha, izquierda y centro)
Autosize Si su valor es True, el tamaño de la etiqueta se adapta automáticamente a su
contenido
Caption Texto que se visualiza en la etiqueta
BackStyle Establece si el fondo del label sera opaco o transparente.

* TextBox o Caja de Textos.- Los cuadro de texto son el control estándar de entrada de
datos en Visual Basic. Permiten al usuario de la aplicación introducir información.
El control del cuadro de texto es:

Los cuadros de texto son semejantes a las etiquetas, pero con la diferencia que el usuario
puede modificar su contenido. El texto que se introduce puede ser tanto numérico como
alfanumérico (números y letras).
Cuando se recupera un valor de una caja de texto asi se haya ingresado un numero tomará
el valor de una cadena.
A diferencia de la etiqueta, el tamaño del texto es fijo al no permitir la propiedad autosize.
Algunas propiedades del objeto cuadro de texto son:
Propiedad Definición
Alignment Alineación de la información introducida.
Multiline Permite introducir más de una línea de texto en el cuadro
PasswordCharEstable el caracter que se muestra al realizar una entrada en el control. Sólo
se mostrará dicho carácter(Por defecto esta vacio)
ScrollBars Muestra barras de desplazamiento(Esto solo funciona si la propiedad
multiline esta en True)
Text Texto que se visualiza en el control
* Frame o Marcos.- Se utiliza para agrupar ciertos controles.
La única propiedad interesante de un control marco es la propiedad Caption, que se refiere
al texto que se presenta en la parte superior izquierda del control.
El control marco actúa como contenedor de otros controles. Al mover un marco también se
mueve los controles que contenga, para ello deberemos crear primero el marco y despueés
los controles que queremos que contenga dentro del marco.

* Command o Botones.- El botón de comando (CommandButton), es muy sencillo, por lo


que no tienes que establecer muchas propiedades. Con la propiedad Caption establecemos
el texto que aparecerá en el botón. También se pueden crear teclas de acceso al botón.

El uso principal de los botones de comando es realizar acciones en la aplicación.

-5-
Lenguaje de Programación I

 Bloquear controles
Cuando estén situados los controles en el formulario se pueden bloquear para que no
puedan moverse de forma accidental.
Para esto deberemos hacer clic derecho Bloquear Controles
Para desbloquear se hace lo mismo.

 Otras Propiedades
Name .- Quizas la mas importante da el nombre al control.
Backcolor .- Establece el color de fondo del control.
Forecolor .- Establece el color del texto del control.
BorderStyle .- Establece el tipo de borde del control.
Visible .- Establece si el control se verá(True) en tiempo de ejecución o no(False).
Picture .- Establece una imagen de fondo al control.
Nota: Si el control es un commandbutton la propiedad STYLE debera estar en 1.- Graphical
para que se pueda ver la imagen lo mismo es para darle un color de Fondo.
Width, Height .- Establece el ancho y el alto del control.(a mayor numero mas ancho o
alto)
Font.-Establece la fuente, tamaño, etc.
Enabled.-Permite o no que se puedan realizar acciones sobre el control(esta en True por
defecto si esta en False no se podra utilizar el control)
TabIndex.-Establece el orden de tabulación fijado para el control(Esta propiedad sirve para
casi todos los controles en VB)
TabStop.-Indica si al utilizar el tabulador se puede desplazar entre los controles del
formulario
ToolTipText.-Establece un texto que se mostrar cuando se pase el mouse por el control
como si fuera un comentario.
Top .-Establece la distancia que hay desde el borde superior del formulario hasta donde se
encuentra el control
Left .-Establece la distancia que hay desde el borde izquierdo del formulario hasta donde se
encuentra el control
Icon .- Establece la imagen de un icono (Solo esta disponible para los formularios)
MinButton, MaxButton .- Para ver o no ver los botones de minimizar y maximizar (solo
para los formularios)
Moveable .- Si esta en True el Form se podrá mover ,si esta en false será lo contrario(solo
para los formularios)

1.5.- Convención para nombrar objetos en Visual Basic

OBJETO OBJETO ESPAÑOL PREFIJO


Form Formulario frm
CheckBox Casilla de verificación chk
ComboBox Cuadro combinado cbo
Data-bound combobox Cuadro combinado enlazado a datos dbc
Command Button Botón de comando cmd
Data Control de datos dat
Directory list box Cuadro lista de directorios dir

-6-
Lenguaje de Programación I

Drive List Box Cuadro lista de unidades drv


File List Box Cuadro lista de archivos fil
Frame Marco frm
Grid Rejilla grd
Data-bound grid Rejilla enlazada a datos dbg
Horizontal scrollbar Barra de desplazamiento horizontal hsb
Image Imagen img
Label Etiqueta lbl
Line Linea lin
OLE Container Contenedor OLE ole
PictureBox Cuadro de imagen pic
Shape Forma shp
Text Box Cuadro de texto txt
Timer Temporizador tmr
Vertical scroll bar Barra de desplazamiento vertical vsb

1.6.- Operadores
Operaciones Basicas
Operador Operación que realiza
+ Suma / Concatenación de cadenas de caracteres
- Resta
* Multiplicación
/ División
\ División entera
Mod Resto de la división entera
^ Exponenciación (alt + 94)
& Concatenación de
Operadores de Comparación
> Mayor que
< Menor que
= Igual a
<= Inferior o igual a
>= Superior o igual a
<> Distinto a

Operadores Lógicos
AND y
OR O
NOT Negacion

1.7.- Variables y Tipo de Datos en VB.


Tipo de datos Tamaño Caracter

-7-
Lenguaje de Programación I

Integer (Entero) 2 bytes %


Long (Entero Largo) 4 bytes &
Single (Simple) 4 bytes !
Double(Doble) 8 bytes #
Currency (Moneda) 8 bytes @
String (Cadena de caracteres) 1 byte por carácter $
Byte 1 byte
Boolean (Boleano) 2 bytes
Date(Fecha) 8 bytes
Object(Objecto) 4 bytes
Variant 16 bytes + 1 byte por cada carácter

Tipos de Variables :
Privada .- La variable solo sera utilizada e el modulo donde se esta declarando
Private nombrevariable As TipodeDato
dim nombrevariable As TipodeDato
Publica o Global .- La variable se podra utilizar en todo el proyecto por que sera publica.
Public nombrevariable As tipodedato
Global nombrevariable As tipodedato
Para que la variable sea reconocida en todo el proyecto se deberá declarar en un modulo.
NOTA: Si queremos declarar un variable publica para el formulario debemos declarar esa
variable en la seccion de GENERAL-DECLARACIONES

1.8.- Manejo de Formularios

Normalmente la interfaz de una aplicación esta compuesta por varios formularios. Cuando
Visual Basic inicia la aplicación automáticamente se muestra el formulario de arranque,
mientra que los otros formularios deben ser mostrados y ocultados a través de código. El
método o función usado depende de lo que deseamos hacer.

Eventos de Formularios:
Activate: se produce cuando un Formulario se activa.
Desactivate: se produce cuando un Formulario se desactiva.
Los eventos Activate y Desactivate sólo se producen cuando el foco pasa de uno a otro
Formulario dentro de la aplicación. Si el foco se pasa a las ventanas de otras aplicaciones
los eventos no se producen. Se utilizan los métodos Show y SetFocus.

-8-
Lenguaje de Programación I

El evento Activate ocurre antes que el evento GotFocus y el evento LostFocus ocurre antes
que el evento Desactivate.
Initialize: es el primer evento que se produce en un Formulario. Se utiliza para inicializar
datos empleados por el Formulario.
Ejemplo: Form1.Caption = "Ejemplo"
Terminate: es el último evento que se produce en un Formulario. Se produce cuando todas
las referencias a una instancia de un Formulario, se quitan de la memoria estableciendo a
Nothing todas las variables que hacen referencia al objeto.
Resize: ocurre cuando cambia el estado de una ventana (por ejemplo, cuando se maximiza,
minimiza o restaura un Formulario).
Ejemplo: cambiar automáticamente el tamaño de un Cuadro de Imagen.
Private Sub Form_Resize()
Picture1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Load: cuando un Formulario se carga en memoria se produce el evento Load. Este evento
suele utilizarse para realizar operaciones de inicialización como, por ejemplo, inicializar
variables, dar valores a las propiedades de determinados controles, cargar elementos en las
listas, etc.
Unload: se produce cuando un Formulario se descarga en memoria. Este evento dispone de
un argumento, denominado Cancel que permite cancelar la descarga del Formulario. Para
ello, bastará con asignarle un valor distinto de cero en cualquier instrucción del código. Si
no se le asigna ningún valor, se mantendrá a cero, permitiendo la descarga del Formulario.

Metodos de Formularios:
Load: Carga un formulario a la memoria, pero no lo muestra.
Ejemplo: Load Form1 ‘donde form1 es el nombre del formulario que se cargara.
Show: Muestra un formulario. Si el formulario no está cargado al momento de ejecutar el
método Show, Visual Basic lo cargará automáticamente.
Ejemplo: form1.Show
Hide: Oculta un formulario, pero no lo descarga de memoria.
Ejemplo: form1.Hide
Unload: Descarga un formulario de memoria.
Ejemplo : unload Form1
Comentarios.- La descarga de un formulario puede ser necesaria o conveniente en aquellos
casos en los que la memoria utilizada se necesite para alguna otra tarea o cuando sea
necesario restablecer las propiedades a sus valores originales.
Antes de descargar un formulario se ejecuta el evento Unload (Form_Unload). Si establece
el argumento Cancelar a True en este evento no se descargará el formulario.
Sugerencia Use la palabra Me para referirse al formulario actual.
Ejemplo: Unload Me

Formularios Modales y No Modales


Un formulario que se abre como Modal, no permite que el usuario interactúe con otros
formularios de la misma aplicación hasta que no sea cerrado.
Un formulario que se abre como No Modal, permite al usuario cambiar a otros formularios

-9-
Lenguaje de Programación I

de la misma aplicación sin que los primeros sean cerrados.


El argumento Estilo del método Show determina si el formulario se abre como Modal o No
Modal.
Ejemplo ‘ Cargar el formulario frmEntrada como Modal
frmEntrada.Show vbModal
Ejemplo ‘ Carga el formulario frmEntrada como No Modal
frmEntrada.Show vbModeless ‘o en todo caso simplemente se pone frmentrada.show

Finalizando su Aplicación
Se puede finalizar la ejecución de la aplicación descargando el último formulario de la
aplicación o usando la sentencia End. La sentencia End termina la ejecución de la
aplicación y descarga todos los formularios.
Cuando finaliza su aplicación con la sentencia End no se desencadena ningún evento.
Formularios MDI.- Estos formularios tienen como finalidad servir de contenedor a
otros.formularios.
Para agregar un formulario MDI debemos ir al Explorador de proyectos - Clic Derecho-
Agregar-Formulario MDI

Si queremos tener mas formularios y queremos que estos sean contenidos por el MDI
debemos poner la propiedad MDICHILD a TRUE por defecto esta en FALSE, y de esa
forma esos formularios seran contenidos por el MDI.

- 10 -
Lenguaje de Programación I

SEMANA 2: Instrucciones Condicionales,Controles


optionButton,Checkbox, Evento keypress y Change

Instrucciones de Control
• Condicionales

2.1.- IF.(Si) Ejemplo: Se tiene un numero si este


Sintaxis: es mayor que 300 y menor 500 se
debera incrementar en un 10% de lo
If condicion then contrario se debera disminuir en un
(programacion) 20%
else Dim num as integer
(programacion) Num = 450
end if If Num >300 and Num < 500 then
Num = num + (num * 0.10)
Esta sentencia puede tener 2 o mas Else
condiciones solo se debera poner los Num = num - (num * 0.20)
operadores logicos (and,or) End if

2.2.- IIF.(Doble si)


Sintaxis:
Var = IIf(condicion,verdad,falso)
Cuando se utiliza el IIF el resultado de este se debe guardar en una variable de lo
contrario saldrá error.
Ejemplo: Utilizaremos el mismo ejemplo del If y la solución sería la siguiente.
Dim Num = 450
Num = iif(num >300 and num < 500, num + (num *0.10), num – (num * 0.20))

Condicion Verdad Falso


Esta sentencia se lee asi: en la variable num se va a guardar dependiendo de la
condicion si la cumple se guardara num incrementado en un 10% si no se guardara num
disminuido en un 20%

2.3.- SELECT CASE (En caso)


Select case(var)
Case valor1:
(programacion)
Case valor3:
(programacion)
Case valor...N:
(programacion)
Case else:
(programacion)

- 11 -
Lenguaje de Programación I

End select
Ejemplo : Ingrese un numero y según cumpla una de las condiciones en otra variable se
deberá almacenar un mensaje.
Si el numero es 0 el mensaje sera “Neutro”
Si es 2,4,6,8 el mensaje sera “Par menor a 10”
Si el numero es mayor que 9 y menor que 100 el mensaje sera “entre 10 y 99 “
Si es mayor a 499 y menor a 901 o es el numero 998 el mensaje sera “Menor a mil”
Si no cumple ninguna de las condiciones saldra el mensaje “No cumple condicion”

Dim num as integer


Dim mensaje as string Otro Ejemplo:
Num =4 Promedio=(nota1+nota2+nota3)/3
Select Case(Num) Select case promedio
Case 0: Case 1 to 6 : obs=”deficiente”
Mensaje =”Neutro” Case 7 to 10 : obs=”Desaprobado”
Case 2,4,6,8: Case 11 to 14 : obs=”Aprobado”
Mensaje =”Par menor a 10” Case 15 to 20 : obs=”Bueno”
Case 10 to 99: Case else
Mensaje =”entre 10 y 99” Msgbox “datos mal ingresado”
Case 998,500 to 900: End select
Mensaje =”menor a mil”
Case else:
Mensaje =”no cumple la condición”
End Select

2.4.- SWITCH.
Sintaxis:
Var = switch(condicion1,valor1,codnicion2,valor2,condicion..n,valor..n)
El switch es parecido al iif con la diferencia que se puede poner varias condiciones con
un solo switch.

Ejemplo:
En una variable almacene el numero de dia y guarde en otra variable el nombre del dia
por ejemplo 1 seria”lunes”, 2 seria “martes” ,etc.
Dim dia as integer
Dim nombre as string
Dia=7
Nombre = Switch(dia=1,”Lunes”,dia=2,”Martes”,dia=3,”Miércoles”,dia=4,”Jueves”,..)

2.5.- Sentencia Print

La sentencia Print escribe un valor en el formulario exactamente en el lado izquiero


superior
Ejemplo:
Private Sub cmdcalcula_Click()
Print "Hola"
End Sub

- 12 -
Lenguaje de Programación I

El resultado seria:

2.6 Controles

CHECKBOX(Casillas de verificación).- Nos dán la oportunidad de poder elegir entre


distintas opciones. Las casillas de verificación (CheckBox), permiten establecer opciones
que no son excluyentes entre sí, es decir, puedes seleccionar una o más de una.

Una casilla de verificación puede estar activada (cheked o 1), o desactivada (unchecked o
0) o no disponilble(Grayed o 2). La propiedad que tiene estos valores es Value.
El evento más utilizado en este tipo de objetos es el momento en el que se pulsa en la
casilla. En esta situación el usuario quiere indicar que desea activar o desactivar la casilla,
dependiendo del valor que tenga en ese momento.
Ejemplo:Se ingresara un monto de ahí se
podra sacar el 18,20,22% al monto, al
final el monto final sera la suma de los %
mas el monto.
Private Sub CmdCalcular_Click()
Dim monto%
monto = Val(txtmonto)
If chk18.Value = Checked Then
txt18 = monto * 0.18
Else
txt18 = 0
End If
If chk20.Value = Checked Then
txt20 = monto * 0.2
Else
txt20 = 0
End If
'Puede ser checked o 1
If chk22.Value = 1 Then
txt22 = monto * 0.22
Else
txt22 = 0
End If

- 13 -
Lenguaje de Programación I

txtfinal = Val(txt18) + Val(txt20) + End Sub


Val(txt22)

OPTIONBUTTON(botones de opción)
Los botones de opción (OptionButton), también permiten presentar opciones al usuario,
pero con la particularidad que sólo puedes seleccionar una de las opciones al mismo
tiempo.
Si quieres que en un mismo formulario se pueda seleccionar más de un botón de opción,
tienes que crear distintos conjuntos de botones de opción.
El botón de opción sólo puede tener dos valores en la propiedad Value (True y False), true
si está activado y false si está desactivado.
Ejemplo:Seleccione una categoría y al hacer clic muestre que categoría se ha seleccionado

Private Sub CmdVer_Click()


If Option1.Value = True Then
Txtcat = "A"
Else
If Option2.Value = True Then
Txtcat = "B"
Else
Txtcat = "C"
End If
End If
End Sub

2.7..- Eventos
• Keypress
Este evento sucede cuando se presiona alguna tecla del teclado.Automáticamente VB da
un valor a una variable llamada KEYASCII que sera el codigo ascii de la tecla
presionada.
Ejemplo: Validar que en la caja de texto TXTCOD se ingrese solo numeros y al
preionar enter que tome enfoque TXTNOM

Private Sub Txtcod_KeyPress(KeyAscii As Integer)


Select Case KeyAscii
'Si la variable keyascii es 13 quiere decir que se presiono el ENTER

- 14 -
Lenguaje de Programación I

Case 13: txtnom.SetFocus


'Si va del 48 al 57 quiere decir que se digito un numero
Case 48 To 57: Print "Ingreso un Numero"
'Si no cumple la condicion al keyascii se le da 0 esto quiere decir que el valor que se
‘haiga presionado no aparecera en la caja de texto
Case Else: KeyAscii = 0
End Select
End Sub
NOTA: si se quiere programar con el Keypress del Formulario la propiedad
KEYPREVIEW debe estar en TRUE.

• Change
Este evento sucede cuando cambia la estructura de las cajas de texto(TextBox)
Es decir conforme vayamos cambiando el contenido del texto se ejecutara el vento
CHANGE
Ejemplo:

Private Sub TxtNum_Change()


Print TxtNum
End Sub

Propiedades en tiempo de ejecución

Cada vez que se escriba algo en text1 se vera en LBMEN


Private Sub Text1_Change() LBMEN.Caption = Text1.Text

- 15 -
Lenguaje de Programación I

End Sub Private Sub CmdIzq_Click()


LBMEN.Left = LBMEN.Left - 30
Private Sub Check1_Click() End Sub
If Check1.Value = 1 Then
LBMEN.FontItalic = True Private Sub Cmddre_click()
Else LBMEN.Left = LBMEN.Left + 30
LBMEN.FontItalic = False End Sub
End If
End Sub Private Sub Cmdsube_Click()
LBMEN.Top = LBMEN.Top + 20
Private Sub Check2_Click() end Sub
If Check2.Value = 1 Then
LBMEN.FontBold = True Private Sub Cmdbajar_Click()
Else LBMEN.Top = LBMEN.Top - 20
LBMEN.FontBold = False
End If End Sub
End Sub
Private Sub Optmen_Click()
Private Sub CmdRojo_Click() LBMEN.FontSize = 8
Form1.BackColor = RGB(0, 0, 255) End Sub
End Sub
Private Sub CmdAma_Click() Private Sub Optmed_Click()
Form1.BackColor = RGB(255, 255, 0) LBMEN.FontSize = 24
End Sub End Sub

10.-Funciones de conversión de datos

Función Descripción
CBool Convierte una expresión al tipo Boolean
CByte Convierte una expresión al tipo Bute
CCur Convierte una expresión al tipo Currency
CDate Convierte una expresión al tipo Date
CDbl Convierte una expresión al tipo Double
CInt Convierte una expresión al tipo Integer
CLng Convierte una expresión al tipo Long
CSng Convierte una expresión al tipo Single
CStr Convierte una expresión al tipo String
CVar Convierte una expresión al tipo Variant

Ejemplos:
Num = CDbl(“123.45”) ‘el valor de Num seria 123.45
Num = CInt(“123.45”) ‘el valor de Num seria 123

- 16 -
Lenguaje de Programación I

Fec = CDate(“01/01/1980”) ‘el valor de fec seria 01/01/1980 como fecha


Cad = CStr(123) ‘ el valor de Cad seria “123” como cadena

IsArray Devuelve TRUE si el parámetro pasado es un nombre de matriz


IsDate Devuelve TRUE si el parámetro es el nombre de un dato tipo Date
IsEmpty Devuelve TRUE si el pará. es el nombre de una var. no inicializada
IsNull Devuelve TRUE si el pará. es el nombre de una var. que contiene
Null
IsNumeric Devuelve TRUE si el parámetro es el nombre de dato de tipo numérico
Str Devuelve la representación de un número en forma de cadena
TypeName Devuelve en forma de nombre el tipo de variable del parámetro
pasado
Val Devuelve el número representado por una cadena de caracteres
ValType Devuelve en forma de número el tipo de variable del parámetro
Pasado

Ejemplos:
F = IsDate(“cas”) ‘El valor de F sera falso.
F = IsNumeric(“1234”) ‘ el valor de F sera True

Format.- Da formato a una expresion

Ejemplo:
MiHora = #17:04:23#
MiFecha = #27 enero 1993#
' Devuelve la hora actual del sistema en el formato largo de hora definido por el sistema.
MiCadena = Format(Time, "Long Time")

' Devuelve la fecha actual del sistema en el formato largo de fecha definido por el sistema.
MiCadena = Format(Date, "Long Date")
MiCadena = Format(MiHora, "h:m:s") ' Devuelve "17:4:23".
MiCadena = Format(MiHora, "hh:mm:ss AMPM") ' Devuelve "05:04:23 PM".
MiCadena = Format(MiFecha, "dddd, d mmm yyyy")' Devuelve "Miércoles,
' 27 de Ene de 1993".
' Si no se suministra el formato, devuelve una cadena.
MiCadena = Format(23) ' Devuelve "23".
' Formatos definidos por el usuario.
MiCadena = Format(5459.4, "##,##0.00") ' Devuelve "5.459,40".
MiCadena = Format(334.9, "###0.00") ' Devuelve "334,90".
MiCadena = Format(5, "0.00%") ' Devuelve "500,00%".
MiCadena = Format("HOLA", "<") ' Devuelve "hola".
MiCadena = Format("Esto es", ">") ' Devuelve "ESTO ES".

- 17 -
Lenguaje de Programación I

11.- CUADROS DE DIALOGO


MsgBox .- Muestra un mensaje
MsgBox(mensaje,botones,titulo)
Los valores que pueden tomar el parámetro botones son:

Constante Valor Descipción


vbOKOnly 0 Muestra sólo el botón aceptar
vbOKCancel 1 Botones aceptar y cancelar
vbAbortRetryIgnore 2 Botones anular, reintentar e ignorar
vbYesNoCancel 3 Botones si, no y cancelar
vbYesNo 4 Botones si y no
vbRetryCancel 5 Botones reintentar y cancelar
vbCritical 16 Muestra el icono de mensaje crítico
vbQuestion 32 Icono de interrogación
vbExclamation 48 Icono de exclamación
vbInformation 64 Icono de mensaje de información
vbAplicationModal 0 Cuadro de diálogo modal de la aplicación
vbSystemModal 4096 Cuadro de diálogo modal del sistema

El parámetro botones es de valor numérico, y además de los botones que aparecen en le


cuadro de diálogo, también puede indicar el icono que acompañe al mensaje y el tipo de
diálogo modal que es.
Ejemplo:
Msgbox “Ingrese un precio valido”,16,”Mensaje” o tambien puede ser:
Msgbox “Ingrese un precio valido”,vbCritical,”Mensaje”

MsgBox "Desea Grabar...?", vbYesNo + vbQuestion, "Mensaje"

En caso de que se muestre un msgbox donde se debe responder al msgbox se debera poner
lo siguiente
If MsgBox("Ingrese Cantidad valida", vbCritical, "Mensaje") = vbYes Then
En este caso se esta preguntando si respondimos SI al msgbox.
Ejemplo
Dim Mensaje, Estilo, Título, Ayuda, Ctxt, Respuesta, MiCadena
Mensaje = "¿Desea continuar?" ' Define el mensaje.
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.

- 18 -
Lenguaje de Programación I

Título = "Demostración de MsgBox" ' Define el título.


Ayuda = "DEMO.HLP" ' Define el archivo de ayuda.
Ctxt = 1000 ' Define el tema
' el contexto
' Muestra el mensaje.
Respuesta = MsgBox(Mensaje, Estilo, Título, Ayuda, Ctxt)
If Respuesta = vbYes Then ' El usuario eligió el botón Sí.
MiCadena = "Sí" ' Ejecuta una acción.
Else ' El usuario eligió el botón No.
MiCadena = "No" ' Ejecuta una acción.
End If

InputBox. Se utiliza cuando se necesita que el usuario introduzca alguna información. La


síntaxis correcta es:
InputBox(mensaje,titulo,valorxdefecto)
Ejemplo:
nom = InputBox("Ingrese nombre", "Artefacto")
En este casos e mostrar un mensaje y lo que se ingrese se guardara en la variable nom si se
hace clic en Cancelar en nom se guardar NULL

Ejemplo Practico

Diseñar este formulario donde se ingresara el Codigo del Suministro y los KW consumidos
al hacer clic en Calcular se debe hallar el importe inicial, Alumbrado Publico,

- 19 -
Lenguaje de Programación I

Mantenimiento, IGV y el Pago Total, al hacer clic en Nuevo se debe limpiar las Cajas de
Textos y al hacer clic en Salir se debe salir del programa.
NOTA: Para realizar este formulario se va a utilizar los siguientes controles
Descripción Control Nombre
Codigo del Suministro Textbox TxtCod
Kilowatts consumidos TextBox Txtkilo
Importe Inicial Label LblInicial
Alumbrado Label Lblalum
Mantenimiento Label LblMant
Reajuste Label LblReajuste
IGV Label Lbligv
Total Label LblTotal
Calcular Command CmdCalcular
Nuevo Command CmdNuevo
Salir Command CmdSalir
Imagen Image Image1
Formulario Form Form1
Private Sub CMDCALCULAR_Click()
If MsgBox("Desea calcular...?", vbYesNo + vbQuestion, "Mensaje") = vbYes Then
Dim pago#, importe#
importe = Val(txtkilo) * 0.09
lblinicial = Format(importe, "#######0.00")
lblalum = Format(importe * 0.035, "#######0.00")
lblmant = Format(importe * 0.015, "#######0.00")
lblreajuste = Format(importe * 0.048, "#######0.00")
lbligv = Format(importe * 0.019, "#######0.00")
lbltotal = CDbl(lblinicial) + CDbl(lblalum) + CDbl(lblmant) + CDbl(lblreajuste) +
CDbl(lbligv)
End If
End Sub
NOTA: Bueno aqui lo que se puede apreciar es que se estan declarando 2 variables de tipo
double pago,importe luego se esta poniendo en los label el resultado de la operación note
que se pone format(importe,”#######0.00”) para formatear el resultado con 8 enteros y 2
decimales
Private Sub CMDNUEVO_Click()
Me.txtcod = ""
Me.txtkilo = ""
Me.lblinicial = ""
Me.lblalum = ""
Me.lblmant = ""
Me.lblreajuste = ""
Me.lbligv = ""
Me.lbltotal = ""
Me.txtcod.SetFocus
End Sub

- 20 -
Lenguaje de Programación I

Private Sub CMDSALIR_Click()


End
End Sub

Private Sub Form_Load()


Me.Caption = "Registar pagos a EdelNor"
Image1.Stretch = True
Image1.Picture = LoadPicture(App.Path + "\LOGO.JPG")

CMDNUEVO.Picture = LoadPicture(App.Path + "\nuevo.bmp")


CMDCALCULAR.Picture = LoadPicture(App.Path + "\grabar.bmp")
CMDSALIR.Picture = LoadPicture(App.Path + "\salir.bmp")
End Sub

NOTA: aqui estamos poniendo el titulo al formulario, ademas de poner la imagen al control
IMAGE1 la propiedad Stretch es para que la imagen se ajuste al control y la propiedad
Picture es para poner una imagen,Cuando se pone una imagen en tiempo de ejecucion se
necesita la funcion LoadPicture(“aquí va la ruta del archivo de imagen”), pero vean que
aquí se puso app.path que es una funcion que saca una cadena y esa cadena es la ruta actual
donde se encuentra el proyecto por ejemplo si el proyecto de visual basic se encuentra en
C:\nueva carpeta la funcion app.path sacara c:\nueva carpeta ahora a esto se suma \logo.jpg
si sumamos las 2 cadenas el resultado seria c:\nueva carpeta\logo.jpg
Para esto la imagen Logo.jpg debe estar en la misma carpeta donde se encuentra el proyecto
OJO.- Para los botones es lo mismo pero ahí debemos de poner la propiedad STYLE en
Graphical.

Practica N° 2
1.- Ingrese por teclado en una caja de texto la hora en formato de 24 horas y en otra caja de
texto la cantidad de minutos al hacer clic en un boton debera salir la hora en formato de 12
horas por ejemplo si se ingresa 23 en una caja y en la otra 12 el resultado seria 11:12:PM

2.- Ingrese la cantidad de minutos hablados por una persona y escoja el tipo de llamada
(Local, Nacional, Internacional).Se visualizara el importe de la llamada sabiendo que por
los 3 primeros minutos se paga S/ 1.00 y por cada minuto adicional se paga 0.50 en caso
sea local si es nacional se incrementa el 25% y si es internacional se incrementa el 60% a
los precios por minuto.

3.- Ingresar el nombre de un trabajador, la cantidad de hijos y su sueldo, si este tiene hijos
se le dará una bonificación de S./40.00 por hijo y si no tiene hijos se le dara el 25% de su
sueldo se deberá mostrar la bonificación y el sueldo final.

4.- Ingrese por teclado dos números y al escoger un signo de operación se debera mostrar el
resultado de la operación.

- 21 -
Lenguaje de Programación I

5.- Ingrese un numero máximo de 2 cifras si el numero es de una cifra se deberá mostrar
cuanto falta para convertirse en un numero de 2 cifras, y si es de 2 cifras se deberá mostrar
cuanto falta para convertirse en un numero de 3 cifras.

6.- Ingrese un numero cualquiera y muestre la cantidad de cifras que tiene según sea el
caso.
Ejemplo: 203 = “Tiene 3 cifras”, 45678 = “Tiene 5 cifras” tome en cuenta que el numero
máximo a ingresar es un millon..

7.- Ingrese por teclado el nombre, año de nacimiento y sexo de una persona (M o F),se
deberá mostrar uno de los siguientes mensajes.
- Varon mayor de edad
- Varon menor de edad
- Dama mayor de edad
-Dama menor de edad

8.- Ingrese un numero y visualícelo en romano.

9.- Ingrese por teclado el día de nacimiento y el mes de nacimiento de una persona al hacer
clic se deberá mostrar su signo zodiacal así como también deberá aparecer la imagen del
signo Zodiacal en un control PictureBox.

10.- Se deberá desarrollar un algoritmo en el cual se deberá ingresar el nombre de un


alumno y se deberá escoger el turno en el que estudia (M , T y N) asi como tambien el ciclo
(I, II, III, IV, V, VI y SIDET) y la carrera (CI, Enfermeria y Administración) se debera
calcular el pago de su pension en base a los siguientes datos:
el precio por carrera es:
CI = 320.00
Enfermeria = 280.00
Administración = 270.00
Ademas que dependiendo del ciclo en el que estan se pagara un recargo del precio de
10,20,30,40,50,60 y 70% (para sidet). Asi como tambien si es del turno “M” se debera
recargar 10% mas solo si esta en I, II, o III ciclo, si es del turno “T” se recarga el 15 % mas
solo si esta en I, o II y por utlimo si es del turno “N” se se la hara un descuento del 15 %
solo si esta en SIDET
Al finalizar solo se debe mostrar el monto de la pension.

11.- Realizar el siguiente formulario:

- 22 -
Lenguaje de Programación I

Se deberá ingresar el largo y el ancho del terreno y conforme vayan digitándolo deberá
salir el total (Largo * ancho)
Se deberá ingresar el precio por metro y al escoger una categoría el precio se incrementara
en un 10, 20, y 30 % respectivamente según la categoria, ademas de salir el precio total que
sera el total de area * el precio y si se escogio en tipo de alquiler Contado se le hara un
Descuento de 10% al precio total y si es credito se le hara un recargo de 15 %.
Finalmente se deberá escoger si se pagara alumbrado, parques o serenazgo sacando los %
correspondientes al precio total según indica el fomulario el precio final debera salir al
hacer clic en el boton calcular.

12.-Funciones de Cadenas,Numéricas y Fechas

Funciones de tratamiento de datos numéricos

Función Descripción

Abs Devuelve el valor absoluto de un número


Atn Devuelve el arcotangente de un número
Cos Devuelve el coseno de un número
Exp Devuelve el exponencial de un número en base e
Fix Devuelve la parte entera de un número, redondeando los valores al
Siguiente valor superior
Hex Devuelve una cadena que representa el valor hexadecimal de un

- 23 -
Lenguaje de Programación I

número
Int Devuelve la parte entera de un número
Log Devuelve el logaritmo natural de un número (en base e)
Oct Devuelve una cadena de caracteres que representa el valor octal
Rnd Devuelve un número aleatorio menor que 1 y mayor o igual que 0
Sgn Devuelve el signo de un número (-1 si es negativo, 0 si es nulo y
1 si es positivo)
Sin Devuelve el seno de un número
Sqr Devuelve la raíz cuadrada de un número
Tan Devuelve la tangente de un número
Val Devuelve el número representado por una cadena de caracteres

NOTA: La funcion rnd devuelve un numero aleatorio entre 0 y 1 si queremos un numero


aleatorio del 1 al 100 lo multiplicamos x 100 osea RND * 100 para sacar la parte entera
seria Cint(rnd()*100)
Ejemplos:
Ingrese un numero y visualize las sgtes expresiones:

Private Sub Command1_Click()


Dim N As Double
Randomize
N = Abs(Text1)
Text2 = Abs(N)
Text3 = Atn(N)
Text4 = Cos(N)
Text5 = Exp(N)
Text6 = Log(N)
Text7 = Int(Rnd() * 100)
Text8 = Sgn(N)
Text9 = Sin(N)
Text10 = Sqr(N)

- 24 -
Lenguaje de Programación I

Text11 = Tan(N)
End Sub

Funciones de tratamiento de cadenas de caracteres

Función Descripcion Ejemplo


Asc Devuelve el código ASCII del primer Sintaxis: Asc(“A”)
carácter de una cadena Res: 65
Chr Devuelve el carácter asociado al código Sintaxis: chr(65)
ASCII de un número Res: “A”
Format Formatea una expresión según una Sintaxis: format(122,”###.00”)
formato pasado como parámetro Res: 122.00
InStr Devuelve la posición de la primera Sintaxis: instr(“ABCD”,”C”)
ocurrencia de una cadena dentro de otra Res: 3 devuelve la posición que
Instr(dondesebusca,loquesebusca) ocupa C en la cadena ABCD
Lcase Devuelve una cadena con sus caracteres Sintaxis: Lcase(“A”)
convertidos a minúsculas Res: a
Ucase Devuelve una cadena con sus caracteres Sintaxis: Ucase(“a”)
convertidos a mayúsculas Res: A
Left Devuelve un número especificado de Sintaxis: Left(“ABCD”,2)
caracteres desde la izquierda de una Res: AB
cadena Left(cadena,cantidad)
Right Devuelve un número especificado de Sintaxis: Right(“ABCD”,2)
caracteres desde la derecha de una Res: CD
cadena Right(cadena,cantidad)
Len Devuelve el número de caracteres de Sintaxis: Len(“ABCD”)
una cadena Res: 4
Ltrim Devuelve una cadena, eliminando los
espacios en blanco a la Izq.
Rtrim Devuelve una cadena, eliminando los
espacios en blanco a la derecha
Trim Devuelve una cadena, eliminando los
espacios en blanco a izquierda y derecha
Mid Devuelve la subcadena de tamaño y Sintaxis: Mid(“ABCD”,3,2)
posición especificada dentro de otra Res: CD
cadena MID(cadena,posición,cantidad)

Space Devuelve una cadena formada por un Sintaxis: “Hola” & space(2)
número especificado de espacios en Res: “hola “
blanco
StrComp Compara 2 cadenas Sintaxis: strcomp(“A”,”A”)
Strcomp(cad1,cad2) Res: 0
devuelve:
–1 : Si cad1< cad2
0 : Si cad1=cad2
1 : Si cad1>cad2

- 25 -
Lenguaje de Programación I

Replace Reemplaza una cadena Sintaxis:


Replace(cad,buscar,reemplazar) Replace(“ABCD”,”C”,”X”)
Res: “ABXD” Busca la C y la
cambia por la X
Str Devuelve la representación de un Sintaxis: str(122)
número en forma de cadena Res: “122”
Ejemplo:

Private Sub Command1_Click()


Text2 = Len(Text1)
Text3 = UCase(Text1)
Text4 = LCase(Text1)
Text5 = Mid(Text1, 3, 9)
Text6 = Left(Text1, 5)
Text7 = Right(RTrim(Text1), 6)
Text8 = Str(Val(Text1))
Text9 = "Arriba" + Space(6) + "Peru"
Text10 = "INSTITUTO" + LTrim(Text1) + "IDAT"
Text11 = "INSTITUTO" + RTrim(Text1) + "IDAT"
Text12 = StrComp(Text1, "INSTITUTO")
Text13 = InStr(1, "IDAT", Text1)
Text14 = Replace(Text1, "IDAT", "HOLA")
End Sub

Funciones de tratamiento de fechas y horas

Función Descripción Ejemplos


Date Devuelve la fecha actual del Sintaxis: Date
sistema Saca la fecha actual

- 26 -
Lenguaje de Programación I

Day Devuelve un número entre 1 y 31 Sintaxis: day(“11/01/2004”)


representando el día del mes Res: 11
Month Devuelve un número entre 1 y 12 Sintaxis: Month(“11/01/2004”)
representando el mes del año Res: 1
Year Devuelve un número entero Sintaxis: Year(“11/01/2004”)
representando el año Res: 2004
WeekDay Devuelve un número que Sintaxis: weekday(“11/01/2004”)
representa el día de la semana Res: 1
empieza de 1.-domingo,2.-
Lunes,etc...
Now Devuelve la fecha y hora actual del Sintaxis: now
sistema Saca la fecha y Hora actual
Time Devuelve la hora actual del Sintaxis: time
sistema Saca la hora actual
Hour Devuelve un número entre 0 y 23
representando la hora del día
Minute Devuelve un número entre 0 y 59
representando los minutos de la
hora
Second Devuelve un número entre 0 y 59
representando los segundos de
minuto
DatePart Devuelve una parte de una fecha Sintaxis: Datepart(“m”,date)
especificada (el año, el día,los Saca el mes actual
minutos, etc)
Datepart(Intervalo,Fecha)
Para este se pone un intervalo:
Valor Descripción
yyyy Año
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
n Minuto
s Segundo
Esto tambien se aplica para las
funciones Dateadd y Dateiff

DateAdd Devuelve una fecha añadiéndole Sintaxis:DateAdd(“d”,3,”01/01/2004”)


un cierto intervalo de tiempo Res: 04/01/2004
especificado
DateAdd(intervalo,cantidad,fecha)
DateDiff Devuelve el número de intervalos Sintaxis:DateDiff(“yyyy”,”01/01/2000”,”01/01/2004”)

- 27 -
Lenguaje de Programación I

de tiempo entre dos fechas Res: 4


especificadas
DateDiff(Intervalo,Fecha1,Fecha2)

Ejemplos:
Dim LaFecha As Date ' Declara las variables.
Dim Msj
LaFecha = InputBox("Escriba una fecha")
Msj = "Días desde hoy: " & DateDiff("d", Now, LaFecha)
MsgBox Msj

Dim LaFecha As Date ' Declara las variables.


Dim Msj
LaFecha = InputBox("Escriba una fecha:")
Msj = "Trimestre: " & DatePart("q", LaFecha)
MsgBox Msj

13.- Evento Gotfocus, LostFocus, MouseDown, MouseUp y MouseMove

Gotfocus .- Se produce cuando algun control toma el enfoque


Lostfocus.- Se produce cuando algun control pierde el enfoque

Ejercicio :Diseñe un formulario donde se debe de ingresar el nombre, el sueldo y la fecha


de Ingreso al hacer clic en un boton se debe visualizar su sueldo final tomando en cuenta
que si tienes mas de 20 años trabajando se le debe hacer una bonificación de 50% en caso
contrario no habra bonificación.

NOTA: debe validar para que cuando tome el enfoque una caja de texto el color de fondo
cambie a rojo y cuando se pierda regrese a blanco ademas de que si ingresa minúsculas al
perder el enfoque el texto debe convertirse a mayúsculas.

Lo importante en este ejercicio no tanto es el resultado si no que sepamos manejar los


eventos tanto gotfocus como lostfocus
Se dice que al tener el enfoque un texto el color de fondo cambie a rojo entonces debemos
programar lo siguiente:
Private Sub txtnom_GotFocus()
txtnom.BackColor = vbRed
End Sub
Y de ahí dice que al perder el enfoque debe regresar a color blanco ademas de que el texto
salga en mayúsculas
Private Sub txtnom_LostFocus()
txtnom.BackColor = vbWhite
txtnom = UCase(txtnom)
End Sub’’donde Ucase es una funcion de cadena que convertira en mayúscula el valor de
txtnom y lo guardara ahí mismo.
Lo mismo se debe hacer para las demas cajas de texto.

- 28 -
Lenguaje de Programación I

MouseDown, MouseUp y MouseMove

El evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del ratón,
mientras que el evento MouseUp sucede al soltar un botón que había sido pulsado. El
evento MouseMove sucede al mover el ratón sobre un control o formulario.
Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser
comentados. El argumento Button indica cuál de los botones del ratón ha sido pulsado o
soltado, y el argumento Shift indica si además alguna de las teclas alt, shift o ctrl está
también pulsada. La lista con todos los posibles valores de estos argumentos se muestra

Constante Valor Descripcion


vbLeftButton 1 Botón izdo pulsado o soltado
vbRightButton 2 Botón dcho pulsado o soltado
vbMiddleButton 4 Botón central pulsado o soltado

Ejemplo: Diseñar un formulario que al hacerle Clic derecho se agrande y al hacerle clic
izquierdo suceda lo contrario ademas de cuando se pase el mouse pro un Boton el
formulario cambie de color Rojo y Azul.

General - Declaraciones
Dim sw As Boolean
Private Sub CmdMover_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If sw Then
Me.BackColor = vbRed
sw = False
Else
Me.BackColor = vbBlue
sw = True
End If
End Sub

Private Sub Form_Load()


sw = True
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As


Single)
If Button = 1 Then

- 29 -
Lenguaje de Programación I

Me.Width = Me.Width + 100


Me.Height = Me.Height + 100
Else
Me.Width = Me.Width - 100
Me.Height = Me.Height - 100
End If
End Sub

14.-Instrucciones Repetitivas, Sentencia Exit.

1.- FOR.(Para Hasta)


Sintaxis:
For var=valorinicial to valorfinal step(incremento)
(programacion)
Next var
El For es una sentencia repetitiva donde var es la variable de control que dara las
vueltas.

Ejemplos:
Visualize en el formulario los numeros pares del 100 al 2(100,98,96..)
For i=100 to 2 step –2
Print i
Next I
Visualize en el formulario los numeros impares del 1 al 99(1,3,4..)
For i=1 to 99 step 2
Print I
Next
Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellos
Dim suma as integer,i as integer
Suma=0 Ejemplo:
For I=10 to 99 Sumar= 3+5+7+...+81
Print I Sm=0
Suma=Suma + i For N=3 to 81 Step 3
Next Sm=Sm+n
Print “La suma es “ & suma Next
‘el & concatena
2.- DO WHILE.…LOOP.(Hacer mientras) , DO…. LOOP UNTIL(Hacer Hasta)
Sintaxis:
Do while condicion Do
(programacion) (programacion)
Loop Loop Until Condicion
Ejemplos:

- 30 -
Lenguaje de Programación I

Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellos


Do while Do Loop until
Dim i as integer,suma as integer Dim i as integer,suma as integer
Suma=0 Suma=0
i=10 i=10
Do while i <= 90 Do
Print I Print I
Suma= Suma + i Suma= Suma + I
i= i +1 i= i +1
Loop Loop Until i > 90
Print “La suma es “ & suma Print “La suma es “ & suma

3.- WHILE..WEND(Hacer Cuando)


Sintaxis:
While condicion
(progamacion)
wend
Dim i as integer,suma as integer
Suma=0
i=10
while i <= 90
Print I
Suma= Suma + i
i= i +1
wend
Print “La suma es “ & suma
Con la sentencia while wend, no se podra utilizar la setencia EXIT
4.- FOR EACH
Repite un grupo de instrucciones para cada elemento de una matriz o colección.
Sintaxis:
FOR EACH elemento IN grupo
(Instrucciones)
NEXT

Ejemplo: Poner a las cajas de texto color de fondo rojo


Private Sub CmdCambiar_Click()
'Se declara una varibale de tipo Object
Dim obj As Object
'Por cada objeto que se encuentre en el formulario actual
'Este for dara vueltas segun la cantidad de objetos que hay en le formulario
For Each obj In Me.Controls

- 31 -
Lenguaje de Programación I

'Pregunta si el objeto es un Textbox si lo es cambia de color de fondo


If TypeOf obj Is TextBox Then
obj.BackColor = vbRed
End If
Next
End Sub

Sentencia EXIT
La sentencia EXIT permitira salir de un bucle,funcion,procedimiento,etc.Dependiendo de
donde se quiere salir se aplicará la sentencia:
Exit For .- Sale de un for
Exit Do.- Sale de un Do
Exit Sub.- Sale de un procedimiento
Exit Function.- Sale de una funcion , etc.

Ejemplo 1: queremos hacer un programa el cual muestre el primer numero primo que hay
entre 10 y 90
Dim num As Integer, cd As Integer, i As Integer
'El primer for ira del 10 al 90
For num = 10 To 90
'Se inicializa la variable cd que contara los divisores de num
cd = 0
'Este for es para dividir consecutivamente num/1,num/2,num/3 asi sucesivamente
'para ver cuales son sus divisores
For i = 1 To num
'Si el residuo es 0 es divisible y el contador se incrementa
If num Mod i = 0 Then
cd = cd + 1
End If
Next
'Si la cantidad de divisores es 2 quiere decir que es primo
If cd = 2 Then
Print "El primer primo es " & num
'Como ya encontro el primer primo rompe el for de num
Exit For
End If
Next

Ejemplo: Desarrollar un algoritmo que permita mostrar los numeros Amstrong que hay del
1 al 1000 se dice que son numeros amstrong cuando la suma del cubo de sus cifras es igual
al mismo numeros. Ejemplo :153 = 1^3 + 5^3 + 3^3 serian iguales

- 32 -
Lenguaje de Programación I

Private Sub Form_Load()


Dim Num%, NumAux%, Suma%, R%
For Num = 1 To 1000
NumAux = Num
Suma = 0
Do While NumAux > 0
R = NumAux Mod 10
Suma = Suma + (R ^ 3)
NumAux = NumAux \ 10
Loop
If Suma = Num Then
Lblcant = Val(Lblcant) + 1
lblnumeros = lblnumeros & Num & ","
End If
Next
End Sub

Aplicación con Procesos repetitivos.-


Private Sub CmdBin_Click()
Dim cad$
Dim n%
n = Val(Text1)
cad = ""
Do While n <> 0
r = n Mod 2
n=n\2
cad = cad + Str(r)
Loop
LBR1 = StrReverse(cad)
End Sub

Private Sub Cmdhexa_Click()


Dim cad$
Dim n%

- 33 -
Lenguaje de Programación I

n = Val(Text1)
cad = ""
Do While n <> 0 ‘Hacer mientras n sea diferente a cero
r = n Mod 16
n = n \ 16
If r > 9 Then
cad = cad + Chr(55 + r)
Else
cad = cad + Str(r)
End If
Loop
Lbr2 = StrReverse(cad)
End Sub

Practica N° 3
1.- Ingrese un numero y Genere las siguientes series: (el resultado se mostrara en un label o
en un text)
• 1,3,5,7,.....
• -1,+3,-5,+7...
• 1,3,2,5,3,7,4,9,5,11....
• 0,1,1,2,3,5,8,13...(Serie Fibonacci)

2.- Genere 100 numeros aleatorios y diga cuantos primos mayores a 50 hay,perfectos
menores a 10 hay, pares e impares.

3.- Genere 100 numeros aleatorios y al finalizar diga cual es el mayor y el menor.

4.- Ingrese un numero de cualquier cifra y mostrarlo en forma invertida

5.- Ingrese un numero y conviértalo en base 2

6.- Ingrese una cadena y muestre lo siguiente


• La cadena en forma invertida
• Diga cuantas vocales tiene
• Diga cuantos espacios en blancos hay

7.- Ingrese Una cadena y muestre lo siguientes: (Utilice Print)


Ejemplo: cadena:”HOLA”

- 34 -
H H HOLA
O HO HOL
L HOL HO
A HOLA H

8.- Ingrese una cadena y conviértalo en mayúscula y en minusculas sin utilizar las
funciones ucase y lcase.

9.- Genere 10 numeros aleatorios y si el numero es par se debera incrementar el numero


con la suma de su raiz cuadrada,si el numero es impar se debera incrementar el numero con
la suma del seno del numero. AL finalizar se debe mostrar la suma de todos los numeros.

10.- Ingrese Una fecha y diga cuantos dias faltan para acabar el año, cuantos dias han
pasado desde esa fecha hasta la fecha actual, que dia cae esa fecha (Lunes,martes), y
muestre la misma fecha en el siguiente formato: “Lunes 15 de Abril de 2003” (Por ejemplo)

11.- Ingrese en una caja de texto una cadena y al finalizar diga cuantas palabras tiene dicha
cadena y cual es la cantidad de caracteres que tiene la palabra con mayor longitud

12.- Ingrese un usuario y un password y si se equivoca tres veces debe salir de la


aplicación

13.- Realice el siguiente formulario:

En este formulario se debera escoger un color y un objeto(checks,text,options) y al hacer


clic en fondo o en letra debera cambiar al color que se ecogio ya sea el fondo(backcolor o la
letra(forecolor)

Luego al hacer clic en


cursiva( font.italic) o en negrita
(font.bold) o subrayado (font.underline)
se debera cambiar la apariencia de los
controles que se escogio (Checks,
text ,Options)
14.- Realice el siguiente formulario:

Cuando se haga clic en


Mostrar Resultado se debe
mostrar la edad del
trabajador, el tiempo de
servicio y el codigo que se
generara de la siguiente
manera: el año de ingreso
luego la letra “M” o “F”
según su sexo , los 2
primeros caracteres de su
apellido paterno, los 2
primeros caracteres de su
apellido materno, el primer
carácter de su nombre y un
correlativo
Ademas al ingresar sus
nombres al perder el
enfoque se debera cambiar
el texto por mayúsculas y al
entrar al enfoque de algun
texto el color de fondo debera cambiar y al salir del enfoque debera regresar al color
original que tuvo.

Ejercicios Practicos:
1.- Ingrese un precio y una cantidad y al hacer clic en calcular mostrar el monto (cantidad *
precio)

Private Sub cmdcalcular_Click()


Dim monto#
If Not IsNumeric(txtprecio) Then ‘Aqui se pregunta si txtprecio no es un numero
MsgBox "Ingrese Precio", vbCritical, "Mensaje"
txtprecio.SetFocus
Exit Sub ‘Sale del programa
End If
If Not IsNumeric(txtcanti) Then
MsgBox "Ingrese Cantidad valida", vbCritical, "Mensaje"
txtcanti.SetFocus
Exit Sub
End If
If MsgBox("Desea calcular...?", vbYesNo + vbQuestion, "Confirmar") = vbYes Then
monto = CDbl(txtprecio) * CDbl(txtcanti) ‘Cdbl para convertir a doble
lblmonto = Format(monto, "########.00") ‘El monto a 8 enteros y 2 decimales
End If
End Sub
Private Sub cmdnuevo_Click()
txtprecio = ""
txtcanti = ""
lblmonto = ""
txtprecio.SetFocus
End Sub
Private Sub cmdsalir_Click()
End
End Sub
Private Sub Form_Activate()
Me.Caption = Format(Date, "Long date") ‘Se pone el caption la fecha en formato largo
‘DATE es una funcion que devuelve la fecha actual.
End Sub
2.- Diseñe un formulario donde tendra una caja de texto la cual aceptara letras y conforme
se va escribiendo en el texto su contenido se mostrara en el caption del formulario
Ademas se debe cambiar algunas de sus propiedades mediante checkbox

Private Sub chkcur_Click()


txtcad.Font.Italic = Not txtcad.Font.Italic
‘quizas algunos lo habrian hecho asi:
‘if chkur.value=1 then
‘txtcad.Font.Italic = true
‘else
‘txtcad.Font.Italic = false
‘endif
‘pero ustedes decidan cual es mas practico????????
End Sub

Private Sub chkena_Click()


txtcad.Enabled = Not txtcad.Enabled
End Sub

Private Sub chkneg_Click()


txtcad.Font.Bold = Not txtcad.Font.Bold
End Sub

Private Sub chksub_Click()


txtcad.Font.Underline = Not txtcad.Font.Underline
End Sub
Private Sub chkvis_Click()
txtcad.Visible = Not txtcad.Visible
End Sub
Private Sub CmdAlinea_Click()
Dim num%
‘la funcion chr transforma un codigo ascii a carácter en este caso esta transformando 13 que
‘es el ENTER.
num = Val(InputBox(Chr(13) & "0.-Izquierda" & Chr(13) & "1.-Derecha" & Chr(13) &
"2.-Centro", "Ingrese Alineacion"))
If num > 3 Or num < 0 Then
MsgBox "Solo se admite valores entre 0 y 2", vbExclamation, "Mensaje"
Else
txtcad.Alignment = num
End If
End Sub
Private Sub txtcad_Change()
Me.Caption = txtcad.Text
End Sub
Private Sub txtcad_KeyPress(KeyAscii As Integer)
Select Case Chr(KeyAscii)
Case "A" To "Z", "a" To "z":
Case Else: KeyAscii = 0
MsgBox "Solo letras", vbCritical, "Mensaje"
End Select
End Sub
15.- Barras de desplazamiento (Scroll Bars)

En este tipo de control las propiedades más importantes son Max y Min, que
determinan el rango en el que está incluido su valor, LargeChange y SmallChange
que determinan lo que se modifica su valor al clicar en la barra o en el botón con la
flecha respectivamente y Value que determina el valor actual de la barra de
desplazamiento. Las barras de desplazamiento no tienen propiedad Caption.
El evento que se programa habitualmente es Change, que se activa cuando la
barra de desplazamiento modifica su valor. Todo lo comentado en este apartado es
común para las barras de desplazamiento verticales y horizontales.
Además de las Scroll Bars horizontal y vertical, Visual Basic 6.0 dispone también del
control
Slider, utilizado en los paneles de control de Windows, que tiene una función similar.

16.- Función RGB


Esta función devuelve un número que representa un color a partir de tres argumentos
enteros entre 0 y 255, que son sus componentes RGB. Como ejemplo de uso:
form1.BackColor = RGB(127, 127, 64) Si alguno de los argumentos tiene un valor mayor
que 255, se toma como 255.

Ejemplo:

Sub Pintar
Text4.BackColor = RGB(Val(Text1), Val(Text2), Val(Text3))
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
VScroll1.Value = Val(Text1)
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
VScroll2.Value = Val(Text2)
End If
End Sub
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
VScroll3.Value = Val(Text3)
End If
End Sub
Private Sub VScroll1_Change()
Text1 = VScroll1.Value
Call Pintar
End Sub
Private Sub VScroll2_Change()
Text2 = VScroll2.Value
Call Pintar
End Sub
Private Sub VScroll3_Change()
Text3 = VScroll3.Value
Call Pintar
End Sub

17.- Control Timer

Si se desea que una acción suceda con cierta periodicidad se puede utilizar un control
Timer.
Este control produce de modo automático un evento cada cierto número de milisegundos.
La propiedad más importante de un objeto de este tipo es Interval, que determina,
precisamente, el intervalo en milisegundos entre eventos consecutivos. La acción que se
desea activar debe programarse en el evento Timer de ese mismo control.
Si en algún momento se desea anular momentáneamente la acción periódica es suficiente
con hacer False la propiedad Enabled del control Timer y para ejecutarla de nuevo volver
a hacer True esa propiedad. Haciendo 0 la propiedad Interval también se consigue
inhabilitar el Timer.
Ejemplo: Diseñar un formulario que tenga una imagen de un Avion que se desplaze por el
formulario ademas debe salir un texto en el caption del formulario que de la impresión que
fuera una marquesina.

Lo primero que se debe hacer es jalar 2 timer y poner en la propiedad Interval 100 para que
lo que se programe en el timer se ejecuta cada 100 milisegundos
Dim cad$
Private Sub Form_Load()
cad = "Programa hecho por Fulano "
Me.Caption = cad
End Sub

Private Sub Timer1_Timer()


Me.Caption = Mid(Me.Caption, 2, Len(Me.Caption) - 1) & Left(Me.Caption, 1)
End Sub

Private Sub Timer2_Timer()


ImgAvion.Left = ImgAvion.Left + 100
If ImgAvion.Left > Me.ScaleWidth Then
ImgAvion.Left = 0
End If
End Sub

18.- CONTROLES GRÁFICOS


Control line
Es el control gráfico más elemental, ya que carece de propiedades como text, caption y
value.Además no reconoce ningún evento, por lo que su misión es casi exclusivamente
decorativa.
El control line permite dibujar líneas en un formulario o en un control picture. Las
propiedades más importantes son las coordenadas de los puntos extremos (X1, Y1, X2 e Y2
—donde x es columna e y es fila), la anchura en pixels (BorderWidth), el estilo de la línea
(BorderStyle) -continua, a trazos, etc.- que sólo está activo cuando la anchura es 1 pixel, el
color (BorderColor) y el nombre (Name). La línea puede estar visible o no (Visible), y
existe la propiedad Index, que permite crear arrays de líneas.

Control shape
Este control es en muchos aspectos similar al control line: tampoco tiene las propiedades
text, caption y value, ni reconoce eventos. Se diferencia en que admite formas geométricas
más complejas, que vienen definidas por la propiedad shape, que admite los valores
siguientes: cuadrado
(Square), rectángulo (Rectangle), círculo (Circle), elipse (Oval), cuadrado redondeado
(Rounded Square) y rectángulo redondeado (Rounded Rectangle).
Además de las propiedades correspondientes al tamaño y posición, las propiedades más
interesantes del control shape son las siguientes: BackColor, BackStyle, BorderColor,
BorderStyle, BorderWidth, FillColor, FillStyle, DrawMode. Un control shape puede estar
visible o no (Visible),

Control image
El control image es un contenedor de gráficos bitmap, iconos, metafile, enhanced
metafile, GIF y JPEG. Este control admite ya una amplia colección de eventos, por lo que
es ya un control con un papel mucho más activo que los anteriores.
Las propiedades más propias e importantes de este control son las propiedades picture y
stretch. La propiedad picture sirve para relacionar este control con el fichero que contiene
el gráfico que se desea representar, a través del cuadro de diálogo Load Picture que permite
elegir el fichero a insertar. El fichero deberá ser de uno de los tres tipos admitidos. Según el
fichero elegido, la propiedad picture tendrá uno de los tres valores siguientes: icon
(ficheros cur, ico), bitmap (bmp, gif, jpg) o metafile (wmf, emf).
La propiedad stretch indica cómo se comporta el control image al introducir en él el
contenido del fichero gráfico. Por defecto, cuando se crea un control image arrastrando en
el formulario con el ratón esta propiedad tiene el valor false. Estando la propiedad stretch
en false el tamaño del control se ajusta al tamaño del bitmap o del metafile que se introduce
en dicho control. Por el contrario, si dicha propiedad está en true el gráfico que proviene
del fichero se adapta al tamaño de control.
Se puede tratar de modificar el tamaño del gráfico en modo de diseño (con el ratón o
cambiando las propiedades de tamaño del control). Si el gráfico es un bitmap y la propiedad
stretch está en false el tamaño de la imagen no cambia aunque cambie el del control
(quedando en la esquina superior izquierda si el control se hace más grande, o quedando
parcialmente oculta si alguna de las dimensiones del control se hace más pequeña que la del
bitmap. Si la propiedad stretch está en true el bitmap se adapta al tamaño del control y su
tamaño se cambia con el de éste.
Los gráficos metafile siempre se pueden cambiar de tamaño en modo de diseño, tanto si
stretch está en true como si está en false.
Existen otras formas de cargar un gráfico en un control image, además de utilizar la
propiedad
picture en modo de diseño, como se ha visto anteriormente. Una segunda forma, utilizable
también
en modo de diseño, es hacer Copy y Paste a partir de un gráfico contenido en otra
aplicación como Paint Shop Pro o Excel.
En modo de ejecución se puede copiar el contenido de un control image en otro control del
mismo tipo por medio de una sentencia de asignación en la forma:
imgCuadro.picture = imgCaja.picture
y se puede también cargar una imagen de un fichero utilizando el procedimiento
LoadPicture, por ejemplo en la forma siguiente (habrá que estar seguro de que existe el
fichero): imgCuadro.picture = LoadPicture("G:\graficos\pc.wmf")
Aunque el control image admite algunos eventos (Click, DblClick, DragDrop, DragOver,
MouseUp, MouseDown, MouseMove), sus posibilidades son también limitadas. Por la
forma en que se dibuja, el control image no puede estar sobre otro control, como por
ejemplo un botón Tampoco puede contener otros controles en su interior: sólo puede
contener gráficos. Finalmente, este control no puede obtener el focus y por tanto no puede
responder a acciones desde el teclado. El control picture, que se verá a continuación,
resuelve estas limitaciones aunque presenta la desventaja de ser más lento en dibujar que el
control image.
Control Picture Box
Este es el control gráfico ( ) más potente y general de Visual Basic 6.0. Se trata de una
especie de formulario reducido, pues puede contener imágenes y otros tipos de controles
tales como botones, shapes, labels, cajas de texto, etc.
Con respecto a los bitmaps, el control picture se comporta de modo diferente que el control
image. El control picture no tiene propiedad stretch, con lo cual al
cargar un icono o un bitmap siempre aparecen con su tamaño natural Sin embargo el
control picture tiene la propiedad AutoSize, que por defecto está en false. Cuando se carga
un bitmap con AutoSize en false el gráfico aparece en la esquina superior izquierda del
control; sin embargo, si AutoSize está en true el control picture adapta su tamaño al del
bitmap que es cargado. (Stretch: false y true) y en un control picture (AutoSize: false y
true). Los gráficos metafile se comportan de un modo diferente, En el control image se
cargan con su verdadero tamaño si la propiedad stretch es false, mientras que se adaptan al
tamaño del control si dicha propiedad es true. Con el control picture se adaptan al tamaño
del control si AutoSize es false, mientras que se cargan con su propio tamaño si es
AutoSize es true.
En el control picture (al igual que en los formularios) son importantes las cuatro
propiedades relacionadas con el color: BackColor, ForeColor, FillColor y FillStyle. La
propiedad BackColor controla el color de fondo del control. La propiedad ForeColor
controla el color del texto que se escribe en el control
Las propiedades FillColor y FillStyle no afectan directamente al control sino a los
elementos gráficos que se dibujen sobre él con métodos tales como line y circle, que se
verán a continuación. FillStyle determina el tipo de relleno o pattern (líneas horizontales,
verticales, inclinadas, cruzadas, ...), mientras que FillColor determina el color de estas
líneas del relleno.
19.- METODOS GRÁFICOS.-

Dibujo de puntos: Método Pset


El método pset sirve para dibujar puntos en un formulario o en un control picture. Su forma
general es la siguiente:
object.PSet (x, y), color
donde: object es opcional y representa el objeto (form o picture) en el que se va a dibujar el
punto. Si se omite, el punto se dibuja en el formulario activo (el que tiene el focus).Si se
introduce las coordenadas que le siguen son relativas respecto a las propiedades CurrentX
y CurrentY. Al dibujar un punto, estas propiedades se actualizan a las coordenadas de
dicho punto.(x, y) son las coordenadas absolutas o relativas del punto a dibujar
(expresiones, variables o constantes single). Tanto las coordenadas como los paréntesis son
obligatorios. Las unidades dependen de la propiedad ScaleMode del objeto en que se
dibuja.Color es opcional y es un nombre de color (vbRed, vbBlue, etc.) o un long
conteniendo el código de color hexadecimal (puede ser el valor de retorno de la función
RGB). Si se omite se utiliza la propiedad ForeColor del objeto en el que se dibuja.
El tamaño del punto viene determinado por la propiedad DrawWidth del objeto en que se
dibuja. Si el tamaño es mayor que uno, el punto se dibuja centrado en las coordenadas
suministradas a pset. Si se desea eliminar un punto previamente dibujado es necesario
volver a pintar ese punto con el color de fondo del objeto (BackColor).

Ejemplo:
form1.pSet(100,200),vbBlue ‘Con esta sentencia se dibuja un punto de color azul en las
coordenadas 100,2000, si se quiere agrandar el tamaño del punto en la propiedad
DrawWidth debemos cambiar el valor que hay.

Dibujo de líneas y rectángulos: método line


El método line dibuja líneas y -en ciertas condiciones- cajas rectangulares de lados
horizontales y verticales. Su forma general es la siguiente:
object.Line (x1, y1) - (x2, y2), color, BF donde object y color tienen el mismo significado
que en pset, y (x1, y1) son opcionales y son las coordenadas del punto inicial de la línea. Si
se omiten la línea comienza en las coordenadas definidas por CurrentX y CurrentY. (x2,
y2) son obligados y contienen las coordenadas del punto final de la línea. B es un carácter
opcional. Si se incluye se dibuja un rectángulo (Box) con los puntos dados como extremos
de una de sus diagonales.
F es también un carácter opcional, que sólo se puede incluir si se ha incluido B. Si se
incluye, la caja rectangular se rellena (Fill) con el mismo color del contorno. Si se omite
la caja se rellena con las propiedades FillColor y FillStyle del objeto en el que se
dibuja.
Después de ejecutarse este método las propiedades CurrentX y CurrentY tienen el valor
del punto final de la línea. Es necesario introducir el carácter (-), aunque se omita el
primero de los puntos que definen la línea. Las propiedades DrawWidth y DrawStyle
determinan cómo se dibujan las líneas rectas o curvas
DrawWidth determina el grosor en pixels, mientras que DrawStyle determina el tipo de
línea. DrawStyle. Los tipos de raya discontinuo no permiten que el grosor sea mayor que 1
pixel. Si el grosor es superior, la línea se dibuja de modo continuo.

Ejemplo:
Me.Line (100, 100)-(400, 400), vbRed, BF ‘con esta sentencia se dibujara un cudrado rojo
Me.Line (100, 100)-(400, 400), vbRed ‘Con esta sentencia se dibujara una linea

Dibujo de circunferencias, arcos y elipses: método circle


Este método permite dibujar circunferencias, elipses y arcos. Su forma general es la
siguiente:
object.Circle (x, y), radius, color, start, end, aspect
donde object y color tienen el mismo significado que en pset y line, y (x, y) son
obligatorias, y contienen las coordenadas del centro de la circunferencia.
Radius es obligatoria y define el radio de la circunferencia.
Start, end son opcionales, y permiten definir arcos por medio del ángulo inicial (start) y
final (end). Los ángulos se miden siempre en radianes y en sentido contrario a las agujas
del reloj. Sus valores deben estar entre -2π y 2π . En principio se dibuja solamente el
arco, pero si uno o ambos valores son negativos se tratan como positivos, pero se dibuja
una línea que une el centro de la circunferencia con el origen o el extremo del arco.
Aspect es también opcional y se utiliza para dibujar elipses. Es la relación entre el diámetro
vertical y el horizontal. El valor por defecto es 1.0, lo que corresponde a una
circunferencia. Cuando aspect es distinto de 1.0, el parámetro radius define el mayor
de los dos diámetros. Sólo las figuras cerradas (no los arcos sin líneas que unan los
extremos con el centro) pueden ser rellenadas con el color determinado por las propiedades
FillColor y FillStyle del objeto en que se dibuja). El grosor y estilo de las líneas se
determina con las propiedades DrawWidth y DrawStyle. Después de ejecutarse este método
las propiedades CurrentX y CurrentY tienen el valor
del centro de la circunferencia. Si se omite algún argumento (excepto los que van al final),
deben respetarse las comas de separación entre argumentos.

Otros métodos gráficos


Existen algunos otros métodos gráficos de interés. Por ejemplo, el método Cls cuya forma
general
es
object.Cls
Ejemplo: form1.Cls
borra del formulario o control picture todos los resultados de los métodos gráficos y del
método print, al mismo tiempo que pone las propiedades CurrentX y CurrentY a cero. No
afecta a los gráficos introducidos en modo de diseño (por ejemplo con la propiedad
picture). Tampoco se borran con este método el texto y gráficos que se hayan creado con la
propiedad AutoRedraw en true, si dicha propiedad se pone a false antes de llamar al
método Cls. De esta forma se pueden realizar borrados selectivos.
El método Point devuelve, como entero long, el color (RGB) del punto especificado en un
formulario o control PictureBox. Su forma general es: object.Point(x, y)
Si se desea, el entero long devuelto por point puede convertirse a la notación hexadecimal
que se usa para los colores utilizando la función hex.
Ejemplo:Diseñar un formulario el cual al pasar el Mouse por el Formulario se muestre las
coordenadas donde se encuentra el Mouse,ademas que se dibuje aletaoriamente puntos por
todo el formulario, debera haber tambien un Scroll el cual al desplazarlo debera aumentar el
grosor del Punto.

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As


Single)
lblx = X
lbly = Y
End Sub
Private Sub HScroll1_Change()
Me.DrawWidth = HScroll1.Value
End Sub
Private Sub Timer1_Timer()
Me.PSet (Rnd() * Me.ScaleWidth, Rnd() * Me.ScaleHeight), RGB(Rnd() * 255, Rnd() *
255, Rnd() * 255)
End Sub

20 .- CUADRO DESPLEGABLES(COMBOBOX) Y LISTAS (LIST


BOX)

ListBox.- Una lista es un control en el que se pueden mostrar varios registros o líneas,
teniendo uno o varios de ellos seleccionado(s). Si en la lista hay más registros de los que se
pueden mostrar al mismo tiempo, se añade automáticamente un scrollBar.Para añadir o
eliminar registros de la lista se utilizan los métodos AddItem y RemoveItem
respectivamente. Esto sólo puede hacerse en modo de ejecución, y no en modo de diseño.
Se suelen inicializar desde el evento Form_Load.

Propiedades y Metodos:
List es un array que permite definir el contenido de la lista en modo de diseño a través de la
ventana de propiedades y también acceder a los elementos de la lista en tiempo de
ejecución, para utilizar y para cambiar su valor. Para ello se pone en índice del elemento
entre paréntesis (empezando a contar por cero) a continuación de List, como se muestra a
continuación por ejemplo, para cambiar el tercer elemento:
lstName.List(2) = "Tercero"
lstName.list(0) Esto me indicara el valor que hay en el primer elemento
NOTA: LstName viene a ser el nombre que se le ha puesto a la lista.
Additem Para añadir un registro en tiempo de ejecución:
lstName.AddItem Registro_Añadido, posicion
donde posicion es un argumento opcional que permite especificar la posición en que se
debe añadir. Si se omite el registro se añade al final de la lista. Lo anterior es válido si la
propiedad Sorted está a False; si está a True el nuevo registro se añade en la posición
ordenada que le corresponde.
Ejemplo:
lstname.additem “hola”,2 se añade “Hola” en la posición 2
lstname.additem “hola” se añade “Hola” en la ultima posición

Removeitem(pos) Eliminar un registro,


lstName.RemoveItem(pos) donde pos es el indice del elemento que se quiere eliminar.
Ejemplo lstname.removeitem(1) se elimina el elemento 1

Clear En el caso de que se quiera vaciar completamente el contenido de una lista se puede
utilizar el metodo clear
Ejemplo: lstname.clear limpia todo la lista

Dos propiedades interesantes de las listas son ListCount y ListIndex.

ListCount contiene el número total de registros incluidos en la lista.


Ejemplo si la lista tiene los siguientes elementos
“Peru”
“Mexico”
“Italia”
lstname.listcount esto sera igual a 3 por que son 3 elementos que tiene la lista

ListIndex permite acceder a una posición concreta de la lista para añadir un registro nuevo
en esa posición, borrar uno ya existente, seleccionarlo, etc.
Hay que tener en cuenta que los elementos de la lista se empiezan a numerar por cero. El
valor de propiedad ListIndex en cada momento coincide con el registro seleccionado y en
el caso de no haber ninguno seleccionado esta propiedad vale -1.
Ejemplo:
Lstname.listindex indicara el indice del elemento seleccionado

Selected(pos) indica si una lista esta seleccionada, esta propiedad es neta del ListBox y
tiene 2 posibles valores True o False si esta en true indica que ese elemento ha sido
seleccionado
Ejemplo: LstName.selected(0) si esto arroja el valor de True quiere decir que fue
seleccionado caso contrario ustedes ya saben.....

Multiselect esta es una propiedad que indica si se podra seleccionar solo un elemento(0-
None) o varios elementos( 1-Simple) o varios elementos extendidos(2-Extended). Es
bueno recordar que esta es una propiedad neta del ListBox y se dara en tiempo de diseño

Style Esta propiedad indica si los elementos de la lista se mostraran de una forma simple(0-
Standard) o con un check(1-CheckBox), se dara en tiempo de diseño(Solo es para listbox)
Es interesante saber que al seleccionar uno de los registros de la lista se activa el evento
Clic de dicha lista.

Combo Box
Un combo tiene muchas cosas en común con una lista. Por ejemplo los métodos AddItem,
RemoveItem o Clear y las propiedades List, ListIndex o ListCount. La diferencia principal
es que en un combo tiene una propiedad llamada Style, que puede adoptar tres valores (1,2
ó 3) que corresponden con tres distintas formas de presentar una lista:
1. Style=0 (Dropdown Combo), Éste es el valor más habitual y corresponde con el caso en
el que sólo se muestra el registro seleccionado, que es editable por el usuario,
permaneciendo el resto oculto hasta que el usuario despliega la lista completa clicando
sobre el botón-flecha.
2. Style=1 (Simple Combo). En este caso el registro seleccionado también es editable, y se
muestra una lista no desplegable dotada si es necesario de una scrollbar.
3. Style=2 (DropDown List). En este último caso el registro seleccionado no es editable y la
lista es desplegable.
En una caja combinada, al igual que en una caja de texto sencilla, está permitido escribir
con el teclado en tiempo de ejecución, si la propiedad Enabled vale True. En una lista esto
no es posible.
Ejemplo Practico: Desarrollar un formulario el cual tenga como finalidad pasar elementos
de una lista hacia otra:

Private Sub cmdaddlist2_Click() ‘Pasa todos los elementos seleccionados del List1 al List2
i=0
Do While i < List1.ListCount
If List1.Selected(i) = True Then
List2.AddItem List1.List(i)
List1.RemoveItem (i)
Else
i=i+1
End If
Loop
End Sub
Private Sub CmdGenerar_Click() ‘Genera Numero aleatorios y los guarda en la Lista1
Randomize
For i = 1 To 10
num = CInt(Rnd * 100)
List1.AddItem num
Next
End Sub
Private Sub cmdpasalist1_Click()‘Pasa todos los elementos del List2 al List1
For i = 0 To List2.ListCount - 1
List1.AddItem List2.List(i)
Next
List2.Clear
End Sub
Private Sub cmdpasalist2_Click()‘Pasa todos los elementos del List1 al List2
For i = 0 To List1.ListCount - 1
List2.AddItem List1.List(i)
Next
List1.Clear
End Sub
NOTA: No se ha programado el Boton para pasar los elementos seleccionados del List2 al
List1
Para que se muestre el Check en la Lista se debe poner en la propiedad STYLE =1
CheckBoX

21.- ARREGLOS
Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre,
y hace referencia un único elemento de la serie utilizando uno o más índices, como un
vector o una matriz en Álgebra.
Visual Basic 6.0 permite definir arrays de variables de una o más dimensiones (hasta 60) y
de cualquier tipo de datos (tipos fundamentales y definidos por el usuario). Pero además
Visual Basic introduce una nueva clase de arrays, arrays de controles, esto es, (arrays de
botones, de etiquetas, de paneles, etc.) que permiten una programación más breve y clara.
En este apartado sólo se tratarán los arrays de variables.
Todos los elementos de un array deben ser del mismo tipo y están alamacenados de forma
contigua en la memoria. Por supuesto, si el array es de tipo Variant cada elemento puede
contener un dato de tipo diferente, e incluso puede contener otro array.Entre los arrays de
variables cabe distinguir dos tipos fundamentales, dependiendo de que número de
elementos sea constante o pueda variar durante la ejecución del programa.
Arrays estáticos, cuya dimensión es siempre la misma.
Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del
programa.

Arrays estáticos
La declaración de un array estático dependerá de su ámbito.
• La declaración de un array público se hace en la sección de declaraciones de un módulo
utilizando la sentencia Public.
• La declaración de un array a nivel del módulo o del formulario se hace en la sección de
declaraciones del módulo o del formulario utilizando la sentencia Dim o Private.
• Para declarar un array local a un procedimiento, se utiliza la sentencia Dim, Private o
Static
dentro del propio procedimiento.
A continuación se presentan algunos ejemplos:
Dim vector(19) As Double
Este ejemplo declara un array de una dimensión, llamado vector, con veinte elementos,
vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double.
Salvo que se indique otra cosa, los índices se empiezan a contar en cero.
Dim matriz(3, 1 To 6) As Integer
Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6 elementos,
matriz(0,1), ... matriz(3,6), de tipo entero.
Public cadena(1 To 12) As String
El ejemplo anterior declara un array de una dimensión, cadena, con doce elementos,
caract(1), ... , caract(12), cada uno de los cuáles permite almacenar una cadena de
caracteres.
La declaración de los arrays estáticos es bastante cómoda. Se declaran una vez. Sin
embargo tienen el inconveniente que en la mayoría de los casos están sobredimensionados
y utilizan más memoria de la que realmente necesitan. Esto implica que se está
malgastando memoria. Para solucionar este problema se utilizan los arrays dinámicos.

Arrays dinámicos
El espacio necesario para un array estático se asigna al iniciarse el programa y permanece
fijo durante su ejecución. El espacio para un array dinámico se asigna durante la ejecución
del programa. Un array dinámico, puede ser redimensionado en cualquier momento de la
ejecución. La forma mejor de redimensionar los arrays es mediante variables.
Para crear un array dinámico primero hay que declararlo como si fuera una array estático,
pero sin darle dimensión. Es decir, se deja la lista -entre paréntesis- vacía sin ponerle
ningún número.Esto se hace con la sentencia Public si se quiere que sea global, con Dim o
Private si se quiere a nivel de módulo o con Static, Dim o Private si se quiere que sea local.
Para asignar el número actual de elementos del array se utiliza la sentencia ReDim. La
sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el
número de elementos del array y sus límites inferior y superior, pero no el número de
dimensiones. Esto quiere decir que, por ejemplo, no se puede trasformar un vector en una
matriz.A continuación se presenta un ejemplo de cómo se declaran arrays dinámicos en
Visual Basic. Si se declara el array Matriz a nivel del formulario,
Dim Matriz( ) As Integer
más tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a
continuación:
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se
pierden (si son Variant se ponen a Empty; si son numéricos a cero y si son cadenas de
caracteres a la cadena vacía). Cuando interese cambiar el tamaño del array conservando los
valores del array, hay que ejecutar ReDim con la palabra clave Preserve. Por ejemplo,
supóngase un array A de dos dimensiones. La sentencia,
ReDim Preserve A(D1, UBound(A, 2) + 2)
incrementa el tamaño del array en dos columnas más. Cuando se utiliza la palabra Preserve
no puede cambiarse el índice inferior del array (sí el superior). La función UBound del
ejemplo devuelve el valor más alto de la segunda dimensión.

Arreglos de Controles.- Se llama arreglo de controles a un conjunto de controles que


tienen el mismo nombre y son del mismo tipo se diferencia por un indice que empieza de 0

Ejemplo: Se crea una caja de texto y le ponemos de nombre TxtNum luego hacemos clic
derecho copiar y luego lo pegamos y VB nos respondera con una ventana advirtiendo que
ya existe un Control con ese nombre y nos preguntara si queremos crear un matriz de
controles a lo cual se respondera SI.
Con esta se creara otra caja de texto llamado tambien TxtNum(1) pero tendra el indice 1 y
el anterior se llamara TxtNum(0), si creamos mas controles con este nombre el indice sera
2,3,4...etc.

Ejemplo: Desarrollar un algoritmo que simule el Juego del ahorcado

Crearemos un arreglo de controles llamado TxtFrase(20 elementos) ademas debemos tener


un control Image (Image1), una caja de texto donde se ingresara la Letra a
buscar(TxtLetra), un boton para buscar (cmdOk), un boton para escoger la Frase
(CmdJugar) y dos label LblMen donde saldra cuantas letras tiene la frase y LblMen2 donde
saldra la frase; por ultimo vamos a tener un timer.
El formulario conciste en que se llenara un vector de 20 elementos con Frases al hacer clic
en el boton jugar se generara un numero aleatorio del 0 al 19 para escoger la frase luego se
llenara los texto con la frase que se escogio al azar.Luego se debe ingresar una letra y se
buscara en los texto si se encuentra el texto se podra ver ya que inicialmente esta invisible
si no se encuentra la letra saldra un mensaje de error asi como tambien se mostrara una
imagen en el control IMAGE1(asi se formara el ahorcado) para eso debemos contar con
varias imágenes a las cuales en este caso se le ha puesto de nombre Ahorcado1.jpg,
Ahorcado2.jpg,..etc
Si en caso se adivina la frase se activara el timer el cual tiene como unica finalidad hacer
que el formulario cambie de color 30 veces y se desplaze por toda la pantalla.

General-Declaraciones
Dim vector(19) As String, cad$
Dim cont%, ACIERTO%, COLOR%, COLORORI, TW%, TH%
Sub visibilidad(ByVal sw As Boolean) 'Muestar u oculta los textos dependiendo de SW
For i = 0 To 19
txtfrase(i).Visible = sw
Next
End Sub
Sub limpia()
For i = 0 To 19
txtfrase(i).Text = "*"
Next
End Sub
Private Sub CmdJugar_Click()
Image1.Picture = Nothing 'Para que no se muestre nada en el Image
Call visibilidad(False)
Call limpia
Randomize
num = CInt(Rnd() * 19)
cad = vector(num)
For i = 1 To Len(cad)
txtfrase(i - 1) = Mid(cad, i, 1)
Next
Txtletra.Enabled = True
CmdOk.Enabled = True
lblmen2.Visible = False
LblMen = "La frase tiene " & Len(cad) & " palabras"
lblmen2 = "La frase es " & UCase(cad)
cont = 1
ACIERTO = 0
COLOR = 1
Txtletra.SetFocus
End Sub
Private Sub CmdOk_Click()
ESTA = False
For i = 0 To 19
C = txtfrase(i)
If UCase(Trim(txtfrase(i))) = UCase(Trim(Txtletra)) And Not txtfrase(i).Visible Then
txtfrase(i).Visible = True
ESTA = True
ACIERTO = ACIERTO + 1
End If
Next
If Not ESTA Then
ruta = App.Path & "\AHORCADO" & cont & ".JPG"
Image1.Picture = LoadPicture(ruta)
cont = cont + 1
If cont > 6 Then 'Solo hay 6 oportunidades de adivinar
MsgBox "Lo sentimos perdiste el juego", vbCritical, "Mensaje"
Call visibilidad(True)
lblmen2.Visible = True
Txtletra.Enabled = False
CmdOk.Enabled = False
Exit Sub
End If
End If
Txtletra = ""
Txtletra.SetFocus
If ACIERTO >= Len(cad) Then
MsgBox "Bien lo hiciste", vbInformation, "Mensaje"
lblmen2.Visible = True
Txtletra.Enabled = False
CmdOk.Enabled = False
Timer1.Enabled = True
End If
End Sub
Private Sub Form_Load()
Call visibilidad(False)
Call limpia
COLOR = 1
vector(0) = "LA CASA ROJA"
vector(1) = "LA MALDICION NEGRA"
y asi se llena los 20 elementos (del 0 al 19)
vector(18) = "LA PANTERA"
vector(19) = "LA AUSTRIACA"
COLORORI = Me.BackColor 'Se guarda el color del Formulario
TW = Me.Width 'Se guarda el ancho del formulario
TH = Me.Height 'Se guarda el alto del formulario
End Sub
Private Sub Timer1_Timer()
If COLOR > 30 Then
Me.BackColor = COLORORI
Me.Width = TW
Me.Height = TH
Timer1.Enabled = False
Else
R = CInt(Rnd() * 255)
G = CInt(Rnd() * 255)
B = CInt(Rnd() * 255)
Me.BackColor = RGB(R, G, B)
Me.Width = CInt(Rnd * TW)
Me.Height = CInt(Rnd * TH)
COLOR = COLOR + 1
End If
End Sub
Private Sub Txtletra_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
CmdOk.SetFocus
End If
End Sub

Arreglo de Controles.-

Colocar un control
timer con propiedad:
Interval=60
Enabled=false

Lbmeta

Control Image
Nombre Carro dar el mismo nombre a los dos

Private Sub Cmdstop_Click()


Timer1.Enabled = false
End Sub

Private Sub CmdStart_Click()


Timer1.Enabled = True
Carro(0).Left = 0
Carro(1).Left = 0
End Sub
Private Sub Timer1_Timer()
Dim Nro As Integer
Randomize
Do
Nro = Int(Rnd * 10)
Loop Until (Nro = 1) Or (Nro = 0)

Carro(Nro).Left = Carro(Nro).Left + 100


If Carro(Nro).Left > LBmeta.Left Then
Timer1.Enabled = False
MsgBox "Carro " & Nro + 1 & " Ha Ganado"

End If
End Sub

22.- MSFLEXGRID.- El control Microsoft FlexGrid (MSFlexGrid) muestra datos de


tablas y efectúa operaciones en ellos. Proporciona una flexibilidad completa para ordenar,
combinar y aplicar formato a tablas que contienen cadenas e imágenes. Cuando se enlaza a
un control Data, el control MSFlexGrid muestra datos de sólo lectura.

Propiedades
Rows.- Cantidad de Filas que tendra el Grid (Ejemplo: MsflexGrid1.Rows = 4)
Cos.- Cantidad de columnas que tendra el Grid (Ejemplo: MsflexGrid1.Cols = 4)
TextMatrix(Fila,Columna) .- Establece el texto de una celda se le pasa como parámetro la
fila y la columna de la celda a la cual se quiere acceder (Ejemplo :
MsFlexGrid1.TextMatrix(1,2) = “Hola”)
RowHeight(Fila) .- Establece el alto de la fila (Ejem : MSFlexGrid1.RowHeight(0)=200)
ColWidth(Col)Establece el ancho de una columna(Ejem MSFlexGrid1.ColWidtht(0)=200)
FixedRows,FixedCols .- Establece la cantidad de filas y columnas fijas respectivamente
(Ejem : MSFlexGrid1.FixedCols=0)
Row .- Establece la fila a la cual se va a acceder (Ejem : MSFlexGrid1.Row = 1)
Col .- Establece la columna a la cual se va a acceder (Ejem : MSFlexGrid1.Row = 1)
NOTA:Las propiedades a continucion se utilizaran después de haberse ubicado primero en
una fila y columna
Text .- Establece el texo de una celda es similar a TextMatrix (Ejem : MSFlexGrid1.Text =
“Hola”)
CellBackColor,CellForeColor .- Establece color de fondo y de letra respectivamente.
Ejemplo (MsFlexGrid1.CellBackColor = VBRed)

Ejemplo:
Diseñar un formulario que tendra un FlexGrid llamado TABLA al cargra se debe llenar el
formulario con las ventas de los 12 meses del año al final al hacer clic en el boton promedio
se debe calcular el promedio de las ventas(Las ventas se generaran aletoriamente asi como
tambien se debera modificar las celdas de las ventas)
Private Sub Command1_Click()’Boton para hallar el promedio
Dim suma#
suma = 0
For fil = 1 To 12
suma = suma + CDbl(Tabla.TextMatrix(fil, 1))
Next
Label1 = "Total ventas es: " & suma
End Sub
Private Sub Form_Load()
Tabla.Rows = 13
Tabla.Cols = 3

Tabla.FixedCols = 0
‘Primero los titulos
Tabla.TextMatrix(0, 0) = "Mes"
Tabla.TextMatrix(0, 1) = "Ventas"
Tabla.TextMatrix(0, 2) = "Nivel"

For fil = 1 To 12
Tabla.TextMatrix(fil, 0) = MonthName(fil) ‘MonthName saca el nombre del mes
Tabla.TextMatrix(fil, 1) = CInt(Rnd * 1000)
Tabla.TextMatrix(fil, 2) = IIf(Val(Tabla.TextMatrix(fil, 1)) > 500, "Alto", "Bajo")
Next
End Sub
‘’’Si la venta es mayor a 500 en la otra columna debe salir el mensaje “Alto” sino “Bajo”

Private Sub Tabla_KeyDown(KeyCode As Integer, Shift As Integer)


If Tabla.Col = 1 Then ‘Solo se podra editar la columna de Ventas
Select Case KeyCode
Case vbKeyDelete: ‘Si se presiono Supr
Tabla.Text = ""
Case vbKeyBack: ‘Si se presiono la barra de retroceso
Tabla.Text = Left(Tabla.Text, Len(Tabla.Text) - 1)
Case vbKey0 To vbKey9: ‘Si se presiono del 0 al 9
Tabla.Text = Tabla.Text & Chr(KeyCode)
Case vbKeyNumpad0 To vbKeyNumpad9
‘Si se presiono del 0 al 9 pero del teclado numerico
Tabla.Text = Tabla.Text & Chr(KeyCode - 48)
Case vbKeyReturn, vbKeySeparator: ‘si se presiono enter o enter del teclado numerico
msg = IIf(Val(Tabla.Text) > 500, "Alto", "Bajo")
Tabla.Col = 2
Tabla.Text = msg
Tabla.Col = 1
End Select
End If
End Sub

Aplicacion. Se deposita cierta cantidad de dinero en un banco, este deposito puede ser
en dolares o soles; mostrar una tabla de Interses cada 30 dias , según la tasa de interes
para soles es 5% y dólar 2% mensual.
Pulsar ctrl.+T para activar a) Microsoft FlexdGrid Control 6.0 y Microsoft Form 2.0 Object
Library (que contiene el control SpinButton)
El diseño es como se muestra en la figura, la codificación es el Siguiente:

‘Autor Alberto Moreno


Private Sub CmdNuevo_Click()
TxtMonto.Text = ""
TXTMes = ""
OPM(0) = False: OPM(1) = False
Grid1.Clear
Grid1.TextMatrix(O, 0) = "Fecha"
Grid1.TextMatrix(0, 1) = "Intereses"
Grid1.TextMatrix(0, 2) = "Valor Actual"
Grid1.ColWidth(0) = 1200 : Grid1.ColWidth(1) = 1600 :Grid1.ColWidth(2) = 1800
TXTMONto.SetFocus
End Sub
Private Sub CmdSalir_Click()
End
End Sub
Private Sub Form_Activate()
Call CmdNuevo_Click
End Sub
Private Sub OPM_Click(Index As Integer)
Dim TASA As Single
Dim Interes#, Vactual#, Mes%
Dim FE As Date
Select Case Index
Case 0: TASA = 0.02
Case 1: TASA = 0.05
End Select
FE = Date
Grid1.Rows = Val(TXTMes) + 1
For Mes = 1 To Val(TXTMes)
FE = FE + 30
Interes = Val(TXTMONto) * TASA * Mes
Vactual = Interes + Val(TXTMONto)
Grid1.TextMatrix(Mes, 0) = Format(FE, "dd/mm/yy")
Grid1.TextMatrix(Mes, 1) = Format(Interes, "##,###.00")
Grid1.TextMatrix(Mes, 2) = Format(Vactual, "###,###.00")
Next
End Sub

Private Sub SpinButton1_Change()


TXTMes = SpinButton1.Value
End Sub

Private Sub TXTMON_KeyPress(KeyAscii As Integer)


Select Case KeyAscii
Case 13
TXTMes.SetFocus
Case 48 To 57, 46, 8
Case Else
KeyAscii = 0
End Select
End Sub

Practica 4
1.- Llene un Listbox con los distritos de Lima y al hacer click en un boton Buscar debera
ingresar un Distrito en un InputBox si existe en el ListBox se debera marcar el distrito
ingresado si en caso no se encuentra se debera mostrar un mensaje que diga que el mensaje
no existe ademas de un mensaje que diga ¿Si desea continuar? si responde si volvera al
mismo proceso hasta que ingrese No.

2.- Ingrese en un texto de tipo MultiLine una frase y en varios ListBox debera salir las
Letras Mayúsculas,Minúsculas,Vocales y Consonantes(osea habra 4 Listbox) indicando los
totales al final de cada listbox

3.- Realice el siguiente formulario:


4.- Llene en un arreglo de 100 elementos 100 Numeros aleatorios sin que estos se repitan al
final muestre en un mensaje la suma y el promedio de los elementos y de ahí lo pasa a un
ListBox

5.- En un arreglo llene cadenas mediante InputBox, Luego en una caja de texto ingrese una
letra y busquela si lo encuentra saldra un mensaje.(Utilize redim)

6.-Genere 100 numeros aleatorios y guardelos en un arreglo luego elimine los perfectos y
los primos una vez hecho esto ordene el arreglo de forma ascendente(Utilize el metodo de
la burbuja) de ahí lo pasa a un ListBox

7.- Genere una matriz de 10x10 con numeros aleatorios y diga al final cuantos pares e
impares hay.(Muestre la matriz en un grid)

8.- Genere una matriz de 5x5 con numeros aleatorios luego diga cual es el mayor,el menor,
la suma de su diagonal principal, la suma de su diagonal secundaria y de su periferia.
(Muestre la matriz en un grid el mayor se sombreara de color rojo y el menor de azul)

9.- Genere una matriz de 3x3 y llenela con cadenas mediante inputbox y diga cual es
elemento que tiene mayor cantidad de caracteres. (Muestre la matriz en un grid)

10.- Usando arreglos de controles inserte 20 botones luego genere 20 numeros aleatorios
sin que se repitan y muéstrenlo en el caption de los botones.
De ahí mediante un control timer haga que cada 1 segundo salga un numero aleatorio y
busque el numero en los botones y si lo encuentra el boton debe desactivarse

11.- Utilizando vectores paralelos realice el siguiente Programa.


- Debe tener 4 vectores (Codigo,nombre,fecha,sexo) sin dimension (utilizara redim)
- Debe tener un formulario inicial que tenga las opciones de
(Ingresar,Modificar,Eliminar,Listado,Ordenar y salir)
- El Formulario de Ingresar sera :

donde el codigo se autogenera a partir del 1001 y la edad se mostrara en base a la fecha
de nacimiento.
Cuando se hace clic en el boton Grabar se guarda los datos en los vectores
(codigo,nombre,fecha y sexo)
- Modificar y Eliminar .- sera idéntico al Ingresar con la diferencia que ahí el codigo
se ingresa y si existe salen los datos de ese codigo y debe haber un boton grabar que
grabara las modificaciones de ese codigo o un boton Eliminar que eliminara ese
elemento
- Listado . Debe salir todos los elementos de los arreglos
- Ordenar se escogera en un combobox por que campo se quiere
ordenar(codigo,nombre,fecha o sexo)

23.- PROCEDIMIENTOS Y FUNCIONES

Funciones.- Es un conjunto de sentencias que realizaran un proceso y devolveran un


valor.
Las funciones pueden ser publicas o privadas dependiendo de lo que queremos.
Parámetros.- Son valores que reciben las funciones estas pueden ser BYVAL(Por valor),
BYREF(Por referencia), PARAMARRAY(Arreglo de Parametros)
Sintaxis:
Public Function doble(ByVal Num%)as integer
Doble = Num * 2
End Function
En este ejemplo sencillo se ha creado una funcion llamada doble que recibe un parametro
llamado num, luego la funcion doble devolvera el valor de num * 2.
Para llamar a esa funcion seria de la siguiente manera.
N=10
NN = doble(N)
Esta claro tenemos una variable llamada N que vale 10 y llamamos a la funcion doble y le
enviamos como parámetro N osea 10 luego como n es el parámetro que se envia en la
funcion doble lo recibe Num osea el valor de Num sera 10 y al final en NN se guardara el
doble de N
Diferencia entre BYVAL,BYREF y PARAMARRAY
Ejemplo BYVAL:
Private Sub Command1_Click()
num = 10
MsgBox Aumento(num)
End Sub

Public Function Aumento(ByVal n%) As String


n = n * 1.15 'El valor de n se incrementa en un 15% mas
Aumento = "El aumento del 15% mas es " & n
End Function
Observen que aqui se llama a una funcion Aumento enviandole como parametro num que
vale 10, en la funcion quien recibe el parámetro es n luego esa variable n sera igual al
mismo n pero aumentado en un 15% al final n valdra 12 en este ejemplo pero num se queda
en 10 por que cuando es BYVAL la variable num deja su valor a n y son variables distintas.
Ejemplo de BYREF:
Haremos el mismo ejemplo
Private Sub Command1_Click()
num = 10
MsgBox Aumento(num)
End Sub

Public Function Aumento(ByRef n%) As String


n = n * 1.15 'El valor de n se incrementa en un 15% mas
Aumento = "El aumento del 15% mas es " & n
End Function
El resultado sera el mismo entonces cual es la diferencia????.La diferencia es que num se
envia por referencia entonces la variable n es la misma variable num por lo tanto cuando se
pone n=n*1.15 lo que realmente se esta haciendo es num=num*1.15 ya que es la misma
variable.
Ejemplo de PARAMARRAY:
Private Sub Command1_Click()
a=2
b=3
c=4
d = 24
MsgBox mayor(a, b, c, d)
End Sub

Public Function mayor(ParamArray arreglo()) As String


Dim m1%, m2%
m1 = IIf(arreglo(0) > arreglo(1), arreglo(0), arreglo(1))
m2 = IIf(arreglo(2) > arreglo(3), arreglo(2), arreglo(3))
mayor = "El mayor es " & IIf(m1 > m2, m1, m2)
End Function
No se asusten al ver esta funcion miren es una funcion como todos pueden ver que se llama
mayor y devuelve un string. Ahora la novedad es el parametro que recibe se llama arreglo()
al tener () quiere decir que es un arreglo y la palabra reservada ParamArray significa que es
un arreglo de parametros donde arreglo(0) viene a ser el primer elemento osea A arreglo(1)
viene a ser el segundo elemento osea B y asi sucesivamente
Entonces se esta calculando el mayor de los 4 numeros al final el resultados sera “El amyo
es 24” ya que 24 es el mayor en este ejemplo.
A pesar de que se ha hecho bien sencilla esta programación que pasaria si se quiere calcular
el mayor de 10 numeros seria muy emborroso o pero aun el mayor de 100 numeros bueno
pues podemos hacerlo bien facil utilizando una sentencia for y las funciones LBOUND y
UBOUND

LBOUND(Expre) es una funcion que me va a permitir mostrar el elemento minimo del


arreglo que siempre sera 0.En Expre va el nombre del arreglo.
UBOUND(Expre) saca el elemento máximo del arreglo es decir la cantidad de elementos
que hay en el arreglo.En expre va el nombre del elemento
Ahora haremos el mismo ejemplo pero para 10 numeros
Private Sub Command1_Click()
a=2
b=3
c=4
d = 24
e=2
f=3
g=4
h = 24
i = 99
j = 32
MsgBox mayor(a, b, c, d, e, f, g, h, i, j)
End Sub

Public Function mayor(ParamArray arreglo()) As String


Dim vi%, vf%, xmayor%
xmayor = 0
vi = LBound(arreglo) 'Valor minimo del arreglo en este caso 0
vf = UBound(arreglo) 'Valor maximo del arreglo en este caso 9
For i = vi To vf
If arreglo(i) > xmayor Then
xmayor = arreglo(i)
End If
Next
mayor = "El mayor es " + CStr(xmayor)
'Mayor ="El mayor es " & xmayor tambien puede ser de esta manera
End Function
Procedimientos.- Es un conjunto de sentencias que realizaran un proceso a diferencia de
las funciones no devuelven nada.
NOTA: Tiene la mismas características que las funciones es decir pueden ser publicas o
privadas y los parámetros pueden ser Byref, ByVal o Paramarray.
Ejemplo: Realizar un procedimiento que limpie todas las cajas de texto de un formulario
En este caso el procedimiento se hara en el formulario.
Private Sub Command1_Click()
Call limpia ‘
End Sub

Sub limpia()
Dim obj As Object
For Each obj In Me.Controls
If TypeOf obj Is TextBox Then
obj.Text = ""
End If
Next
End Sub
Para llamar a un procedimiento se utiliza la palabra reservada Call en este caso call Limpia
El procedimiento LIMPIA blanquea las cajas de texto
Ahora haremos algo mas interesante Haremos un procedimiento que limpie todas las cajas
de texto de todos los formularios.
Entonces creamos el procedimiento en el formulario.

Private Sub Command1_Click()


Call limpia(Me)
End Sub
Noten que llamamos a la funcion limpia y le enviamos como parámetro Me que quiere
decir????? Mi formulario, el formulario actual.
Entonces si estoy enviando como parámetro un formulario se supone que en el
procedimiento recibo un parámetro que tiene que ser de tipo object al cual se le ha llamado
xform.
Sub limpia(ByRef xform As Object)
Dim obj As Object
For Each obj In xform.Controls
If TypeOf obj Is TextBox Then
obj.Text = ""
End If
Next
End Sub
Ahora seguro preguntaran porque ByRef se acuerdan que anteriormente hemos dicho que
cuando es ByRef el parámetro que se envia es el mismo que se recibe osea xform sera lo
mismo que el formulario.
Practica 5

Funciones
1.- Ingrese un numero y visualize “Es Perfecto” o “No es Perfecto” dependiendo de la
condicion
2.- Ingrese una cadena y visualícelo en Mayúscula sin usar UCASE
3.- Ingrese una cadena y visualícelo en Minuscula sin usar LCASE
4.- Ingrese 7 numeros y calcule el menor de ellos
5.- Ingrese 7 numeros y calcule el mayor de ellos
6.- Ingrese un numero y mediante options escoga una base(2,4,6,8) al hacer clic en un
boton se mostrara el numero convertido a la base que se selecciono
7.- Ingrese la fecha de nacimiento de una persona y muestre la edad exacta es decir Años,
mese y dias
8.- Ingrese un numero y muestre los numeros primos anteriores a este en un label
9.- Ingrese una cadena y visualícelo en forma invertida sin usar StrReverse
10.- Ingrese una cadena y luego encriptelo.
11.- Ingrese un numero y muéstrelo en letras ejemplo: 123 seria “Ciento veintitrés”(Utilize
funcion recursiva)
Procedimientos
12.- Genere un procedimiento que limpie todas las cajas de textos de todos los formularios.
13.- Diseñe un formulario que simule una calculadora para esto utilize arreglo de controles
14.- Diseñe un formulario que simule el juego d eun bingo utilize 2 msflexgrid yy llenelos
aleatoriamentecomo si fuera una cartilla se debe validar que la primera Columna tenga
numeros del 1 al 20 la segunda del 20 al 40 y asi sucesivamente, ademas los números no se
deben repetir
Una vez hecho esto debera hacer que cada 1 segundo salga un numero aleatorio y buscarlo
en le grid si se encuentra debe sombrear la celda de un color diferente al final debe salir que
cartilla fue la ganadora

24.- Registros.-
Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el
usuario (conocidos como structs en el lenguaje de programación C). Los tipos definidos por
el usuario son útiles si se quiere crear una única variable que registre varias unidades de
información relacionadas.
Ejemplo :
Type Alumno
Cod as integer
Nom as String * 15
End Type
Esto quiere decir que tenemos una variable llamada alumno en la cual podemos guardar 2
datos alumno.cod = 100, alumno.nom=”Juana”.
Podemos crear tambien arreglos de registros. Solo tendríamos que poner
Dim Alu(1 to 10) as alumno
Para acceder a los elemntos seria : Alu(1).Cod=100,Alu(1).Nom =”Pedro”.
Aplicación.- Registrar los datos de varios empleados en un registro , los datos de cada
empleado son ; codigo(4c), nombre(25 C), cargo(10 C) y sueldo( real simple).

Consideraciones.-
a) El codigo se genera a partir de 0001
b) Los botones de desplazamiento es para navegar en los registros ya ingresados
c) En la pagina de vacaciones se elegir el codigo del empleado mediante un combo,
mostrando automáticamente los datos del empleado, se ingresara el numero de dias
de vacaciones calculadando el dia de retorno(azul si es dia de la semana) y rojo (si
es sabado o domingo) y su pago.

Array de
Control
Opc(0)
Opc(1)
Opc(2)
Para cargo

LNRO

Los botones
de
desplazamie
nto
Cmdpri,
Cmdant,
Cmdnext
Cmdult
Paso 1.- Agregar Modulo
Type Empleado
Cod As String * 4
Nom As String * 25
Sbas As Double
Car As String * 10
End Type
Public Vreg(1 To 50) As Empleado Muestra (CR)
Public Nr As Integer CmdAnula.Enabled = True
Declaracion General CmdModi.Enabled = True
Dim tcar As String * 15 End If
Dim CR As Integer End Sub
‘Variable para desplazamiento de registros Private Sub Combo1_Click()
Private Sub CmdAnt_Click() Dim I%
If Nr > 1 Then I = Combo1.ListIndex + 1
limpia If I > 0 Then
CR = CR - 1 Lnom.Caption = Vreg(I).Nom
If CR = 0 Then Lsbas.Caption = Vreg(I).Sbas
MsgBox ("Estas en el Primer registro") Lcar.Caption = Vreg(I).Car
CR = 1 End If
Beep End Sub
End If Private Sub Optc_Click(Index As Integer)
Muestra (CR) tcar = Optc(Index).Caption
CmdAnula.Enabled = True Cmdgraba.SetFocus
CmdModi.Enabled = True End Sub
End If Public Sub limpia()
End Sub Dim obj As Object
Private Sub CmdNext_Click() For Each obj In Me.Controls
If Nr > 1 Then If TypeOf obj Is TextBox Then obj = ""
limpia If TypeOf obj Is OptionButton Then
CR = CR + 1 obj.Value = False
If CR = Nr Then Next
MsgBox ("Estas en el ultimo") Text2.SetFocus
CR = Nr - 1 End Sub
End If Private Sub Text2_Change()
Muestra (CR) Cmdgraba.Enabled = Len(Text2) > 0
End If If Len(Text2) > 20 Then
End Sub Text3.SetFocus
Private Sub CmdPri_Click() End If
limpia End Sub
CR = 1 Public Sub header()
Muestra (CR) With Grid1
CmdAnula.Enabled = True .TextMatrix(0, 0) = "Codigo"
CmdModi.Enabled = True .TextMatrix(0, 1) = "Nombres"
End Sub .TextMatrix(0, 2) = "Cargo"
Private Sub Cmdult_Click() .TextMatrix(0, 3) = "Sueldo"
If Nr > 1 Then End With
limpia End Sub
CR = Nr - 1
Public Sub Muestra(Ind As Integer)
Text1.Text = Vreg(Ind).Cod
Text2.Text = Vreg(Ind).Nom
Text3.Text = Str(Vreg(Ind).Sbas)
Select Case Left(Vreg(Ind).Car, 1)
Case "A": Optc(0) = 1
Case "S": Optc(1) = 1 Private Sub Tdias_KeyPress(KeyAscii As
Private Sub CmdAnula_Click() Integer)
Dim I%, b% Dim fecha, X As Variant
b = Nr - 1 Dim diasem As String * 15
For I = CR To b - 1 Dim sueldo, vaca As Single
Vreg(I) = Vreg(I + 1) Dim c#
Next I If KeyAscii = 13 Then
Nr = Nr - 1 fecha = Now + Val(Tdias.Text)
If Nr > 1 Then ' x = CDate(fecha)
Listado Select Case Weekday(fecha)
Muestra (CR) Case 1: diasem = "Domingo"
End If Case 2: diasem = "lunes"
End Sub Case 3: diasem = "Martes"
Private Sub CmdGraba_Click() Case 4: diasem = "Miercoles"
Vreg(Nr).Cod = Text1.Text Case 5: diasem = "jueves"
Vreg(Nr).Nom = Text2.Text Case 6: diasem = "viernes"
Vreg(Nr).Sbas = Val(Text3.Text) Case 7: diasem = "Sabado"
Vreg(Nr).Car = tcar End Select
Combo1.AddItem Vreg(Nr).Cod Lfecha.Caption = Format$(fecha,
Listado "dd/mm/yy")
limpia c = Str$(Val(Lsbas.Caption) *
Nr = Nr + 1 Val(Tdias.Text) / 30)
Text1.Text = Format(Nr, "0000") LVac.Caption = Format$(c, "###,###.#0")
Lnro.Caption = Str(Nr) Ldia.Caption = diasem
Cmdgraba.Enabled = 0 If Weekday(fecha) = 1 Then
Text2.SetFocus Ldia.ForeColor = QBColor(4)
End Sub Else
Private Sub CmdNuevo_Click() Ldia.ForeColor = QBColor(1)
limpia End If
Lnro.Caption = Str(Nr) End If
Text1.Text = Format(Nr, "0000") End Sub
CmdAnula.Enabled = False
CmdModi.Enabled = False Public Sub Listado()
End Sub Grid1.Rows = Nr + 1
Private Sub CmdSalir_Click() Grid1.Cols = 4
End Grid1.Row = 0
End Sub Call header
Private Sub Form_Activate() For I = 1 To Nr
Nr = 1: CR = 1 With Grid1
Lnro.Caption = Str(Nr) .TextMatrix(I, 0) = Vreg(I).Cod
limpia .TextMatrix(I, 1) = Vreg(I).Nom
Text1.Text = Format(Nr, "0000") .TextMatrix(I, 2) = Vreg(I).Car
Lfec.Caption = "Fecha :" & Format(Now, .TextMatrix(I, 3) = Vreg(I).Sbas
"dd/mm/yy") End With
Text2.SetFocus Next I
End Sub End Sub
Case "O": Optc(2) = 1
End SelectLnro.Caption = Str(Ind)
End Sub
Visual Basic I 72 Idat
Visual Basic I 73 Idat

Ejercicio:Aplicaciones con registros


Visual Basic I 74 Idat

Consideraciones:

• Los puntajes son selccionados de 1 a 20


• El Puntaje total se calcula ( suma de los tres puntajes: Medidas, simpatía y cultura)
• Estos datos serán almacenados dentro de una tabla temporal de tipo registro
• El Numero de Concursante se genera a la hora que se ingrese nuevas concursantes
• En el listado se podrá visualizar todas las concursantes ingresadas en la pagina anterior,
además este listado se podrá ordenar por: Nombre el listado sera ordenado por este
campo, por puntaje o numero de orden
• En la pagina de resultado se mostrara la concursante ganadora General, que concursante
tuvo la mayor simpatía y la de mejores medidas.

2.- Se tiene un Registro de almacén cuyos campos son: Código de Producto, Descripción,
Precio de costo y stock.
Se pide realizar un programa para permitir:
a) Ingresar nuevos Productos
b) Venta de Productos donde al elegir el código de producto, mostrara automáticamente
todos sus datos dando opción a ingresar la cantidad a comprar calculando el total a pagar
respectivamente, también se debe contemplar en caso de vender una cantidad mas del
stock disponible mostrando un error
c) Cada vez que se efectué una venta el stock del producto vendido deberá ser actualizado
d) En la lista de productos, puede estar ordenado por: Descripción, código y stock.

Ejemplo:
Visual Basic I 75 Idat

Vamos a diseñar un formulario el cual tendra como finalidad registrar el codigo,nombre y sexo
de un alumno para eso vamos a utilizar variables de tipo registro
Conforme se va añadiendo los datos se mostraran en el Grid(MsflexGrid llamado TABLA)
Ademas validaremos que la ingresar los datos sean datos validos para eso crearemos
procedimientos y funciones
Otra cosa que debemos de tener en cuenta es que el boton Nuevo y Grabar(CMDNUEVO) es el
mismo y mediante programación haremos que su apariencia cambie asi como tambien el boton
Cancelar y Salir(CMDSALIR)
Ademas contamos con un nuevo control llamado Microsoft Tabbed Dialog Control 6.0
(Proyecto-Componentes)
Para tener 2 pestañas escogemos la propiedad TABS y ponemos 2 Para cambiar el caption de
cada TAB se escoge la pestaña y nos vamos a la propiedad CAPTION
En el Modulo debemos hacer lo sgte.:
Type Alumno 'Aqui se declara la estructura se llama alumno
cod As Integer
nom As String * 30
sexo As Boolean
End Type
Public r() As Alumno 'Aqui la variable R que sera el arreglo como ven es dinamico
Sub main()
ReDim r(0)
FrmMant.Show
'Noten aqui que hemos creado un sub llamado Main y es ese el objeto inicial del proyecto
'Inicializamos la variable R y llamamos al formulario
'No olvidar que en el proyecto debemos escoger como objeto inicial SUB MAIN
End Sub
NOTA: Sub main viene a ser como un procedimiento inicial que podemos crear y el VB lo
reconocera dando la opcion de ponerlo como objeto Inicial se utiliza mas que nada para
inicializar valores variables, etc. Y de ahí se debe llamar al formulario el cual queremos
ejecutar.
En el Formulario:
GeneraL
Dim Si_Nuevo%
Sub ActivaControles(ByVal Modo As Boolean) 'Para activar los botones y texto(FRAME1)
Frame1.Enabled = Modo
Visual Basic I 76 Idat

'Boton Nuevo y Grabar es el mismo


CmdNuevo.Caption = IIf(Modo, "Grabar", "Nuevo")
CmdNuevo.Picture = LoadPicture(App.Path & IIf(Modo, "\SAVE.BMP", "\NEW.BMP"))

CmdModificar.Caption = "Modificar"
CmdModificar.Picture = LoadPicture(App.Path & "\edit.bmp")

'Boton salir y Cancelar es el mismo


CmdSalir.Caption = IIf(Modo, "Cancelar", "Salir")
CmdSalir.Picture = LoadPicture(App.Path & IIf(Modo, "\UNDO.BMP", "\CLOSE.BMP"))

CmdModificar.Enabled = Not Modo


End Sub
Sub Limpia()
txtcod = ""
txtnom = ""
Option1.Value = True
End Sub
Function valida() As Boolean 'Validar si se ingresa datos
If Trim(txtcod) = "" Then
MsgBox "Ingrese Codigo", vbCritical, "Mensaje"
txtcod.SetFocus
valida = False
Exit Function
End If
If Trim(txtnom) = "" Then
MsgBox "Ingrese Nombre", vbCritical, "Mensaje"
txtnom.SetFocus
valida = False
Exit Function
End If
valida = True
End Function
Sub llena(ByVal pos%)
r(pos).cod = Val(txtcod)
r(pos).nom = txtnom
r(pos).sexo = Option1.Value
For i = 0 To UBound(r)
Tabla.TextMatrix(i + 1, 0) = r(i).cod
Tabla.TextMatrix(i + 1, 1) = r(i).nom
Tabla.TextMatrix(i + 1, 2) = IIf(r(i).sexo, "M", "F")
Next
End Sub
Private Sub CmdModificar_Click()
Si_Nuevo = 3
Call ActivaControles(True)
End Sub
Private Sub CmdNuevo_Click()
Visual Basic I 77 Idat

Dim p%
If Si_Nuevo = 1 Then
Call ActivaControles(True)
Call Limpia
txtcod.SetFocus
Si_Nuevo = 2
Else
If valida Then
p = IIf(Si_Nuevo = 2, UBound(r), Tabla.Row - 1)
'Si se va a grabar un nuevo dato la posicion sera el ultimo elemento de R
'Si se va a modificar se debe escoger el elemento seleccionado del Grid
Call llena(p)
If Si_Nuevo = 2 Then
ReDim Preserve r(p + 1)
Tabla.Rows = Tabla.Rows + 1
End If
Si_Nuevo = 1
Call ActivaControles(False)
End If
End If
End Sub
Private Sub CmdSalir_Click()
If Si_Nuevo > 1 Then
Si_Nuevo = 1
Call ActivaControles(False)
Else
End
End If
End Sub
Private Sub Form_Load()
Call ActivaControles(False)
Si_Nuevo = 1
Tabla.TextMatrix(0, 0) = "Codigo"
Tabla.TextMatrix(0, 1) = "Nombre"
Tabla.TextMatrix(0, 2) = "Sexo"
End Sub
Private Sub Tabla_RowColChange() 'Muestra los datos del grid a los textos
txtcod = Tabla.TextMatrix(Tabla.Row, 0)
txtnom = Tabla.TextMatrix(Tabla.Row, 1)
If Tabla.TextMatrix(Tabla.Row, 2) = "M" Then
Option1.Value = True
Else
Option2.Value = True
End If
End Sub

Nota: en la pestaña Consulta se debe escoger un sexo y deben salir los alumnos de ese Sexo.
Visual Basic I 78 Idat

25.- Controles ACTIVE X (ToolBar, ImageList, ProgressBar, StatusBar,


ShockWaveFlash)

Ejemplo de Presentacion de Un Sistema


Formulario Principal (Es el que llamara a los demas)
Se debe crear un proyecto en Visual basic.
Se debe agregar un MDI

por que un MDI? Por que es el indicado yaque un MDI es un formulario que contendra a los
demas formularios siempre y cuando a los demas formularios se le ponga TRUE en la propiedad
MDICHILD

Luego necesitamos algunos controles (toolbar, imagelist, progressbar y statusbar)


IMAGELIST .- Es un control que me va a permitir almacenar imágenes y cada imagen toma un
indice epezando de 1
TOOLBAR.- Es un control que me va a permitir insertar un barra de herramientas va de la mano
con el control IMAGELIST para colocar las imágenes.
STATUSBAR .- Es un control que me va a permitir insertar una barra de estado dentro de mi
formulario.
PROGRESSBAR.- Es una barra progresiva generalmente se usa para indicar en que porcentaje se
esta de algo.
Para agregar estos controles nos vamos al menu componentes referencias y marcamos
Visual Basic I 79 Idat

Una vez hecho nos saldra nuevos controles en el cuadro de herramientas.


Ahora agregamos el toolbar, status bar y el imagelist luego vamos a establecer las imágenes al
IMAGELIST asi que lo escogemos clic derecho propiedades y nos saldra una pantalla asi:

Luego escogemos Imágenes y hacemos clic en Insertar Imágenes y escogemos la imagen que
queremos insertar y asi seleccionamos la cantidad de imágenes que queremos
Visual Basic I 80 Idat

Para que hacer esto???? Simplemente para jalar las imágenes de este imagelist al toolbar
Una vez hecho esto seleccionamos el toolbar clic derecho propiedades

y en la opcion IMAGELIST esocogemos el imagelist que hemos creado y en STYLE escogemos


1 para que tenga un efecto mejor.
Luego seleccionamos la pestaña(BOTONES) y hacemos clic en insertar boton y notaremos que
en Index sale 1 quiere decir que es el primer elemento en caption ponemos lo que queremos que
salga en el boton y lo mas importante en IMAGE ponemos el indice de la imagen la cual
queremos colocar al finalizar
Visual Basic I 81 Idat

al finalizar nos quedara el formulario MDI con la barra de herramienta que hemos creado.

Ahora se quiere que por cada Boton salga un menu algo asi:

Para hacer esto hacemos clic derecho al toolbar propoiedades y escogemos el boton 1 y hacemos
clic en la opcion INSERTAR BUTTON MENU y en text ponemos lo que queremos que diga la
opcion del submenu
Visual Basic I 82 Idat

Ahora para que salga la opcion de submenu se debe escoger en STYLE la opcion
5(TBRDROPDOWN) esto es importante si no se hace no se vera el resultado. Y listo.

Ahora vamos a trabajar con el STATUSBAR asi que lo seleccionamos y hacemos clic derecho –
propiedades-paneles

en text ponemos lo que queremos que salga en el panel si queremos insertar otro panel hacemos
clic en INSERTAR PANEL si queremos insertar una imagen hacemos clic en EXAMINAR .
Si queremos que en algun panel nos salga si la tecla MAYÚSCULA esta activada o si el teclado
Numerico esta activado debemos escoger en la propiedad STYLE lo que queremos
Por ejemplo(caps-mayusculas,num-teclado numerico, ins-la tecla insert,date-saca la fecha
actual,etc.)
Visual Basic I 83 Idat

Si queremos agrandar el tamaño del panel en la propiedad MINIMUN WIDTH (que esta por
defecto 1440.00) debemos poner un numero mayor.
NOTA .- si en STYLE escogimos por ejemplo sbrCaps en el panel saldra la palabra MAYUS si
sale medio transparente significa que la tecla mayúscula esta desactivada y si sale de color negro
quiere decir que esta activado.
Asi mismo si queremos escribir algún texto la propiedad STYLE debe estar en sbrTEXT
El resultado final sera el siguiente:

Ahora veamos como vamos a programar para que cuando se haga clic en el toolbar llame al
formulario correspondiente: (Se debe programar en el evento ButtonMenuClick)
Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu)
'buttonmenu.parent.index es para saber el indice del boton
'donde se encuentra el menu escogido osea (pregunta1,pregunta2,pregunta3,pregunta4)
N = ButtonMenu.Parent.Index ‘N tomara los valores 1,2,3 o 4 dependiendo que boton se
‘selecciono

'buttonmenu.index es para saber el indice del menu el cual se ha escogido


'osea dependiendo de que boton se presiono vera el indice del boton del menu
'en este caso solo se ha insertado menus al boton Pregunta1 entonces por defecto
'la variable buttonmenu.index tendra 3 valores 1,2 o 3 dependiendo que opcion del menu ‘del
boton 1 se escogio.
op = ButtonMenu.Index
Select Case N
Case 1: 'Se escogio Pregunta1
Visual Basic I 84 Idat

Select Case op
Case 1: Form1.Show ‘se escogioPregunta1-opcion1
Case 2: Form2.Show ‘se escogioPregunta1-opcion2
Case 3: Form3.Show ‘se escogioPregunta1-opcion3
End Select
Case 2: ' Se escogio Pregunta2
Case 3: ' Se escogio Pregunta3
Case 4: ' Se escogio Pregunta4
End Select
End Sub
Y listo.
Ahora hagamos que cuando se llame a los demas formularios en la barra de estado del formulario
principal salga un texto que indique que formulario esta activo
Entonces debemos programar en cada formulario por ejemplo en el formulario1
Private Sub Form_Load()
MDIForm1.StatusBar1.Panels(2).Text = "Estas en el formulario 1"
‘Esto sera el panel 2 del MDI
End Sub
Donde MDIFORM1 es el nombre del formulario MDI, STATUSBAR1 es el nombre de la barra
de estado que se creo en el MDI luego escogemos en que panel quiero que me salga el texto los
paneles empiezan de 1 y el resultado cuando se llame al formulario1 sera el siguiente.

Pantalla Inicial:
Para la pantalla inicial debemos utilizar un control llamado PROGRESSBAR y
SHOCKWAVEFLASH el progress viene junto al toolbar y statusbar simplemente lo jalamos y
para el ShockWaveFlash debemos ir a Proyecto-Componentes
Y escogemos ShockWaveFlash
Visual Basic I 85 Idat

PROGRESSBAR.- Es un control que me va a mostrar una barra progresiva, entre sus


propiedades tenemos.
MAX.- valor máximo que se se le da al progressbar
MIN.- valor minimo que se le da al progressbar
VALUE .- es el valor que toma va del MIN hasta uno antes del MAX y conforme tome un valor
la barra va avanzando.

Private Sub Command1_Click() ‘Esto va en el boton entrar


ProgressBar1.Min = 1
ProgressBar1.Max = 100
ProgressBar1.Value = ProgressBar1.Min
Timer1.Enabled = True ‘ Se activa el timer para que se ejecute lo que se programo ahi no ‘olvidar
que inicialmente la propiedad del TIMER debe estar en FALSE
End Sub

Private Sub Form_Load()


ruta = App.Path + "\snakes.swf"
ShockwaveFlash1.Movie = ruta
End Sub

Private Sub Timer1_Timer()


If ProgressBar1.Value >= ProgressBar1.Max Then
Timer1.Enabled = False
MsgBox "Proceso Terminado " + Chr(13) + "Bienvenido al Sistema", vbInformation, "Acceso
Permitido"
Visual Basic I 86 Idat

FrmPrincipal.Show
Unload Me
Else
Label1 = "Cargando configuracion al " & ProgressBar1.Value & "%"
ProgressBar1.Value = ProgressBar1.Value + 1
End If

26.- Manejo de Archivos, Comandos (Dir , Kill, FileCopy, etc.) Controles


DRIVE, DIR y FILE

Funciones para manejo de archivos


Dir .- Devuelve el nombre de un archivo, directorio o carpeta que concuerda con el patrón o
atributo de archivo especificado o la etiqueta de volumen de una unidad de disco.
Sintaxis Dir[(nombreruta[, atributos])]
nombreruta Expresión de cadena que especifica un nombre de archivo. Puede incluir el
directorio o carpeta y la unidad de disco. Si no se encuentra nombreruta, devuelve Null.
atributos Constante o expresión numérica, cuya suma especifica atributos de archivo. Si se
omite, devuelve todos los archivos normales que satisfacen el nombreruta.
El argumento atributos tiene estas constantes y valores:
Constante Valor Descripción
vbNormal 0 Normal.
vbHidden 2 Oculto.
vbSystem 4 Sistema
vbVolume 8 Etiqueta de volumen; si se especifica se ignoran todos los atributos
vbDirectory 16 Directorio o carpeta.
En Microsoft Windows, Dir permite el empleo de los caracteres comodín '*' (múltiples
caracteres) y '?' (un solo carácter) para especificar varios archivos.
La primera vez que se llama a la función Dir se debe especificar el nombreruta, de lo contrario se
produce un error. Si además se especifican atributos de archivo, se debe incluir el nombreruta.
Dir devuelve el primer nombre de archivo que coincide con el nombreruta. Para obtener más
nombres de archivo que coincidan con el nombreruta, se debe volver a llamar a Dir sin
argumentos.
Cuando no hay más nombres de archivo coincidentes, Dir devuelve una cadena de caracteres de
longitud cero. Cuando se devuelve una cadena de longitud cero, en las siguientes llamadas se
debe especificar nombreruta o se producirá un error. Se puede cambiar el nombreruta sin haber
obtenido todos los nombres de archivo que coinciden con el nombreruta actual. Sin embargo, no
se puede llamar a la función Dir.

MkDir .- Crea una carpeta


Ejemplo: Mkdir(“c:\nueva carpeta”) ‘Se creara un carpeta

ChDir.- .- Cambia la ruta actual.


Ejemplo: ChDir(“d:\”)

RmDir .- Elimina una carpeta


Ejemplo: RmDir(“c:\nueva carpeta”) ‘Se creara un carpeta

FILECOPY Copia un archivo.


Visual Basic I 87 Idat

Sintaxis FileCopy fuente, destino


fuente Expresión de cadena que especifica el nombre de un archivo a copiarse puede incluir el
directorio o carpeta y la unidad de disco..
destino Expresión de cadena que especifica el nombre del archivo de destino se puede
incluir el directorio o carpeta y la unidad de disco.
Si intenta utilizar la instrucción FileCopy en un archivo abierto actualmente, se produce un error.
Ejemplo: FileCopy “c:\Casa.txt”,”d:\Puerta.txt” ‘Copia el archivo casa a D con el nombre de
Puerta

FILEDATATIME Devuelve una fecha que indica la fecha y hora en que un archivo fue creado o
modificado por última vez.
Sintaxis Variable = FileDateTime(nombreRuta)
El argumento con nombre nombreRuta es una expresión de cadena que especifica un nombre de
archivo. Se puede incluir el directorio o carpeta y la unidad de disco.

FILELEN Devuelve la longitud de un archivo en bytes.


Sintaxis Variable = FileLen(nombreRuta)
El argumento con nombre nombreRuta es una expresión de cadena que especifica un nombre de
archivo se puede incluir el directorio o carpeta y la unidad de disco.
Si el archivo especificado está abierto cuando se llama la función FileLen, el valor devuelto
representa el último tamaño de ese archivo cuando se guardó la ultima vez en el disco.
Para obtener la longitud de un archivo abierto, utilice la función LOF.

GETATTR Devuelve un número, que representa los atributos de un archivo, directorio o


carpeta o una etiqueta de volumen.
Sintaxis Variable = GetAttr(nombreRuta)
El argumento con nombre nombreRuta es una expresión de cadena que especifica un nombre de
archivo se puede incluir el directorio o carpeta y la unidad de disco.
Valores devueltos
El valor devuelto por GetAttr es la suma de los siguientes valores de atributos:
Valor Constante Descripción
0 vbNormal Normal.
1 vbReadOnly Sólo lectura.
2 vbHidden Oculto.
4 vbSystem Archivo de sistema.
16 vbDirectory Directorio o carpeta.
32 vbArchive El archivo ha sido modificado después de efectuar la última copia de
seguridad.
SETATTR Establece los atributos de un archivo.
Sintaxis SetAttr nombreRuta;atributos
nombreRuta Expresión de cadena que especifica un nombre de archivo se puede incluir el
directorio o carpeta y la unidad de disco.

atributos Constante o expresión numérica cuya suma especifica los atributos de


archivo.
Las constantes y valores de atributos son los mismos que para la instrucción GetAttr
Si se trata de establecer los atributos de un archivo abierto, se producirá un error en tiempo de
ejecución.
Visual Basic I 88 Idat

Ejemplo: SetAttr “c:\Casa.txt”,vbHidden ‘pone oculto Casa.txt

KILL.- Elimina un Archivo


Ejemplo : Kill “c:\Casa.txt” ‘ Elimina Casa.txt

Name.- Cambia el nombre de un archivo, directorio o carpeta.


Sintaxis: Name nombre_ruta_antigua As nombre_ruta_nueva
Ejemplo:
Dim NombreViejo, NombreNuevo
NombreViejo = "VIEJO": NombreNuevo = "NUEVO" ' Se definen nombres de archivo.
Name NombreViejo As NombreNuevo ' Se cambia el nombre del archivo.
NombreViejo = "C:\MIDIR\VIEJO": NombreNuevo = "C:\TUDIR\NUEVO"
Name NombreViejo As NombreNuevo ' Se mueve el archivo y se cambia su nombre.

NOTA:Si queremos ver otras propiedades debemos declarar uan variable de tipo
FileSystemObject para eso debemos irnos a Proyectos-Referencias- Microsoft Scripting Runtime
de ahí declaramos una variable asi: dim xvar as new FileSystemObject al poner xvar. Nos saldra
un menu con todas las propiedades que existen para manejar archivos.

Ejemplo: Diseñar un formulario al cual se le debe ingresar el nombre de un archivo y este se debe
eliminar del PC

General
Dim Fso As New FileSystemObject ‘Debemos primero irnos a referencias –Microsoft ‘Scripting
Runtime no se olviden
Dim cont%

Sub explora(ByVal raiz$) ‘Este procedimiento es recursivo


Dim carpeta As Folder, subcarpeta As Folder
Set carpeta = Fso.GetFolder(raiz)
For Each subcarpeta In carpeta.SubFolders
If Fso.FileExists(subcarpeta.Path & "\" & txtarchi) Then ‘Si existe el archivo
SetAttr subcarpeta.Path & "\" & txtarchi, vbNormal ‘Ponemos atributo normal
Kill subcarpeta.Path & "\" & txtarchi ‘Borra archivo
cont = cont + 1
End If
explora (subcarpeta.Path) ‘Se vuelve a llamar
Next
End Sub
Visual Basic I 89 Idat

Private Sub Command1_Click()


cont = 0
Dim unidad As Drive ‘Una variable de tipo drive
For Each unidad In Fso.Drives ‘Por cada drive que se encuentre en los drives existente
If unidad.IsReady Then ‘Si el drive se puede leer
explora (unidad.Path) ‘Vamos al procedimiento explora
End If
Next
MsgBox "Se borraron " & cont & " archivos"
End Sub

• DriveListBox, DirListBox Y FileListBox.

Se obtienen directamente de la Caja de Herramientas, en los iconos siguientes:

• DriveListBox permite elegir una unidad de disco.


• DirListBox muestra los directorios existentes en un árbol.
• FileListBox muestra los ficheros existentes en un determinado directorio.

Tal como indica su nombre, estos controles son listas. Repase el control ListBox para recordar
sus propiedades.

DriveListBox

Este control permite elegir una unidad de disco válida en tiempo de ejecución. Utilice este control
para mostrar una lista de todas las unidades válidas del sistema de un usuario.

DriveListBox desplegado y sin desplegar Name (nombre) por defecto List1

Drive devuelve el nombre de la unidad de disco seleccionada :

Variable = List1.Drive Variable = a : (ó c :[MS-DOS_6] ó D )


DirListBox.

Presenta un cuadro de la siguiente forma:


Visual Basic I 90 Idat

donde puede verse el árbol completo de un directorio. El DirListBox solamente presenta


directorios. No presenta ficheros.

Aparte de las propiedades geométricas de todos los controles, el DirListBox presentas las
siguientes propiedades particulares :

Path
Devuelve o establece la ruta de acceso actual. No está disponible en tiempo de diseño.

Sintaxis Nombre.Path [= pathname]

donde

Nombre es el nombre del DirListBox


pathname Una expresión de cadena que evalúa en el nombre de vía de acceso del directorio por
defecto del DirListBox..

FileListBox

Esta lista nos presenta los ficheros existentes en un directorio.

Como se puede apreciar, cuando el número de ficheros supera el número que puede presentar,
aparecen automáticamente las flechas de scroll verticales.

Esta lista de ficheros tiene las siguientes propiedades destacables :

Path
Visual Basic I 91 Idat

Devuelve o establece la ruta de acceso de su directorio actual. No está disponible en tiempo de


diseño. Este directorio puede ser el que se le haya impuesto mediante esta propiedad Path, o el
que tenga por defecto. (El directorio por defecto sería el del ejecutable de la aplicación)

Si le ponemos el nombre por defecto, List1, para todos los ejemplos :

variable = List1.Path Variable = C:\Archivos de programa\Microsoft Visual Basic32


(p. e.)

ListCount

Devuelve el número total de ficheros que hay en ese directorio.

Variable = List1.ListCount Variable = 19 (p. e.)

ListIndex

Devuelve un número con el índice del elemento seleccionado. Como todas las listas, devuelve -1
si no hay ningún elemento seleccionado. El primer elemento de una lista tiene el índice = 0.

Filename

Devuelve el nombre del fichero seleccionado.

List (n)

Devuelve el nombre del fichero que ocupa el lugar n en la lista.

Variable = List1.List (5) Variable = nombre del fichero que ocupa el 5º lugar en la
lista.

Si en lugar de n ponemos el valor de ListIndex :

variable = List1.List (List1.ListIndex) obtendremos el nombre del fichero seleccionado.

Observe que en este último caso, el resultado es el mismo que el de List1.Filename

Veamos otras propiedades del FileListBox

Pattern
Devuelve o establece un valor que indica los nombres de archivo mostrados en un
control FileListBox en tiempo de ejecución.

Sintaxis objeto.Pattern [= valor]

La sintaxis de la propiedad Pattern consta de las siguientes partes:


objeto : Nombre del Control FileListBox
valor: Expresión de cadena que indica una especificación de archivo, como *.* o *.FRM. La
cadena predeterminada es *.*, que obtiene una lista de todos los archivos. Además de utilizar
Visual Basic I 92 Idat

caracteres comodín, también puede especificar varios modelos, separándolos con caracteres
punto y coma (;). Por ejemplo, con *.EXE; *.BAT se obtendría una lista con todos los archivos
ejecutables y todos los archivos por lotes de MS-DOS.

Ejemplo: Usando controles Drive, Dir y File realizar el sgte formulario.

Private Sub cmdeliminar_Click()


Kill File1.Path & "\" & File1.FileName
File1.Refresh
End Sub

Private Sub cmdrenombrar_Click()


nuevo = InputBox("Ingrese nuevo nombre", "Cambiar Nombre")
If Not IsNull(nuevo) Then
Name File1.Path & "\" & File1.FileName As File1.Path & "\" & nuevo
File1.Refresh
End If
End Sub

Private Sub Dir1_Change()


File1.Path = Dir1.Path 'Establece la ruta al objeto File
End Sub
Private Sub Drive1_Change()
On Error GoTo xerr
Dir1.Path = Drive1.Drive 'Establece la ruta al objeto Dir
Exit Sub
xerr:
MsgBox "No esta lista la unidad", vbExclamation, "Mensaje"
End Sub

Private Sub File1_Click()


Label1 = File1.Path & "\" & File1.FileName
End Sub
Visual Basic I 93 Idat

27.- COMMOND DIALOG

El control CommonDialog es un control personalizado (Microsoft CommonDialog Control


COMDLG16.OCX / COMDLG32.OCX), y como casi todos los controles personalizados
presenta un asistente de propiedades propio.

Este control no se presenta en tiempo de El cuadro de diálogo, CommonDialog se


diseño mas que con un simple icono : utiliza para varias funciones :
 Abrir Ficheros
 Guardar Ficheros
 Elegir colores
 Seleccionar Impresora
• Seleccionar Fuentes
• Mostrar el fichero de Ayuda

FUENTES

Para mostrar el cuadro de diálogo correspondiente a Tipos de Letra ( Fonts ), debe ejecutarse la
instrucción:

CD1.ShowFont

El cuadro de diálogo que se presenta es el siguiente:

Los valores que se pueden obtener de este cuadro de dialogo son:

CD1.FontName Indica el nombre de la fuente


CD1.FontSize Indica el tamaño de la fuente
Visual Basic I 94 Idat

CD1.Color Indica el color de la fuente (Abrir con Flags=256+1, 2 ó 3)


CD1.FontBold = (True / False) Si es True, se ha elegido "Negrita"
CD1.FontItalic = (True / False) Si es True, se ha elegido "Cursiva"
CD1.FontStrikethru = (True / False) Si es True, se ha elegido "Tachada "
CD1.FontUnderline = (True / False) Si es True, se ha elegido "Subrayada"
Si se elige una versión Negrita Cursiva serían True las opciones FontBold y FontItalic

El objeto Font no puede aplicarse al CommonDialog. Es decir, no podemos poner :

Variable = CD1.Font.Size sino Variable = CD1.Fontsize

COLOR

Para mostrar el cuadro de diálogo correspondiente al color, se deberá ejecutar la instrucción:

CD1.ShowColor

El cuadro de diálogo tiene la misma forma que el cuadro de color de windows.

Variablecolor = CD1.Color

donde Variablecolor contendrá un número correspondiente al color elegido.

Colores en Visual Basic.

Visual Basic acepta para especificar un color, tres procedimientos: Mediante el número de color,
mediante la sentencia RGB ( rojo, verde, azul ) o mediante la función QBColor.

Por número

El número que representa el color en VB está formado por la suma de la componente roja, la
componente verde y la componente azul. Podríamos verlo muy bien en numeración Hexadecimal:

Color = Hex XX YY ZZ

Donde ZZ es un número Hexadecimal que representa la cantidad del color rojo. El mínimo
estaría en 0 (H00) y el máximo en 255 (HFF)

YY representaría la cantidad de color verde y XX la de color azul, ambos con los mismos límites
explicados para el rojo.

Por ejemplo: el rojo puro sería: Hex(0000FF) = 255


el verde puro sería: Hex(00FF00) = 652280
el azul puro sería: Hex(FF0000) = 16711680

Por la sentencia RGB

Se puede expresar el color, poniendo simplemente RGB (rojo, verde, azul), donde rojo es un
Visual Basic I 95 Idat

número entre 0 y 255 que indica la cantidad de color rojo que se aporta al color, verde un número
comprendido entre 0 y 255 indicando la cantidad de verde, y lo mismo para azul.
Esta es la forma mas sencilla de poner la propiedad color, y con la que mejor controlaremos el
mismo.

Si queremos poner al Label anterior un color mediante la sentencia RGB, ejecutaríamos la


sentencia :

Label1.Backcolor = RGB (128, 30, 100)

Mediante la Función QBColor

Esta función se ha puesto en Visual Basic para compatibilidad con los colores que se usan en
Quick-Basic y Qbasic. Mediante esta función se obtienen solamente 16 colores.

Sintaxis Objeto.QBColor(color)

El argumento color es un número entero entre 0 a 15, según la siguiente lista:

Número Color Número Color

0 Negro 8 Gris
1 Azul 9 Azul claro
2 Verde 10 Verde claro
3 Aguamarina 11 Aguamarina claro
4 Rojo 12 Rojo claro
5 Fucsia 13 Fucsia claro
6 Amarillo 14 Amarillo claro
7 Blanco 15 Blanco brillante

Para el mismo Label anterior, usaríamos la sentencia :

Label1.Backcolor = QBColor (12)

Fin de la nota acerca del número del color

IMPRESORAS

Nota: Si utiliza un CommonDialog para impresoras y otras aplicaciones, puede tener


problemas. Utilice un CommonDialog exclusivamente para impresoras.

Para presentar el cuadro de elección de impresora, ejecute la instrucción:

CD2.ShowPrinter

ABRIR Y GUARDAR ARCHIVOS


Visual Basic I 96 Idat

Posiblemente las opciones mas usadas del cuadro de diálogo. Para presentar el cuadro de diálogo
correspondiente a Abrir Archivo, debe ejecutar la instrucción:

CD1.ShowOpen

Si lo que necesita es abrir el cuadro de diálogo para guardar un fichero, debe ejecutar la
instrucción :
CD1.ShowSave

Nombrefichero= CD1.filename

El nombre del fichero, Nombrefichero en la sentencia anterior, viene con su path, es decir,
nombre y dirección completa, por lo que puede emplearse directamente la salida del
CommonDialog para abrir un fichero.

PROPIEDADES DEL CommonDialog

La Propiedad Action

La propiedad Action se incluye en la versión 4 de VB solamente por motivos de compatibilidad


con anteriores versiones. Realiza las mismas funciones que ShowFont, ShowColor,
ShowPrinter, ShowOpen y ShowSave. No debe usarse esta propiedad, sino los equivalentes
citados, en previsión de que pueda ser eliminada en futuras versiones.

La sintaxis de Action es : Nombre.Action [= valor]

Valor Descripción

0 Ninguna acción.
1 Muestra el cuadro de diálogo Abrir.
2 Muestra el cuadro de diálogo Guardar como.
3 Muestra el cuadro de diálogo Color.
4 Muestra el cuadro de diálogo Fuente.
5 Muestra el cuadro de diálogo Impresora
6 Ejecuta WINHELP.EXE.

APLICACION .- Cambiar los atributos de la etiqueta Label1 cuyo contenido es “Esto es un


ejemplo”
Y el color del formulario
Visual Basic I 97 Idat

Private Sub cmd_Click(Index As Integer)


With cmdlg
Select Case Index
Case 0
.ShowOpen
Case 1
.Flags = cdlCFBoth Or cdlCFEffects
.ShowFont
Label1.AutoSize = True
Label1.FontSize = .FontSize
Label1.FontName = .FontName
Case 2
.ShowColor
CommonDialog (CmdLG) Me.BackColor = .Color
End Select
End With
End Sub

28.- EDITOR DE MENUS


El Menú o Barra de Menú es la segunda línea de cualquier ventana Windows, donde pueden
verse distintos nombres. La Barra de Menú es un componente de un Formulario.

La Barra de Menú puede tener tantas palabras como se desee, y sobre cada palabra, puede
desplegarse un Menú desplegable con mas palabras. Sobre cada una de estas puede a su vez
desplegarse otro conjunto de palabras, etc. con lo que se puede conseguir una cantidad de
palabras tan grande como necesitemos.
Visual Basic I 98 Idat

Para crear un menú debe usarse el Editor de Menú, que se encuentra en la Barra de Menú de
VB en Herramientas | Editor de menús. Le aparecerá el siguiente cuadro. (En principio
vacío)

Existen otras propiedades aparte del Caption y Name que se introducen directamente en las
casillas al efecto.

HelpContextID Igual que esta propiedad en el resto de los controles, permite introducir un
número de contexto para la ayuda de Windows.

Enabled. Habilitado. Si se quita la marca de esa casilla, esa palabra aparecerá por defecto
deshabilitada..

Visible. Como su nombre indica, que sea visible o no lo sea. Puede cambiarse en
tiempo de ejecución.

WindowList Indica si esa palabra es la que va a mostrar todos los formularios abiertos en una
aplicación de documentos múltiples (MDI). Al hacer click sobre esta palabra, se desplegará un
submenú con todos los Caption de los Formularios hijo abiertos en ese momento

Otras propiedades

Shortcut Atajo. Esta propiedad admite varias combinaciones de teclas para acceder al
procedimiento click de esa palabra sin necesidad de usar el ratón.

El menú editado con los datos de la figura anterior tendrá esta forma en tiempo de ejecución :
Visual Basic I 99 Idat

27.- VISUAL BASIC Y BASE DE DATOS

OBJETO CONNECTION.-
Un objeto Connection representa el enlace o la conexión a algún manejador de Base de Datos.
Para hacer un enlace a un Manejador de Base de Datos debemos declarar una variable de tipo
connection para eso debemos hacer lo siguiente:

1. Primero hacer la referencia al ADO (Nos vamos al menú Proyecto – Referencias y se


marca la opción Microsoft Actives DataObjects 2.5 Library)
Nota : Esta referencia es necesaria para objetos de tipo Connection y recordset.

2. Declarar la variable de tipo Connection


Dim cn As ADODB.Connection .- donde cn es el nombre de la variable de tipo
connection

3. Instanciar la variable de tipo connection


Set cn = New ADODB.Connection .- Se instancia con la palabra NEW , Si la variable no
es instanciada no se podrá utilizar
Nota.- Los pasos 2 y 3 se pueden simplificar en uno solo
Dim cn As New ADODB.Connection .- aqui se esta declarando la variable y a la vez se
esta instanciando (Observen la palabra New)

4. Declarar la ubicación de la variable de tipo connection


cn.CursorLocation = tipo de cursor
Estos pueden ser adUseClient o adUseServer si se escoge aduseClient el cursor se creara
al lado del cliente si se escoge adUseServer el cursor se creara al lado del servidor

5. Abrir la conexión
cn.open “cadena de conexión” .- donde la cadena de conexión puede variar según a que
manejador de base de datos queremos conectarnos
Para Acces La cadena de conexión sería:
"Provider=Microsoft.Jet.OLEDB.4.0;Datasource=d:\micarpeta\Mibase.mdb”
Donde el proveedor indica que la conexión será con Access y el data source indica la
ubicación y el nombre de la base de datos
Para SQL Server la conexión sería:
"Provider=sqloledb;uid=sa;database=Mibase;server=a1_10”
Donde el proveedor indica que la conexión es a SQL el UID hace referencia al usuario del
SQL ya que SQL server maneja usuarios y el usuario SA es el usuario por defecto,
Database hace referencia a la base de datos a la cual se quiere conectar y server el nombre
de la maquina donde se encuentra la base de Datos.

OBJETO RECORDSET.-
Un objeto Recordset representa los registros de una tabla o una consulta a la cual nosotros
queremos acceder. Para manipular la información de una tabla nosotros debemos declarar una
variable de tipo recordset y esta variable contendrá todos los campos y registros de la tabla o la
consulta a la cual queremos acceder.
Ejemplo:
Visual Basic I 100 Idat

Para utilizar una variable de tipo recordset lo que vamos a hacer es lo siguiente

1. En este caso vamos a trabajar de la mano con la variable de tipo connection entonces lo
primero es declarar,instanciar y abrir una variable de tipo connection

2. Declarar la variable de tipo Recordset


Dim rs As ADODB.Recordset .- donde rs es el nombre de la variable de tipo recordset

3. Instanciar la variable de tipo Recordset


Set rs = New ADODB.Recordset .- Se instancia con la palabra NEW , Si la variable no es
instanciada no se podrá utilizar
Nota.- Los pasos 2 y 3 se pueden simplificar en unos solo
Dim rs As New ADODB.Recordset .- aqui se esta declarando la variable y a la vez se esta
instanciando (Observen la palabra New)

4. Declarar la ubicación de la variable de tipo Recordset


rs.CursorLocation = tipo de cursor estos pueden ser adUseClient o adUseServer si se
escoge aduseClient el cursor se creara al lado del cliente si se escoge adUseServer el
cursor se creara al lado del servidor

5. Abrir la variable de tipo Recordset


rs.open “tabla o consulta sql”,cn ,tipo de cursor, tipo de bloqueo

- donde tabla o consulta sql es el nombre de la tabla o la consulta sql al cual queremos
acceder
- cn es el nombre de la variable de tipo connection
- Tipo de cursor hace referencia a como va a trabajar la variable de tipo recordset
- Tipo de Bloqueo hace referencia a como se va a bloquear la tabla cuando un usuario
acceda a la tabla

Tipos de Cursor del Recordset

Un cursor corresponde a un tipo de restricción aplicable al Recordset, y que señala la forma en


que se podrá recorrer este objeto. Dependiendo de cómo se configuren las propiedades del tipo de
cursor del objeto Recordset, se puede recorrer y actualizar los registros. Los cursores de la base
de datos se comportan como punteros que permiten encontrar un elemento específico de un
conjunto de registros. Los cursores son especialmente útiles para recuperar y examinar registros,
y después realizar operaciones basadas en dichos registros. Si lo que necesitamos es recorrer el
Recordset en forma secuencial, lo mejor es utilizar el cursor por defecto ya que es el que
consume menos recursos, agilizando las operaciones. Por el contrario, si necesitamos recorrer el
Recordset de otra forma, estos son los tipos de cursores existentes:
Tipo de Cursor Valor Descripción
adOpenForwardOnly 0 Es el cursor por defecto y nos permite recorrer el Recordset en
forma secuencial.
adOpenKeySet 1 Permite movernos hacia delante y atrás. Permite observar las
modificaciones en los datos del Recordset , no así si existen
ingresos de nuevos registros.
adOpenDynamic 2 Permite movernos en cualquier sentido, viendo cualquier
Visual Basic I 101 Idat

modificación, ingreso o eliminación de datos del Recordset.


adOpenStatic 3 Permite movernos en cualquier sentido, pero no se verá ningún
cambio ocurrido en la tabla.

Tipos de Bloqueo del Recordset

Los bloqueos deben ser utilizados casi obligatoramente en Recordset que hacen referencia a bases
de datos con alta concurrencia de usuarios. Mediante la utilización de estos bloqueos podremos
controlar el tipo de acceso que le daremos a los demás usuarios cuando alguien ya se encuentre
modificando el Recordset. Los tipos de bloqueos que podremos utilizar son los siguientes:

Tipo de Bloqueo Valor Descripción


adLockReadOnly 1 Es el bloqueo por defecto y no permite modificar los registros de
la tabla.
adLockPessimistic 2 Una vez que alguien abre la tabla, ésta queda bloqueada para los
demás usuarios. Con este modo se asegura la integridad de los
datos.
adLockOptimistic 3 La tabla sólo será bloqueada a los demás usuarios mientras se
ejecute una operación Update. De esta forma la tabla se bloqueará
durante mucho menos tiempo que con el método anterior.
adBatchOptimistic 4 Los registros serán actualizados en modo batch.

Ejemplo 1:
rs.Open "Alumnos",cn,adOpenDynamic ,adLockOptimistic .- Aquí se esta abriendo la tabla
alumnos de la base de datos a la cual se conecto la variable cn de tipo de cursor fue
adOpenDynamic y el tipo de bloqueo fue adLockOptimistic

Este ejemplo se puede definir también de las siguiente maneras:


• rs.Open "Alumnos",cn,2,3 o
• rs.Open “Alumnos”,cn
rs.LockType = adLockOptimistic
rs.CursorType = adOpenDynamic

Ejemplo 2:
Rs.Open “Select * from alumnos where sueldo > 100”,cn,2,3
En este ejemplo se esta abriendo la variable rs con una consulta sql
Para acceder a un determinado campo de la variable de tipo recordset se puede hacer de la
siguiente manera:
Ejemplo: vamos a suponer que la variable rs tiene dos campos cod y nom
Rs(0)
Rs.Fields(0)
Rs!cod
harían referencia al campo cod (va 0 por que es el índice del campo todos los índices empiezan
con 0)

Rs(1) ,Rs.Fields(1), Rs!nom .- harían referencia al campo nom


Metodos del Recordset.-
Para mover la variable de tipo Recordset he aquí los métodos que pueden ser empleados:
Visual Basic I 102 Idat

Método Descripción
MoveFirst Posiciona el cursor en el primer registro
MoveLast Posiciona el cursor en el último registro
MoveNext Avanza el cursor en un registro
MovePrevious Retrasa el cursor en un registro

Las propiedades relacionadas con el movimiento a través del Recordset son las siguientes:

Propiedad Descripción
AbsolutePosition Nos indica el número del registro en el que nos
encontramos. También lo podemos utilizar para movernos a
una determinada posición. Ej.: rs.AbsolutePosition = 5
BOF Es True cuando nos encontramos al principio del Recordset,
antes del primer registro.
EOF Es True cuando nos encontramos al final del Recordset,
después del último registro.
RecordCount Nos señala el número de registros que contiene el objeto
Recordset.

Propiedades y colecciones del Recordset

Ahora que hemos visto los aspectos básicos de un Recordset entregaremos al lector una guía con
los principales métodos asociados a este objeto, de forma que se pueda profundizar en el estudio
y utilización del objeto Recordset.
Método Descripción
AddNew Crea un nuevo registro en el Recordset. Sólo será
insertado en la tabla cuando se aplique el método
Update. Ejemplo:

rs.AddNew
rs(0) = "Rodrigo"
rs(1) = "Rohland"
rs.Update
CancelUpdate Cancela un proceso de actualización, ya sea de
creación o de modificación de registros.
Clone Crea una copia del objeto Recordset. Ejemplo:
Set rs2 = rs.Clone
Close Cierra el objeto Recordset utilizado.
Delete Elimina del Recordset el registro que estemos
utilizando en ese momento.
GetRows Crea un arreglo con el contenido del Recordset. Si
quieres aprender más sobre este método visita.
Move Permite movernos hacia arriba si le indicamos un
número positivo, o hacia abajo si le indicamos uno
negativo. Ejemplo:
rs.Move -2
MoveFirst Nos lleva al primer registro del Recorset.
Visual Basic I 103 Idat

MoveNext Nos permite recorrer secuencialmente el Recordset,


avanzando un registro hacia adelante.
MoveLast Nos lleva al último registro del Recordset.
MovePrevious Nos permite recorrer en forma inversa el Recordset,
avanzando un registro hacia atrás. Nos lleva al registro
anterior.
NextRecordSet En algunos casos una consulta SQL puede devolver
más de un Recordset. Con este método borraremos el
Recordset actual y avanzaremos al siguiente.
Open Abre el objeto Recordset, cargando en él los resultados
de la consulta efectuada a una o varias tablas. Ejemplo:
rs.Open SQL, Cn, cursor, bloqueo
Requery Con este método se puede actualizar el objeto
Recordset, observándose los cambios ocurridos en los
datos.

Update Actualiza la tabla a la que hace referencia el objeto


Recordset, haciendo efectivos los cambios realizados.

Otras propiedades
Filter .- Sirve para filtrar la variable de tipo recordset
Rs.Filter “Condicion de filtro”
Ejemplo :
rs.Filter = “sueldo > 100” .- aquí se esta filtrando los datos de la variable Rs donde el sueldo sea
mayor a 100 (la condicion va como cadena)
Find .- Sirve para buscar en base a un criterio, esta funcion hace que el puntero se ubique en la
posición del registro que se ha buscado.
Rs.find “Condicion de Busqueda”
Ejemplo :
Rs.Find "cod='A001'" .- Aquí se esta buscando el registro que tenga como codigo el ‘A001’ si en
caso existe el puntero se ubica en ese registro caso contrario se va al fin de archivo (EOF toma el
avlor de True)

PROYECTO DE APLICACIÓN CON ADO


 Crear una aplicación que permita conectarse y desconectarse a una base de datos llamada
“VENTAS.MDB UNa vez realizada la conexión se deberá mostrar el Código, Descricpción,
Precio, Stock y Código de categoria de una tabla denominada PRODUCTOS.
 Esta tabla elaborado en access tiene la siguiente estructura:

COD_PROD TEXTO 4 Codigo del producto


DES_PROD TEXTO 35 Descripcion
PRE_PROD NUMERICO DOBLE Precio unitario
STK_PROD NUMERICO ENTERO Stock
COD_CAT TEXTO 3 Categoria
Visual Basic I 104 Idat

Nam
Considerar el Siguiente formulario

Name :

CmdCone

CmdDescon

CmdMover

PASOS PARA TRABAJAR CON ADO


• Realizar una referencia a ADO, para lo cual del menú “Project” elegimos “References” y luego
seleccionamos “MicroSoft Activex Data Objects 2.1 o 2.5 Library”

• Declarar variables de tipo Connection, Command y RecordSet.


• Inicializar las variables, instanciando una nueva conección, comando o recordset.
• Usar las propiedades, métodos y eventos de los objetos, que pueden ser útiles en la
aplicación.
Código del Módulo
• Haga un Clic en el Menú “Project”, “Add Module”
Global Cn As ADODB.Connection
Global Rs As ADODB.Recordset
‘Conectandose a un origen de datos
Public Sub Conectar()
On Error GoTo VerError 'Ir a la Etiqueta de Error
Set Cn = New ADODB.Connection
Cn.Open “Provider=Microsoft.jet.oledb.4.0; Data Source=C:\datos\ventas.mdb”
Msgbox “conexion Correcta”
Exit Sub
VerError:
MsgBox "Error Nº" + Str(Err.Number) + " - " + Err.Description
Visual Basic I 105 Idat

End Sub

‘Procedimiento para desconectarse de un origen de datos


Public Sub Desconectar()
Cn.Close
Set Cn = Nothing
End
End Sub

‘Cargar registros de la consulta


Public Sub CargarRecordset()
Set Rs = New ADODB.Recordset
Rs.ActiveConnection = Cn ‘ Activar la conección
Rs.CursorType = adOpenDynamic ‘Indica tipo de conj. de registros que devolverá el proveedor
datos
Rs.LockType = adLockOptimistic ‘ Indica la forma en que desee administrar el bloqueo en
sesiones
Rs.CursorLocation = adUseClient ‘ Controla donde se mantiene la colección de registros
Rs.Open "PRODUCTOS"
End Sub

CODIGO EN EL FORMULARIO
Public Sub limpiar()
Dim x As Object
For Each x In Form1.Controls
If TypeOf x Is TextBox Then
x.Text = ""
x.Enabled = False
End If
Next x
End Sub

Public Sub MostrarDatos()


TxtCod_Prod = Rs.Fields("Cod_Prod")
TxtDes_Prod = Rs.Fields("Des_Prod")
TxtPre_Prod = Rs.Fields("Pre_Prod")
TxtStk_Prod = Rs.Fields("Stk_Prod")
TxtCod_Cat = Rs.Fields("Cod_Cat")
End Sub

Private Sub CmdConectar_Click()


Call Conectar
Call CargarRecordset
Call MostrarDatos
End Sub

Private Sub CmdDesconectar_Click()


Call Desconectar
End Sub
Visual Basic I 106 Idat

Private Sub CmdMover_Click(Index As Integer)


Select Case Index
Case 0
Rs.MoveFirst
Case 1
Rs.MovePrevious
If .BOF Then .MoveFirst
Case 2
Rs.MoveNext
If .EOF Then .MoveLast
Case 3
Rs.MoveLast
End Select
End With
Call MostrarDatos
End Sub

Private Sub Form_Load()


Call limpiar ‘Llamada al procedimiento para limpiar y deshabilitar los controles
End Sub

MANEJO DE VB-ADO CON ACCESS

CODIGO EN EL MODULO
Igual al Modulo anterior

CODIGO EN EL FORMULARIO
Public Sub Barra_Progreso()
‘Muestra la barra de progreso
Dim i As Integer
For i = 0 To 100
ProgressBar1.Value = i
Next i
End Sub
Visual Basic I 107 Idat

'Procedimiento que limpia los Cuadros de Texto CmdGuardar.Enabled = False


Public Sub Limpiar() CmdNuevo.SetFocus
Dim X As Object SSTab1.Tab = 0
For Each X In Form1.Controls
If TypeOf X Is TextBox Then
X.Text = ""
End If
Next X
End Sub

'Procedimiento que deshabilita los cuadros


'de Texto
Public Sub Deshabilitar()
TxtCod_Prod.Enabled = False
TxtDes_Prod.Enabled = False
TxtPre_Prod.Enabled = False
TxtStk_Prod.Enabled = False
DataCombo1.Enabled = False
End Sub

Public Sub Habilitar()


'Procedimiento que habilita
'Los cuadros de texto
TxtCod_Prod.Enabled = True
TxtDes_Prod.Enabled = True
TxtPre_Prod.Enabled = True
TxtStk_Prod.Enabled = True
DataCombo1.Enabled = True

'Procedimiento que Guarda los Datos del ‘formulario a


la tabla productos
Public Sub Guardar()
Rs.Fields("Cod_prod") = TxtCod_Prod.Text
Rs.Fields("Des_prod") = TxtDes_Prod.Text
Rs.Fields("Pre_prod") = val(TxtPre_Prod.Text)
Rs.Fields("Stk_prod") = Val(TxtStk_Prod.Text)
Rs.Fields("Cod_cat") = DataCombo1.Text
End Sub

'Procedimiento que Muestra_Datos


Public Sub Mostrar()
TxtCod_Prod = Rs.Fields("Cod_prod")
TxtDes_Prod = Rs.Fields("Des_prod")
TxtPre_Prod = Rs.Fields("Pre_prod")
TxtStk_Prod = Rs.Fields("Stk_prod")
DataCombo1.Text = Rs.Fields("Cod_cat")
End Sub

Private Sub Form_Activate()


Call Limpiar 'Limpiar texto
Call Deshabilitar 'Deshabilitar cuadros de texto
Visual Basic I 108 Idat

End Sub
End Sub
Private Sub Form_Load()
Call Conectar
Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseClient
Rs.ActiveConnection = Cn
Rs.CursorType = adOpenDynamic
Rs.LockType = adLockBatchOptimistic
Rs.Open "PRODUCTOS"
‘se puede minimizar la operación de la siguiente manera
'Rs.Open "PRODUCTOS", Cn, adOpenDynamic, adLockBatchOptimistic
Set Rt = New ADODB.Recordset
Rt.Open "CATEGORIAS", Cn, adOpenStatic, adLockReadOnly
Set DataCombo1.RowSource = Rt
DataCombo1.ListField = "COD_CAT"
DataCombo1.BoundColumn = "COD_CAT"
End Sub

*********************************************************************
'Procedimiento que permite Generar el Código
'Un Nuevo registro
Private Sub CmdNuevo_Click()
Dim cod As Integer
If Rs.RecordCount > 0 Then
Rs.MoveLast 'Ir al último registro
cod = Val(Right(Rs!COD_PROD, 3)) + 1
TxtCod_Prod = "P" + Format(cod, "000")
Else
TxtCod_Prod = "P001"
End If
Call Habilitar
TxtCod_Prod.Enabled = False
CmdGuardar.Enabled = True
TxtDes_Prod.SetFocus
End Sub
*********************************************************************
‘Guardar el Registro
Private Sub CmdGuardar_Click()
On Error GoTo GUARDARERROR
Dim Rpta As Integer
Rpta = MsgBox("Seguro de Guardar", 4 + 32, "Guardar")
If Rpta = vbYes Then
Rs.AddNew 'Añadir Registro en Blanco
Call Guardar 'Sustituir datos del formulario a la tabla
Rs.UpdateBatch 'Actualizar el registro
CmdGuardar.Enabled = False
End If
Form_Activate
Exit Sub

GUARDARERROR:
Visual Basic I 109 Idat

MsgBox Err.Number & ":" & Err.Description, 16, "Mensaje"


Resume next
End Sub

*********************************************************************
Private Sub CmdBuscar_Click()
‘Localizar un registro
Dim codbus As String * 4
Rs.MoveFirst
codbus = InputBox("Ing. Código Producto Buscar", "Buscar Producto")
criterio = "COD_PROD='" + UCase(Trim(codbus)) + "'"
Rs.Find criterio

If Rs.EOF Then
MsgBox "CODIGO PRODUCTO NO EXISTE"
Call Limpiar
Else
Call Mostrar
End If

End Sub

*********************************************************************
Private Sub CmdEditar_Click()
'Modificar los datos del campo
Dim Rpta As Integer
Dim codbus As String * 4
Rs.MoveFirst
codbus = InputBox("Ing. Código Modificar", "Modificar Producto")
criterio = "COD_PROD='" + UCase(Trim(codbus)) + "'"
Rs.Find criterio

If Rs.EOF Then
MsgBox "CODIGO PRODUCTO NO EXISTE"
Call Limpiar
Else
Call Mostrar
Call Habilitar
TxtCod_Prod.SetFocus
End If

End Sub
*********************************************************************
Private Sub CmdActualizar_Click()
On Error GoTo ERRORACTUALIZAR
If MsgBox("Seguro de Actualizar", 4 + 32, "Actualizar") = vbYes Then
Call Guardar
Rs.UpdateBatch
MsgBox "Registro Actualizado"
CmdActualizar.Enabled = True
End If
Exit Sub
Visual Basic I 110 Idat

ERRORACTUALIZAR: 'ETIQUETA DE ERROR


MsgBox Err.Number & ":" & Err.Description, 16, "ERROR"
Resume Next
End Sub

*********************************************************************
Private Sub CmdCerrar_Click()
'Cerrar la conexión con la Base de Datos
Cn.Close
Set Cn = Nothing
End
End Sub

Private Sub

DataCombo2_Click(Area As Integer)
Dim Dato As String
ProgressBar1.Value = 0
If Area > 0 Then
Call Barra_Progreso
Rp.MoveFirst
Dato = "DES_PROD='" + DataCombo2.Text + "'"
Rp.Find Dato
Txtcod = Rp.Fields("cod_prod")
TxtPre = Rp.Fields("pre_prod")
TxtStk = Rp.Fields("stk_prod")
TxtCat = Rp.Fields("COD_CAT")
Visual Basic I 111 Idat

Exit Sub
End If
End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)


Nopc = SSTab1.Tab
Select Case Nopc
Case 1
Set Rp = New ADODB.Recordset
Rp.CursorLocation = adUseClient
Rp.Open "PRODUCTOS", Cn, adOpenStatic, adLockReadOnly
Set DataCombo2.RowSource = Rp
DataCombo2.ListField = "DES_PROD"
DataCombo2.BoundColumn = "DES_PROD"
Case 2 'PROGRAMAR ELIMINACION
End Select
End Sub

'Procedimiento que valida el precio


Private Sub TxtPre_Prod_LostFocus()
If Not IsNumeric(TxtPre_Prod) Then
MsgBox "Error dato no numerico"
TxtPre_Prod = 0: TxtPre_Prod.SetFocus
End If
End Sub

Ejercicio .-
Modificar el ejercicio de registros , pasandolo a archivos

Ejemplo Practico :
Para este ejemplo debemos tener una base de datos en ACCESS llamada BDIDAT que
debe estar en la misma carpeta que el proyecto. y dentro de esta un tabla llamada alumno
con los sgtes campos:codalu, nomalu, sexo, foto(aquí se guarda el nombre de una imagen
osea es una cadena)
Debemos diseñar un formulario el cual debe contener un TabbedDialog el cual tendra 3
pestañas
Registrar.- En esta parte se debera realizar un mantenimiento a la tabla alumno
Contaremos con controles como Txtcod, Txtnom, Option1, Option2, CboFoto y DataGrid1
Visual Basic I 112 Idat

Consulta x Codigo.- En esta parte se ingresara un codigo y al dar ENTER se mostraran


los datos de ese alumno caso contrario saldra un mensaje de error
Para esto contaremos con los controles TxtBuscaCod, TxtBuscaNom, Opt1, Opt2,
ImageBusca

Consulta x Sexo .- se escogera un sexo y al hacer clic en el boton OK sale los alumnos de
ese sexo.(Aquí tenemos los controles OP1, OP2 y cmdok ademas del grid DATAGRID2)

OJO: El control TABBED Dialog solo sirve como contenedor es como un Frame la
diferencia es que tiene pestañas para jalarlo tenemos que ir a Proyecto- Componentes-
Microsoft Tabbed Dialo Controls 6.0
Tambien utilizaremos un datagrid que esun control en forma de cuadricula el cual me va a
permitir mostrar datos de un recordset mediante su propiedad DATASOURCE para jalarlo
nos vamos Proyecto- Componentes-Microsoft DataGrid Controls 6.0
Visual Basic I 113 Idat

La programacion seria:
Primero en un modulo debemos poner:
Public cn$ ‘Cn es publica por lo tanto sera reconocida en todo el proyecto
Sub main()
cn = "Provider=Microsoft.Jet.Oledb.4.0;data Source=” & app.path &”\BDIDAT.mdb”
FrmMant.Show
End Sub
Se debe utilizar siempre un Procedimiento llamado main ya que este permitira inicializar
valores, definir constantes, etc. Y de ahí podemos llamar al formulario inicial, generalmente
el formulario inicial debe ser uno que llame a los demas puede ser un MDI.
Para crearlo solo ponemos SUB MAIN y programamos dentro todo lo que queramos.
Notemos que guardamos la cadena de conexion y llamamos al formulario si estamos dentro
de un Sub main del modulo debemos ponerlo como inicial(Explorador de Proyecto-
Propiedades- Objeto Inicial)

En el formulario:
No olvidar de hacer la referencia a ADO(Proyecto-Referencias)
Dim rs As New ADODB.Recordset
Dim Si_Nuevo%

Sub ActivaControles(ByVal Modo As Boolean) 'Para activar los botones y texto(FRAME1)


Frame1.Enabled = Modo
'Boton Nuevo y Grabar es el mismo
CmdNuevo.Caption = IIf(Modo, "Grabar", "Nuevo")
CmdNuevo.Picture = LoadPicture(App.Path & IIf(Modo, "\SAVE.BMP",
"\NEW.BMP"))

CmdModificar.Caption = "Modificar"
CmdModificar.Picture = LoadPicture(App.Path & "\edit.bmp")

CmdEliminar.Caption = "Eliminar"
CmdEliminar.Picture = LoadPicture(App.Path & "\delete.bmp")

'Boton salir y Cancelar es el mismo


CmdSalir.Caption = IIf(Modo, "Cancelar", "Salir")
CmdSalir.Picture = LoadPicture(App.Path & IIf(Modo, "\UNDO.BMP",
"\CLOSE.BMP"))

CmdModificar.Enabled = Not Modo


CmdEliminar.Enabled = Not Modo
End Sub
Este procedimiento tiene como finalidad activar o desactivar los controles se le envia un
parámetro llamado MODO que puede ser True o False y según eso activa o desactiva
ademas de cambiar el caption y la imagen a los botones ya que el boton Nuevo y Grabar es
el mismo boton lo mismo sucede con Cancelar y Salir

Sub Limpia()
Visual Basic I 114 Idat

txtcod = ""
txtnom = ""
Option1.Value = True
CboFoto.Text = ""
Image1.Picture = Nothing
End Sub ‘Limpia el formulario

Function valida() As Boolean 'Validar si se ingresa datos


If Trim(txtcod) = "" Then
MsgBox "Ingrese Codigo", vbCritical, "Mensaje"
txtcod.SetFocus
valida = False
Exit Function
End If
If Trim(txtnom) = "" Then
MsgBox "Ingrese Nombre", vbCritical, "Mensaje"
txtnom.SetFocus
valida = False
Exit Function
End If
valida = True
End Function

Sub llena() ‘llena datos de los textos al RS


rs(0) = Val(txtcod)
rs(1) = txtnom
rs(2) = IIf(Option1.Value, "M", "F")
End Sub

Private Sub CboFoto_Click()


Image1.Picture = LoadPicture(App.Path & "\" & CboFoto.Text)
‘Muestra la foto que se escoge en el combo en el control Image
End Sub

Private Sub CmdEliminar_Click()


rs.Delete ‘elimina un registro
End Sub

Private Sub CmdModificar_Click()


Si_Nuevo = 3
Call ActivaControles(True)
End Sub

Private Sub CmdNuevo_Click()


Dim p%
Visual Basic I 115 Idat

If Si_Nuevo = 1 Then ‘Si el boton es nuevo


Call ActivaControles(True)
Call Limpia
txtcod.SetFocus
Si_Nuevo = 2
Else ‘El boton puede grabar o Modificar
If valida Then ‘Si se validaron los datos
If Si_Nuevo = 2 Then ‘Si se va a grabar
rs.AddNew
End If
Call llena ‘Pasa los datos
rs.Update ‘Actualiza la tabla
Si_Nuevo = 1 ‘Y Vuelve a 1
Call ActivaControles(False)
End If
End If
End Sub

Private Sub CmdSalir_Click()


If Si_Nuevo > 1 Then ‘Osea si se va a grabar o Modificar se puede cancelar
Si_Nuevo = 1
Call ActivaControles(False)
Else
End
End If
End Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)


On Error GoTo xerr ‘Pasa los datos del grid a los textos
txtcod = DataGrid1.Columns(0).Text
txtnom = DataGrid1.Columns(1).Text
If DataGrid1.Columns(2).Text = "M" Then
Option1.Value = True
Else
Option2.Value = True
End If
CboFoto.Text = DataGrid1.Columns(3)
Call CboFoto_Click ‘Se llama a lo que se programo en el combo
xerr:
End Sub

Private Sub Form_Load()


Call ActivaControles(False)
Si_Nuevo = 1

rs.CursorLocation = adUseClient
rs.Open "Alumno", cn, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs
Visual Basic I 116 Idat

End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)


‘Se esta preguntado si el tab anterior fue Consulta x Sexo ya que Registrar seria 0 y
Consulta ‘x Codigo seria 1
If PreviousTab = 2 Then
rs.Filter = adFilterNone ‘Se quita el filtro
rs.Requery
End If
End Sub
Consulta x Codigo
Private Sub TxtBuscaCod_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
rs.MoveFirst
rs.Find "codalu = " & Val(TxtBuscaCod)
If rs.EOF Then
MsgBox "No existe el codigo buscado", vbCritical, "Mensaje"
Else
TxtBuscaCod = rs(0)
txtbuscaNom = rs(1)
If rs(2) = "M" Then
Opt1.Value = True
Else
Opt2.Value = True
End If
ImageBusca.Picture = LoadPicture(App.Path & "\" & rs(3))
End If
End If
End Sub
Consulta x Sexo
Private Sub CmdOk_Click() ‘Este boton es de la pestaña de Consulta X Sexo
If Op1.Value Then
rs.Filter = "sexo='M'"
Else
rs.Filter = "sexo='F'"
End If
Set DataGrid2.DataSource = rs
‘Se aplica el filter y se muestra en el grid
End Sub

NOTA: En el campo foto se debe grabar el nombre de una imagen con la extensión, la
imagen debe encontrarse en el mismo sitio que el proyecto.