lenguaje de programacion guia i

156

Click here to load reader

Upload: awtorm

Post on 25-Jun-2015

2.257 views

Category:

Documents


16 download

TRANSCRIPT

Page 1: Lenguaje de Programacion Guia I

Lenguaje de Programación I

INDICE1.- 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 propiedades5.- Convención para nombrar objetos en Visual Basic6.- Operadores: Basicos,Comparacion, Etc.7.- Variables y Tipo de Datos en VB.8.- Manejo de Formularios:Eventos, Metodos, Modales y no Modales, MDI.Practica 19.-Instrucciones Condicionales,Controles optionButton,Checkbox, Evento keypress y Change10.-Funciones de conversión de datos11.-CUADROS DE DIALOGO Ejemplo practico12.-Funciones de Cadenas,Numéricas y Fechas13.-Evento Gotfocus, LostFocus, MouseDown, MouseUp y MouseMove14.-Instrucciones Repetitivas, Sentencia Exit.Practica315.- Barras de desplazamiento (Scroll Bars)16.- Función RGB17.- Control Timer18.- CONTROLES GRÁFICOS:Line,Shape,Image,Picturebox19.- Metodos graficos:Pset,Line,Circle.20.- CUADRO DESPLEGABLES(COMBOBOX) Y LISTAS (LIST BOX)21.- ARREGLOS:ESTATICOS,DINAMICOS,CONTROLESAplicacion :AHORCADO22.- MSFLEXGRIDPractica423.- PROCEDIMIENTOS Y FUNCIONESPractica 524.- Registros25.- Controles ACTIVE X (ToolBar, ImageList, ProgressBar, StatusBar, ShockWaveFlash)Ejemplo de Presentacion de Un Sistema26.- Manejo de Archivos, Comandos (Dir , Kill, FileCopy, etc.) Controles DRIVE, DIR y FILE27.- VISUAL BASIC Y BASE DE DATOSObjetos Recordset, propiedades, metodos, etc.

- 1 -

Page 2: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Semana 1: Entorno de Desarrollo Visual Basic

1.1 .- Características Generales de Visual-BasicVisual-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 6OJO: 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 -

Page 3: Lenguaje de Programacion Guia I

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:

Los elementos del entrono de desarrollo de Visual Basic son:Barra de herramientas:Permite un acceso rápido a los comando más utilizadosSi 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ñarCuadro 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 -

Barra de Menu

Explorador de Proyecto

Ventana de Propiedades

Cuadro de Herramientas

Barrra de Herramientas

Diseñador de Formulario

Page 4: Lenguaje de Programacion Guia I

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 BasicUn 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 -

Page 5: Lenguaje de Programacion Guia I

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ónAlignment 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 contenidoCaption Texto que se visualiza en la etiquetaBackStyle 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ónAlignment Alineación de la información introducida.Multiline Permite introducir más de una línea de texto en el cuadroPasswordCharEstable 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 -

Page 6: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Bloquear controlesCuando 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 PropiedadesName .- 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 formularioToolTipText.-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 controlLeft .-Establece la distancia que hay desde el borde izquierdo del formulario hasta donde se encuentra el controlIcon .- 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 PREFIJOForm Formulario frmCheckBox Casilla de verificación chkComboBox Cuadro combinado cboData-bound combobox Cuadro combinado enlazado a datos dbcCommand Button Botón de comando cmdData Control de datos datDirectory list box Cuadro lista de directorios dir

- 6 -

Page 7: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Drive List Box Cuadro lista de unidades drvFile List Box Cuadro lista de archivos filFrame Marco frmGrid Rejilla grdData-bound grid Rejilla enlazada a datos dbgHorizontal scrollbar Barra de desplazamiento horizontal hsbImage Imagen imgLabel Etiqueta lblLine Linea linOLE Container Contenedor OLE olePictureBox Cuadro de imagen picShape Forma shpText Box Cuadro de texto txtTimer Temporizador tmrVertical scroll bar Barra de desplazamiento vertical vsb

1.6.- OperadoresOperaciones 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.

- 7 -

Page 8: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Tipo de datos Tamaño Caracter

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 TipodeDatodim nombrevariable As TipodeDato

Publica o Global .- La variable se podra utilizar en todo el proyecto por que sera publica.Public nombrevariable As tipodedatoGlobal 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. CuandoVisual 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. Elmé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.

- 8 -

Page 9: Lenguaje de Programacion Guia I

Lenguaje de Programación I

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. 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, ScaleHeightEnd 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.ShowHide: Oculta un formulario, pero no lo descarga de memoria.Ejemplo: form1.HideUnload: Descarga un formulario de memoria.Ejemplo : unload Form1Comentarios.- 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 estableceel 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

- 9 -

Page 10: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Formularios Modales y No ModalesUn formulario que se abre como Modal, no permite que el usuario interactúe con otrosformularios de la misma aplicación hasta que no sea cerrado.Un formulario que se abre como No Modal, permite al usuario cambiar a otros formulariosde 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 NoModal.Ejemplo ‘ Cargar el formulario frmEntrada como ModalfrmEntrada.Show vbModalEjemplo ‘ Carga el formulario frmEntrada como No ModalfrmEntrada.Show vbModeless ‘o en todo caso simplemente se pone frmentrada.show

Finalizando su AplicaciónSe puede finalizar la ejecución de la aplicación descargando el último formulario de laaplicación o usando la sentencia End. La sentencia End termina la ejecución de laaplicació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 -

Page 11: Lenguaje de Programacion Guia I

Lenguaje de Programación I

SEMANA 2: Instrucciones Condicionales,Controles optionButton,Checkbox, Evento keypress y Change

Instrucciones de Control Condicionales

2.1.- IF.(Si)Sintaxis:

If condicion then(programacion)

else(programacion)

end if

Esta sentencia puede tener 2 o mas condiciones solo se debera poner los operadores logicos (and,or)

Ejemplo: Se tiene un numero si este es mayor que 300 y menor 500 se debera incrementar en un 10% de lo contrario se debera disminuir en un 20%Dim num as integerNum = 450If Num >300 and Num < 500 then

Num = num + (num * 0.10)Else

Num = num - (num * 0.20)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 = 450Num = 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 -

Page 12: Lenguaje de Programacion Guia I

Lenguaje de Programación I

End selectEjemplo : 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 integerDim mensaje as stringNum =4Select Case(Num) Case 0: Mensaje =”Neutro” Case 2,4,6,8: Mensaje =”Par menor a 10” Case 10 to 99: Mensaje =”entre 10 y 99” Case 998,500 to 900: 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 integerDim nombre as stringDia=7Nombre = 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 superiorEjemplo:Private Sub cmdcalcula_Click() Print "Hola"End Sub

- 12 -

Otro Ejemplo:Promedio=(nota1+nota2+nota3)/3Select case promedioCase 1 to 6 : obs=”deficiente”Case 7 to 10 : obs=”Desaprobado”Case 11 to 14 : obs=”Aprobado”Case 15 to 20 : obs=”Bueno”Case else Msgbox “datos mal ingresado”End select

Page 13: Lenguaje de Programacion Guia I

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 = 0End IfIf chk20.Value = Checked Then txt20 = monto * 0.2 Else txt20 = 0End If'Puede ser checked o 1If chk22.Value = 1 Then txt22 = monto * 0.22 Else txt22 = 0End If

- 13 -

Page 14: Lenguaje de Programacion Guia I

Lenguaje de Programación I

txtfinal = Val(txt18) + Val(txt20) + Val(txt22)

End Sub

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 IfEnd IfEnd 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 -

Page 15: Lenguaje de Programacion Guia I

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 SelectEnd SubNOTA: si se quiere programar con el Keypress del Formulario la propiedad KEYPREVIEW debe estar en TRUE.

ChangeEste 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 CHANGEEjemplo:

Private Sub TxtNum_Change() Print TxtNumEnd Sub

Propiedades en tiempo de ejecución

Cada vez que se escriba algo en text1 se vera en LBMENPrivate Sub Text1_Change() LBMEN.Caption = Text1.Text

- 15 -

Page 16: Lenguaje de Programacion Guia I

Lenguaje de Programación I

End Sub

Private Sub Check1_Click()If Check1.Value = 1 ThenLBMEN.FontItalic = TrueElseLBMEN.FontItalic = FalseEnd IfEnd Sub

Private Sub Check2_Click()If Check2.Value = 1 ThenLBMEN.FontBold = TrueElseLBMEN.FontBold = FalseEnd IfEnd Sub

Private Sub CmdRojo_Click()Form1.BackColor = RGB(0, 0, 255)End SubPrivate Sub CmdAma_Click()Form1.BackColor = RGB(255, 255, 0)End Sub

Private Sub CmdIzq_Click()LBMEN.Left = LBMEN.Left - 30End Sub

Private Sub Cmddre_click()LBMEN.Left = LBMEN.Left + 30End Sub

Private Sub Cmdsube_Click()LBMEN.Top = LBMEN.Top + 20end Sub

Private Sub Cmdbajar_Click()LBMEN.Top = LBMEN.Top - 20

End Sub

Private Sub Optmen_Click()LBMEN.FontSize = 8End Sub

Private Sub Optmed_Click()LBMEN.FontSize = 24End Sub

10.-Funciones de conversión de datos

Función DescripciónCBool Convierte una expresión al tipo BooleanCByte Convierte una expresión al tipo ButeCCur Convierte una expresión al tipo CurrencyCDate Convierte una expresión al tipo DateCDbl Convierte una expresión al tipo DoubleCInt Convierte una expresión al tipo IntegerCLng Convierte una expresión al tipo LongCSng Convierte una expresión al tipo SingleCStr Convierte una expresión al tipo StringCVar Convierte una expresión al tipo Variant

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

- 16 -

Page 17: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Fec = CDate(“01/01/1980”) ‘el valor de fec seria 01/01/1980 como fechaCad = CStr(123) ‘ el valor de Cad seria “123” como cadena

IsArray Devuelve TRUE si el parámetro pasado es un nombre de matrizIsDate Devuelve TRUE si el parámetro es el nombre de un dato tipo DateIsEmpty Devuelve TRUE si el pará. es el nombre de una var. no inicializadaIsNull Devuelve TRUE si el pará. es el nombre de una var. que contieneNullIsNumeric Devuelve TRUE si el parámetro es el nombre de dato de tipo numéricoStr Devuelve la representación de un número en forma de cadenaTypeName Devuelve en forma de nombre el tipo de variable del parámetropasadoVal Devuelve el número representado por una cadena de caracteresValType Devuelve en forma de número el tipo de variable del parámetroPasado

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 -

Page 18: Lenguaje de Programacion Guia I

Lenguaje de Programación I

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

Constante Valor DescipciónvbOKOnly 0 Muestra sólo el botón aceptarvbOKCancel 1 Botones aceptar y cancelarvbAbortRetryIgnore 2 Botones anular, reintentar e ignorarvbYesNoCancel 3 Botones si, no y cancelarvbYesNo 4 Botones si y novbRetryCancel 5 Botones reintentar y cancelarvbCritical 16 Muestra el icono de mensaje críticovbQuestion 32 Icono de interrogaciónvbExclamation 48 Icono de exclamaciónvbInformation 64 Icono de mensaje de informaciónvbAplicationModal 0 Cuadro de diálogo modal de la aplicaciónvbSystemModal 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 siguienteIf MsgBox("Ingrese Cantidad valida", vbCritical, "Mensaje") = vbYes ThenEn este caso se esta preguntando si respondimos SI al msgbox.EjemploDim Mensaje, Estilo, Título, Ayuda, Ctxt, Respuesta, MiCadenaMensaje = "¿Desea continuar?" ' Define el mensaje.Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.

- 18 -

Page 19: Lenguaje de Programacion Guia I

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 -

Page 20: Lenguaje de Programacion Guia I

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 controlesDescripción Control NombreCodigo del Suministro Textbox TxtCodKilowatts consumidos TextBox TxtkiloImporte Inicial Label LblInicialAlumbrado Label LblalumMantenimiento Label LblMantReajuste Label LblReajusteIGV Label LbligvTotal Label LblTotalCalcular Command CmdCalcularNuevo Command CmdNuevoSalir Command CmdSalirImagen Image Image1Formulario Form Form1Private 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 IfEnd SubNOTA: 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 decimalesPrivate Sub CMDNUEVO_Click()Me.txtcod = ""Me.txtkilo = ""Me.lblinicial = ""Me.lblalum = ""Me.lblmant = ""Me.lblreajuste = ""Me.lbligv = ""Me.lbltotal = ""Me.txtcod.SetFocusEnd Sub

- 20 -

Page 21: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Private Sub CMDSALIR_Click() End

End Sub

Private Sub Form_Load()Me.Caption = "Registar pagos a EdelNor"Image1.Stretch = TrueImage1.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.jpgPara esto la imagen Logo.jpg debe estar en la misma carpeta donde se encuentra el proyectoOJO.- Para los botones es lo mismo pero ahí debemos de poner la propiedad STYLE en Graphical.

Practica N° 21.- 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 -

Page 22: Lenguaje de Programacion Guia I

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.00Enfermeria = 280.00Administración = 270.00Ademas 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 SIDETAl finalizar solo se debe mostrar el monto de la pension.

11.- Realizar el siguiente formulario:

- 22 -

Page 23: Lenguaje de Programacion Guia I

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úmeroAtn Devuelve el arcotangente de un númeroCos Devuelve el coseno de un númeroExp Devuelve el exponencial de un número en base eFix Devuelve la parte entera de un número, redondeando los valores al Siguiente valor superiorHex Devuelve una cadena que representa el valor hexadecimal de un

- 23 -

Page 24: Lenguaje de Programacion Guia I

Lenguaje de Programación I

númeroInt Devuelve la parte entera de un númeroLog Devuelve el logaritmo natural de un número (en base e)Oct Devuelve una cadena de caracteres que representa el valor octalRnd Devuelve un número aleatorio menor que 1 y mayor o igual que 0Sgn 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úmeroSqr Devuelve la raíz cuadrada de un númeroTan Devuelve la tangente de un númeroVal 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 DoubleRandomizeN = 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 -

Page 25: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Text11 = Tan(N)End Sub

Funciones de tratamiento de cadenas de caracteres

Función Descripcion EjemploAsc Devuelve el código ASCII del primer

carácter de una cadenaSintaxis: Asc(“A”) Res: 65

Chr Devuelve el carácter asociado al código ASCII de un número

Sintaxis: chr(65) Res: “A”

Format Formatea una expresión según una formato pasado como parámetro

Sintaxis: format(122,”###.00”)Res: 122.00

InStr Devuelve la posición de la primera ocurrencia de una cadena dentro de otraInstr(dondesebusca,loquesebusca)

Sintaxis: instr(“ABCD”,”C”) Res: 3 devuelve la posición que ocupa C en la cadena ABCD

Lcase Devuelve una cadena con sus caracteres convertidos a minúsculas

Sintaxis: Lcase(“A”) Res: a

Ucase Devuelve una cadena con sus caracteres convertidos a mayúsculas

Sintaxis: Ucase(“a”) Res: A

Left Devuelve un número especificado de caracteres desde la izquierda de una cadena Left(cadena,cantidad)

Sintaxis: Left(“ABCD”,2) Res: AB

Right Devuelve un número especificado de caracteres desde la derecha de una cadena Right(cadena,cantidad)

Sintaxis: Right(“ABCD”,2) Res: CD

Len Devuelve el número de caracteres de una cadena

Sintaxis: Len(“ABCD”)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 posición especificada dentro de otra cadena MID(cadena,posición,cantidad)

Sintaxis: Mid(“ABCD”,3,2)Res: CD

Space Devuelve una cadena formada por un número especificado de espacios en blanco

Sintaxis: “Hola” & space(2)Res: “hola “

StrComp Compara 2 cadenas Strcomp(cad1,cad2)devuelve: –1 : Si cad1< cad2 0 : Si cad1=cad2 1 : Si cad1>cad2

Sintaxis: strcomp(“A”,”A”)Res: 0

- 25 -

Page 26: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Replace Reemplaza una cadenaReplace(cad,buscar,reemplazar)

Sintaxis: Replace(“ABCD”,”C”,”X”)Res: “ABXD” Busca la C y la cambia por la X

Str Devuelve la representación de un número en forma de cadena

Sintaxis: str(122)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 EjemplosDate Devuelve la fecha actual del

sistemaSintaxis: Date Saca la fecha actual

- 26 -

Page 27: Lenguaje de Programacion Guia I

Lenguaje de Programación I

Day Devuelve un número entre 1 y 31 representando el día del mes

Sintaxis: day(“11/01/2004”)Res: 11

Month Devuelve un número entre 1 y 12 representando el mes del año

Sintaxis: Month(“11/01/2004”)Res: 1

Year Devuelve un número entero representando el año

Sintaxis: Year(“11/01/2004”)Res: 2004

WeekDay Devuelve un número que representa el día de la semana empieza de 1.-domingo,2.-Lunes,etc...

Sintaxis: weekday(“11/01/2004”)Res: 1

Now Devuelve la fecha y hora actual del sistema

Sintaxis: nowSaca la fecha y Hora actual

Time Devuelve la hora actual del sistema

Sintaxis: timeSaca 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 especificada (el año, el día,los minutos, etc)Datepart(Intervalo,Fecha)Para este se pone un intervalo:

Valor Descripciónyyyy Añoq Trimestrem Mesy Día del añod Díaw Día de la semanaww Semanah Horan Minutos SegundoEsto tambien se aplica para las funciones Dateadd y Dateiff

Sintaxis: Datepart(“m”,date)Saca el mes actual

DateAdd Devuelve una fecha añadiéndole un cierto intervalo de tiempo especificadoDateAdd(intervalo,cantidad,fecha)

Sintaxis:DateAdd(“d”,3,”01/01/2004”)Res: 04/01/2004

DateDiff Devuelve el número de intervalos Sintaxis:DateDiff(“yyyy”,”01/01/2000”,”01/01/2004”)

- 27 -

Page 28: Lenguaje de Programacion Guia I

Lenguaje de Programación I

de tiempo entre dos fechas especificadasDateDiff(Intervalo,Fecha1,Fecha2)

Res: 4

Ejemplos:Dim LaFecha As Date ' Declara las variables.Dim MsjLaFecha = 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 enfoqueLostfocus.- 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 lostfocusSe 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 = vbRedEnd SubY de ahí dice que al perder el enfoque debe regresar a color blanco ademas de que el texto salga en mayúsculasPrivate 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 -

Page 29: Lenguaje de Programacion Guia I

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 sercomentados. 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 DescripcionvbLeftButton 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 - DeclaracionesDim sw As BooleanPrivate 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 = TrueEnd IfEnd Sub

Private Sub Form_Load()sw = TrueEnd Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then

- 29 -

Page 30: Lenguaje de Programacion Guia I

Lenguaje de Programación I

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

14.-Instrucciones Repetitivas, Sentencia Exit.

1.- FOR.(Para Hasta)Sintaxis:For var=valorinicial to valorfinal step(incremento)

(programacion)Next varEl 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 iNext IVisualize en el formulario los numeros impares del 1 al 99(1,3,4..)For i=1 to 99 step 2

Print INext Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellosDim suma as integer,i as integerSuma=0For I=10 to 99

Print ISuma=Suma + i

Next Print “La suma es “ & suma‘el & concatena2.- DO WHILE.…LOOP.(Hacer mientras) , DO…. LOOP UNTIL(Hacer Hasta)Sintaxis:Do while condicion

(programacion)Loop

Do(programacion)

Loop Until CondicionEjemplos:

- 30 -

Ejemplo:Sumar= 3+5+7+...+81Sm=0For N=3 to 81 Step 3 Sm=Sm+nNext

Page 31: Lenguaje de Programacion Guia I

Lenguaje de Programación I

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

Dim i as integer,suma as integerSuma=0i=10Do while i <= 90

Print ISuma= Suma + ii= i +1

LoopPrint “La suma es “ & suma

Do Loop untilDim i as integer,suma as integerSuma=0i=10Do

Print ISuma= Suma + Ii= i +1

Loop Until i > 90Print “La suma es “ & suma

3.- WHILE..WEND(Hacer Cuando)Sintaxis:While condicion

(progamacion)wendDim i as integer,suma as integerSuma=0i=10while i <= 90

Print ISuma= Suma + ii= i +1

wendPrint “La suma es “ & sumaCon la sentencia while wend, no se podra utilizar la setencia EXIT4.- 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 rojoPrivate Sub CmdCambiar_Click()'Se declara una varibale de tipo ObjectDim 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 formularioFor Each obj In Me.Controls

- 31 -

Page 32: Lenguaje de Programacion Guia I

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 IfNextEnd Sub Sentencia EXITLa 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 forExit Do.- Sale de un DoExit Sub.- Sale de un procedimientoExit 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 90For 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 IfNext

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 -

Page 33: Lenguaje de Programacion Guia I

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 IfNextEnd Sub

Aplicación con Procesos repetitivos.-

Private Sub Cmdhexa_Click()Dim cad$Dim n%

- 33 -

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

Page 34: Lenguaje de Programacion Guia I

Lenguaje de Programación I

n = Val(Text1) cad = ""Do While n <> 0 ‘Hacer mientras n sea diferente a ceror = n Mod 16n = n \ 16If r > 9 Thencad = cad + Chr(55 + r)Elsecad = cad + Str(r)End IfLoopLbr2 = StrReverse(cad)End Sub

Practica N° 31.- 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 -

Page 35: Lenguaje de Programacion Guia I

HOLA

HHOHOLHOLA

HOLAHOLHOH

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)

Page 36: Lenguaje de Programacion Guia I

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 correlativoAdemas 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

Page 37: Lenguaje de Programacion Guia I

Exit Sub ‘Sale del programaEnd IfIf Not IsNumeric(txtcanti) Then MsgBox "Ingrese Cantidad valida", vbCritical, "Mensaje" txtcanti.SetFocus Exit SubEnd IfIf 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 decimalesEnd IfEnd SubPrivate Sub cmdnuevo_Click()txtprecio = ""txtcanti = ""lblmonto = ""txtprecio.SetFocusEnd SubPrivate Sub cmdsalir_Click() EndEnd SubPrivate 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 Sub2.- 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 formularioAdemas se debe cambiar algunas de sus propiedades mediante checkbox

Private Sub chkcur_Click()

Page 38: Lenguaje de Programacion Guia I

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.EnabledEnd Sub

Private Sub chkneg_Click()txtcad.Font.Bold = Not txtcad.Font.BoldEnd Sub

Private Sub chksub_Click()txtcad.Font.Underline = Not txtcad.Font.UnderlineEnd SubPrivate Sub chkvis_Click()txtcad.Visible = Not txtcad.VisibleEnd SubPrivate 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 = numEnd IfEnd SubPrivate Sub txtcad_Change()Me.Caption = txtcad.TextEnd SubPrivate 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 SelectEnd Sub

Page 39: Lenguaje de Programacion Guia I

15.- Barras de desplazamiento (Scroll Bars)

En este tipo de control las propiedades más importantes son Max y Min, quedeterminan el rango en el que está incluido su valor, LargeChange y SmallChangeque determinan lo que se modifica su valor al clicar en la barra o en el botón con laflecha respectivamente y Value que determina el valor actual de la barra dedesplazamiento. Las barras de desplazamiento no tienen propiedad Caption.El evento que se programa habitualmente es Change, que se activa cuando labarra de desplazamiento modifica su valor. Todo lo comentado en este apartado escomú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 controlSlider, utilizado en los paneles de control de Windows, que tiene una función similar.

16.- Función RGBEsta 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 PintarText4.BackColor = RGB(Val(Text1), Val(Text2), Val(Text3))

End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then VScroll1.Value = Val(Text1)End IfEnd SubPrivate Sub Text2_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then VScroll2.Value = Val(Text2)End IfEnd SubPrivate Sub Text3_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then VScroll3.Value = Val(Text3)

Page 40: Lenguaje de Programacion Guia I

End IfEnd SubPrivate Sub VScroll1_Change()Text1 = VScroll1.ValueCall PintarEnd SubPrivate Sub VScroll2_Change()Text2 = VScroll2.ValueCall PintarEnd SubPrivate Sub VScroll3_Change()Text3 = VScroll3.ValueCall PintarEnd 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$

Page 41: Lenguaje de Programacion Guia I

Private Sub Form_Load()cad = "Programa hecho por Fulano "Me.Caption = cadEnd 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 + 100If ImgAvion.Left > Me.ScaleWidth Then ImgAvion.Left = 0End IfEnd Sub

18.- CONTROLES GRÁFICOS

Control lineEs 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. Laspropiedades 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 shapeEste 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ásinteresantes 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

Page 42: Lenguaje de Programacion Guia I

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 ystretch. 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 elcontenido 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 ocambiando 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 propiedadpicture en modo de diseño, como se ha visto anteriormente. Una segunda forma, utilizable tambiénen 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.picturey 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.

Page 43: Lenguaje de Programacion Guia I

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 alcargar 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.

Page 44: Lenguaje de Programacion Guia I

19.- METODOS GRÁFICOS.-

Dibujo de puntos: Método PsetEl 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), colordonde: 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 lineEl 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 seincluye, la caja rectangular se rellena (Fill) con el mismo color del contorno. Si se omitela caja se rellena con las propiedades FillColor y FillStyle del objeto en el que sedibuja.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 DrawStyledeterminan cómo se dibujan las líneas rectas o curvas

Page 45: Lenguaje de Programacion Guia I

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 rojoMe.Line (100, 100)-(400, 400), vbRed ‘Con esta sentencia se dibujara una linea

Dibujo de circunferencias, arcos y elipses: método circleEste método permite dibujar circunferencias, elipses y arcos. Su forma general es la siguiente:object.Circle (x, y), radius, color, start, end, aspectdonde 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 -2y 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 unacircunferencia. Cuando aspect es distinto de 1.0, el parámetro radius define el mayorde 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 valordel 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áficosExisten algunos otros métodos gráficos de interés. Por ejemplo, el método Cls cuya forma generalesobject.ClsEjemplo: form1.Clsborra 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.

Page 46: Lenguaje de Programacion Guia I

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 = Xlbly = YEnd SubPrivate Sub HScroll1_Change()Me.DrawWidth = HScroll1.ValueEnd SubPrivate 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:

Page 47: Lenguaje de Programacion Guia I

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 elementoNOTA: 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, posiciondonde 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 2lstname.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 clearEjemplo: 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

Page 48: Lenguaje de Programacion Guia I

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 BoxUn 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 semuestra 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 List2i = 0Do While i < List1.ListCount If List1.Selected(i) = True Then

Page 49: Lenguaje de Programacion Guia I

List2.AddItem List1.List(i) List1.RemoveItem (i) Else i = i + 1 End IfLoopEnd SubPrivate Sub CmdGenerar_Click() ‘Genera Numero aleatorios y los guarda en la Lista1RandomizeFor i = 1 To 10 num = CInt(Rnd * 100) List1.AddItem numNextEnd SubPrivate Sub cmdpasalist1_Click()‘Pasa todos los elementos del List2 al List1For i = 0 To List2.ListCount - 1 List1.AddItem List2.List(i)NextList2.ClearEnd SubPrivate Sub cmdpasalist2_Click()‘Pasa todos los elementos del List1 al List2For i = 0 To List1.ListCount - 1 List2.AddItem List1.List(i)NextList1.ClearEnd SubNOTA: No se ha programado el Boton para pasar los elementos seleccionados del List2 al List1Para que se muestre el Check en la Lista se debe poner en la propiedad STYLE =1 CheckBoX

21.- ARREGLOSUn 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 formacontigua 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.

Page 50: Lenguaje de Programacion Guia I

Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución delprograma.

Arrays estáticosLa 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óduloutilizando la sentencia Public.La declaración de un array a nivel del módulo o del formulario se hace en la sección dedeclaraciones 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 Staticdentro del propio procedimiento.A continuación se presentan algunos ejemplos:Dim vector(19) As DoubleEste 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 IntegerEste 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 StringEl 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ámicosEl 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. Lasentencia 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 Integermás tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica acontinuación:

Page 51: Lenguaje de Programacion Guia I

Sub Calculo( )...ReDim Matriz(F, C)...End SubCada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array sepierden (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.

Page 52: Lenguaje de Programacion Guia I

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,..etcSi 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-DeclaracionesDim 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 SWFor i = 0 To 19 txtfrase(i).Visible = swNextEnd SubSub limpia()For i = 0 To 19 txtfrase(i).Text = "*"NextEnd SubPrivate Sub CmdJugar_Click()Image1.Picture = Nothing 'Para que no se muestre nada en el ImageCall visibilidad(False)Call limpiaRandomizenum = CInt(Rnd() * 19)cad = vector(num)For i = 1 To Len(cad) txtfrase(i - 1) = Mid(cad, i, 1)NextTxtletra.Enabled = TrueCmdOk.Enabled = Truelblmen2.Visible = FalseLblMen = "La frase tiene " & Len(cad) & " palabras"lblmen2 = "La frase es " & UCase(cad)cont = 1ACIERTO = 0COLOR = 1Txtletra.SetFocusEnd SubPrivate Sub CmdOk_Click()ESTA = FalseFor i = 0 To 19

Page 53: Lenguaje de Programacion Guia I

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 IfNextIf 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 IfEnd IfTxtletra = ""Txtletra.SetFocusIf ACIERTO >= Len(cad) Then MsgBox "Bien lo hiciste", vbInformation, "Mensaje" lblmen2.Visible = True Txtletra.Enabled = False CmdOk.Enabled = False Timer1.Enabled = TrueEnd IfEnd SubPrivate Sub Form_Load()Call visibilidad(False)Call limpiaCOLOR = 1vector(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 FormularioTW = Me.Width 'Se guarda el ancho del formularioTH = Me.Height 'Se guarda el alto del formularioEnd SubPrivate Sub Timer1_Timer()If COLOR > 30 Then Me.BackColor = COLORORI Me.Width = TW

Page 54: Lenguaje de Programacion Guia I

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 + 1End IfEnd SubPrivate Sub Txtletra_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then CmdOk.SetFocusEnd IfEnd Sub

Arreglo de Controles.-

Private Sub Cmdstop_Click()Timer1.Enabled = falseEnd Sub

Private Sub CmdStart_Click()Timer1.Enabled = TrueCarro(0).Left = 0Carro(1).Left = 0End Sub

Lbmeta

Control ImageNombre Carro dar el mismo nombre a los dos

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

Page 55: Lenguaje de Programacion Guia I

Private Sub Timer1_Timer()Dim Nro As IntegerRandomizeDo Nro = Int(Rnd * 10)Loop Until (Nro = 1) Or (Nro = 0)

Carro(Nro).Left = Carro(Nro).Left + 100If Carro(Nro).Left > LBmeta.Left Then Timer1.Enabled = False MsgBox "Carro " & Nro + 1 & " Ha Ganado" End IfEnd 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.

PropiedadesRows.- 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 columnaText .- 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)

Page 56: Lenguaje de Programacion Guia I

Private Sub Command1_Click()’Boton para hallar el promedioDim suma#suma = 0For fil = 1 To 12 suma = suma + CDbl(Tabla.TextMatrix(fil, 1))NextLabel1 = "Total ventas es: " & sumaEnd SubPrivate Sub Form_Load()Tabla.Rows = 13Tabla.Cols = 3

Tabla.FixedCols = 0‘Primero los titulosTabla.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")NextEnd Sub‘’’Si la venta es mayor a 500 en la otra columna debe salir el mensaje “Alto” sino “Bajo”

Page 57: Lenguaje de Programacion Guia I

Private Sub Tabla_KeyDown(KeyCode As Integer, Shift As Integer)If Tabla.Col = 1 Then ‘Solo se podra editar la columna de VentasSelect 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 = 1End SelectEnd IfEnd 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 MorenoPrivate Sub CmdNuevo_Click()TxtMonto.Text = ""TXTMes = ""OPM(0) = False: OPM(1) = FalseGrid1.ClearGrid1.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) = 1800TXTMONto.SetFocusEnd SubPrivate Sub CmdSalir_Click()

EndEnd SubPrivate Sub Form_Activate()

Call CmdNuevo_Click

Page 58: Lenguaje de Programacion Guia I

End SubPrivate Sub OPM_Click(Index As Integer)Dim TASA As SingleDim Interes#, Vactual#, Mes%Dim FE As DateSelect Case IndexCase 0: TASA = 0.02Case 1: TASA = 0.05End SelectFE = DateGrid1.Rows = Val(TXTMes) + 1For Mes = 1 To Val(TXTMes)FE = FE + 30Interes = Val(TXTMONto) * TASA * MesVactual = 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")NextEnd Sub

Private Sub SpinButton1_Change()TXTMes = SpinButton1.ValueEnd Sub

Private Sub TXTMON_KeyPress(KeyAscii As Integer)Select Case KeyAsciiCase 13 TXTMes.SetFocusCase 48 To 57, 46, 8Case Else KeyAscii = 0End Select

Page 59: Lenguaje de Programacion Guia I

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:

Page 60: Lenguaje de Programacion Guia I

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.

Page 61: Lenguaje de Programacion Guia I

- 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 * 2End FunctionEn 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=10NN = doble(N)

Page 62: Lenguaje de Programacion Guia I

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 NDiferencia entre BYVAL,BYREF y PARAMARRAYEjemplo BYVAL:Private Sub Command1_Click()num = 10MsgBox 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 " & nEnd FunctionObserven 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 = 10MsgBox 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 " & nEnd FunctionEl 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 = 2b = 3c = 4d = 24MsgBox mayor(a, b, c, d)End Sub

Public Function mayor(ParamArray arreglo()) As StringDim m1%, m2%m1 = IIf(arreglo(0) > arreglo(1), arreglo(0), arreglo(1))

Page 63: Lenguaje de Programacion Guia I

m2 = IIf(arreglo(2) > arreglo(3), arreglo(2), arreglo(3))mayor = "El mayor es " & IIf(m1 > m2, m1, m2)End FunctionNo 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 sucesivamenteEntonces 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 elementoAhora haremos el mismo ejemplo pero para 10 numerosPrivate Sub Command1_Click()a = 2b = 3c = 4d = 24e = 2f = 3g = 4h = 24i = 99j = 32MsgBox mayor(a, b, c, d, e, f, g, h, i, j)End Sub

Public Function mayor(ParamArray arreglo()) As StringDim vi%, vf%, xmayor%xmayor = 0vi = LBound(arreglo) 'Valor minimo del arreglo en este caso 0vf = UBound(arreglo) 'Valor maximo del arreglo en este caso 9For i = vi To vf If arreglo(i) > xmayor Then xmayor = arreglo(i) End IfNextmayor = "El mayor es " + CStr(xmayor)'Mayor ="El mayor es " & xmayor tambien puede ser de esta maneraEnd Function

Page 64: Lenguaje de Programacion Guia I

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 formularioEn este caso el procedimiento se hara en el formulario.Private Sub Command1_Click()

Call limpia ‘End Sub

Sub limpia()Dim obj As ObjectFor Each obj In Me.Controls If TypeOf obj Is TextBox Then obj.Text = "" End IfNextEnd SubPara llamar a un procedimiento se utiliza la palabra reservada Call en este caso call LimpiaEl procedimiento LIMPIA blanquea las cajas de textoAhora 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 SubNoten 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 ObjectFor Each obj In xform.Controls If TypeOf obj Is TextBox Then obj.Text = "" End IfNextEnd SubAhora 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.

Page 65: Lenguaje de Programacion Guia I

Practica 5

Funciones1.- Ingrese un numero y visualize “Es Perfecto” o “No es Perfecto” dependiendo de la condicion2.- Ingrese una cadena y visualícelo en Mayúscula sin usar UCASE3.- Ingrese una cadena y visualícelo en Minuscula sin usar LCASE4.- Ingrese 7 numeros y calcule el menor de ellos5.- Ingrese 7 numeros y calcule el mayor de ellos6.- 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 selecciono7.- Ingrese la fecha de nacimiento de una persona y muestre la edad exacta es decir Años, mese y dias8.- Ingrese un numero y muestre los numeros primos anteriores a este en un label9.- Ingrese una cadena y visualícelo en forma invertida sin usar StrReverse10.- Ingrese una cadena y luego encriptelo.11.- Ingrese un numero y muéstrelo en letras ejemplo: 123 seria “Ciento veintitrés”(Utilize funcion recursiva)Procedimientos12.- 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 controles14.- 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 repetirUna 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 integerNom as String * 15

End TypeEsto 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 ponerDim Alu(1 to 10) as alumnoPara acceder a los elemntos seria : Alu(1).Cod=100,Alu(1).Nom =”Pedro”.

Page 66: Lenguaje de Programacion Guia I

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 0001b) Los botones de desplazamiento es para navegar en los registros ya ingresadosc) 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 ControlOpc(0)Opc(1)Opc(2)Para cargo

LNRO

Los botones de desplazamientoCmdpri,Cmdant, CmdnextCmdult

Page 67: Lenguaje de Programacion Guia I

Paso 1.- Agregar ModuloType Empleado Cod As String * 4 Nom As String * 25 Sbas As Double Car As String * 10End TypePublic Vreg(1 To 50) As EmpleadoPublic Nr As IntegerDeclaracion GeneralDim tcar As String * 15Dim CR As Integer ‘Variable para desplazamiento de registrosPrivate Sub CmdAnt_Click()If Nr > 1 ThenlimpiaCR = CR - 1If CR = 0 Then MsgBox ("Estas en el Primer registro") CR = 1 Beep End If Muestra (CR)CmdAnula.Enabled = TrueCmdModi.Enabled = TrueEnd IfEnd SubPrivate Sub CmdNext_Click()If Nr > 1 ThenlimpiaCR = CR + 1If CR = Nr Then MsgBox ("Estas en el ultimo") CR = Nr - 1End If Muestra (CR)End IfEnd SubPrivate Sub CmdPri_Click()limpiaCR = 1Muestra (CR)CmdAnula.Enabled = TrueCmdModi.Enabled = TrueEnd SubPrivate Sub Cmdult_Click()If Nr > 1 ThenlimpiaCR = Nr - 1

Muestra (CR)CmdAnula.Enabled = TrueCmdModi.Enabled = TrueEnd IfEnd SubPrivate Sub Combo1_Click()Dim I%I = Combo1.ListIndex + 1If I > 0 Then Lnom.Caption = Vreg(I).Nom Lsbas.Caption = Vreg(I).Sbas Lcar.Caption = Vreg(I).CarEnd IfEnd SubPrivate Sub Optc_Click(Index As Integer)tcar = Optc(Index).Caption Cmdgraba.SetFocus End SubPublic Sub limpia()Dim obj As ObjectFor Each obj In Me.ControlsIf TypeOf obj Is TextBox Then obj = ""If TypeOf obj Is OptionButton Then obj.Value = FalseNextText2.SetFocusEnd SubPrivate Sub Text2_Change()Cmdgraba.Enabled = Len(Text2) > 0If Len(Text2) > 20 Then Text3.SetFocus End IfEnd SubPublic Sub header()With Grid1.TextMatrix(0, 0) = "Codigo".TextMatrix(0, 1) = "Nombres".TextMatrix(0, 2) = "Cargo".TextMatrix(0, 3) = "Sueldo"End WithEnd Sub

Page 68: Lenguaje de Programacion Guia I

Private Sub CmdAnula_Click()Dim I%, b%b = Nr - 1For I = CR To b - 1Vreg(I) = Vreg(I + 1)Next INr = Nr - 1If Nr > 1 ThenListadoMuestra (CR)End IfEnd SubPrivate Sub CmdGraba_Click()Vreg(Nr).Cod = Text1.TextVreg(Nr).Nom = Text2.TextVreg(Nr).Sbas = Val(Text3.Text)Vreg(Nr).Car = tcarCombo1.AddItem Vreg(Nr).CodListadolimpiaNr = Nr + 1Text1.Text = Format(Nr, "0000")Lnro.Caption = Str(Nr)Cmdgraba.Enabled = 0Text2.SetFocusEnd SubPrivate Sub CmdNuevo_Click()limpiaLnro.Caption = Str(Nr)Text1.Text = Format(Nr, "0000")CmdAnula.Enabled = FalseCmdModi.Enabled = FalseEnd SubPrivate Sub CmdSalir_Click()EndEnd SubPrivate Sub Form_Activate()Nr = 1: CR = 1Lnro.Caption = Str(Nr)limpia Text1.Text = Format(Nr, "0000") Lfec.Caption = "Fecha :" & Format(Now, "dd/mm/yy") Text2.SetFocusEnd Sub

Public Sub Muestra(Ind As Integer)Text1.Text = Vreg(Ind).CodText2.Text = Vreg(Ind).NomText3.Text = Str(Vreg(Ind).Sbas)Select Case Left(Vreg(Ind).Car, 1)Case "A": Optc(0) = 1Case "S": Optc(1) = 1

Case "O": Optc(2) = 1End SelectLnro.Caption = Str(Ind)End Sub

Private Sub Tdias_KeyPress(KeyAscii As Integer)Dim fecha, X As VariantDim diasem As String * 15Dim sueldo, vaca As Single Dim c# If KeyAscii = 13 Then fecha = Now + Val(Tdias.Text) ' x = CDate(fecha) Select Case Weekday(fecha) Case 1: diasem = "Domingo" Case 2: diasem = "lunes" Case 3: diasem = "Martes" Case 4: diasem = "Miercoles" Case 5: diasem = "jueves" Case 6: diasem = "viernes" Case 7: diasem = "Sabado" End Select Lfecha.Caption = Format$(fecha, "dd/mm/yy") c = Str$(Val(Lsbas.Caption) * Val(Tdias.Text) / 30) LVac.Caption = Format$(c, "###,###.#0") Ldia.Caption = diasem If Weekday(fecha) = 1 Then Ldia.ForeColor = QBColor(4) Else Ldia.ForeColor = QBColor(1) End If End IfEnd Sub

Public Sub Listado()Grid1.Rows = Nr + 1Grid1.Cols = 4Grid1.Row = 0Call headerFor I = 1 To NrWith Grid1.TextMatrix(I, 0) = Vreg(I).Cod.TextMatrix(I, 1) = Vreg(I).Nom.TextMatrix(I, 2) = Vreg(I).Car.TextMatrix(I, 3) = Vreg(I).Sbas End WithNext IEnd Sub

Page 69: Lenguaje de Programacion Guia I

Visual Basic I 69 Idat

Page 70: Lenguaje de Programacion Guia I

Visual Basic I 70 Idat

Ejercicio:Aplicaciones con registros

Page 71: Lenguaje de Programacion Guia I

Visual Basic I 71 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 Productosb) 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 actualizadod) En la lista de productos, puede estar ordenado por: Descripción, código y stock.

Ejemplo:

Page 72: Lenguaje de Programacion Guia I

Visual Basic I 72 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 registroConforme 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 funcionesOtra 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 CAPTIONEn 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 BooleanEnd TypePublic r() As Alumno 'Aqui la variable R que sera el arreglo como ven es dinamicoSub 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 MAINEnd SubNOTA: 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:GeneraLDim Si_Nuevo%Sub ActivaControles(ByVal Modo As Boolean) 'Para activar los botones y texto(FRAME1) Frame1.Enabled = Modo

Page 73: Lenguaje de Programacion Guia I

Visual Basic I 73 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 ModoEnd SubSub Limpia() txtcod = "" txtnom = "" Option1.Value = TrueEnd SubFunction 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 = TrueEnd FunctionSub 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") NextEnd SubPrivate Sub CmdModificar_Click() Si_Nuevo = 3 Call ActivaControles(True)End SubPrivate Sub CmdNuevo_Click()

Page 74: Lenguaje de Programacion Guia I

Visual Basic I 74 Idat

Dim p%If Si_Nuevo = 1 Then Call ActivaControles(True) Call Limpia txtcod.SetFocus Si_Nuevo = 2Else 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 IfEnd IfEnd SubPrivate Sub CmdSalir_Click()If Si_Nuevo > 1 Then Si_Nuevo = 1 Call ActivaControles(False)Else EndEnd IfEnd SubPrivate Sub Form_Load()Call ActivaControles(False)Si_Nuevo = 1Tabla.TextMatrix(0, 0) = "Codigo"Tabla.TextMatrix(0, 1) = "Nombre"Tabla.TextMatrix(0, 2) = "Sexo"End SubPrivate Sub Tabla_RowColChange() 'Muestra los datos del grid a los textostxtcod = 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 = TrueEnd IfEnd Sub

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

Page 75: Lenguaje de Programacion Guia I

Visual Basic I 75 Idat

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

Ejemplo de Presentacion de Un SistemaFormulario 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 1TOOLBAR.- 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

Page 76: Lenguaje de Programacion Guia I

Visual Basic I 76 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

Page 77: Lenguaje de Programacion Guia I

Visual Basic I 77 Idat

Para que hacer esto???? Simplemente para jalar las imágenes de este imagelist al toolbarUna 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

Page 78: Lenguaje de Programacion Guia I

Visual Basic I 78 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

Page 79: Lenguaje de Programacion Guia I

Visual Basic I 79 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 queremosPor ejemplo(caps-mayusculas,num-teclado numerico, ins-la tecla insert,date-saca la fecha actual,etc.)

Page 80: Lenguaje de Programacion Guia I

Visual Basic I 80 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 sbrTEXTEl 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.IndexSelect Case NCase 1: 'Se escogio Pregunta1

Page 81: Lenguaje de Programacion Guia I

Visual Basic I 81 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 SelectCase 2: ' Se escogio Pregunta2Case 3: ' Se escogio Pregunta3Case 4: ' Se escogio Pregunta4End SelectEnd SubY 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 formulario1Private Sub Form_Load()

MDIForm1.StatusBar1.Panels(2).Text = "Estas en el formulario 1"‘Esto sera el panel 2 del MDI

End SubDonde 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-ComponentesY escogemos ShockWaveFlash

Page 82: Lenguaje de Programacion Guia I

Visual Basic I 82 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 progressbarMIN.- valor minimo que se le da al progressbarVALUE .- 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 entrarProgressBar1.Min = 1ProgressBar1.Max = 100ProgressBar1.Value = ProgressBar1.MinTimer1.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 FALSEEnd Sub

Private Sub Form_Load()ruta = App.Path + "\snakes.swf"ShockwaveFlash1.Movie = rutaEnd 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"

Page 83: Lenguaje de Programacion Guia I

Visual Basic I 83 Idat

FrmPrincipal.Show Unload Me Else Label1 = "Cargando configuracion al " & ProgressBar1.Value & "%" ProgressBar1.Value = ProgressBar1.Value + 1End 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 carpetaEjemplo: Mkdir(“c:\nueva carpeta”) ‘Se creara un carpeta

ChDir.- .- Cambia la ruta actual.Ejemplo: ChDir(“d:\”)

RmDir .- Elimina una carpetaEjemplo: RmDir(“c:\nueva carpeta”) ‘Se creara un carpeta

FILECOPY Copia un archivo.

Page 84: Lenguaje de Programacion Guia I

Visual Basic I 84 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.

Page 85: Lenguaje de Programacion Guia I

Visual Basic I 85 Idat

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

KILL.- Elimina un ArchivoEjemplo : 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_nuevaEjemplo:Dim NombreViejo, NombreNuevoNombreViejo = "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

GeneralDim Fso As New FileSystemObject ‘Debemos primero irnos a referencias –Microsoft ‘Scripting Runtime no se olvidenDim cont%

Sub explora(ByVal raiz$) ‘Este procedimiento es recursivoDim carpeta As Folder, subcarpeta As FolderSet 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 llamarNextEnd Sub

Page 86: Lenguaje de Programacion Guia I

Visual Basic I 86 Idat

Private Sub Command1_Click()cont = 0Dim unidad As Drive ‘Una variable de tipo driveFor 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 IfNextMsgBox "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:

Page 87: Lenguaje de Programacion Guia I

Visual Basic I 87 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 :

PathDevuelve 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 DirListBoxpathname 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

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)

Page 88: Lenguaje de Programacion Guia I

Visual Basic I 88 Idat

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

PatternDevuelve 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 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.

Page 89: Lenguaje de Programacion Guia I

Visual Basic I 89 Idat

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

Private Sub cmdeliminar_Click()Kill File1.Path & "\" & File1.FileNameFile1.RefreshEnd 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.RefreshEnd IfEnd Sub

Private Sub Dir1_Change()File1.Path = Dir1.Path 'Establece la ruta al objeto FileEnd SubPrivate Sub Drive1_Change()On Error GoTo xerrDir1.Path = Drive1.Drive 'Establece la ruta al objeto DirExit Subxerr:MsgBox "No esta lista la unidad", vbExclamation, "Mensaje"End Sub

Private Sub File1_Click()Label1 = File1.Path & "\" & File1.FileNameEnd Sub

27.- COMMOND DIALOG

El control CommonDialog es un control personalizado (Microsoft CommonDialog Control

Page 90: Lenguaje de Programacion Guia I

Visual Basic I 90 Idat

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 diseño mas que con un simple icono :

El cuadro de diálogo, CommonDialog se 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 fuenteCD1.FontSize Indica el tamaño de la fuenteCD1.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 "

Page 91: Lenguaje de Programacion Guia I

Visual Basic I 91 Idat

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) = 255el verde puro sería: Hex(00FF00) = 652280el 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 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.

Page 92: Lenguaje de Programacion Guia I

Visual Basic I 92 Idat

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 Gris1 Azul 9 Azul claro2 Verde 10 Verde claro3 Aguamarina 11 Aguamarina claro4 Rojo 12 Rojo claro5 Fucsia 13 Fucsia claro6 Amarillo 14 Amarillo claro7 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

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

Page 93: Lenguaje de Programacion Guia I

Visual Basic I 93 Idat

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

Page 94: Lenguaje de Programacion Guia I

Visual Basic I 94 Idat

CommonDialog (CmdLG)

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.

Private Sub cmd_Click(Index As Integer)With cmdlgSelect Case IndexCase 0 .ShowOpenCase 1.Flags = cdlCFBoth Or cdlCFEffects.ShowFontLabel1.AutoSize = TrueLabel1.FontSize = .FontSizeLabel1.FontName = .FontNameCase 2 .ShowColor Me.BackColor = .Color End SelectEnd WithEnd Sub

Page 95: Lenguaje de Programacion Guia I

Visual Basic I 95 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 :

Page 96: Lenguaje de Programacion Guia I

Visual Basic I 96 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:

Page 97: Lenguaje de Programacion Guia I

Visual Basic I 97 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 Recordsetrs.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ónadOpenForwardOnly 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

Page 98: Lenguaje de Programacion Guia I

Visual Basic I 98 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ónadLockReadOnly 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,3En 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 nomRs(0) Rs.Fields(0)Rs!codharí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 nomMetodos del Recordset.- Para mover la variable de tipo Recordset he aquí los métodos que pueden ser empleados:

Page 99: Lenguaje de Programacion Guia I

Visual Basic I 99 Idat

Método DescripciónMoveFirst Posiciona el cursor en el primer registroMoveLast Posiciona el cursor en el último registroMoveNext Avanza el cursor en un registroMovePrevious Retrasa el cursor en un registro

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

Propiedad DescripciónAbsolutePosition 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ónAddNew Crea un nuevo registro en el Recordset. Sólo será

insertado en la tabla cuando se aplique el método Update. Ejemplo:

rs.AddNewrs(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

Page 100: Lenguaje de Programacion Guia I

Visual Basic I 100 Idat

MoveFirst Nos lleva al primer registro del Recorset.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 propiedadesFilter .- Sirve para filtrar la variable de tipo recordsetRs.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 productoDES_PROD TEXTO 35 DescripcionPRE_PROD NUMERICO DOBLE Precio unitarioSTK_PROD NUMERICO ENTERO StockCOD_CAT TEXTO 3 Categoria

Page 101: Lenguaje de Programacion Guia I

Visual Basic I 101 Idat

Considerar el Siguiente formulario

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.ConnectionGlobal Rs As ADODB.Recordset‘Conectandose a un origen de datosPublic 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

End Sub

CmdCone

CmdDescon

CmdMover

Nam

Name :

Page 102: Lenguaje de Programacion Guia I

Visual Basic I 102 Idat

‘Procedimiento para desconectarse de un origen de datosPublic Sub Desconectar() Cn.Close Set Cn = Nothing EndEnd Sub

‘Cargar registros de la consultaPublic 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 FORMULARIOPublic Sub limpiar() Dim x As Object

For Each x In Form1.Controls If TypeOf x Is TextBox Then x.Text = "" x.Enabled = False End IfNext 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 ConectarCall CargarRecordsetCall MostrarDatos

End Sub

Private Sub CmdDesconectar_Click()Call Desconectar

End Sub

Private Sub CmdMover_Click(Index As Integer) Select Case Index

Page 103: Lenguaje de Programacion Guia I

Visual Basic I 103 Idat

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 SelectEnd WithCall MostrarDatosEnd 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 MODULOIgual al Modulo anterior

CODIGO EN EL FORMULARIOPublic Sub Barra_Progreso()‘Muestra la barra de progreso Dim i As Integer For i = 0 To 100

ProgressBar1.Value = i Next iEnd Sub

Page 104: Lenguaje de Programacion Guia I

Visual Basic I 104 Idat

'Procedimiento que limpia los Cuadros de TextoPublic Sub Limpiar() Dim X As Object For Each X In Form1.Controls If TypeOf X Is TextBox Then X.Text = ""

End If Next XEnd Sub

'Procedimiento que deshabilita los cuadros'de TextoPublic Sub Deshabilitar() TxtCod_Prod.Enabled = False TxtDes_Prod.Enabled = False TxtPre_Prod.Enabled = False TxtStk_Prod.Enabled = False DataCombo1.Enabled = FalseEnd 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 productosPublic 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.TextEnd Sub

'Procedimiento que Muestra_DatosPublic 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 CmdGuardar.Enabled = False CmdNuevo.SetFocus SSTab1.Tab = 0End Sub

Page 105: Lenguaje de Programacion Guia I

Visual Basic I 105 Idat

End SubPrivate Sub Form_Load()

Call ConectarSet Rs = New ADODB.RecordsetRs.CursorLocation = adUseClientRs.ActiveConnection = CnRs.CursorType = adOpenDynamicRs.LockType = adLockBatchOptimisticRs.Open "PRODUCTOS"‘se puede minimizar la operación de la siguiente manera'Rs.Open "PRODUCTOS", Cn, adOpenDynamic, adLockBatchOptimisticSet Rt = New ADODB.RecordsetRt.Open "CATEGORIAS", Cn, adOpenStatic, adLockReadOnlySet DataCombo1.RowSource = Rt

DataCombo1.ListField = "COD_CAT"DataCombo1.BoundColumn = "COD_CAT"

End Sub

*********************************************************************'Procedimiento que permite Generar el Código'Un Nuevo registroPrivate Sub CmdNuevo_Click()Dim cod As IntegerIf 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 IfCall HabilitarTxtCod_Prod.Enabled = FalseCmdGuardar.Enabled = TrueTxtDes_Prod.SetFocusEnd Sub*********************************************************************‘Guardar el RegistroPrivate 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

Page 106: Lenguaje de Programacion Guia I

Visual Basic I 106 Idat

GUARDARERROR: MsgBox Err.Number & ":" & Err.Description, 16, "Mensaje" Resume nextEnd Sub

*********************************************************************Private Sub CmdBuscar_Click()‘Localizar un registroDim codbus As String * 4Rs.MoveFirstcodbus = 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 LimpiarElse Call MostrarEnd If

End Sub

*********************************************************************Private Sub CmdEditar_Click()'Modificar los datos del campoDim Rpta As IntegerDim codbus As String * 4Rs.MoveFirstcodbus = 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 LimpiarElse Call Mostrar Call Habilitar TxtCod_Prod.SetFocusEnd If

End Sub*********************************************************************Private Sub CmdActualizar_Click()On Error GoTo ERRORACTUALIZARIf MsgBox("Seguro de Actualizar", 4 + 32, "Actualizar") = vbYes Then Call Guardar Rs.UpdateBatch MsgBox "Registro Actualizado"

Page 107: Lenguaje de Programacion Guia I

Visual Basic I 107 Idat

CmdActualizar.Enabled = TrueEnd IfExit SubERRORACTUALIZAR: 'ETIQUETA DE ERROR MsgBox Err.Number & ":" & Err.Description, 16, "ERROR" Resume NextEnd Sub

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

Private Sub

DataCombo2_Click(Area As Integer)Dim Dato As StringProgressBar1.Value = 0If Area > 0 Then Call Barra_Progreso Rp.MoveFirst

Page 108: Lenguaje de Programacion Guia I

Visual Basic I 108 Idat

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") Exit SubEnd IfEnd Sub

Private Sub SSTab1_Click(PreviousTab As Integer)Nopc = SSTab1.TabSelect 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 SelectEnd Sub

'Procedimiento que valida el precioPrivate Sub TxtPre_Prod_LostFocus()If Not IsNumeric(TxtPre_Prod) Then MsgBox "Error dato no numerico" TxtPre_Prod = 0: TxtPre_Prod.SetFocusEnd IfEnd 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ñasRegistrar.- En esta parte se debera realizar un mantenimiento a la tabla alumnoContaremos con controles como Txtcod, Txtnom, Option1, Option2, CboFoto y DataGrid1

Page 109: Lenguaje de Programacion Guia I

Visual Basic I 109 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 errorPara 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.0Tambien 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

Page 110: Lenguaje de Programacion Guia I

Visual Basic I 110 Idat

La programacion seria:Primero en un modulo debemos poner:Public cn$ ‘Cn es publica por lo tanto sera reconocida en todo el proyectoSub main() cn = "Provider=Microsoft.Jet.Oledb.4.0;data Source=” & app.path &”\BDIDAT.mdb” FrmMant.ShowEnd SubSe 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.RecordsetDim 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 ModoEnd SubEste 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

Page 111: Lenguaje de Programacion Guia I

Visual Basic I 111 Idat

el mismo boton lo mismo sucede con Cancelar y Salir

Sub Limpia() txtcod = "" txtnom = "" Option1.Value = True CboFoto.Text = "" Image1.Picture = NothingEnd 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 = TrueEnd 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 ImageEnd Sub

Private Sub CmdEliminar_Click() rs.Delete ‘elimina un registroEnd Sub

Private Sub CmdModificar_Click() Si_Nuevo = 3 Call ActivaControles(True)End Sub

Page 112: Lenguaje de Programacion Guia I

Visual Basic I 112 Idat

Private Sub CmdNuevo_Click()Dim p%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 IfEnd IfEnd 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 EndEnd IfEnd Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)On Error GoTo xerr ‘Pasa los datos del grid a los textostxtcod = DataGrid1.Columns(0).Texttxtnom = DataGrid1.Columns(1).TextIf DataGrid1.Columns(2).Text = "M" Then Option1.Value = True Else Option2.Value = TrueEnd IfCboFoto.Text = DataGrid1.Columns(3)Call CboFoto_Click ‘Se llama a lo que se programo en el comboxerr:End Sub

Page 113: Lenguaje de Programacion Guia I

Visual Basic I 113 Idat

Private Sub Form_Load()Call ActivaControles(False)Si_Nuevo = 1

rs.CursorLocation = adUseClientrs.Open "Alumno", cn, adOpenDynamic, adLockOptimisticSet DataGrid1.DataSource = rsEnd 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.RequeryEnd IfEnd SubConsulta x CodigoPrivate 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 IfEnd IfEnd SubConsulta x SexoPrivate Sub CmdOk_Click() ‘Este boton es de la pestaña de Consulta X SexoIf Op1.Value Then rs.Filter = "sexo='M'" Else rs.Filter = "sexo='F'"End IfSet DataGrid2.DataSource = rs‘Se aplica el filter y se muestra en el grid

Page 114: Lenguaje de Programacion Guia I

Visual Basic I 114 Idat

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.