Descargado de www.tutomundi.org INDICE 1.- Caracteristicas generales de VB. 2.- Entorno de trabajo. Barra de herramientas,explorador de proyectos,etc. 3.- Objetos en VB. 4.- Controles label,textbox,commnabutton,frame, y sus propiedades 5.- Convención para nombrar objetos en Visual Basic 6.- Operadores: Basicos,Comparacion, Etc. 7.- Variables y Tipo de Datos en VB. 8.- Manejo de Formularios:Eventos, Metodos, Modales y no Modales, MDI. Practica 1 9.-Instrucciones Condicionales,Controles optionButton,Checkbox, Evento keypress y Change 10.-Funciones de conversión de datos 11.-CUADROS DE DIALOGO Ejemplo practico 12.-Funciones de Cadenas,Numéricas y Fechas 13.-Evento Gotfocus, LostFocus, MouseDown, MouseUp y MouseMove 14.-Instrucciones Repetitivas, Sentencia Exit. Practica3 15.- Barras de desplazamiento (Scroll Bars) 16.- Función RGB 17.- Control Timer 18.- CONTROLES GRÁFICOS:Line,Shape,Image,Picturebox 19.- Metodos graficos:Pset,Line,Circle. 20.- CUADRO DESPLEGABLES(COMBOBOX) Y LISTAS (LIST BOX) 21.- ARREGLOS:ESTATICOS,DINAMICOS,CONTROLES Aplicacion :AHORCADO 22.- MSFLEXGRID Practica4 23.- PROCEDIMIENTOS Y FUNCIONES Practica 5 24.- Registros 25.- Controles ACTIVE X (ToolBar, ImageList, ProgressBar, StatusBar, ShockWaveFlash) Ejemplo de Presentacion de Un Sistema 26.- Manejo de Archivos, Comandos (Dir , Kill, FileCopy, etc.) Controles DRIVE, DIR y FILE 27.- VISUAL BASIC Y BASE DE DATOS Objetos Recordset, propiedades, metodos, etc.
-1-
Descargado de www.tutomundi.org Semana 1: Entorno de Desarrollo Visual Basic 1.1 .- Características Generales de Visual-Basic Visual-Basic es una herramienta de diseño de aplicaciones para Windows, en la que estas se desarrollan en una gran parte a partir del diseño de una interface gráfica. En una aplicación Visual - Basic, el programa está formado por una parte de código puro, y otras partes asociadas a los objetos que forman la interface gráfica. Es por tanto un termino medio entre la programación tradicional, formada por una sucesión lineal de código estructurado, y la programación orientada a objetos. Combina ambas tendencias. Ya que no podemos decir que VB pertenezca por completo a uno de esos dos tipos de programación, debemos inventar una palabra que la defina : PROGRAMACION VISUAL.
1.2.- Entorno de Trabajo de Visual Basic Visual Basic es un entorno de desarrollo diseñado para la creación de aplicaciones para los entornos de trabajo Microsoft Windows 95, 98, NT y 2000. Este lenguaje auna las posibilidades de un lenguaje de alto nivel con las herramientas de diseño gráfico, lo cual nos dá acceso a todas las funciones de los sistemas anteriormente citados. Para entrar a desarrollar en visual basic nos vamos al menu Inicio- Programas – Microsoft Visual Studio 6 – Microsoft Visual Basic 6 OJO: El ejecutable que abre el Visual Basic 6 se llama VB6.EXE
La primera pantalla que nos saldra sera la sgte: Aquí escogemos el tipo de proyecto que queremos realizar que en este caso sera EXE STANDARD ya que es el ideal para crear aplicaciones OJO: Los otros tipos de proyecto permite crear cosas distintas como por ejemplo
-2-
Descargado de www.tutomundi.org ActiveX Control Crea un control para poder usarlo en tus aplicaciones e incluso en una página WEB. DLL ActiveX Crea Librerias dinamicas que se podra utilizar desde cualquier lenguaje que tenga compatibilidad. Una vez que hemos escogido el proyecto a desarrollar el sistema nos respondera de la siguiente manera:
Barra de Menu
Explorador de Proyecto
Barrra de Herramientas Diseñador de Formulario
Ventana de Propiedades
Cuadro de Herramientas
Los elementos del entrono de desarrollo de Visual Basic son: Barra de herramientas:Permite un acceso rápido a los comando más utilizados Si en caso no se muestra la barra Nos vamos al Menu Ver-Barra de Herramientas-Estandard Diseñador de formularios Es la ventana en la que se diseñará la interfaz de la aplicación, en ella se pueden agregar controles gráficos e imágenes. Cada formulario de una aplicación aparecerá en su propia ventana. Para mostrarla debemos hacer doble clic al formulario el cual queremos diseñar Cuadro de herramientas En el cuadro de herramientas podemos encontrar un conjunto de herramientas que permiten insertar los objetos o controles en el formulario durante en tiempo de diseño, los objetos más comunes son botones(command), etiqueta (label), cuadros de imagen(Picture), imágenes(Image), etc... Si hacemos doble click con el ratón sobre alguno de ellos se insertará automáticamente en la ventana del formulario. Ventana de propiedades Los objetos tiene asociados unas propiedades que describen sus atributos, valores, comportamiento y apariencia del objeto. Para sacar las propiedades se hace clic derecho y propiedades o se pulsa F4. Explorador de proyectos Contiene la lista de los archivos que forman parte de la aplicación
-3-
Descargado de www.tutomundi.org Ventana editor de código En esta ventana es donde se incluye el código de la apliación. Se creará una ventana de código para cada formulario o módulo de la aplicación. Para tener acceso a la ventana de edició, la forma más sencilla es hacer doble click sobre el formulario o sobre el objeto al cual quiera incluir código.
1.3.- Objetos en Visual Basic Un objeto en Visual Basic se caracteriza por tres componentes: propiedades, métodos y eventos. NOTA: Los objetos vienen a ser los controles como TextBox, Label, Etc. Las propiedades son aquellas características o atributos que permiten establecer la apariencia de un objeto como el color, tamaño, posición, etc... O el estado del mismo: activo, maximizado, ect... Existen propiedades que sólo están disponibles en tiempo de diseño y otras que sólo están disponibles en tiempo de ejecución. Ejemplo de Propiedades: alignment, autosize, caption, name, etc. Los métodos son pequeños programas que actúan sobre un determinado objeto y que establecen su comportamiento. Así un objeto puede moverse, ocultarse, etc... Puedes utilizar cualquier método que forme parte del objeto. Ejemplo de Metodos: show, hide, etc. Los eventos son las situaciones que se producen y que nos interesan identificar para establecer algún tipo de de respuesta por parte del objeto. Así, puedes hacer click sobre un determinado objeto, creando de esta forma un evento reconocible por el objeto. Que suceda algo o no como respuesta a este evento dependerá de que hayas programado alguna acción en el correspondiente procedimiento de evento. Ejemplo de Eventos: click, dobleclicke ,mousemove, keypress, etc.
1.4.- Controles Label, TextBox, CommandButton, Frame y sus Propiedades * 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 -4-
Descargado de www.tutomundi.org muestra información acerca de algo. El control de etiqueta es: Algunas propiedades del control etiqueta son: Propiedad Definición Alignment Establece la alineación del texto de la etiqueta(derecha, izquierda y centro) Autosize Si su valor es True, el tamaño de la etiqueta se adapta automáticamente a su contenido Caption Texto que se visualiza en la etiqueta BackStyle Establece si el fondo del label sera opaco o transparente. * TextBox o Caja de Textos.- Los cuadro de texto son el control estándar de entrada de datos en Visual Basic. Permiten al usuario de la aplicación introducir información. El control del cuadro de texto es: Los cuadros de texto son semejantes a las etiquetas, pero con la diferencia que el usuario puede modificar su contenido. El texto que se introduce puede ser tanto numérico como alfanumérico (números y letras). Cuando se recupera un valor de una caja de texto asi se haya ingresado un numero tomará el valor de una cadena. A diferencia de la etiqueta, el tamaño del texto es fijo al no permitir la propiedad autosize. Algunas propiedades del objeto cuadro de texto son: Propiedad Definición Alignment Alineación de la información introducida. Multiline Permite introducir más de una línea de texto en el cuadro PasswordCharEstable el caracter que se muestra al realizar una entrada en el control. Sólo se mostrará dicho carácter(Por defecto esta vacio) ScrollBars Muestra barras de desplazamiento(Esto solo funciona si la propiedad multiline esta en True) Text Texto que se visualiza en el control * Frame o Marcos.- Se utiliza para agrupar ciertos controles. La única propiedad interesante de un control marco es la propiedad Caption, que se refiere al texto que se presenta en la parte superior izquierda del control. El control marco actúa como contenedor de otros controles. Al mover un marco también se mueve los controles que contenga, para ello deberemos crear primero el marco y despueés los controles que queremos que contenga dentro del marco. * Command o Botones.- El botón de comando (CommandButton), es muy sencillo, por lo que no tienes que establecer muchas propiedades. Con la propiedad Caption establecemos el texto que aparecerá en el botón. También se pueden crear teclas de acceso al botón. El uso principal de los botones de comando es realizar acciones en la aplicación. Bloquear controles Cuando estén situados los controles en el formulario se pueden bloquear para que no
-5-
Descargado de www.tutomundi.org puedan moverse de forma accidental. Para esto deberemos hacer clic derecho Bloquear Controles Para desbloquear se hace lo mismo. Otras Propiedades Name .- Quizas la mas importante da el nombre al control. Backcolor .- Establece el color de fondo del control. Forecolor .- Establece el color del texto del control. BorderStyle .- Establece el tipo de borde del control. Visible .- Establece si el control se verá(True) en tiempo de ejecución o no(False). Picture .- Establece una imagen de fondo al control. Nota: Si el control es un commandbutton la propiedad STYLE debera estar en 1.- Graphical para que se pueda ver la imagen lo mismo es para darle un color de Fondo. Width, Height .- Establece el ancho y el alto del control.(a mayor numero mas ancho o alto) Font.-Establece la fuente, tamaño, etc. Enabled.-Permite o no que se puedan realizar acciones sobre el control(esta en True por defecto si esta en False no se podra utilizar el control) TabIndex.-Establece el orden de tabulación fijado para el control(Esta propiedad sirve para casi todos los controles en VB) TabStop.-Indica si al utilizar el tabulador se puede desplazar entre los controles del formulario ToolTipText.-Establece un texto que se mostrar cuando se pase el mouse por el control como si fuera un comentario. Top .-Establece la distancia que hay desde el borde superior del formulario hasta donde se encuentra el control Left .-Establece la distancia que hay desde el borde izquierdo del formulario hasta donde se encuentra el control Icon .- Establece la imagen de un icono (Solo esta disponible para los formularios) MinButton, MaxButton .- Para ver o no ver los botones de minimizar y maximizar (solo para los formularios) Moveable .- Si esta en True el Form se podrá mover ,si esta en false será lo contrario(solo para los formularios)
1.5.- Convención para nombrar objetos en Visual Basic OBJETO Form CheckBox ComboBox Data-bound combobox Command Button Data Directory list box Drive List Box File List Box Frame
OBJETO ESPAÑOL Formulario Casilla de verificación Cuadro combinado Cuadro combinado enlazado a datos Botón de comando Control de datos Cuadro lista de directorios Cuadro lista de unidades Cuadro lista de archivos Marco -6-
PREFIJO frm chk cbo dbc cmd dat dir drv fil frm
Descargado de www.tutomundi.org Grid Data-bound grid Horizontal scrollbar Image Label Line OLE Container PictureBox Shape Text Box Timer Vertical scroll bar
Rejilla Rejilla enlazada a datos Barra de desplazamiento horizontal Imagen Etiqueta Linea Contenedor OLE Cuadro de imagen Forma Cuadro de texto Temporizador Barra de desplazamiento vertical
grd dbg hsb img lbl lin ole pic shp txt tmr vsb
1.6.- Operadores Operaciones Basicas Operador Operación que realiza + Suma / Concatenación de cadenas de caracteres Resta * Multiplicación / División \ División entera Mod Resto de la división entera ^ Exponenciación (alt + 94) & Concatenación de Operadores de Comparación > Mayor que < Menor que = Igual a <= Inferior o igual a >= Superior o igual a <> Distinto a Operadores Lógicos AND y OR O NOT Negacion
1.7.- Variables y Tipo de Datos en VB. Tipo de datos Integer (Entero) Long (Entero Largo)
Tamaño 2 bytes 4 bytes
-7-
Caracter % &
Descargado de www.tutomundi.org Single (Simple) Double(Doble) Currency (Moneda) String (Cadena de caracteres) Byte Boolean (Boleano) Date(Fecha) Object(Objecto) Variant
4 bytes 8 bytes 8 bytes 1 byte por carácter 1 byte 2 bytes 8 bytes 4 bytes 16 bytes + 1 byte por cada carácter
! # @ $
Tipos de Variables : Privada .- La variable solo sera utilizada e el modulo donde se esta declarando Private nombrevariable As TipodeDato dim nombrevariable As TipodeDato Publica o Global .- La variable se podra utilizar en todo el proyecto por que sera publica. Public nombrevariable As tipodedato Global nombrevariable As tipodedato Para que la variable sea reconocida en todo el proyecto se deberá declarar en un modulo. NOTA: Si queremos declarar un variable publica para el formulario debemos declarar esa variable en la seccion de GENERAL-DECLARACIONES
1.8.- Manejo de Formularios Normalmente la interfaz de una aplicación esta compuesta por varios formularios. Cuando Visual Basic inicia la aplicación automáticamente se muestra el formulario de arranque, mientra que los otros formularios deben ser mostrados y ocultados a través de código. El método o función usado depende de lo que deseamos hacer. Eventos de Formularios: Activate: se produce cuando un Formulario se activa. Desactivate: se produce cuando un Formulario se desactiva. Los eventos Activate y Desactivate sólo se producen cuando el foco pasa de uno a otro Formulario dentro de la aplicación. Si el foco se pasa a las ventanas de otras aplicaciones los eventos no se producen. Se utilizan los métodos Show y SetFocus. El evento Activate ocurre antes que el evento GotFocus y el evento LostFocus ocurre antes que el evento Desactivate.
-8-
Descargado de www.tutomundi.org Initialize: es el primer evento que se produce en un Formulario. Se utiliza para inicializar datos empleados por el Formulario. Ejemplo: Form1.Caption = "Ejemplo" Terminate: es el último evento que se produce en un Formulario. Se produce cuando todas las referencias a una instancia de un Formulario, se quitan de la memoria estableciendo a Nothing todas las variables que hacen referencia al objeto. Resize: ocurre cuando cambia el estado de una ventana (por ejemplo, cuando se maximiza, minimiza o restaura un Formulario). Ejemplo: cambiar automáticamente el tamaño de un Cuadro de Imagen. Private Sub Form_Resize() Picture1.Move 0, 0, ScaleWidth, ScaleHeight End Sub Load: cuando un Formulario se carga en memoria se produce el evento Load. Este evento suele utilizarse para realizar operaciones de inicialización como, por ejemplo, inicializar variables, dar valores a las propiedades de determinados controles, cargar elementos en las listas, etc. Unload: se produce cuando un Formulario se descarga en memoria. Este evento dispone de un argumento, denominado Cancel que permite cancelar la descarga del Formulario. Para ello, bastará con asignarle un valor distinto de cero en cualquier instrucción del código. Si no se le asigna ningún valor, se mantendrá a cero, permitiendo la descarga del Formulario. Metodos de Formularios: Load: Carga un formulario a la memoria, pero no lo muestra. Ejemplo: Load Form1 ‘donde form1 es el nombre del formulario que se cargara. Show: Muestra un formulario. Si el formulario no está cargado al momento de ejecutar el método Show, Visual Basic lo cargará automáticamente. Ejemplo: form1.Show Hide: Oculta un formulario, pero no lo descarga de memoria. Ejemplo: form1.Hide Unload: Descarga un formulario de memoria. Ejemplo : unload Form1 Comentarios.- La descarga de un formulario puede ser necesaria o conveniente en aquellos casos en los que la memoria utilizada se necesite para alguna otra tarea o cuando sea necesario restablecer las propiedades a sus valores originales. Antes de descargar un formulario se ejecuta el evento Unload (Form_Unload). Si establece el argumento Cancelar a True en este evento no se descargará el formulario. Sugerencia Use la palabra Me para referirse al formulario actual. Ejemplo: Unload Me Formularios Modales y No Modales Un formulario que se abre como Modal, no permite que el usuario interactúe con otros formularios de la misma aplicación hasta que no sea cerrado. Un formulario que se abre como No Modal, permite al usuario cambiar a otros formularios de la misma aplicación sin que los primeros sean cerrados. El argumento Estilo del método Show determina si el formulario se abre como Modal o No Modal. -9-
Descargado de www.tutomundi.org Ejemplo ‘ Cargar el formulario frmEntrada como Modal frmEntrada.Show vbModal Ejemplo ‘ Carga el formulario frmEntrada como No Modal frmEntrada.Show vbModeless ‘o en todo caso simplemente se pone frmentrada.show Finalizando su Aplicación Se puede finalizar la ejecución de la aplicación descargando el último formulario de la aplicación o usando la sentencia End. La sentencia End termina la ejecución de la aplicación y descarga todos los formularios. Cuando finaliza su aplicación con la sentencia End no se desencadena ningún evento. Formularios MDI.- Estos formularios tienen como finalidad servir de contenedor a otros.formularios. Para agregar un formulario MDI debemos ir al Explorador de proyectos - Clic DerechoAgregar-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 -
Descargado de www.tutomundi.org
SEMANA 2: Instrucciones Condicionales,Controles optionButton,Checkbox, Evento keypress y Change Instrucciones de Control •
Condicionales
2.1.- IF.(Si) Sintaxis:
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 integer Num = 450 If Num >300 and Num < 500 then Num = num + (num * 0.10) Else Num = num - (num * 0.20) End if
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)
2.2.- IIF.(Doble si) Sintaxis: Var = IIf(condicion,verdad,falso) Cuando se utiliza el IIF el resultado de este se debe guardar en una variable de lo contrario saldrá error. Ejemplo: Utilizaremos el mismo ejemplo del If y la solución sería la siguiente. Dim Num = 450 Num = iif(num >300 and num < 500, num + (num *0.10), num – (num * 0.20)) Condicion Verdad Falso Esta sentencia se lee asi: en la variable num se va a guardar dependiendo de la condicion si la cumple se guardara num incrementado en un 10% si no se guardara num disminuido en un 20% 2.3.- SELECT CASE (En caso) Select case(var) Case valor1: (programacion) Case valor3: (programacion) Case valor...N: (programacion) Case else: (programacion) End select - 11 -
Descargado de www.tutomundi.org Ejemplo : Ingrese un numero y según cumpla una de las condiciones en otra variable se deberá almacenar un mensaje. Si el numero es 0 el mensaje sera “Neutro” Si es 2,4,6,8 el mensaje sera “Par menor a 10” Si el numero es mayor que 9 y menor que 100 el mensaje sera “entre 10 y 99 “ Si es mayor a 499 y menor a 901 o es el numero 998 el mensaje sera “Menor a mil” Si no cumple ninguna de las condiciones saldra el mensaje “No cumple condicion” Dim num as integer Dim mensaje as string Num =4 Select 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
Otro Ejemplo: Promedio=(nota1+nota2+nota3)/3 Select case promedio Case 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
2.4.- SWITCH. Sintaxis: Var = switch(condicion1,valor1,codnicion2,valor2,condicion..n,valor..n) El switch es parecido al iif con la diferencia que se puede poner varias condiciones con un solo switch. Ejemplo: En una variable almacene el numero de dia y guarde en otra variable el nombre del dia por ejemplo 1 seria”lunes”, 2 seria “martes” ,etc. Dim dia as integer Dim nombre as string Dia=7 Nombre = Switch(dia=1,”Lunes”,dia=2,”Martes”,dia=3,”Miércoles”,dia=4,”Jueves”,..) 2.5.- Sentencia Print La sentencia Print escribe un valor en el formulario exactamente en el lado izquiero superior Ejemplo: Private Sub cmdcalcula_Click() Print "Hola" End Sub El resultado seria:
- 12 -
Descargado de www.tutomundi.org
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 % Private Sub CmdCalcular_Click() mas el monto. Dim monto% monto = Val(txtmonto) If chk18.Value = Checked Then txt18 = monto * 0.18 Else txt18 = 0 End If If chk20.Value = Checked Then txt20 = monto * 0.2 Else txt20 = 0 End If 'Puede ser checked o 1 If chk22.Value = 1 Then txt22 = monto * 0.22 Else txt22 = 0 End If txtfinal = Val(txt18) + Val(txt20) + Val(txt22) End Sub
- 13 -
Descargado de www.tutomundi.org OPTIONBUTTON(botones de opción) Los botones de opción (OptionButton), también permiten presentar opciones al usuario, pero con la particularidad que sólo puedes seleccionar una de las opciones al mismo tiempo. Si quieres que en un mismo formulario se pueda seleccionar más de un botón de opción, tienes que crear distintos conjuntos de botones de opción. El botón de opción sólo puede tener dos valores en la propiedad Value (True y False), true si está activado y false si está desactivado. Ejemplo:Seleccione una categoría y al hacer clic muestre que categoría se ha seleccionado
Private Sub CmdVer_Click() If Option1.Value = True Then Txtcat = "A" Else If Option2.Value = True Then Txtcat = "B" Else Txtcat = "C" End If End If End Sub
2.7..- Eventos
• Keypress Este evento sucede cuando se presiona alguna tecla del teclado.Automáticamente VB da un valor a una variable llamada KEYASCII que sera el codigo ascii de la tecla presionada. Ejemplo: Validar que en la caja de texto TXTCOD se ingrese solo numeros y al preionar enter que tome enfoque TXTNOM Private Sub Txtcod_KeyPress(KeyAscii As Integer) Select Case KeyAscii 'Si la variable keyascii es 13 quiere decir que se presiono el ENTER 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" - 14 -
Descargado de www.tutomundi.org 'Si no cumple la condicion al keyascii se le da 0 esto quiere decir que el valor que se ‘haiga presionado no aparecera en la caja de texto Case Else: KeyAscii = 0 End Select End Sub NOTA: si se quiere programar con el Keypress del Formulario la propiedad KEYPREVIEW debe estar en TRUE. • Change Este evento sucede cuando cambia la estructura de las cajas de texto(TextBox) Es decir conforme vayamos cambiando el contenido del texto se ejecutara el vento CHANGE Ejemplo: Private Sub TxtNum_Change() Print TxtNum End Sub
Propiedades en tiempo de ejecución
Cada vez que se escriba algo en text1 se vera en LBMEN Private Sub Text1_Change() LBMEN.Caption = Text1.Text End Sub
If Check1.Value = 1 Then LBMEN.FontItalic = True Else LBMEN.FontItalic = False End If
Private Sub Check1_Click()
- 15 -
Descargado de www.tutomundi.org Private Sub Cmddre_click() LBMEN.Left = LBMEN.Left + 30 End Sub
End Sub Private Sub Check2_Click() If Check2.Value = 1 Then LBMEN.FontBold = True Else LBMEN.FontBold = False End If End Sub
Private Sub Cmdsube_Click() LBMEN.Top = LBMEN.Top + 20 end Sub Private Sub Cmdbajar_Click() LBMEN.Top = LBMEN.Top - 20
Private Sub CmdRojo_Click() Form1.BackColor = RGB(0, 0, 255) End Sub Private Sub CmdAma_Click() Form1.BackColor = RGB(255, 255, 0) End Sub
End Sub Private Sub Optmen_Click() LBMEN.FontSize = 8 End Sub Private Sub Optmed_Click() LBMEN.FontSize = 24 End Sub
Private Sub CmdIzq_Click() LBMEN.Left = LBMEN.Left - 30 End Sub
10.-Funciones de conversión de datos Función CBool CByte CCur CDate CDbl CInt CLng CSng CStr CVar
Descripción Convierte una expresión al tipo Boolean Convierte una expresión al tipo Bute Convierte una expresión al tipo Currency Convierte una expresión al tipo Date Convierte una expresión al tipo Double Convierte una expresión al tipo Integer Convierte una expresión al tipo Long Convierte una expresión al tipo Single Convierte una expresión al tipo String Convierte una expresión al tipo Variant
Ejemplos: Num = CDbl(“123.45”) ‘el valor de Num seria 123.45 Num = CInt(“123.45”) ‘el valor de Num seria 123 Fec = CDate(“01/01/1980”) ‘el valor de fec seria 01/01/1980 como fecha Cad = CStr(123) ‘ el valor de Cad seria “123” como cadena IsArray
Devuelve TRUE si el parámetro pasado es un nombre de matriz
- 16 -
Descargado de www.tutomundi.org IsDate Devuelve TRUE si el parámetro es el nombre de un dato tipo Date IsEmpty Devuelve TRUE si el pará. es el nombre de una var. no inicializada IsNull Devuelve TRUE si el pará. es el nombre de una var. que contiene Null IsNumeric Devuelve TRUE si el parámetro es el nombre de dato de tipo numérico Str Devuelve la representación de un número en forma de cadena TypeName Devuelve en forma de nombre el tipo de variable del parámetro pasado Val Devuelve el número representado por una cadena de caracteres ValType Devuelve en forma de número el tipo de variable del parámetro Pasado Ejemplos: F = IsDate(“cas”) ‘El valor de F sera falso. F = IsNumeric(“1234”) ‘ el valor de F sera True Format.- Da formato a una expresion Ejemplo: MiHora = #17:04:23# MiFecha = #27 enero 1993# ' Devuelve la hora actual del sistema en el formato largo de hora definido por el sistema. MiCadena = Format(Time, "Long Time") ' Devuelve la fecha actual del sistema en el formato largo de fecha definido por el sistema. MiCadena = Format(Date, "Long Date") MiCadena = Format(MiHora, "h:m:s") ' Devuelve "17:4:23". MiCadena = Format(MiHora, "hh:mm:ss AMPM") ' Devuelve "05:04:23 PM". MiCadena = Format(MiFecha, "dddd, d mmm yyyy")' Devuelve "Miércoles, ' 27 de Ene de 1993". ' Si no se suministra el formato, devuelve una cadena. MiCadena = Format(23) ' Devuelve "23". ' Formatos definidos por el usuario. MiCadena = Format(5459.4, "##,##0.00") ' Devuelve "5.459,40". MiCadena = Format(334.9, "###0.00") ' Devuelve "334,90". MiCadena = Format(5, "0.00%") ' Devuelve "500,00%". MiCadena = Format("HOLA", "<") ' Devuelve "hola". MiCadena = Format("Esto es", ">") ' Devuelve "ESTO ES". 11.- CUADROS DE DIALOGO MsgBox .- Muestra un mensaje MsgBox(mensaje,botones,titulo) Los valores que pueden tomar el parámetro botones son: Constante vbOKOnly vbOKCancel
Valor Descipción 0 Muestra sólo el botón aceptar 1 Botones aceptar y cancelar - 17 -
Descargado de www.tutomundi.org vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbAplicationModal vbSystemModal
2 3 4 5 16 32 48 64 0 4096
Botones anular, reintentar e ignorar Botones si, no y cancelar Botones si y no Botones reintentar y cancelar Muestra el icono de mensaje crítico Icono de interrogación Icono de exclamación Icono de mensaje de información Cuadro de diálogo modal de la aplicación Cuadro de diálogo modal del sistema
El parámetro botones es de valor numérico, y además de los botones que aparecen en le cuadro de diálogo, también puede indicar el icono que acompañe al mensaje y el tipo de diálogo modal que es. Ejemplo: Msgbox “Ingrese un precio valido”,16,”Mensaje” o tambien puede ser: Msgbox “Ingrese un precio valido”,vbCritical,”Mensaje”
MsgBox "Desea Grabar...?", vbYesNo + vbQuestion, "Mensaje"
En caso de que se muestre un msgbox donde se debe responder al msgbox se debera poner lo siguiente If MsgBox("Ingrese Cantidad valida", vbCritical, "Mensaje") = vbYes Then En este caso se esta preguntando si respondimos SI al msgbox. Ejemplo Dim Mensaje, Estilo, Título, Ayuda, Ctxt, Respuesta, MiCadena Mensaje = "¿Desea continuar?" ' Define el mensaje. Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones. 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.
- 18 -
Descargado de www.tutomundi.org 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, Mantenimiento, IGV y el Pago Total, al hacer clic en Nuevo se debe limpiar las Cajas de Textos y al hacer clic en Salir se debe salir del programa. NOTA: Para realizar este formulario se va a utilizar los siguientes controles Descripción Control Nombre Codigo del Suministro Textbox TxtCod Kilowatts consumidos TextBox Txtkilo Importe Inicial Label LblInicial Alumbrado Label Lblalum Mantenimiento Label LblMant
- 19 -
Descargado de www.tutomundi.org Reajuste Label LblReajuste IGV Label Lbligv Total Label LblTotal Calcular Command CmdCalcular Nuevo Command CmdNuevo Salir Command CmdSalir Imagen Image Image1 Formulario Form Form1 Private Sub CMDCALCULAR_Click() If MsgBox("Desea calcular...?", vbYesNo + vbQuestion, "Mensaje") = vbYes Then Dim pago#, importe# importe = Val(txtkilo) * 0.09 lblinicial = Format(importe, "#######0.00") lblalum = Format(importe * 0.035, "#######0.00") lblmant = Format(importe * 0.015, "#######0.00") lblreajuste = Format(importe * 0.048, "#######0.00") lbligv = Format(importe * 0.019, "#######0.00") lbltotal = CDbl(lblinicial) + CDbl(lblalum) + CDbl(lblmant) + CDbl(lblreajuste) + CDbl(lbligv) End If End Sub NOTA: Bueno aqui lo que se puede apreciar es que se estan declarando 2 variables de tipo double pago,importe luego se esta poniendo en los label el resultado de la operación note que se pone format(importe,”#######0.00”) para formatear el resultado con 8 enteros y 2 decimales Private Sub CMDNUEVO_Click() Me.txtcod = "" Me.txtkilo = "" Me.lblinicial = "" Me.lblalum = "" Me.lblmant = "" Me.lblreajuste = "" Me.lbligv = "" Me.lbltotal = "" Me.txtcod.SetFocus End Sub
- 20 -
Descargado de www.tutomundi.org Private Sub CMDSALIR_Click() End End Sub Private Sub Form_Load() Me.Caption = "Registar pagos a EdelNor" Image1.Stretch = True Image1.Picture = LoadPicture(App.Path + "\LOGO.JPG") CMDNUEVO.Picture = LoadPicture(App.Path + "\nuevo.bmp") CMDCALCULAR.Picture = LoadPicture(App.Path + "\grabar.bmp") CMDSALIR.Picture = LoadPicture(App.Path + "\salir.bmp") End Sub NOTA: aqui estamos poniendo el titulo al formulario, ademas de poner la imagen al control IMAGE1 la propiedad Stretch es para que la imagen se ajuste al control y la propiedad Picture es para poner una imagen,Cuando se pone una imagen en tiempo de ejecucion se necesita la funcion LoadPicture(“aquí va la ruta del archivo de imagen”), pero vean que aquí se puso app.path que es una funcion que saca una cadena y esa cadena es la ruta actual donde se encuentra el proyecto por ejemplo si el proyecto de visual basic se encuentra en C:\nueva carpeta la funcion app.path sacara c:\nueva carpeta ahora a esto se suma \logo.jpg si sumamos las 2 cadenas el resultado seria c:\nueva carpeta\logo.jpg Para esto la imagen Logo.jpg debe estar en la misma carpeta donde se encuentra el proyecto OJO.- Para los botones es lo mismo pero ahí debemos de poner la propiedad STYLE en Graphical.
Practica N° 2 1.- Ingrese por teclado en una caja de texto la hora en formato de 24 horas y en otra caja de texto la cantidad de minutos al hacer clic en un boton debera salir la hora en formato de 12 horas por ejemplo si se ingresa 23 en una caja y en la otra 12 el resultado seria 11:12:PM 2.- Ingrese la cantidad de minutos hablados por una persona y escoja el tipo de llamada (Local, Nacional, Internacional).Se visualizara el importe de la llamada sabiendo que por los 3 primeros minutos se paga S/ 1.00 y por cada minuto adicional se paga 0.50 en caso sea local si es nacional se incrementa el 25% y si es internacional se incrementa el 60% a los precios por minuto. 3.- Ingresar el nombre de un trabajador, la cantidad de hijos y su sueldo, si este tiene hijos se le dará una bonificación de S./40.00 por hijo y si no tiene hijos se le dara el 25% de su sueldo se deberá mostrar la bonificación y el sueldo final. 4.- Ingrese por teclado dos números y al escoger un signo de operación se debera mostrar el resultado de la operación.
- 21 -
Descargado de www.tutomundi.org 5.- Ingrese un numero máximo de 2 cifras si el numero es de una cifra se deberá mostrar cuanto falta para convertirse en un numero de 2 cifras, y si es de 2 cifras se deberá mostrar cuanto falta para convertirse en un numero de 3 cifras. 6.- Ingrese un numero cualquiera y muestre la cantidad de cifras que tiene según sea el caso. Ejemplo: 203 = “Tiene 3 cifras”, 45678 = “Tiene 5 cifras” tome en cuenta que el numero máximo a ingresar es un millon.. 7.- Ingrese por teclado el nombre, año de nacimiento y sexo de una persona (M o F),se deberá mostrar uno de los siguientes mensajes. - Varon mayor de edad - Varon menor de edad - Dama mayor de edad -Dama menor de edad 8.- Ingrese un numero y visualícelo en romano. 9.- Ingrese por teclado el día de nacimiento y el mes de nacimiento de una persona al hacer clic se deberá mostrar su signo zodiacal así como también deberá aparecer la imagen del signo Zodiacal en un control PictureBox. 10.- Se deberá desarrollar un algoritmo en el cual se deberá ingresar el nombre de un alumno y se deberá escoger el turno en el que estudia (M , T y N) asi como tambien el ciclo (I, II, III, IV, V, VI y SIDET) y la carrera (CI, Enfermeria y Administración) se debera calcular el pago de su pension en base a los siguientes datos: el precio por carrera es: CI = 320.00 Enfermeria = 280.00 Administración = 270.00 Ademas que dependiendo del ciclo en el que estan se pagara un recargo del precio de 10,20,30,40,50,60 y 70% (para sidet). Asi como tambien si es del turno “M” se debera recargar 10% mas solo si esta en I, II, o III ciclo, si es del turno “T” se recarga el 15 % mas solo si esta en I, o II y por utlimo si es del turno “N” se se la hara un descuento del 15 % solo si esta en SIDET Al finalizar solo se debe mostrar el monto de la pension. 11.- Realizar el siguiente formulario:
- 22 -
Descargado de www.tutomundi.org
. 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 Atn Cos Exp Fix
Devuelve el valor absoluto de un número Devuelve el arcotangente de un número Devuelve el coseno de un número Devuelve el exponencial de un número en base e Devuelve la parte entera de un número, redondeando los valores al Siguiente valor superior Hex Devuelve una cadena que representa el valor hexadecimal de un número - 23 -
Descargado de www.tutomundi.org Int Log Oct Rnd Sgn Sin Sqr Tan Val
Devuelve la parte entera de un número Devuelve el logaritmo natural de un número (en base e) Devuelve una cadena de caracteres que representa el valor octal Devuelve un número aleatorio menor que 1 y mayor o igual que 0 Devuelve el signo de un número (-1 si es negativo, 0 si es nulo y 1 si es positivo) Devuelve el seno de un número Devuelve la raíz cuadrada de un número Devuelve la tangente de un número Devuelve el número representado por una cadena de caracteres
NOTA: La funcion rnd devuelve un numero aleatorio entre 0 y 1 si queremos un numero aleatorio del 1 al 100 lo multiplicamos x 100 osea RND * 100 para sacar la parte entera seria Cint(rnd()*100) Ejemplos: Ingrese un numero y visualize las sgtes expresiones:
Private Sub Command1_Click() Dim N As Double Randomize N = Abs(Text1) Text2 = Abs(N) Text3 = Atn(N) Text4 = Cos(N) Text5 = Exp(N) Text6 = Log(N) Text7 = Int(Rnd() * 100) Text8 = Sgn(N) Text9 = Sin(N) Text10 = Sqr(N) Text11 = Tan(N) End Sub - 24 -
Descargado de www.tutomundi.org Funciones de tratamiento de cadenas de caracteres Función Asc Chr Format InStr Lcase Ucase Left Right Len Ltrim Rtrim Trim Mid
Space StrComp
Replace
Descripcion Devuelve el código ASCII del primer carácter de una cadena Devuelve el carácter asociado al código ASCII de un número Formatea una expresión según una formato pasado como parámetro Devuelve la posición de la primera ocurrencia de una cadena dentro de otra Instr(dondesebusca,loquesebusca) Devuelve una cadena con sus caracteres convertidos a minúsculas Devuelve una cadena con sus caracteres convertidos a mayúsculas Devuelve un número especificado de caracteres desde la izquierda de una cadena Left(cadena,cantidad) Devuelve un número especificado de caracteres desde la derecha de una cadena Right(cadena,cantidad) Devuelve el número de caracteres de una cadena Devuelve una cadena, eliminando los espacios en blanco a la Izq. Devuelve una cadena, eliminando los espacios en blanco a la derecha Devuelve una cadena, eliminando los espacios en blanco a izquierda y derecha Devuelve la subcadena de tamaño y posición especificada dentro de otra cadena MID(cadena,posición,cantidad)
Ejemplo Sintaxis: Asc(“A”) Res: 65 Sintaxis: chr(65) Res: “A” Sintaxis: format(122,”###.00”) Res: 122.00 Sintaxis: instr(“ABCD”,”C”) Res: 3 devuelve la posición que ocupa C en la cadena ABCD Sintaxis: Lcase(“A”) Res: a Sintaxis: Ucase(“a”) Res: A Sintaxis: Left(“ABCD”,2) Res: AB
Devuelve una cadena formada por un número especificado de espacios en blanco Compara 2 cadenas Strcomp(cad1,cad2) devuelve: –1 : Si cad1< cad2 0 : Si cad1=cad2 1 : Si cad1>cad2 Reemplaza una cadena Replace(cad,buscar,reemplazar)
Sintaxis: “Hola” & space(2) Res: “hola “
- 25 -
Sintaxis: Right(“ABCD”,2) Res: CD Sintaxis: Len(“ABCD”) Res: 4
Sintaxis: Mid(“ABCD”,3,2) Res: CD
Sintaxis: strcomp(“A”,”A”) Res: 0
Sintaxis: Replace(“ABCD”,”C”,”X”) Res: “ABXD” Busca la C y la cambia por la X
Descargado de www.tutomundi.org 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 Date Day Month
Descripción Devuelve la fecha actual del sistema Devuelve un número entre 1 y 31 representando el día del mes Devuelve un número entre 1 y 12 representando el mes del año
- 26 -
Ejemplos Sintaxis: Date Saca la fecha actual Sintaxis: day(“11/01/2004”) Res: 11 Sintaxis: Month(“11/01/2004”) Res: 1
Descargado de www.tutomundi.org Year WeekDay
Now Time Hour Minute Second DatePart
DateAdd
DateDiff
Devuelve un número entero representando el año Devuelve un número que representa el día de la semana empieza de 1.-domingo,2.Lunes,etc... Devuelve la fecha y hora actual del sistema Devuelve la hora actual del sistema Devuelve un número entre 0 y 23 representando la hora del día Devuelve un número entre 0 y 59 representando los minutos de la hora Devuelve un número entre 0 y 59 representando los segundos de minuto 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ón yyyy Año q Trimestre m Mes y Día del año d Día w Día de la semana ww Semana h Hora n Minuto s Segundo Esto tambien se aplica para las funciones Dateadd y Dateiff
Sintaxis: Year(“11/01/2004”) Res: 2004 Sintaxis: weekday(“11/01/2004”) Res: 1
Devuelve una fecha añadiéndole un cierto intervalo de tiempo especificado DateAdd(intervalo,cantidad,fecha) Devuelve el número de intervalos de tiempo entre dos fechas especificadas DateDiff(Intervalo,Fecha1,Fecha2)
Sintaxis:DateAdd(“d”,3,”01/01/2004”) Res: 04/01/2004
Ejemplos:
- 27 -
Sintaxis: now Saca la fecha y Hora actual Sintaxis: time Saca la hora actual
Sintaxis: Datepart(“m”,date) Saca el mes actual
Sintaxis:DateDiff(“yyyy”,”01/01/2000”,”01/01/2004”) Res: 4
Descargado de www.tutomundi.org Dim LaFecha As Date ' Declara las variables. Dim Msj LaFecha = InputBox("Escriba una fecha") Msj = "Días desde hoy: " & DateDiff("d", Now, LaFecha) MsgBox Msj Dim LaFecha As Date ' Declara las variables. Dim Msj LaFecha = InputBox("Escriba una fecha:") Msj = "Trimestre: " & DatePart("q", LaFecha) MsgBox Msj
13.- Evento Gotfocus, LostFocus, MouseDown, MouseUp y MouseMove Gotfocus .- Se produce cuando algun control toma el enfoque Lostfocus.- Se produce cuando algun control pierde el enfoque Ejercicio :Diseñe un formulario donde se debe de ingresar el nombre, el sueldo y la fecha de Ingreso al hacer clic en un boton se debe visualizar su sueldo final tomando en cuenta que si tienes mas de 20 años trabajando se le debe hacer una bonificación de 50% en caso contrario no habra bonificación. NOTA: debe validar para que cuando tome el enfoque una caja de texto el color de fondo cambie a rojo y cuando se pierda regrese a blanco ademas de que si ingresa minúsculas al perder el enfoque el texto debe convertirse a mayúsculas. Lo importante en este ejercicio no tanto es el resultado si no que sepamos manejar los eventos tanto gotfocus como lostfocus Se dice que al tener el enfoque un texto el color de fondo cambie a rojo entonces debemos programar lo siguiente: Private Sub txtnom_GotFocus() txtnom.BackColor = vbRed End Sub Y de ahí dice que al perder el enfoque debe regresar a color blanco ademas de que el texto salga en mayúsculas Private Sub txtnom_LostFocus() txtnom.BackColor = vbWhite txtnom = UCase(txtnom) End Sub’’donde Ucase es una funcion de cadena que convertira en mayúscula el valor de txtnom y lo guardara ahí mismo. Lo mismo se debe hacer para las demas cajas de texto. MouseDown, MouseUp y MouseMove El evento MouseDown sucede cuando el usuario pulsa cualquiera de los botones del ratón, mientras que el evento MouseUp sucede al soltar un botón que había sido pulsado. El evento MouseMove sucede al mover el ratón sobre un control o formulario. Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen ser - 28 -
Descargado de www.tutomundi.org comentados. El argumento Button indica cuál de los botones del ratón ha sido pulsado o soltado, y el argumento Shift indica si además alguna de las teclas alt, shift o ctrl está también pulsada. La lista con todos los posibles valores de estos argumentos se muestra Constante Valor vbLeftButton 1 vbRightButton 2 vbMiddleButton 4
Descripcion Botón izdo pulsado o soltado Botón dcho pulsado o soltado Botón central pulsado o soltado
Ejemplo: Diseñar un formulario que al hacerle Clic derecho se agrande y al hacerle clic izquierdo suceda lo contrario ademas de cuando se pase el mouse pro un Boton el formulario cambie de color Rojo y Azul.
General - Declaraciones Dim sw As Boolean Private Sub CmdMover_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If sw Then Me.BackColor = vbRed sw = False Else Me.BackColor = vbBlue sw = True End If End Sub Private Sub Form_Load() sw = True End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Me.Width = Me.Width + 100 Me.Height = Me.Height + 100 Else Me.Width = Me.Width - 100 Me.Height = Me.Height - 100 End If
- 29 -
Descargado de www.tutomundi.org End Sub
14.-Instrucciones Repetitivas, Sentencia Exit. 1.- FOR.(Para Hasta) Sintaxis: For var=valorinicial to valorfinal step(incremento) (programacion) Next var El For es una sentencia repetitiva donde var es la variable de control que dara las vueltas. Ejemplos: Visualize en el formulario los numeros pares del 100 al 2(100,98,96..) For i=100 to 2 step –2 Print i Next I Visualize en el formulario los numeros impares del 1 al 99(1,3,4..) For i=1 to 99 step 2 Print I Next Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellos Dim suma as integer,i as integer Suma=0 Ejemplo: For I=10 to 99 Sumar= 3+5+7+...+81 Print I Sm=0 Suma=Suma + i For N=3 to 81 Step 3 Next Sm=Sm+n Print “La suma es “ & suma Next ‘el & concatena 2.- DO WHILE.…LOOP.(Hacer mientras) , DO…. LOOP UNTIL(Hacer Hasta) Sintaxis: Do while condicion Do (programacion) (programacion) Loop Loop Until Condicion Ejemplos:
Genere y visualize numeros del 10 al 90 y al final muestre la suma de ellos Do while Do while i <= 90 Dim i as integer,suma as integer Print I Suma=0 Suma= Suma + i i=10 i= i +1 - 30 -
Descargado de www.tutomundi.org Loop Print “La suma es “ & suma Do Loop until Dim i as integer,suma as integer Suma=0 i=10
Do Print I Suma= Suma + I i= i +1 Loop Until i > 90 Print “La suma es “ & suma
3.- WHILE..WEND(Hacer Cuando) Sintaxis: While condicion (progamacion) wend Dim i as integer,suma as integer Suma=0 i=10 while i <= 90 Print I Suma= Suma + i i= i +1 wend Print “La suma es “ & suma Con la sentencia while wend, no se podra utilizar la setencia EXIT 4.- FOR EACH Repite un grupo de instrucciones para cada elemento de una matriz o colección. Sintaxis: FOR EACH elemento IN grupo (Instrucciones) NEXT Ejemplo: Poner a las cajas de texto color de fondo rojo Private Sub CmdCambiar_Click() 'Se declara una varibale de tipo Object Dim obj As Object 'Por cada objeto que se encuentre en el formulario actual 'Este for dara vueltas segun la cantidad de objetos que hay en le formulario For Each obj In Me.Controls 'Pregunta si el objeto es un Textbox si lo es cambia de color de fondo If TypeOf obj Is TextBox Then obj.BackColor = vbRed End If Next End Sub Sentencia EXIT La sentencia EXIT permitira salir de un bucle,funcion,procedimiento,etc.Dependiendo de donde se quiere salir se aplicará la sentencia: Exit For .- Sale de un for
- 31 -
Descargado de www.tutomundi.org Exit Do.- Sale de un Do Exit Sub.- Sale de un procedimiento Exit Function.- Sale de una funcion , etc. Ejemplo 1: queremos hacer un programa el cual muestre el primer numero primo que hay entre 10 y 90 Dim num As Integer, cd As Integer, i As Integer 'El primer for ira del 10 al 90 For num = 10 To 90 'Se inicializa la variable cd que contara los divisores de num cd = 0 'Este for es para dividir consecutivamente num/1,num/2,num/3 asi sucesivamente 'para ver cuales son sus divisores For i = 1 To num 'Si el residuo es 0 es divisible y el contador se incrementa If num Mod i = 0 Then cd = cd + 1 End If Next 'Si la cantidad de divisores es 2 quiere decir que es primo If cd = 2 Then Print "El primer primo es " & num 'Como ya encontro el primer primo rompe el for de num Exit For End If Next Ejemplo: Desarrollar un algoritmo que permita mostrar los numeros Amstrong que hay del 1 al 1000 se dice que son numeros amstrong cuando la suma del cubo de sus cifras es igual al mismo numeros. Ejemplo :153 = 1^3 + 5^3 + 3^3 serian iguales
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
- 32 -
Descargado de www.tutomundi.org Suma = Suma + (R ^ 3) NumAux = NumAux \ 10 Loop If Suma = Num Then Lblcant = Val(Lblcant) + 1 lblnumeros = lblnumeros & Num & "," End If Next End Sub
Aplicación con Procesos repetitivos.Private Sub CmdBin_Click() Dim cad$ Dim n% n = Val(Text1) cad = "" Do While n <> 0 r = n Mod 2 n=n\2 cad = cad + Str(r) Loop LBR1 = StrReverse(cad) End Sub
Private Sub Cmdhexa_Click() Dim cad$ Dim n% n = Val(Text1) cad = "" Do While n <> 0 ‘Hacer mientras n sea diferente a cero r = n Mod 16 n = n \ 16 If r > 9 Then cad = cad + Chr(55 + r) Else cad = cad + Str(r) End If Loop Lbr2 = StrReverse(cad) End Sub
Practica N° 3 - 33 -
Descargado de www.tutomundi.org 1.- Ingrese un numero y Genere las siguientes series: (el resultado se mostrara en un label o en un text) • 1,3,5,7,..... • -1,+3,-5,+7... • 1,3,2,5,3,7,4,9,5,11.... • 0,1,1,2,3,5,8,13...(Serie Fibonacci) 2.- Genere 100 numeros aleatorios y diga cuantos primos mayores a 50 hay,perfectos menores a 10 hay, pares e impares. 3.- Genere 100 numeros aleatorios y al finalizar diga cual es el mayor y el menor. 4.- Ingrese un numero de cualquier cifra y mostrarlo en forma invertida 5.- Ingrese un numero y conviértalo en base 2 6.- Ingrese una cadena y muestre lo siguiente • La cadena en forma invertida • Diga cuantas vocales tiene • Diga cuantos espacios en blancos hay 7.- Ingrese Una cadena y muestre lo siguientes: (Utilice Print) Ejemplo: cadena:”HOLA”
- 34 -
H O L A
H HO HOL HOLA
HOLA HOL HO H
8.- Ingrese una cadena y conviértalo en mayúscula y en minusculas funciones ucase y lcase.
sin utilizar las
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 aplicación
tres veces debe salir de la
13.- Realice el siguiente formulario: En este formulario se debera escoger un color y un objeto(checks,text,options) y al hacer clic en fondo o en letra debera cambiar al color que se ecogio ya sea el fondo(backcolor o la letra(forecolor) Luego al hacer clic en cursiva( font.italic) o en negrita (font.bold) o subrayado (font.underline) se debera cambiar la apariencia de los controles que se escogio (Checks, text ,Options)
14.- Realice el siguiente formulario: Cuando se haga clic en Mostrar Resultado se debe mostrar la edad del trabajador, el tiempo de servicio y el codigo que se generara de la siguiente manera: el año de ingreso luego la letra “M” o “F” según su sexo , los 2 primeros caracteres de su apellido paterno, los 2 primeros caracteres de su apellido materno, el primer carácter de su nombre y un correlativo Ademas al ingresar sus nombres al perder el enfoque se debera cambiar el texto por mayúsculas y al entrar al enfoque de algun texto el color de fondo debera cambiar y al salir del enfoque debera regresar al color original que tuvo. Ejercicios Practicos: 1.- Ingrese un precio y una cantidad y al hacer clic en calcular mostrar el monto (cantidad * precio)
Private Sub cmdcalcular_Click() Dim monto# If Not IsNumeric(txtprecio) Then ‘Aqui se pregunta si txtprecio no es un numero MsgBox "Ingrese Precio", vbCritical, "Mensaje" txtprecio.SetFocus
Exit Sub ‘Sale del programa End If If Not IsNumeric(txtcanti) Then MsgBox "Ingrese Cantidad valida", vbCritical, "Mensaje" txtcanti.SetFocus Exit Sub End If If MsgBox("Desea calcular...?", vbYesNo + vbQuestion, "Confirmar") = vbYes Then monto = CDbl(txtprecio) * CDbl(txtcanti) ‘Cdbl para convertir a doble lblmonto = Format(monto, "########.00") ‘El monto a 8 enteros y 2 decimales End If End Sub Private Sub cmdnuevo_Click() txtprecio = "" txtcanti = "" lblmonto = "" txtprecio.SetFocus End Sub Private Sub cmdsalir_Click() End End Sub Private Sub Form_Activate() Me.Caption = Format(Date, "Long date") ‘Se pone el caption la fecha en formato largo ‘DATE es una funcion que devuelve la fecha actual. End Sub 2.- Diseñe un formulario donde tendra una caja de texto la cual aceptara letras y conforme se va escribiendo en el texto su contenido se mostrara en el caption del formulario Ademas se debe cambiar algunas de sus propiedades mediante checkbox
Private Sub chkcur_Click()
txtcad.Font.Italic = Not txtcad.Font.Italic ‘quizas algunos lo habrian hecho asi: ‘if chkur.value=1 then ‘txtcad.Font.Italic = true ‘else ‘txtcad.Font.Italic = false ‘endif ‘pero ustedes decidan cual es mas practico???????? End Sub Private Sub chkena_Click() txtcad.Enabled = Not txtcad.Enabled End Sub Private Sub chkneg_Click() txtcad.Font.Bold = Not txtcad.Font.Bold End Sub Private Sub chksub_Click() txtcad.Font.Underline = Not txtcad.Font.Underline End Sub Private Sub chkvis_Click() txtcad.Visible = Not txtcad.Visible End Sub Private Sub CmdAlinea_Click() Dim num% ‘la funcion chr transforma un codigo ascii a carácter en este caso esta transformando 13 que ‘es el ENTER. num = Val(InputBox(Chr(13) & "0.-Izquierda" & Chr(13) & "1.-Derecha" & Chr(13) & "2.-Centro", "Ingrese Alineacion")) If num > 3 Or num < 0 Then MsgBox "Solo se admite valores entre 0 y 2", vbExclamation, "Mensaje" Else txtcad.Alignment = num End If End Sub Private Sub txtcad_Change() Me.Caption = txtcad.Text End Sub Private Sub txtcad_KeyPress(KeyAscii As Integer) Select Case Chr(KeyAscii) Case "A" To "Z", "a" To "z": Case Else: KeyAscii = 0 MsgBox "Solo letras", vbCritical, "Mensaje" End Select End Sub
15.- Barras de desplazamiento (Scroll Bars) En este tipo de control las propiedades más importantes son Max y Min, que determinan el rango en el que está incluido su valor, LargeChange y SmallChange que determinan lo que se modifica su valor al clicar en la barra o en el botón con la flecha respectivamente y Value que determina el valor actual de la barra de desplazamiento. Las barras de desplazamiento no tienen propiedad Caption. El evento que se programa habitualmente es Change, que se activa cuando la barra de desplazamiento modifica su valor. Todo lo comentado en este apartado es común para las barras de desplazamiento verticales y horizontales. Además de las Scroll Bars horizontal y vertical, Visual Basic 6.0 dispone también del control Slider, utilizado en los paneles de control de Windows, que tiene una función similar.
16.- Función RGB Esta función devuelve un número que representa un color a partir de tres argumentos enteros entre 0 y 255, que son sus componentes RGB. Como ejemplo de uso: form1.BackColor = RGB(127, 127, 64) Si alguno de los argumentos tiene un valor mayor que 255, se toma como 255. Ejemplo:
Sub Pintar Text4.BackColor = RGB(Val(Text1), Val(Text2), Val(Text3)) End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then VScroll1.Value = Val(Text1) End If End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then VScroll2.Value = Val(Text2) End If End Sub Private Sub Text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then VScroll3.Value = Val(Text3)
End If End Sub Private Sub VScroll1_Change() Text1 = VScroll1.Value Call Pintar End Sub Private Sub VScroll2_Change() Text2 = VScroll2.Value Call Pintar End Sub Private Sub VScroll3_Change() Text3 = VScroll3.Value Call Pintar End Sub
17.- Control Timer Si se desea que una acción suceda con cierta periodicidad se puede utilizar un control Timer. Este control produce de modo automático un evento cada cierto número de milisegundos. La propiedad más importante de un objeto de este tipo es Interval, que determina, precisamente, el intervalo en milisegundos entre eventos consecutivos. La acción que se desea activar debe programarse en el evento Timer de ese mismo control. Si en algún momento se desea anular momentáneamente la acción periódica es suficiente con hacer False la propiedad Enabled del control Timer y para ejecutarla de nuevo volver a hacer True esa propiedad. Haciendo 0 la propiedad Interval también se consigue inhabilitar el Timer. Ejemplo: Diseñar un formulario que tenga una imagen de un Avion que se desplaze por el formulario ademas debe salir un texto en el caption del formulario que de la impresión que fuera una marquesina.
Lo primero que se debe hacer es jalar 2 timer y poner en la propiedad Interval 100 para que lo que se programe en el timer se ejecuta cada 100 milisegundos Dim cad$
Private Sub Form_Load() cad = "Programa hecho por Fulano Me.Caption = cad End Sub
"
Private Sub Timer1_Timer() Me.Caption = Mid(Me.Caption, 2, Len(Me.Caption) - 1) & Left(Me.Caption, 1) End Sub Private Sub Timer2_Timer() ImgAvion.Left = ImgAvion.Left + 100 If ImgAvion.Left > Me.ScaleWidth Then ImgAvion.Left = 0 End If End Sub
18.- CONTROLES GRÁFICOS Control line Es el control gráfico más elemental, ya que carece de propiedades como text, caption y value.Además no reconoce ningún evento, por lo que su misión es casi exclusivamente decorativa. El control line permite dibujar líneas en un formulario o en un control picture. Las propiedades más importantes son las coordenadas de los puntos extremos (X1, Y1, X2 e Y2 —donde x es columna e y es fila), la anchura en pixels (BorderWidth), el estilo de la línea (BorderStyle) -continua, a trazos, etc.- que sólo está activo cuando la anchura es 1 pixel, el color (BorderColor) y el nombre (Name). La línea puede estar visible o no (Visible), y existe la propiedad Index, que permite crear arrays de líneas.
Control shape Este control es en muchos aspectos similar al control line: tampoco tiene las propiedades text, caption y value, ni reconoce eventos. Se diferencia en que admite formas geométricas más complejas, que vienen definidas por la propiedad shape, que admite los valores siguientes: cuadrado (Square), rectángulo (Rectangle), círculo (Circle), elipse (Oval), cuadrado redondeado (Rounded Square) y rectángulo redondeado (Rounded Rectangle). Además de las propiedades correspondientes al tamaño y posición, las propiedades más interesantes del control shape son las siguientes: BackColor, BackStyle, BorderColor, BorderStyle, BorderWidth, FillColor, FillStyle, DrawMode. Un control shape puede estar visible o no (Visible), Control image
El control image es un contenedor de gráficos bitmap, iconos, metafile, enhanced metafile, GIF y JPEG. Este control admite ya una amplia colección de eventos, por lo que es ya un control con un papel mucho más activo que los anteriores. Las propiedades más propias e importantes de este control son las propiedades picture y stretch. La propiedad picture sirve para relacionar este control con el fichero que contiene el gráfico que se desea representar, a través del cuadro de diálogo Load Picture que permite elegir el fichero a insertar. El fichero deberá ser de uno de los tres tipos admitidos. Según el fichero elegido, la propiedad picture tendrá uno de los tres valores siguientes: icon (ficheros cur, ico), bitmap (bmp, gif, jpg) o metafile (wmf, emf). La propiedad stretch indica cómo se comporta el control image al introducir en él el contenido del fichero gráfico. Por defecto, cuando se crea un control image arrastrando en el formulario con el ratón esta propiedad tiene el valor false. Estando la propiedad stretch en false el tamaño del control se ajusta al tamaño del bitmap o del metafile que se introduce en dicho control. Por el contrario, si dicha propiedad está en true el gráfico que proviene del fichero se adapta al tamaño de control. Se puede tratar de modificar el tamaño del gráfico en modo de diseño (con el ratón o cambiando las propiedades de tamaño del control). Si el gráfico es un bitmap y la propiedad stretch está en false el tamaño de la imagen no cambia aunque cambie el del control (quedando en la esquina superior izquierda si el control se hace más grande, o quedando parcialmente oculta si alguna de las dimensiones del control se hace más pequeña que la del bitmap. Si la propiedad stretch está en true el bitmap se adapta al tamaño del control y su tamaño se cambia con el de éste. Los gráficos metafile siempre se pueden cambiar de tamaño en modo de diseño, tanto si stretch está en true como si está en false. Existen otras formas de cargar un gráfico en un control image, además de utilizar la propiedad picture en modo de diseño, como se ha visto anteriormente. Una segunda forma, utilizable también en modo de diseño, es hacer Copy y Paste a partir de un gráfico contenido en otra aplicación como Paint Shop Pro o Excel. En modo de ejecución se puede copiar el contenido de un control image en otro control del mismo tipo por medio de una sentencia de asignación en la forma: imgCuadro.picture = imgCaja.picture y se puede también cargar una imagen de un fichero utilizando el procedimiento LoadPicture, por ejemplo en la forma siguiente (habrá que estar seguro de que existe el fichero): imgCuadro.picture = LoadPicture("G:\graficos\pc.wmf") Aunque el control image admite algunos eventos (Click, DblClick, DragDrop, DragOver, MouseUp, MouseDown, MouseMove), sus posibilidades son también limitadas. Por la forma en que se dibuja, el control image no puede estar sobre otro control, como por ejemplo un botón Tampoco puede contener otros controles en su interior: sólo puede contener gráficos. Finalmente, este control no puede obtener el focus y por tanto no puede responder a acciones desde el teclado. El control picture, que se verá a continuación, resuelve estas limitaciones aunque presenta la desventaja de ser más lento en dibujar que el control image.
Control Picture Box
Este es el control gráfico ( ) más potente y general de Visual Basic 6.0. Se trata de una especie de formulario reducido, pues puede contener imágenes y otros tipos de controles tales como botones, shapes, labels, cajas de texto, etc. Con respecto a los bitmaps, el control picture se comporta de modo diferente que el control image. El control picture no tiene propiedad stretch, con lo cual al cargar un icono o un bitmap siempre aparecen con su tamaño natural Sin embargo el control picture tiene la propiedad AutoSize, que por defecto está en false. Cuando se carga un bitmap con AutoSize en false el gráfico aparece en la esquina superior izquierda del control; sin embargo, si AutoSize está en true el control picture adapta su tamaño al del bitmap que es cargado. (Stretch: false y true) y en un control picture (AutoSize: false y true). Los gráficos metafile se comportan de un modo diferente, En el control image se cargan con su verdadero tamaño si la propiedad stretch es false, mientras que se adaptan al tamaño del control si dicha propiedad es true. Con el control picture se adaptan al tamaño del control si AutoSize es false, mientras que se cargan con su propio tamaño si es AutoSize es true. En el control picture (al igual que en los formularios) son importantes las cuatro propiedades relacionadas con el color: BackColor, ForeColor, FillColor y FillStyle. La propiedad BackColor controla el color de fondo del control. La propiedad ForeColor controla el color del texto que se escribe en el control Las propiedades FillColor y FillStyle no afectan directamente al control sino a los elementos gráficos que se dibujen sobre él con métodos tales como line y circle, que se verán a continuación. FillStyle determina el tipo de relleno o pattern (líneas horizontales, verticales, inclinadas, cruzadas, ...), mientras que FillColor determina el color de estas líneas del relleno.
19.- METODOS GRÁFICOS.Dibujo de puntos: Método Pset El método pset sirve para dibujar puntos en un formulario o en un control picture. Su forma general es la siguiente: object.PSet (x, y), color donde: object es opcional y representa el objeto (form o picture) en el que se va a dibujar el punto. Si se omite, el punto se dibuja en el formulario activo (el que tiene el focus).Si se introduce las coordenadas que le siguen son relativas respecto a las propiedades CurrentX y CurrentY. Al dibujar un punto, estas propiedades se actualizan a las coordenadas de dicho punto.(x, y) son las coordenadas absolutas o relativas del punto a dibujar (expresiones, variables o constantes single). Tanto las coordenadas como los paréntesis son obligatorios. Las unidades dependen de la propiedad ScaleMode del objeto en que se dibuja.Color es opcional y es un nombre de color (vbRed, vbBlue, etc.) o un long conteniendo el código de color hexadecimal (puede ser el valor de retorno de la función RGB). Si se omite se utiliza la propiedad ForeColor del objeto en el que se dibuja. El tamaño del punto viene determinado por la propiedad DrawWidth del objeto en que se dibuja. Si el tamaño es mayor que uno, el punto se dibuja centrado en las coordenadas suministradas a pset. Si se desea eliminar un punto previamente dibujado es necesario volver a pintar ese punto con el color de fondo del objeto (BackColor). Ejemplo: form1.pSet(100,200),vbBlue ‘Con esta sentencia se dibuja un punto de color azul en las coordenadas 100,2000, si se quiere agrandar el tamaño del punto en la propiedad DrawWidth debemos cambiar el valor que hay. Dibujo de líneas y rectángulos: método line El método line dibuja líneas y -en ciertas condiciones- cajas rectangulares de lados horizontales y verticales. Su forma general es la siguiente: object.Line (x1, y1) - (x2, y2), color, BF donde object y color tienen el mismo significado que en pset, y (x1, y1) son opcionales y son las coordenadas del punto inicial de la línea. Si se omiten la línea comienza en las coordenadas definidas por CurrentX y CurrentY. (x2, y2) son obligados y contienen las coordenadas del punto final de la línea. B es un carácter opcional. Si se incluye se dibuja un rectángulo (Box) con los puntos dados como extremos de una de sus diagonales. F es también un carácter opcional, que sólo se puede incluir si se ha incluido B. Si se incluye, la caja rectangular se rellena (Fill) con el mismo color del contorno. Si se omite la caja se rellena con las propiedades FillColor y FillStyle del objeto en el que se dibuja. Después de ejecutarse este método las propiedades CurrentX y CurrentY tienen el valor del punto final de la línea. Es necesario introducir el carácter (-), aunque se omita el primero de los puntos que definen la línea. Las propiedades DrawWidth y DrawStyle determinan cómo se dibujan las líneas rectas o curvas DrawWidth determina el grosor en pixels, mientras que DrawStyle determina el tipo de línea. DrawStyle. Los tipos de raya discontinuo no permiten que el grosor sea mayor que 1 pixel. Si el grosor es superior, la línea se dibuja de modo continuo.
Ejemplo: Me.Line (100, 100)-(400, 400), vbRed, BF ‘con esta sentencia se dibujara un cudrado rojo Me.Line (100, 100)-(400, 400), vbRed ‘Con esta sentencia se dibujara una linea Dibujo de circunferencias, arcos y elipses: método circle Este método permite dibujar circunferencias, elipses y arcos. Su forma general es la siguiente: object.Circle (x, y), radius, color, start, end, aspect donde object y color tienen el mismo significado que en pset y line, y (x, y) son obligatorias, y contienen las coordenadas del centro de la circunferencia. Radius es obligatoria y define el radio de la circunferencia. Start, end son opcionales, y permiten definir arcos por medio del ángulo inicial (start) y final (end). Los ángulos se miden siempre en radianes y en sentido contrario a las agujas del reloj. Sus valores deben estar entre -2π y 2π. En principio se dibuja solamente el arco, pero si uno o ambos valores son negativos se tratan como positivos, pero se dibuja una línea que une el centro de la circunferencia con el origen o el extremo del arco. Aspect es también opcional y se utiliza para dibujar elipses. Es la relación entre el diámetro vertical y el horizontal. El valor por defecto es 1.0, lo que corresponde a una circunferencia. Cuando aspect es distinto de 1.0, el parámetro radius define el mayor de los dos diámetros. Sólo las figuras cerradas (no los arcos sin líneas que unan los extremos con el centro) pueden ser rellenadas con el color determinado por las propiedades FillColor y FillStyle del objeto en que se dibuja). El grosor y estilo de las líneas se determina con las propiedades DrawWidth y DrawStyle. Después de ejecutarse este método las propiedades CurrentX y CurrentY tienen el valor del centro de la circunferencia. Si se omite algún argumento (excepto los que van al final), deben respetarse las comas de separación entre argumentos. Otros métodos gráficos Existen algunos otros métodos gráficos de interés. Por ejemplo, el método Cls cuya forma general es object.Cls Ejemplo: form1.Cls borra del formulario o control picture todos los resultados de los métodos gráficos y del método print, al mismo tiempo que pone las propiedades CurrentX y CurrentY a cero. No afecta a los gráficos introducidos en modo de diseño (por ejemplo con la propiedad picture). Tampoco se borran con este método el texto y gráficos que se hayan creado con la propiedad AutoRedraw en true, si dicha propiedad se pone a false antes de llamar al método Cls. De esta forma se pueden realizar borrados selectivos. El método Point devuelve, como entero long, el color (RGB) del punto especificado en un formulario o control PictureBox. Su forma general es: object.Point(x, y) Si se desea, el entero long devuelto por point puede convertirse a la notación hexadecimal que se usa para los colores utilizando la función hex. Ejemplo:Diseñar un formulario el cual al pasar el Mouse por el Formulario se muestre las coordenadas donde se encuentra el Mouse,ademas que se dibuje aletaoriamente puntos por
todo el formulario, debera haber tambien un Scroll el cual al desplazarlo debera aumentar el grosor del Punto.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) lblx = X lbly = Y End Sub Private Sub HScroll1_Change() Me.DrawWidth = HScroll1.Value End Sub Private Sub Timer1_Timer() Me.PSet (Rnd() * Me.ScaleWidth, Rnd() * Me.ScaleHeight), RGB(Rnd() * 255, Rnd() * 255, Rnd() * 255) End Sub
20 .- CUADRO DESPLEGABLES(COMBOBOX) Y BOX)
LISTAS (LIST
ListBox.- Una lista es un control en el que se pueden mostrar varios registros o líneas, teniendo uno o varios de ellos seleccionado(s). Si en la lista hay más registros de los que se pueden mostrar al mismo tiempo, se añade automáticamente un scrollBar.Para añadir o eliminar registros de la lista se utilizan los métodos AddItem y RemoveItem respectivamente. Esto sólo puede hacerse en modo de ejecución, y no en modo de diseño. Se suelen inicializar desde el evento Form_Load. Propiedades y Metodos: List es un array que permite definir el contenido de la lista en modo de diseño a través de la ventana de propiedades y también acceder a los elementos de la lista en tiempo de ejecución, para utilizar y para cambiar su valor. Para ello se pone en índice del elemento entre paréntesis (empezando a contar por cero) a continuación de List, como se muestra a continuación por ejemplo, para cambiar el tercer elemento:
lstName.List(2) = "Tercero" lstName.list(0) Esto me indicara el valor que hay en el primer elemento NOTA: LstName viene a ser el nombre que se le ha puesto a la lista. Additem Para añadir un registro en tiempo de ejecución: lstName.AddItem Registro_Añadido, posicion donde posicion es un argumento opcional que permite especificar la posición en que se debe añadir. Si se omite el registro se añade al final de la lista. Lo anterior es válido si la propiedad Sorted está a False; si está a True el nuevo registro se añade en la posición ordenada que le corresponde. Ejemplo: lstname.additem “hola”,2 se añade “Hola” en la posición 2 lstname.additem “hola” se añade “Hola” en la ultima posición Removeitem(pos) Eliminar un registro, lstName.RemoveItem(pos) donde pos es el indice del elemento que se quiere eliminar. Ejemplo lstname.removeitem(1) se elimina el elemento 1 Clear En el caso de que se quiera vaciar completamente el contenido de una lista se puede utilizar el metodo clear Ejemplo: lstname.clear limpia todo la lista Dos propiedades interesantes de las listas son ListCount y ListIndex. ListCount contiene el número total de registros incluidos en la lista. Ejemplo si la lista tiene los siguientes elementos “Peru” “Mexico” “Italia” lstname.listcount esto sera igual a 3 por que son 3 elementos que tiene la lista ListIndex permite acceder a una posición concreta de la lista para añadir un registro nuevo en esa posición, borrar uno ya existente, seleccionarlo, etc. Hay que tener en cuenta que los elementos de la lista se empiezan a numerar por cero. El valor de propiedad ListIndex en cada momento coincide con el registro seleccionado y en el caso de no haber ninguno seleccionado esta propiedad vale -1. Ejemplo: Lstname.listindex indicara el indice del elemento seleccionado Selected(pos) indica si una lista esta seleccionada, esta propiedad es neta del ListBox y tiene 2 posibles valores True o False si esta en true indica que ese elemento ha sido seleccionado Ejemplo: LstName.selected(0) si esto arroja el valor de True quiere decir que fue seleccionado caso contrario ustedes ya saben..... Multiselect esta es una propiedad que indica si se podra seleccionar solo un elemento(0None) 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(0Standard) o con un check(1-CheckBox), se dara en tiempo de diseño(Solo es para listbox) Es interesante saber que al seleccionar uno de los registros de la lista se activa el evento Clic de dicha lista. Combo Box Un combo tiene muchas cosas en común con una lista. Por ejemplo los métodos AddItem, RemoveItem o Clear y las propiedades List, ListIndex o ListCount. La diferencia principal es que en un combo tiene una propiedad llamada Style, que puede adoptar tres valores (1,2 ó 3) que corresponden con tres distintas formas de presentar una lista: 1. Style=0 (Dropdown Combo), Éste es el valor más habitual y corresponde con el caso en el que sólo se muestra el registro seleccionado, que es editable por el usuario, permaneciendo el resto oculto hasta que el usuario despliega la lista completa clicando sobre el botón-flecha. 2. Style=1 (Simple Combo). En este caso el registro seleccionado también es editable, y se muestra una lista no desplegable dotada si es necesario de una scrollbar. 3. Style=2 (DropDown List). En este último caso el registro seleccionado no es editable y la lista es desplegable. En una caja combinada, al igual que en una caja de texto sencilla, está permitido escribir con el teclado en tiempo de ejecución, si la propiedad Enabled vale True. En una lista esto no es posible. Ejemplo Practico: Desarrollar un formulario el cual tenga como finalidad pasar elementos de una lista hacia otra:
Private Sub cmdaddlist2_Click() ‘Pasa todos los elementos seleccionados del List1 al List2 i=0 Do While i < List1.ListCount If List1.Selected(i) = True Then List2.AddItem List1.List(i) List1.RemoveItem (i) Else i=i+1 End If Loop
End Sub Private Sub CmdGenerar_Click() ‘Genera Numero aleatorios y los guarda en la Lista1 Randomize For i = 1 To 10 num = CInt(Rnd * 100) List1.AddItem num Next End Sub Private Sub cmdpasalist1_Click()‘Pasa todos los elementos del List2 al List1 For i = 0 To List2.ListCount - 1 List1.AddItem List2.List(i) Next List2.Clear End Sub Private Sub cmdpasalist2_Click()‘Pasa todos los elementos del List1 al List2 For i = 0 To List1.ListCount - 1 List2.AddItem List1.List(i) Next List1.Clear End Sub NOTA: No se ha programado el Boton para pasar los elementos seleccionados del List2 al List1 Para que se muestre el Check en la Lista se debe poner en la propiedad STYLE =1 CheckBoX
21.- ARREGLOS Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre, y hace referencia un único elemento de la serie utilizando uno o más índices, como un vector o una matriz en Álgebra. Visual Basic 6.0 permite definir arrays de variables de una o más dimensiones (hasta 60) y de cualquier tipo de datos (tipos fundamentales y definidos por el usuario). Pero además Visual Basic introduce una nueva clase de arrays, arrays de controles, esto es, (arrays de botones, de etiquetas, de paneles, etc.) que permiten una programación más breve y clara. En este apartado sólo se tratarán los arrays de variables. Todos los elementos de un array deben ser del mismo tipo y están alamacenados de forma contigua en la memoria. Por supuesto, si el array es de tipo Variant cada elemento puede contener un dato de tipo diferente, e incluso puede contener otro array.Entre los arrays de variables cabe distinguir dos tipos fundamentales, dependiendo de que número de elementos sea constante o pueda variar durante la ejecución del programa. Arrays estáticos, cuya dimensión es siempre la misma. Arrays dinámicos, cuya dimensión se puede modificar durante la ejecución del programa. Arrays estáticos La declaración de un array estático dependerá de su ámbito. • La declaración de un array público se hace en la sección de declaraciones de un módulo utilizando la sentencia Public.
• La declaración de un array a nivel del módulo o del formulario se hace en la sección de declaraciones del módulo o del formulario utilizando la sentencia Dim o Private. • Para declarar un array local a un procedimiento, se utiliza la sentencia Dim, Private o Static dentro del propio procedimiento. A continuación se presentan algunos ejemplos: Dim vector(19) As Double Este ejemplo declara un array de una dimensión, llamado vector, con veinte elementos, vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double. Salvo que se indique otra cosa, los índices se empiezan a contar en cero. Dim matriz(3, 1 To 6) As Integer Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4x6 elementos, matriz(0,1), ... matriz(3,6), de tipo entero. Public cadena(1 To 12) As String El ejemplo anterior declara un array de una dimensión, cadena, con doce elementos, caract(1), ... , caract(12), cada uno de los cuáles permite almacenar una cadena de caracteres. La declaración de los arrays estáticos es bastante cómoda. Se declaran una vez. Sin embargo tienen el inconveniente que en la mayoría de los casos están sobredimensionados y utilizan más memoria de la que realmente necesitan. Esto implica que se está malgastando memoria. Para solucionar este problema se utilizan los arrays dinámicos. Arrays dinámicos El espacio necesario para un array estático se asigna al iniciarse el programa y permanece fijo durante su ejecución. El espacio para un array dinámico se asigna durante la ejecución del programa. Un array dinámico, puede ser redimensionado en cualquier momento de la ejecución. La forma mejor de redimensionar los arrays es mediante variables. Para crear un array dinámico primero hay que declararlo como si fuera una array estático, pero sin darle dimensión. Es decir, se deja la lista -entre paréntesis- vacía sin ponerle ningún número.Esto se hace con la sentencia Public si se quiere que sea global, con Dim o Private si se quiere a nivel de módulo o con Static, Dim o Private si se quiere que sea local. Para asignar el número actual de elementos del array se utiliza la sentencia ReDim. La sentencia ReDim puede aparecer solamente en un procedimiento y permite cambiar el número de elementos del array y sus límites inferior y superior, pero no el número de dimensiones. Esto quiere decir que, por ejemplo, no se puede trasformar un vector en una matriz.A continuación se presenta un ejemplo de cómo se declaran arrays dinámicos en Visual Basic. Si se declara el array Matriz a nivel del formulario, Dim Matriz( ) As Integer más tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a continuación: Sub Calculo( ) ... ReDim Matriz(F, C) ... End Sub Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se
pierden (si son Variant se ponen a Empty; si son numéricos a cero y si son cadenas de caracteres a la cadena vacía). Cuando interese cambiar el tamaño del array conservando los valores del array, hay que ejecutar ReDim con la palabra clave Preserve. Por ejemplo, supóngase un array A de dos dimensiones. La sentencia, ReDim Preserve A(D1, UBound(A, 2) + 2) incrementa el tamaño del array en dos columnas más. Cuando se utiliza la palabra Preserve no puede cambiarse el índice inferior del array (sí el superior). La función UBound del ejemplo devuelve el valor más alto de la segunda dimensión. Arreglos de Controles.- Se llama arreglo de controles a un conjunto de controles que tienen el mismo nombre y son del mismo tipo se diferencia por un indice que empieza de 0 Ejemplo: Se crea una caja de texto y le ponemos de nombre TxtNum luego hacemos clic derecho copiar y luego lo pegamos y VB nos respondera con una ventana advirtiendo que ya existe un Control con ese nombre y nos preguntara si queremos crear un matriz de controles a lo cual se respondera SI. Con esta se creara otra caja de texto llamado tambien TxtNum(1) pero tendra el indice 1 y el anterior se llamara TxtNum(0), si creamos mas controles con este nombre el indice sera 2,3,4...etc. Ejemplo: Desarrollar un algoritmo que simule el Juego del ahorcado
Crearemos un arreglo de controles llamado TxtFrase(20 elementos) ademas debemos tener un control Image (Image1), una caja de texto donde se ingresara la Letra a buscar(TxtLetra), un boton para buscar (cmdOk), un boton para escoger la Frase (CmdJugar) y dos label LblMen donde saldra cuantas letras tiene la frase y LblMen2 donde saldra la frase; por ultimo vamos a tener un timer. El formulario conciste en que se llenara un vector de 20 elementos con Frases al hacer clic en el boton jugar se generara un numero aleatorio del 0 al 19 para escoger la frase luego se llenara los texto con la frase que se escogio al azar.Luego se debe ingresar una letra y se buscara en los texto si se encuentra el texto se podra ver ya que inicialmente esta invisible si no se encuentra la letra saldra un mensaje de error asi como tambien se mostrara una imagen en el control IMAGE1(asi se formara el ahorcado) para eso debemos contar con
varias imรกgenes a las cuales en este caso se le ha puesto de nombre Ahorcado1.jpg, Ahorcado2.jpg,..etc Si en caso se adivina la frase se activara el timer el cual tiene como unica finalidad hacer que el formulario cambie de color 30 veces y se desplaze por toda la pantalla. General-Declaraciones Dim vector(19) As String, cad$ Dim cont%, ACIERTO%, COLOR%, COLORORI, TW%, TH% Sub visibilidad(ByVal sw As Boolean) 'Muestar u oculta los textos dependiendo de SW For i = 0 To 19 txtfrase(i).Visible = sw Next End Sub Sub limpia() For i = 0 To 19 txtfrase(i).Text = "*" Next End Sub Private Sub CmdJugar_Click() Image1.Picture = Nothing 'Para que no se muestre nada en el Image Call visibilidad(False) Call limpia Randomize num = CInt(Rnd() * 19) cad = vector(num) For i = 1 To Len(cad) txtfrase(i - 1) = Mid(cad, i, 1) Next Txtletra.Enabled = True CmdOk.Enabled = True lblmen2.Visible = False LblMen = "La frase tiene " & Len(cad) & " palabras" lblmen2 = "La frase es " & UCase(cad) cont = 1 ACIERTO = 0 COLOR = 1 Txtletra.SetFocus End Sub Private Sub CmdOk_Click() ESTA = False For i = 0 To 19 C = txtfrase(i) If UCase(Trim(txtfrase(i))) = UCase(Trim(Txtletra)) And Not txtfrase(i).Visible Then txtfrase(i).Visible = True ESTA = True ACIERTO = ACIERTO + 1 End If
Next If Not ESTA Then ruta = App.Path & "\AHORCADO" & cont & ".JPG" Image1.Picture = LoadPicture(ruta) cont = cont + 1 If cont > 6 Then 'Solo hay 6 oportunidades de adivinar MsgBox "Lo sentimos perdiste el juego", vbCritical, "Mensaje" Call visibilidad(True) lblmen2.Visible = True Txtletra.Enabled = False CmdOk.Enabled = False Exit Sub End If End If Txtletra = "" Txtletra.SetFocus If ACIERTO >= Len(cad) Then MsgBox "Bien lo hiciste", vbInformation, "Mensaje" lblmen2.Visible = True Txtletra.Enabled = False CmdOk.Enabled = False Timer1.Enabled = True End If End Sub Private Sub Form_Load() Call visibilidad(False) Call limpia COLOR = 1 vector(0) = "LA CASA ROJA" vector(1) = "LA MALDICION NEGRA" y asi se llena los 20 elementos (del 0 al 19) vector(18) = "LA PANTERA" vector(19) = "LA AUSTRIACA" COLORORI = Me.BackColor 'Se guarda el color del Formulario TW = Me.Width 'Se guarda el ancho del formulario TH = Me.Height 'Se guarda el alto del formulario End Sub Private Sub Timer1_Timer() If COLOR > 30 Then Me.BackColor = COLORORI Me.Width = TW Me.Height = TH Timer1.Enabled = False Else R = CInt(Rnd() * 255) G = CInt(Rnd() * 255) B = CInt(Rnd() * 255)
Me.BackColor = RGB(R, G, B) Me.Width = CInt(Rnd * TW) Me.Height = CInt(Rnd * TH) COLOR = COLOR + 1 End If End Sub Private Sub Txtletra_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then CmdOk.SetFocus End If End Sub Arreglo de Controles.-
Colocar un control timer con propiedad: Interval=60 Enabled=false
Lbmeta
Control Image Nombre Carro dar el mismo nombre a los dos Private Sub Cmdstop_Click() Timer1.Enabled = false End Sub Private Sub CmdStart_Click() Timer1.Enabled = True Carro(0).Left = 0 Carro(1).Left = 0 End Sub Private Sub Timer1_Timer() Dim Nro As Integer Randomize Do Nro = Int(Rnd * 10) Loop Until (Nro = 1) Or (Nro = 0)
Carro(Nro).Left = Carro(Nro).Left + 100 If Carro(Nro).Left > LBmeta.Left Then Timer1.Enabled = False MsgBox "Carro " & Nro + 1 & " Ha Ganado" End If End Sub
22.- MSFLEXGRID.- El control Microsoft FlexGrid (MSFlexGrid) muestra datos de tablas y efectúa operaciones en ellos. Proporciona una flexibilidad completa para ordenar, combinar y aplicar formato a tablas que contienen cadenas e imágenes. Cuando se enlaza a un control Data, el control MSFlexGrid muestra datos de sólo lectura.
Propiedades Rows.- Cantidad de Filas que tendra el Grid (Ejemplo: MsflexGrid1.Rows = 4) Cos.- Cantidad de columnas que tendra el Grid (Ejemplo: MsflexGrid1.Cols = 4) TextMatrix(Fila,Columna) .- Establece el texto de una celda se le pasa como parámetro la fila y la columna de la celda a la cual se quiere acceder (Ejemplo : MsFlexGrid1.TextMatrix(1,2) = “Hola”) RowHeight(Fila) .- Establece el alto de la fila (Ejem : MSFlexGrid1.RowHeight(0)=200) ColWidth(Col)Establece el ancho de una columna(Ejem MSFlexGrid1.ColWidtht(0)=200) FixedRows,FixedCols .- Establece la cantidad de filas y columnas fijas respectivamente (Ejem : MSFlexGrid1.FixedCols=0) Row .- Establece la fila a la cual se va a acceder (Ejem : MSFlexGrid1.Row = 1) Col .- Establece la columna a la cual se va a acceder (Ejem : MSFlexGrid1.Row = 1) NOTA:Las propiedades a continucion se utilizaran después de haberse ubicado primero en una fila y columna Text .- Establece el texo de una celda es similar a TextMatrix (Ejem : MSFlexGrid1.Text = “Hola”) CellBackColor,CellForeColor .- Establece color de fondo y de letra respectivamente. Ejemplo (MsFlexGrid1.CellBackColor = VBRed) Ejemplo: Diseñar un formulario que tendra un FlexGrid llamado TABLA al cargra se debe llenar el formulario con las ventas de los 12 meses del año al final al hacer clic en el boton promedio se debe calcular el promedio de las ventas(Las ventas se generaran aletoriamente asi como tambien se debera modificar las celdas de las ventas)
Private Sub Command1_Click()’Boton para hallar el promedio Dim suma# suma = 0 For fil = 1 To 12 suma = suma + CDbl(Tabla.TextMatrix(fil, 1)) Next Label1 = "Total ventas es: " & suma End Sub Private Sub Form_Load() Tabla.Rows = 13 Tabla.Cols = 3 Tabla.FixedCols = 0 ‘Primero los titulos Tabla.TextMatrix(0, 0) = "Mes" Tabla.TextMatrix(0, 1) = "Ventas" Tabla.TextMatrix(0, 2) = "Nivel" For fil = 1 To 12 Tabla.TextMatrix(fil, 0) = MonthName(fil) ‘MonthName saca el nombre del mes Tabla.TextMatrix(fil, 1) = CInt(Rnd * 1000) Tabla.TextMatrix(fil, 2) = IIf(Val(Tabla.TextMatrix(fil, 1)) > 500, "Alto", "Bajo") Next End Sub ‘’’Si la venta es mayor a 500 en la otra columna debe salir el mensaje “Alto” sino “Bajo” Private Sub Tabla_KeyDown(KeyCode As Integer, Shift As Integer)
If Tabla.Col = 1 Then ‘Solo se podra editar la columna de Ventas Select Case KeyCode Case vbKeyDelete: ‘Si se presiono Supr Tabla.Text = "" Case vbKeyBack: ‘Si se presiono la barra de retroceso Tabla.Text = Left(Tabla.Text, Len(Tabla.Text) - 1) Case vbKey0 To vbKey9: ‘Si se presiono del 0 al 9 Tabla.Text = Tabla.Text & Chr(KeyCode) Case vbKeyNumpad0 To vbKeyNumpad9 ‘Si se presiono del 0 al 9 pero del teclado numerico Tabla.Text = Tabla.Text & Chr(KeyCode - 48) Case vbKeyReturn, vbKeySeparator: ‘si se presiono enter o enter del teclado numerico msg = IIf(Val(Tabla.Text) > 500, "Alto", "Bajo") Tabla.Col = 2 Tabla.Text = msg Tabla.Col = 1 End Select End If End Sub Aplicacion. Se deposita cierta cantidad de dinero en un banco, este deposito puede ser en dolares o soles; mostrar una tabla de Interses cada 30 dias , según la tasa de interes para soles es 5% y dólar 2% mensual. Pulsar ctrl.+T para activar a) Microsoft FlexdGrid Control 6.0 y Microsoft Form 2.0 Object Library (que contiene el control SpinButton) El diseño es como se muestra en la figura, la codificación es el Siguiente:
‘Autor Alberto Moreno Private Sub CmdNuevo_Click() TxtMonto.Text = "" TXTMes = "" OPM(0) = False: OPM(1) = False Grid1.Clear Grid1.TextMatrix(O, 0) = "Fecha" Grid1.TextMatrix(0, 1) = "Intereses" Grid1.TextMatrix(0, 2) = "Valor Actual" Grid1.ColWidth(0) = 1200 : Grid1.ColWidth(1) = 1600 :Grid1.ColWidth(2) = 1800 TXTMONto.SetFocus End Sub Private Sub CmdSalir_Click() End End Sub Private Sub Form_Activate() Call CmdNuevo_Click End Sub Private Sub OPM_Click(Index As Integer) Dim TASA As Single
Dim Interes#, Vactual#, Mes% Dim FE As Date Select Case Index Case 0: TASA = 0.02 Case 1: TASA = 0.05 End Select FE = Date Grid1.Rows = Val(TXTMes) + 1 For Mes = 1 To Val(TXTMes) FE = FE + 30 Interes = Val(TXTMONto) * TASA * Mes Vactual = Interes + Val(TXTMONto) Grid1.TextMatrix(Mes, 0) = Format(FE, "dd/mm/yy") Grid1.TextMatrix(Mes, 1) = Format(Interes, "##,###.00") Grid1.TextMatrix(Mes, 2) = Format(Vactual, "###,###.00") Next End Sub Private Sub SpinButton1_Change() TXTMes = SpinButton1.Value End Sub Private Sub TXTMON_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 13 TXTMes.SetFocus Case 48 To 57, 46, 8 Case Else KeyAscii = 0 End Select
End Sub
Practica 4 1.- Llene un Listbox con los distritos de Lima y al hacer click en un boton Buscar debera ingresar un Distrito en un InputBox si existe en el ListBox se debera marcar el distrito ingresado si en caso no se encuentra se debera mostrar un mensaje que diga que el mensaje no existe ademas de un mensaje que diga ¿Si desea continuar? si responde si volvera al mismo proceso hasta que ingrese No. 2.- Ingrese en un texto de tipo MultiLine una frase y en varios ListBox debera salir las Letras Mayúsculas,Minúsculas,Vocales y Consonantes(osea habra 4 Listbox) indicando los totales al final de cada listbox 3.- Realice el siguiente formulario:
4.- Llene en un arreglo de 100 elementos 100 Numeros aleatorios sin que estos se repitan al final muestre en un mensaje la suma y el promedio de los elementos y de ahí lo pasa a un ListBox 5.- En un arreglo llene cadenas mediante InputBox, Luego en una caja de texto ingrese una letra y busquela si lo encuentra saldra un mensaje.(Utilize redim) 6.-Genere 100 numeros aleatorios y guardelos en un arreglo luego elimine los perfectos y los primos una vez hecho esto ordene el arreglo de forma ascendente(Utilize el metodo de la burbuja) de ahí lo pasa a un ListBox 7.- Genere una matriz de 10x10 con numeros aleatorios y diga al final cuantos pares e impares hay.(Muestre la matriz en un grid) 8.- Genere una matriz de 5x5 con numeros aleatorios luego diga cual es el mayor,el menor, la suma de su diagonal principal, la suma de su diagonal secundaria y de su periferia. (Muestre la matriz en un grid el mayor se sombreara de color rojo y el menor de azul) 9.- Genere una matriz de 3x3 y llenela con cadenas mediante inputbox y diga cual es elemento que tiene mayor cantidad de caracteres. (Muestre la matriz en un grid) 10.- Usando arreglos de controles inserte 20 botones luego genere 20 numeros aleatorios sin que se repitan y muéstrenlo en el caption de los botones. De ahí mediante un control timer haga que cada 1 segundo salga un numero aleatorio y busque el numero en los botones y si lo encuentra el boton debe desactivarse 11.- Utilizando vectores paralelos realice el siguiente Programa.
-
Debe tener 4 vectores (Codigo,nombre,fecha,sexo) sin dimension (utilizara redim) Debe tener un formulario inicial que tenga las opciones de (Ingresar,Modificar,Eliminar,Listado,Ordenar y salir) El Formulario de Ingresar sera :
donde el codigo se autogenera a partir del 1001 y la edad se mostrara en base a la fecha de nacimiento. Cuando se hace clic en el boton Grabar se guarda los datos en los vectores (codigo,nombre,fecha y sexo) - Modificar y Eliminar .- sera idéntico al Ingresar con la diferencia que ahí el codigo se ingresa y si existe salen los datos de ese codigo y debe haber un boton grabar que grabara las modificaciones de ese codigo o un boton Eliminar que eliminara ese elemento - Listado . Debe salir todos los elementos de los arreglos - Ordenar se escogera en un combobox por que campo se quiere ordenar(codigo,nombre,fecha o sexo)
23.- PROCEDIMIENTOS Y FUNCIONES Funciones.- Es un conjunto de sentencias que realizaran un proceso y devolveran un valor. Las funciones pueden ser publicas o privadas dependiendo de lo que queremos. Parámetros.- Son valores que reciben las funciones estas pueden ser BYVAL(Por valor), BYREF(Por referencia), PARAMARRAY(Arreglo de Parametros) Sintaxis: Public Function doble(ByVal Num%)as integer Doble = Num * 2 End Function En este ejemplo sencillo se ha creado una funcion llamada doble que recibe un parametro llamado num, luego la funcion doble devolvera el valor de num * 2. Para llamar a esa funcion seria de la siguiente manera. N=10 NN = doble(N) Esta claro tenemos una variable llamada N que vale 10 y llamamos a la funcion doble y le enviamos como parámetro N osea 10 luego como n es el parámetro que se envia en la
funcion doble lo recibe Num osea el valor de Num sera 10 y al final en NN se guardara el doble de N Diferencia entre BYVAL,BYREF y PARAMARRAY Ejemplo BYVAL: Private Sub Command1_Click() num = 10 MsgBox Aumento(num) End Sub Public Function Aumento(ByVal n%) As String n = n * 1.15 'El valor de n se incrementa en un 15% mas Aumento = "El aumento del 15% mas es " & n End Function Observen que aqui se llama a una funcion Aumento enviandole como parametro num que vale 10, en la funcion quien recibe el parรกmetro es n luego esa variable n sera igual al mismo n pero aumentado en un 15% al final n valdra 12 en este ejemplo pero num se queda en 10 por que cuando es BYVAL la variable num deja su valor a n y son variables distintas. Ejemplo de BYREF: Haremos el mismo ejemplo Private Sub Command1_Click() num = 10 MsgBox Aumento(num) End Sub Public Function Aumento(ByRef n%) As String n = n * 1.15 'El valor de n se incrementa en un 15% mas Aumento = "El aumento del 15% mas es " & n End Function El resultado sera el mismo entonces cual es la diferencia????.La diferencia es que num se envia por referencia entonces la variable n es la misma variable num por lo tanto cuando se pone n=n*1.15 lo que realmente se esta haciendo es num=num*1.15 ya que es la misma variable. Ejemplo de PARAMARRAY: Private Sub Command1_Click() a=2 b=3 c=4 d = 24 MsgBox mayor(a, b, c, d) End Sub Public Function mayor(ParamArray arreglo()) As String Dim m1%, m2% m1 = IIf(arreglo(0) > arreglo(1), arreglo(0), arreglo(1)) m2 = IIf(arreglo(2) > arreglo(3), arreglo(2), arreglo(3)) mayor = "El mayor es " & IIf(m1 > m2, m1, m2)
End Function No se asusten al ver esta funcion miren es una funcion como todos pueden ver que se llama mayor y devuelve un string. Ahora la novedad es el parametro que recibe se llama arreglo() al tener () quiere decir que es un arreglo y la palabra reservada ParamArray significa que es un arreglo de parametros donde arreglo(0) viene a ser el primer elemento osea A arreglo(1) viene a ser el segundo elemento osea B y asi sucesivamente Entonces se esta calculando el mayor de los 4 numeros al final el resultados sera “El amyo es 24” ya que 24 es el mayor en este ejemplo. A pesar de que se ha hecho bien sencilla esta programación que pasaria si se quiere calcular el mayor de 10 numeros seria muy emborroso o pero aun el mayor de 100 numeros bueno pues podemos hacerlo bien facil utilizando una sentencia for y las funciones LBOUND y UBOUND LBOUND(Expre) es una funcion que me va a permitir mostrar el elemento minimo del arreglo que siempre sera 0.En Expre va el nombre del arreglo. UBOUND(Expre) saca el elemento máximo del arreglo es decir la cantidad de elementos que hay en el arreglo.En expre va el nombre del elemento Ahora haremos el mismo ejemplo pero para 10 numeros Private Sub Command1_Click() a=2 b=3 c=4 d = 24 e=2 f=3 g=4 h = 24 i = 99 j = 32 MsgBox mayor(a, b, c, d, e, f, g, h, i, j) End Sub Public Function mayor(ParamArray arreglo()) As String Dim vi%, vf%, xmayor% xmayor = 0 vi = LBound(arreglo) 'Valor minimo del arreglo en este caso 0 vf = UBound(arreglo) 'Valor maximo del arreglo en este caso 9 For i = vi To vf If arreglo(i) > xmayor Then xmayor = arreglo(i) End If Next mayor = "El mayor es " + CStr(xmayor) 'Mayor ="El mayor es " & xmayor tambien puede ser de esta manera End Function
Procedimientos.- Es un conjunto de sentencias que realizaran un proceso a diferencia de las funciones no devuelven nada. NOTA: Tiene la mismas características que las funciones es decir pueden ser publicas o privadas y los parámetros pueden ser Byref, ByVal o Paramarray. Ejemplo: Realizar un procedimiento que limpie todas las cajas de texto de un formulario En este caso el procedimiento se hara en el formulario. Private Sub Command1_Click() Call limpia ‘ End Sub Sub limpia() Dim obj As Object For Each obj In Me.Controls If TypeOf obj Is TextBox Then obj.Text = "" End If Next End Sub Para llamar a un procedimiento se utiliza la palabra reservada Call en este caso call Limpia El procedimiento LIMPIA blanquea las cajas de texto Ahora haremos algo mas interesante Haremos un procedimiento que limpie todas las cajas de texto de todos los formularios. Entonces creamos el procedimiento en el formulario. Private Sub Command1_Click() Call limpia(Me) End Sub Noten que llamamos a la funcion limpia y le enviamos como parámetro Me que quiere decir????? Mi formulario, el formulario actual. Entonces si estoy enviando como parámetro un formulario se supone que en el procedimiento recibo un parámetro que tiene que ser de tipo object al cual se le ha llamado xform. Sub limpia(ByRef xform As Object) Dim obj As Object For Each obj In xform.Controls If TypeOf obj Is TextBox Then obj.Text = "" End If Next End Sub Ahora seguro preguntaran porque ByRef se acuerdan que anteriormente hemos dicho que cuando es ByRef el parámetro que se envia es el mismo que se recibe osea xform sera lo mismo que el formulario. Practica 5
Funciones 1.- Ingrese un numero y visualize “Es Perfecto” o “No es Perfecto” dependiendo de la condicion 2.- Ingrese una cadena y visualícelo en Mayúscula sin usar UCASE 3.- Ingrese una cadena y visualícelo en Minuscula sin usar LCASE 4.- Ingrese 7 numeros y calcule el menor de ellos 5.- Ingrese 7 numeros y calcule el mayor de ellos 6.- Ingrese un numero y mediante options escoga una base(2,4,6,8) al hacer clic en un boton se mostrara el numero convertido a la base que se selecciono 7.- Ingrese la fecha de nacimiento de una persona y muestre la edad exacta es decir Años, mese y dias 8.- Ingrese un numero y muestre los numeros primos anteriores a este en un label 9.- Ingrese una cadena y visualícelo en forma invertida sin usar StrReverse 10.- Ingrese una cadena y luego encriptelo. 11.- Ingrese un numero y muéstrelo en letras ejemplo: 123 seria “Ciento veintitrés”(Utilize funcion recursiva) Procedimientos 12.- Genere un procedimiento que limpie todas las cajas de textos de todos los formularios. 13.- Diseñe un formulario que simule una calculadora para esto utilize arreglo de controles 14.- Diseñe un formulario que simule el juego d eun bingo utilize 2 msflexgrid yy llenelos aleatoriamentecomo si fuera una cartilla se debe validar que la primera Columna tenga numeros del 1 al 20 la segunda del 20 al 40 y asi sucesivamente, ademas los números no se deben repetir Una vez hecho esto debera hacer que cada 1 segundo salga un numero aleatorio y buscarlo en le grid si se encuentra debe sombrear la celda de un color diferente al final debe salir que cartilla fue la ganadora
24.- Registros.Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el usuario (conocidos como structs en el lenguaje de programación C). Los tipos definidos por el usuario son útiles si se quiere crear una única variable que registre varias unidades de información relacionadas. Ejemplo : Type Alumno Cod as integer Nom as String * 15 End Type Esto quiere decir que tenemos una variable llamada alumno en la cual podemos guardar 2 datos alumno.cod = 100, alumno.nom=”Juana”. Podemos crear tambien arreglos de registros. Solo tendríamos que poner Dim Alu(1 to 10) as alumno Para acceder a los elemntos seria : Alu(1).Cod=100,Alu(1).Nom =”Pedro”. Aplicación.- Registrar los datos de varios empleados en un registro , los datos de cada empleado son ; codigo(4c), nombre(25 C), cargo(10 C) y sueldo( real simple). Consideraciones.-
a) El codigo se genera a partir de 0001 b) Los botones de desplazamiento es para navegar en los registros ya ingresados c) En la pagina de vacaciones se elegir el codigo del empleado mediante un combo, mostrando automรกticamente los datos del empleado, se ingresara el numero de dias de vacaciones calculadando el dia de retorno(azul si es dia de la semana) y rojo (si es sabado o domingo) y su pago.
Array de Control Opc(0) Opc(1) Opc(2) Para cargo
LNRO Los botones de desplazamie nto Cmdpri, Cmdant, Cmdnext Cmdult
Paso 1.- Agregar Modulo Type Empleado Cod As String * 4
Sbas As Double Car As String * 10 End Type Public Vreg(1 To 50) As Empleado Public Nr As Integer
Declaracion
General
Dim tcar As String * 15 Dim CR As Integer â&#x20AC;&#x2DC;Variable para desplazamiento de registros Private Sub CmdAnt_Click() If Nr > 1 Then limpia CR = CR - 1 If CR = 0 Then MsgBox ("Estas en el Primer registro") CR = 1 Beep End If Muestra (CR) CmdAnula.Enabled = True CmdModi.Enabled = True End If
End Sub Private Sub CmdNext_Click() If Nr > 1 Then limpia CR = CR + 1 If CR = Nr Then MsgBox ("Estas en el ultimo") CR = Nr - 1 End If Muestra (CR) End If
End Sub Private Sub CmdPri_Click() limpia CR = 1 Muestra (CR) CmdAnula.Enabled = True CmdModi.Enabled = True End Sub Private Sub Cmdult_Click() If Nr > 1 Then limpia CR = Nr - 1 Muestra (CR) CmdAnula.Enabled = True CmdModi.Enabled = True End If
End Sub Private Sub Combo1_Click()
Dim I% I = Combo1.ListIndex + 1 If I > 0 Then Lnom.Caption = Vreg(I).Nom Lsbas.Caption = Vreg(I).Sbas Lcar.Caption = Vreg(I).Car End If
End Sub Private Sub Optc_Click(Index As Integer) tcar = Optc(Index).Caption Cmdgraba.SetFocus
End Sub Public Sub limpia() Dim obj As Object For Each obj In Me.Controls If TypeOf obj Is TextBox Then obj = "" If TypeOf obj Is OptionButton Then obj.Value = False Next Text2.SetFocus End Sub Private Sub Text2_Change() Cmdgraba.Enabled = Len(Text2) > 0 If Len(Text2) > 20 Then Text3.SetFocus End If
End Sub Public Sub header() With Grid1 .TextMatrix(0, 0) = "Codigo" .TextMatrix(0, 1) = "Nombres" .TextMatrix(0, 2) = "Cargo" .TextMatrix(0, 3) = "Sueldo" End With
End Sub Public Sub Muestra(Ind As Integer) Text1.Text = Vreg(Ind).Cod Text2.Text = Vreg(Ind).Nom Text3.Text = Str(Vreg(Ind).Sbas) Select Case Left(Vreg(Ind).Car, 1) Case "A": Optc(0) = 1
Case "S": Optc(1) = 1 Private Sub CmdAnula_Click() Dim I%, b% b = Nr - 1 For I = CR To b - 1 Vreg(I) = Vreg(I + 1) Next I Nr = Nr - 1 If Nr > 1 Then Listado Private Sub Tdias_KeyPress(KeyAscii As Muestra Integer)(CR) End DimIffecha, X As Variant
End Dim Sub diasem As String * 15
Private Sub CmdGraba_Click() Dim sueldo, vaca As Single Vreg(Nr).Cod = Text1.Text Dim c# Vreg(Nr).Nom = Text2.Text If KeyAscii = 13 Then Vreg(Nr).Sbas fecha = Now =+ Val(Text3.Text) Val(Tdias.Text) Vreg(Nr).Car = tcar ' x = CDate(fecha) Combo1.AddItem Vreg(Nr).Cod Select Case Weekday(fecha) Listado Case 1: diasem = "Domingo" limpia Case 2: diasem = "lunes" NrCase = Nr3: + diasem 1 = "Martes" Text1.Text = Format(Nr, "0000") Case 4: diasem = "Miercoles" Lnro.Caption = Str(Nr) Case 5: diasem = "jueves" Cmdgraba.Enabled =0 Case 6: diasem = "viernes" Text2.SetFocus Case 7: diasem = "Sabado" End EndSub Select Private Sub CmdNuevo_Click() Lfecha.Caption = Format$(fecha, limpia "dd/mm/yy") Lnro.Caption = Str(Nr) c = Str$(Val(Lsbas.Caption) * Text1.Text = Format(Nr, "0000") Val(Tdias.Text) / 30) CmdAnula.Enabled = False "###,###.#0") LVac.Caption = Format$(c, CmdModi.Enabled = False Ldia.Caption = diasem End Sub If Weekday(fecha) = 1 Then Private Sub CmdSalir_Click() Ldia.ForeColor = QBColor(4) End Else End Sub Ldia.ForeColor = QBColor(1) Private End If Sub Form_Activate() NrEnd = 1:If CR = 1 Lnro.Caption End Sub = Str(Nr) limpia Text1.Text = Format(Nr, "0000") Public Sub Listado() Lfec.Caption :" & Format(Now, Grid1.Rows = =Nr"Fecha +1 "dd/mm/yy") Grid1.Cols = 4 Text2.SetFocus Grid1.Row = 0 End Call Sub header Case For"O": I = 1Optc(2) To Nr = 1 End SelectLnro.Caption = Str(Ind) With Grid1 End Sub .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 With Next I
End Sub
Ejercicio:Aplicaciones con registros
Consideraciones: • • • • • •
Los puntajes son selccionados de 1 a 20 El Puntaje total se calcula ( suma de los tres puntajes: Medidas, simpatía y cultura) Estos datos serán almacenados dentro de una tabla temporal de tipo registro El Numero de Concursante se genera a la hora que se ingrese nuevas concursantes En el listado se podrá visualizar todas las concursantes ingresadas en la pagina anterior, además este listado se podrá ordenar por: Nombre el listado sera ordenado por este campo, por puntaje o numero de orden En la pagina de resultado se mostrara la concursante ganadora General, que concursante tuvo la mayor simpatía y la de mejores medidas.
2.- Se tiene un Registro de almacén cuyos campos son: Código de Producto, Descripción, Precio de costo y stock. Se pide realizar un programa para permitir: a) Ingresar nuevos Productos b) Venta de Productos donde al elegir el código de producto, mostrara automáticamente todos sus datos dando opción a ingresar la cantidad a comprar calculando el total a pagar respectivamente, también se debe contemplar en caso de vender una cantidad mas del stock disponible mostrando un error c) Cada vez que se efectué una venta el stock del producto vendido deberá ser actualizado d) En la lista de productos, puede estar ordenado por: Descripción, código y stock. Ejemplo:
Vamos a diseñar un formulario el cual tendra como finalidad registrar el codigo,nombre y sexo de un alumno para eso vamos a utilizar variables de tipo registro Conforme se va añadiendo los datos se mostraran en el Grid(MsflexGrid llamado TABLA) Ademas validaremos que la ingresar los datos sean datos validos para eso crearemos procedimientos y funciones Otra cosa que debemos de tener en cuenta es que el boton Nuevo y Grabar(CMDNUEVO) es el mismo y mediante programación haremos que su apariencia cambie asi como tambien el boton Cancelar y Salir(CMDSALIR) Ademas contamos con un nuevo control llamado Microsoft Tabbed Dialog Control 6.0 (Proyecto-Componentes) Para tener 2 pestañas escogemos la propiedad TABS y ponemos 2 Para cambiar el caption de cada TAB se escoge la pestaña y nos vamos a la propiedad CAPTION En el Modulo debemos hacer lo sgte.: Type Alumno 'Aqui se declara la estructura se llama alumno cod As Integer nom As String * 30 sexo As Boolean End Type Public r() As Alumno 'Aqui la variable R que sera el arreglo como ven es dinamico Sub main() ReDim r(0) FrmMant.Show 'Noten aqui que hemos creado un sub llamado Main y es ese el objeto inicial del proyecto 'Inicializamos la variable R y llamamos al formulario 'No olvidar que en el proyecto debemos escoger como objeto inicial SUB MAIN End Sub NOTA: Sub main viene a ser como un procedimiento inicial que podemos crear y el VB lo reconocera dando la opcion de ponerlo como objeto Inicial se utiliza mas que nada para inicializar valores variables, etc. Y de ahí se debe llamar al formulario el cual queremos ejecutar. En el Formulario: GeneraL Dim Si_Nuevo% Sub ActivaControles(ByVal Modo As Boolean) 'Para activar los botones y texto(FRAME1) Frame1.Enabled = Modo
'Boton Nuevo y Grabar es el mismo CmdNuevo.Caption = IIf(Modo, "Grabar", "Nuevo") CmdNuevo.Picture = LoadPicture(App.Path & IIf(Modo, "\SAVE.BMP", "\NEW.BMP")) CmdModificar.Caption = "Modificar" CmdModificar.Picture = LoadPicture(App.Path & "\edit.bmp") 'Boton salir y Cancelar es el mismo CmdSalir.Caption = IIf(Modo, "Cancelar", "Salir") CmdSalir.Picture = LoadPicture(App.Path & IIf(Modo, "\UNDO.BMP", "\CLOSE.BMP")) CmdModificar.Enabled = Not Modo End Sub Sub Limpia() txtcod = "" txtnom = "" Option1.Value = True End Sub Function valida() As Boolean 'Validar si se ingresa datos If Trim(txtcod) = "" Then MsgBox "Ingrese Codigo", vbCritical, "Mensaje" txtcod.SetFocus valida = False Exit Function End If If Trim(txtnom) = "" Then MsgBox "Ingrese Nombre", vbCritical, "Mensaje" txtnom.SetFocus valida = False Exit Function End If valida = True End Function Sub llena(ByVal pos%) r(pos).cod = Val(txtcod) r(pos).nom = txtnom r(pos).sexo = Option1.Value For i = 0 To UBound(r) Tabla.TextMatrix(i + 1, 0) = r(i).cod Tabla.TextMatrix(i + 1, 1) = r(i).nom Tabla.TextMatrix(i + 1, 2) = IIf(r(i).sexo, "M", "F") Next End Sub Private Sub CmdModificar_Click() Si_Nuevo = 3 Call ActivaControles(True) End Sub Private Sub CmdNuevo_Click()
Dim p% If Si_Nuevo = 1 Then Call ActivaControles(True) Call Limpia txtcod.SetFocus Si_Nuevo = 2 Else If valida Then p = IIf(Si_Nuevo = 2, UBound(r), Tabla.Row - 1) 'Si se va a grabar un nuevo dato la posicion sera el ultimo elemento de R 'Si se va a modificar se debe escoger el elemento seleccionado del Grid Call llena(p) If Si_Nuevo = 2 Then ReDim Preserve r(p + 1) Tabla.Rows = Tabla.Rows + 1 End If Si_Nuevo = 1 Call ActivaControles(False) End If End If End Sub Private Sub CmdSalir_Click() If Si_Nuevo > 1 Then Si_Nuevo = 1 Call ActivaControles(False) Else End End If End Sub Private Sub Form_Load() Call ActivaControles(False) Si_Nuevo = 1 Tabla.TextMatrix(0, 0) = "Codigo" Tabla.TextMatrix(0, 1) = "Nombre" Tabla.TextMatrix(0, 2) = "Sexo" End Sub Private Sub Tabla_RowColChange() 'Muestra los datos del grid a los textos txtcod = Tabla.TextMatrix(Tabla.Row, 0) txtnom = Tabla.TextMatrix(Tabla.Row, 1) If Tabla.TextMatrix(Tabla.Row, 2) = "M" Then Option1.Value = True Else Option2.Value = True End If End Sub Nota: en la pesta単a Consulta se debe escoger un sexo y deben salir los alumnos de ese Sexo.
25.- Controles ACTIVE X (ToolBar, ImageList, ProgressBar, StatusBar, ShockWaveFlash)
Ejemplo de Presentacion de Un Sistema Formulario Principal (Es el que llamara a los demas) Se debe crear un proyecto en Visual basic. Se debe agregar un MDI
por que un MDI? Por que es el indicado yaque un MDI es un formulario que contendra a los demas formularios siempre y cuando a los demas formularios se le ponga TRUE en la propiedad MDICHILD Luego necesitamos algunos controles (toolbar, imagelist, progressbar y statusbar) IMAGELIST .- Es un control que me va a permitir almacenar imรกgenes y cada imagen toma un indice epezando de 1 TOOLBAR.- Es un control que me va a permitir insertar un barra de herramientas va de la mano con el control IMAGELIST para colocar las imรกgenes. STATUSBAR .- Es un control que me va a permitir insertar una barra de estado dentro de mi formulario. PROGRESSBAR.- Es una barra progresiva generalmente se usa para indicar en que porcentaje se esta de algo. Para agregar estos controles nos vamos al menu componentes referencias y marcamos
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
Para que hacer esto???? Simplemente para jalar las imĂĄgenes de este imagelist al toolbar Una vez hecho esto seleccionamos el toolbar clic derecho propiedades
y en la opcion IMAGELIST esocogemos el imagelist que hemos creado y en STYLE escogemos 1 para que tenga un efecto mejor. Luego seleccionamos la pestaĂąa(BOTONES) y hacemos clic en insertar boton y notaremos que en Index sale 1 quiere decir que es el primer elemento en caption ponemos lo que queremos que salga en el boton y lo mas importante en IMAGE ponemos el indice de la imagen la cual queremos colocar al finalizar
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
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 â&#x20AC;&#x201C; 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Ă&#x161;SCULA esta activada o si el teclado Numerico esta activado debemos escoger en la propiedad STYLE lo que queremos Por ejemplo(caps-mayusculas,num-teclado numerico, ins-la tecla insert,date-saca la fecha actual,etc.)
Si queremos agrandar el tamaño del panel en la propiedad MINIMUN WIDTH (que esta por defecto 1440.00) debemos poner un numero mayor. NOTA .- si en STYLE escogimos por ejemplo sbrCaps en el panel saldra la palabra MAYUS si sale medio transparente significa que la tecla mayúscula esta desactivada y si sale de color negro quiere decir que esta activado. Asi mismo si queremos escribir algún texto la propiedad STYLE debe estar en sbrTEXT El resultado final sera el siguiente:
Ahora veamos como vamos a programar para que cuando se haga clic en el toolbar llame al formulario correspondiente: (Se debe programar en el evento ButtonMenuClick) Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu) 'buttonmenu.parent.index es para saber el indice del boton 'donde se encuentra el menu escogido osea (pregunta1,pregunta2,pregunta3,pregunta4) N = ButtonMenu.Parent.Index ‘N tomara los valores 1,2,3 o 4 dependiendo que boton se ‘selecciono 'buttonmenu.index es para saber el indice del menu el cual se ha escogido 'osea dependiendo de que boton se presiono vera el indice del boton del menu 'en este caso solo se ha insertado menus al boton Pregunta1 entonces por defecto 'la variable buttonmenu.index tendra 3 valores 1,2 o 3 dependiendo que opcion del menu ‘del boton 1 se escogio. op = ButtonMenu.Index Select Case N Case 1: 'Se escogio Pregunta1
Select Case op Case 1: Form1.Show ‘se escogioPregunta1-opcion1 Case 2: Form2.Show ‘se escogioPregunta1-opcion2 Case 3: Form3.Show ‘se escogioPregunta1-opcion3 End Select Case 2: ' Se escogio Pregunta2 Case 3: ' Se escogio Pregunta3 Case 4: ' Se escogio Pregunta4 End Select End Sub Y listo. Ahora hagamos que cuando se llame a los demas formularios en la barra de estado del formulario principal salga un texto que indique que formulario esta activo Entonces debemos programar en cada formulario por ejemplo en el formulario1 Private Sub Form_Load() MDIForm1.StatusBar1.Panels(2).Text = "Estas en el formulario 1" ‘Esto sera el panel 2 del MDI End Sub Donde MDIFORM1 es el nombre del formulario MDI, STATUSBAR1 es el nombre de la barra de estado que se creo en el MDI luego escogemos en que panel quiero que me salga el texto los paneles empiezan de 1 y el resultado cuando se llame al formulario1 sera el siguiente.
Pantalla Inicial: Para la pantalla inicial debemos utilizar un control llamado PROGRESSBAR y SHOCKWAVEFLASH el progress viene junto al toolbar y statusbar simplemente lo jalamos y para el ShockWaveFlash debemos ir a Proyecto-Componentes Y escogemos ShockWaveFlash
PROGRESSBAR.- Es un control que me va a mostrar una barra progresiva, entre sus propiedades tenemos. MAX.- valor máximo que se se le da al progressbar MIN.- valor minimo que se le da al progressbar VALUE .- es el valor que toma va del MIN hasta uno antes del MAX y conforme tome un valor la barra va avanzando. Private Sub Command1_Click() ‘Esto va en el boton entrar ProgressBar1.Min = 1 ProgressBar1.Max = 100 ProgressBar1.Value = ProgressBar1.Min Timer1.Enabled = True ‘ Se activa el timer para que se ejecute lo que se programo ahi no ‘olvidar que inicialmente la propiedad del TIMER debe estar en FALSE End Sub Private Sub Form_Load() ruta = App.Path + "\snakes.swf" ShockwaveFlash1.Movie = ruta End Sub
Private Sub Timer1_Timer() If ProgressBar1.Value >= ProgressBar1.Max Then Timer1.Enabled = False
MsgBox "Proceso Terminado " + Chr(13) + "Bienvenido al Sistema", vbInformation, "Acceso Permitido" FrmPrincipal.Show Unload Me Else Label1 = "Cargando configuracion al " & ProgressBar1.Value & "%" ProgressBar1.Value = ProgressBar1.Value + 1 End If
26.- Manejo de Archivos, Comandos (Dir , Kill, FileCopy, etc.) Controles DRIVE, DIR y FILE Funciones para manejo de archivos Dir .- Devuelve el nombre de un archivo, directorio o carpeta que concuerda con el patrón o atributo de archivo especificado o la etiqueta de volumen de una unidad de disco. Sintaxis Dir[(nombreruta[, atributos])] nombreruta Expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco. Si no se encuentra nombreruta, devuelve Null. atributos Constante o expresión numérica, cuya suma especifica atributos de archivo. Si se omite, devuelve todos los archivos normales que satisfacen el nombreruta. El argumento atributos tiene estas constantes y valores: Constante Valor Descripción vbNormal 0 Normal. vbHidden 2 Oculto. vbSystem 4 Sistema vbVolume 8 Etiqueta de volumen; si se especifica se ignoran todos los atributos vbDirectory 16 Directorio o carpeta. En Microsoft Windows, Dir permite el empleo de los caracteres comodín '*' (múltiples caracteres) y '?' (un solo carácter) para especificar varios archivos. La primera vez que se llama a la función Dir se debe especificar el nombreruta, de lo contrario se produce un error. Si además se especifican atributos de archivo, se debe incluir el nombreruta. Dir devuelve el primer nombre de archivo que coincide con el nombreruta. Para obtener más nombres de archivo que coincidan con el nombreruta, se debe volver a llamar a Dir sin argumentos. Cuando no hay más nombres de archivo coincidentes, Dir devuelve una cadena de caracteres de longitud cero. Cuando se devuelve una cadena de longitud cero, en las siguientes llamadas se debe especificar nombreruta o se producirá un error. Se puede cambiar el nombreruta sin haber obtenido todos los nombres de archivo que coinciden con el nombreruta actual. Sin embargo, no se puede llamar a la función Dir. MkDir .- Crea una carpeta Ejemplo: Mkdir(“c:\nueva carpeta”) ‘Se creara un carpeta ChDir.- .- Cambia la ruta actual. Ejemplo: ChDir(“d:\”) RmDir .- Elimina una carpeta
Ejemplo: RmDir(“c:\nueva carpeta”) ‘Se creara un carpeta FILECOPY Copia un archivo. 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 archivo.
Constante o expresión numérica cuya suma especifica los atributos de
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. Ejemplo: SetAttr “c:\Casa.txt”,vbHidden ‘pone oculto Casa.txt KILL.- Elimina un Archivo Ejemplo : Kill “c:\Casa.txt” ‘ Elimina Casa.txt Name.- Cambia el nombre de un archivo, directorio o carpeta. Sintaxis: Name nombre_ruta_antigua As nombre_ruta_nueva Ejemplo: Dim NombreViejo, NombreNuevo NombreViejo = "VIEJO": NombreNuevo = "NUEVO" ' Se definen nombres de archivo. Name NombreViejo As NombreNuevo ' Se cambia el nombre del archivo. NombreViejo = "C:\MIDIR\VIEJO": NombreNuevo = "C:\TUDIR\NUEVO" Name NombreViejo As NombreNuevo ' Se mueve el archivo y se cambia su nombre. NOTA:Si queremos ver otras propiedades debemos declarar uan variable de tipo FileSystemObject para eso debemos irnos a Proyectos-Referencias- Microsoft Scripting Runtime de ahí declaramos una variable asi: dim xvar as new FileSystemObject al poner xvar. Nos saldra un menu con todas las propiedades que existen para manejar archivos. Ejemplo: Diseñar un formulario al cual se le debe ingresar el nombre de un archivo y este se debe eliminar del PC
General Dim Fso As New FileSystemObject ‘Debemos primero irnos a referencias –Microsoft ‘Scripting Runtime no se olviden Dim cont% Sub explora(ByVal raiz$) ‘Este procedimiento es recursivo Dim carpeta As Folder, subcarpeta As Folder Set carpeta = Fso.GetFolder(raiz) For Each subcarpeta In carpeta.SubFolders If Fso.FileExists(subcarpeta.Path & "\" & txtarchi) Then ‘Si existe el archivo SetAttr subcarpeta.Path & "\" & txtarchi, vbNormal ‘Ponemos atributo normal Kill subcarpeta.Path & "\" & txtarchi ‘Borra archivo cont = cont + 1 End If explora (subcarpeta.Path) ‘Se vuelve a llamar
Next End Sub Private Sub Command1_Click() cont = 0 Dim unidad As Drive ‘Una variable de tipo drive For Each unidad In Fso.Drives ‘Por cada drive que se encuentre en los drives existente If unidad.IsReady Then ‘Si el drive se puede leer explora (unidad.Path) ‘Vamos al procedimiento explora End If Next MsgBox "Se borraron " & cont & " archivos" End Sub •
DriveListBox, DirListBox Y FileListBox.
Se obtienen directamente de la Caja de Herramientas, en los iconos siguientes:
• • •
DriveListBox permite elegir una unidad de disco. DirListBox muestra los directorios existentes en un árbol. FileListBox muestra los ficheros existentes en un determinado directorio.
Tal como indica su nombre, estos controles son listas. Repase el control ListBox para recordar sus propiedades. DriveListBox Este control permite elegir una unidad de disco válida en tiempo de ejecución. Utilice este control para mostrar una lista de todas las unidades válidas del sistema de un usuario.
DriveListBox desplegado y sin desplegar Name (nombre) por defecto List1 Drive devuelve el nombre de la unidad de disco seleccionada : Variable = List1.Drive Variable = a : (ó c :[MS-DOS_6] ó D )
DirListBox. Presenta un cuadro de la siguiente forma:
donde puede verse el árbol completo de un directorio. El DirListBox solamente presenta directorios. No presenta ficheros. Aparte de las propiedades geométricas de todos los controles, el DirListBox presentas las siguientes propiedades particulares : Path Devuelve o establece la ruta de acceso actual. No está disponible en tiempo de diseño. Sintaxis
Nombre.Path [= pathname]
donde Nombre es el nombre del DirListBox pathname Una expresión de cadena que evalúa en el nombre de vía de acceso del directorio por defecto del DirListBox.. FileListBox Esta lista nos presenta los ficheros existentes en un directorio.
Como se puede apreciar, cuando el número de ficheros supera el número que puede presentar, aparecen automáticamente las flechas de scroll verticales. Esta lista de ficheros tiene las siguientes propiedades destacables :
Path Devuelve o establece la ruta de acceso de su directorio actual. No está disponible en tiempo de diseño. Este directorio puede ser el que se le haya impuesto mediante esta propiedad Path, o el que tenga por defecto. (El directorio por defecto sería el del ejecutable de la aplicación) Si le ponemos el nombre por defecto, List1, para todos los ejemplos : variable = List1.Path (p. e.)
Variable = C:\Archivos de programa\Microsoft Visual Basic32
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) lista.
Variable = nombre del fichero que ocupa el 5º lugar en la
Si en lugar de n ponemos el valor de ListIndex : variable = List1.List (List1.ListIndex)
obtendremos el nombre del fichero seleccionado.
Observe que en este último caso, el resultado es el mismo que el de List1.Filename Veamos otras propiedades del FileListBox Pattern Devuelve o establece un valor que indica los nombres de archivo mostrados en un control FileListBox en tiempo de ejecución. Sintaxis
objeto.Pattern [= valor]
La sintaxis de la propiedad Pattern consta de las siguientes partes: objeto : Nombre del Control FileListBox
valor: Expresión de cadena que indica una especificación de archivo, como *.* o *.FRM. La cadena predeterminada es *.*, que obtiene una lista de todos los archivos. Además de utilizar caracteres comodín, también puede especificar varios modelos, separándolos con caracteres punto y coma (;). Por ejemplo, con *.EXE; *.BAT se obtendría una lista con todos los archivos ejecutables y todos los archivos por lotes de MS-DOS.
Ejemplo: Usando controles Drive, Dir y File realizar el sgte formulario.
Private Sub cmdeliminar_Click() Kill File1.Path & "\" & File1.FileName File1.Refresh End Sub Private Sub cmdrenombrar_Click() nuevo = InputBox("Ingrese nuevo nombre", "Cambiar Nombre") If Not IsNull(nuevo) Then Name File1.Path & "\" & File1.FileName As File1.Path & "\" & nuevo File1.Refresh End If End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path 'Establece la ruta al objeto File End Sub Private Sub Drive1_Change() On Error GoTo xerr Dir1.Path = Drive1.Drive 'Establece la ruta al objeto Dir Exit Sub xerr: MsgBox "No esta lista la unidad", vbExclamation, "Mensaje" End Sub Private Sub File1_Click()
Label1 = File1.Path & "\" & File1.FileName End Sub 27.- COMMOND DIALOG El control CommonDialog es un control personalizado (Microsoft CommonDialog Control COMDLG16.OCX / COMDLG32.OCX), y como casi todos los controles personalizados presenta un asistente de propiedades propio. Este control no se presenta en tiempo de El cuadro de diálogo, CommonDialog se diseño mas que con un simple icono : utiliza para varias funciones : Abrir Ficheros Guardar Ficheros Elegir colores Seleccionar Impresora • Seleccionar Fuentes • Mostrar el fichero de Ayuda
FUENTES Para mostrar el cuadro de diálogo correspondiente a Tipos de Letra ( Fonts ), debe ejecutarse la instrucción: CD1.ShowFont El cuadro de diálogo que se presenta es el siguiente:
Los valores que se pueden obtener de este cuadro de dialogo son:
CD1.FontName Indica el nombre de la fuente CD1.FontSize Indica el tamaño de la fuente CD1.Color Indica el color de la fuente (Abrir con Flags=256+1, 2 ó 3) CD1.FontBold = (True / False) Si es True, se ha elegido "Negrita" CD1.FontItalic = (True / False) Si es True, se ha elegido "Cursiva" CD1.FontStrikethru = (True / False) Si es True, se ha elegido "Tachada " CD1.FontUnderline = (True / False) Si es True, se ha elegido "Subrayada" Si se elige una versión Negrita Cursiva serían True las opciones FontBold y FontItalic El objeto Font no puede aplicarse al CommonDialog. Es decir, no podemos poner : Variable = CD1.Font.Size
sino Variable = CD1.Fontsize
COLOR Para mostrar el cuadro de diálogo correspondiente al color, se deberá ejecutar la instrucción: CD1.ShowColor El cuadro de diálogo tiene la misma forma que el cuadro de color de windows. Variablecolor = CD1.Color donde Variablecolor contendrá un número correspondiente al color elegido. Colores en Visual Basic. Visual Basic acepta para especificar un color, tres procedimientos: Mediante el número de color, mediante la sentencia RGB ( rojo, verde, azul ) o mediante la función QBColor. Por número El número que representa el color en VB está formado por la suma de la componente roja, la componente verde y la componente azul. Podríamos verlo muy bien en numeración Hexadecimal: Color = Hex XX YY ZZ Donde ZZ es un número Hexadecimal que representa la cantidad del color rojo. El mínimo estaría en 0 (H00) y el máximo en 255 (HFF) YY representaría la cantidad de color verde y XX la de color azul, ambos con los mismos límites explicados para el rojo. Por ejemplo: el rojo puro sería: el verde puro sería: el azul puro sería: Por la sentencia RGB
Hex(0000FF) = 255 Hex(00FF00) = 652280 Hex(FF0000) = 16711680
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. 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 0 1 2 3 4 5 6 7
Color
Negro Azul Verde Aguamarina Rojo Fucsia Amarillo Blanco
Número 8 9 10 11 12 13 14 15
Color
Gris Azul claro Verde claro Aguamarina claro Rojo claro Fucsia claro Amarillo claro 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 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 1 2 3 4 5
Ninguna acción. Muestra el cuadro de diálogo Abrir. Muestra el cuadro de diálogo Guardar como. Muestra el cuadro de diálogo Color. Muestra el cuadro de diálogo Fuente. 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
CommonDialog (CmdLG)
Private Sub cmd_Click(Index As Integer) With cmdlg Select Case Index Case 0 .ShowOpen Case 1 .Flags = cdlCFBoth Or cdlCFEffects .ShowFont Label1.AutoSize = True Label1.FontSize = .FontSize Label1.FontName = .FontName Case 2 .ShowColor Me.BackColor = .Color End Select End With End Sub
28.- EDITOR DE MENUS El Menú o Barra de Menú es la segunda línea de cualquier ventana Windows, donde pueden verse distintos nombres. La Barra de Menú es un componente de un Formulario. La Barra de Menú puede tener tantas palabras como se desee, y sobre cada palabra, puede desplegarse un Menú desplegable con mas palabras. Sobre cada una de estas puede a su vez desplegarse otro conjunto de palabras, etc. con lo que se puede conseguir una cantidad de palabras tan grande como necesitemos.
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 :
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 connection
de tipo
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:
Para utilizar una variable de tipo recordset lo que vamos a hacer es lo siguiente 1. En este caso vamos a trabajar de la mano con la variable de tipo connection entonces lo primero es declarar,instanciar y abrir una variable de tipo connection 2. Declarar la variable de tipo Recordset Dim rs As ADODB.Recordset .- donde rs es el nombre de la variable de tipo recordset 3. Instanciar la variable de tipo Recordset Set rs = New ADODB.Recordset .- Se instancia con la palabra NEW , Si la variable no es instanciada no se podrá utilizar Nota.- Los pasos 2 y 3 se pueden simplificar en unos solo Dim rs As New ADODB.Recordset .- aqui se esta declarando la variable y a la vez se esta instanciando (Observen la palabra New) 4. Declarar la ubicación de la variable de tipo Recordset rs.CursorLocation = tipo de cursor estos pueden ser adUseClient o adUseServer si se escoge aduseClient el cursor se creara al lado del cliente si se escoge adUseServer el cursor se creara al lado del servidor 5. Abrir la variable de tipo Recordset rs.open “tabla o consulta sql”,cn ,tipo de cursor, tipo de bloqueo -
donde tabla o consulta sql es el nombre de la tabla o la consulta sql al cual queremos acceder cn es el nombre de la variable de tipo connection Tipo de cursor hace referencia a como va a trabajar la variable de tipo recordset Tipo de Bloqueo hace referencia a como se va a bloquear la tabla cuando un usuario acceda a la tabla
Tipos de Cursor del Recordset Un cursor corresponde a un tipo de restricción aplicable al Recordset, y que señala la forma en que se podrá recorrer este objeto. Dependiendo de cómo se configuren las propiedades del tipo de cursor del objeto Recordset, se puede recorrer y actualizar los registros. Los cursores de la base de datos se comportan como punteros que permiten encontrar un elemento específico de un conjunto de registros. Los cursores son especialmente útiles para recuperar y examinar registros, y después realizar operaciones basadas en dichos registros. Si lo que necesitamos es recorrer el Recordset en forma secuencial, lo mejor es utilizar el cursor por defecto ya que es el que consume menos recursos, agilizando las operaciones. Por el contrario, si necesitamos recorrer el Recordset de otra forma, estos son los tipos de cursores existentes: Tipo de Cursor Valor Descripción adOpenForwardOnly 0 Es el cursor por defecto y nos permite recorrer el Recordset en forma secuencial. adOpenKeySet 1 Permite movernos hacia delante y atrás. Permite observar las modificaciones en los datos del Recordset , no así si existen ingresos de nuevos registros. adOpenDynamic 2 Permite movernos en cualquier sentido, viendo cualquier
adOpenStatic
modificación, ingreso o eliminación de datos del Recordset. Permite movernos en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.
3
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 adLockReadOnly
Valor 1
adLockPessimistic 2 adLockOptimistic
3
adBatchOptimistic 4
Descripción Es el bloqueo por defecto y no permite modificar los registros de la tabla. 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. 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. Los registros serán actualizados en modo batch.
Ejemplo 1: rs.Open "Alumnos",cn,adOpenDynamic ,adLockOptimistic .- Aquí se esta abriendo la tabla alumnos de la base de datos a la cual se conecto la variable cn de tipo de cursor fue adOpenDynamic y el tipo de bloqueo fue adLockOptimistic Este ejemplo se puede definir también de las siguiente maneras: • rs.Open "Alumnos",cn,2,3 o • rs.Open “Alumnos”,cn rs.LockType = adLockOptimistic rs.CursorType = adOpenDynamic Ejemplo 2: Rs.Open “Select * from alumnos where sueldo > 100”,cn,2,3 En este ejemplo se esta abriendo la variable rs con una consulta sql Para acceder a un determinado campo de la variable de tipo recordset se puede hacer de la siguiente manera: Ejemplo: vamos a suponer que la variable rs tiene dos campos cod y nom Rs(0) Rs.Fields(0) Rs!cod harían referencia al campo cod (va 0 por que es el índice del campo todos los índices empiezan con 0) Rs(1) ,Rs.Fields(1), Rs!nom .- harían referencia al campo nom Metodos del Recordset.Para mover la variable de tipo Recordset he aquí los métodos que pueden ser empleados:
Método MoveFirst MoveLast MoveNext MovePrevious
Descripción Posiciona el cursor en el primer registro Posiciona el cursor en el último registro Avanza el cursor en un registro Retrasa el cursor en un registro
Las propiedades relacionadas con el movimiento a través del Recordset son las siguientes: Propiedad AbsolutePosition BOF EOF RecordCount
Descripción 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 Es True cuando nos encontramos al principio del Recordset, antes del primer registro. Es True cuando nos encontramos al final del Recordset, después del último registro. Nos señala el número de registros que contiene el objeto Recordset.
Propiedades y colecciones del Recordset Ahora que hemos visto los aspectos básicos de un Recordset entregaremos al lector una guía con los principales métodos asociados a este objeto, de forma que se pueda profundizar en el estudio y utilización del objeto Recordset. Método Descripción AddNew Crea un nuevo registro en el Recordset. Sólo será insertado en la tabla cuando se aplique el método Update. Ejemplo:
CancelUpdate Clone Close Delete GetRows Move
MoveFirst
rs.AddNew rs(0) = "Rodrigo" rs(1) = "Rohland" rs.Update Cancela un proceso de actualización, ya sea de creación o de modificación de registros. Crea una copia del objeto Recordset. Ejemplo: Set rs2 = rs.Clone Cierra el objeto Recordset utilizado. Elimina del Recordset el registro que estemos utilizando en ese momento. Crea un arreglo con el contenido del Recordset. Si quieres aprender más sobre este método visita. Permite movernos hacia arriba si le indicamos un número positivo, o hacia abajo si le indicamos uno negativo. Ejemplo: rs.Move -2 Nos lleva al primer registro del Recorset.
MoveNext MoveLast MovePrevious NextRecordSet Open Requery
Update
Nos permite recorrer secuencialmente el Recordset, avanzando un registro hacia adelante. Nos lleva al último registro del Recordset. Nos permite recorrer en forma inversa el Recordset, avanzando un registro hacia atrás. Nos lleva al registro anterior. 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. 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 Con este método se puede actualizar el objeto Recordset, observándose los cambios ocurridos en los datos. Actualiza la tabla a la que hace referencia el objeto Recordset, haciendo efectivos los cambios realizados.
Otras propiedades Filter .- Sirve para filtrar la variable de tipo recordset Rs.Filter “Condicion de filtro” Ejemplo : rs.Filter = “sueldo > 100” .- aquí se esta filtrando los datos de la variable Rs donde el sueldo sea mayor a 100 (la condicion va como cadena) Find .- Sirve para buscar en base a un criterio, esta funcion hace que el puntero se ubique en la posición del registro que se ha buscado. Rs.find “Condicion de Busqueda” Ejemplo : Rs.Find "cod='A001'" .- Aquí se esta buscando el registro que tenga como codigo el ‘A001’ si en caso existe el puntero se ubica en ese registro caso contrario se va al fin de archivo (EOF toma el avlor de True) PROYECTO DE APLICACIÓN CON ADO Crear una aplicación que permita conectarse y desconectarse a una base de datos llamada “VENTAS.MDB UNa vez realizada la conexión se deberá mostrar el Código, Descricpción, Precio, Stock y Código de categoria de una tabla denominada PRODUCTOS. Esta tabla elaborado en access tiene la siguiente estructura: COD_PROD DES_PROD PRE_PROD STK_PROD COD_CAT
TEXTO TEXTO NUMERICO NUMERICO TEXTO
4 35 DOBLE ENTERO 3
Codigo del producto Descripcion Precio unitario Stock Categoria
Considerar el Siguiente formulario Nam
Name : CmdCone
CmdDescon
CmdMover
PASOS PARA TRABAJAR CON ADO • Realizar una referencia a ADO, para lo cual del menú “Project” elegimos “References” y luego seleccionamos “MicroSoft Activex Data Objects 2.1 o 2.5 Library”
• •
•
Declarar variables de tipo Connection, Command y RecordSet. Inicializar las variables, instanciando una nueva conección, comando o recordset.
Usar las propiedades, métodos y eventos de los objetos, que pueden ser útiles en la aplicación.
Código del Módulo • Haga un Clic en el Menú “Project”, “Add Module” Global Cn As ADODB.Connection Global Rs As ADODB.Recordset ‘Conectandose a un origen de datos Public Sub Conectar() On Error GoTo VerError 'Ir a la Etiqueta de Error Set Cn = New ADODB.Connection Cn.Open “Provider=Microsoft.jet.oledb.4.0; Data Source=C:\datos\ventas.mdb” Msgbox “conexion Correcta” Exit Sub VerError: MsgBox "Error Nº" + Str(Err.Number) + " - " + Err.Description
End Sub ‘Procedimiento para desconectarse de un origen de datos Public Sub Desconectar() Cn.Close Set Cn = Nothing End End Sub ‘Cargar registros de la consulta Public Sub CargarRecordset() Set Rs = New ADODB.Recordset Rs.ActiveConnection = Cn ‘ Rs.CursorType = adOpenDynamic datos Rs.LockType = adLockOptimistic sesiones Rs.CursorLocation = adUseClient Rs.Open "PRODUCTOS" End Sub
Activar la conección ‘Indica tipo de conj. de registros que devolverá el proveedor ‘ Indica la forma en que desee administrar el bloqueo en ‘ Controla donde se mantiene la colección de registros
CODIGO EN EL FORMULARIO Public Sub limpiar() Dim x As Object For Each x In Form1.Controls If TypeOf x Is TextBox Then x.Text = "" x.Enabled = False End If Next x End Sub Public Sub MostrarDatos() TxtCod_Prod = Rs.Fields("Cod_Prod") TxtDes_Prod = Rs.Fields("Des_Prod") TxtPre_Prod = Rs.Fields("Pre_Prod") TxtStk_Prod = Rs.Fields("Stk_Prod") TxtCod_Cat = Rs.Fields("Cod_Cat") End Sub Private Sub CmdConectar_Click() Call Conectar Call CargarRecordset Call MostrarDatos End Sub Private Sub CmdDesconectar_Click() Call Desconectar End Sub
Private Sub CmdMover_Click(Index As Integer) Select Case Index Case 0 Rs.MoveFirst Case 1 Rs.MovePrevious If .BOF Then .MoveFirst Case 2 Rs.MoveNext If .EOF Then .MoveLast Case 3 Rs.MoveLast End Select
End With Call MostrarDatos End Sub Private Sub Form_Load() Call limpiar ‘Llamada al procedimiento para limpiar y deshabilitar los controles End Sub MANEJO DE VB-ADO CON ACCESS
CODIGO EN EL MODULO Igual al Modulo anterior CODIGO EN EL FORMULARIO Public Sub Barra_Progreso() ‘Muestra la barra de progreso Dim i As Integer For i = 0 To 100 ProgressBar1.Value = i Next i End Sub
'Procedimiento que limpia los Cuadros de Texto Public Sub Limpiar() Dim X As Object For Each X In Form1.Controls If TypeOf X Is TextBox Then X.Text = "" End If Next X End Sub 'Procedimiento que deshabilita los cuadros 'de Texto Public Sub Deshabilitar() TxtCod_Prod.Enabled = False TxtDes_Prod.Enabled = False TxtPre_Prod.Enabled = False TxtStk_Prod.Enabled = False DataCombo1.Enabled = False End Sub Public Sub Habilitar() 'Procedimiento que habilita 'Los cuadros de texto TxtCod_Prod.Enabled = True TxtDes_Prod.Enabled = True TxtPre_Prod.Enabled = True TxtStk_Prod.Enabled = True DataCombo1.Enabled = True 'Procedimiento que Guarda los Datos del â&#x20AC;&#x2DC;formulario a la tabla productos Public Sub Guardar() Rs.Fields("Cod_prod") = TxtCod_Prod.Text Rs.Fields("Des_prod") = TxtDes_Prod.Text Rs.Fields("Pre_prod") = val(TxtPre_Prod.Text) Rs.Fields("Stk_prod") = Val(TxtStk_Prod.Text) Rs.Fields("Cod_cat") = DataCombo1.Text End Sub 'Procedimiento que Muestra_Datos Public Sub Mostrar() TxtCod_Prod = Rs.Fields("Cod_prod") TxtDes_Prod = Rs.Fields("Des_prod") TxtPre_Prod = Rs.Fields("Pre_prod") TxtStk_Prod = Rs.Fields("Stk_prod") DataCombo1.Text = Rs.Fields("Cod_cat") End Sub Private Sub Form_Activate() Call Limpiar 'Limpiar texto Call Deshabilitar 'Deshabilitar cuadros de texto
CmdGuardar.Enabled = False CmdNuevo.SetFocus SSTab1.Tab = 0
End Sub End Sub Private Sub Form_Load() Call Conectar Set Rs = New ADODB.Recordset Rs.CursorLocation = adUseClient Rs.ActiveConnection = Cn Rs.CursorType = adOpenDynamic Rs.LockType = adLockBatchOptimistic Rs.Open "PRODUCTOS" ‘se puede minimizar la operación de la siguiente manera 'Rs.Open "PRODUCTOS", Cn, adOpenDynamic, adLockBatchOptimistic Set Rt = New ADODB.Recordset Rt.Open "CATEGORIAS", Cn, adOpenStatic, adLockReadOnly Set DataCombo1.RowSource = Rt DataCombo1.ListField = "COD_CAT" DataCombo1.BoundColumn = "COD_CAT" End Sub ********************************************************************* 'Procedimiento que permite Generar el Código 'Un Nuevo registro Private Sub CmdNuevo_Click() Dim cod As Integer If Rs.RecordCount > 0 Then Rs.MoveLast 'Ir al último registro cod = Val(Right(Rs!COD_PROD, 3)) + 1 TxtCod_Prod = "P" + Format(cod, "000") Else TxtCod_Prod = "P001" End If Call Habilitar TxtCod_Prod.Enabled = False CmdGuardar.Enabled = True TxtDes_Prod.SetFocus End Sub ********************************************************************* ‘Guardar el Registro Private Sub CmdGuardar_Click() On Error GoTo GUARDARERROR Dim Rpta As Integer Rpta = MsgBox("Seguro de Guardar", 4 + 32, "Guardar") If Rpta = vbYes Then Rs.AddNew 'Añadir Registro en Blanco Call Guardar 'Sustituir datos del formulario a la tabla Rs.UpdateBatch 'Actualizar el registro CmdGuardar.Enabled = False End If Form_Activate Exit Sub GUARDARERROR:
MsgBox Err.Number & ":" & Err.Description, 16, "Mensaje" Resume next End Sub ********************************************************************* Private Sub CmdBuscar_Click() ‘Localizar un registro Dim codbus As String * 4 Rs.MoveFirst codbus = InputBox("Ing. Código Producto Buscar", "Buscar Producto") criterio = "COD_PROD='" + UCase(Trim(codbus)) + "'" Rs.Find criterio If Rs.EOF Then MsgBox "CODIGO PRODUCTO NO EXISTE" Call Limpiar Else Call Mostrar End If End Sub ********************************************************************* Private Sub CmdEditar_Click() 'Modificar los datos del campo Dim Rpta As Integer Dim codbus As String * 4 Rs.MoveFirst codbus = InputBox("Ing. Código Modificar", "Modificar Producto") criterio = "COD_PROD='" + UCase(Trim(codbus)) + "'" Rs.Find criterio If Rs.EOF Then MsgBox "CODIGO PRODUCTO NO EXISTE" Call Limpiar Else Call Mostrar Call Habilitar TxtCod_Prod.SetFocus End If End Sub ********************************************************************* Private Sub CmdActualizar_Click() On Error GoTo ERRORACTUALIZAR If MsgBox("Seguro de Actualizar", 4 + 32, "Actualizar") = vbYes Then Call Guardar Rs.UpdateBatch MsgBox "Registro Actualizado" CmdActualizar.Enabled = True End If Exit Sub
ERRORACTUALIZAR: 'ETIQUETA DE ERROR MsgBox Err.Number & ":" & Err.Description, 16, "ERROR" Resume Next End Sub ********************************************************************* Private Sub CmdCerrar_Click() 'Cerrar la conexi贸n con la Base de Datos Cn.Close Set Cn = Nothing End End Sub
Private Sub DataCombo2_Click(Area As Integer) Dim Dato As String ProgressBar1.Value = 0 If Area > 0 Then Call Barra_Progreso Rp.MoveFirst Dato = "DES_PROD='" + DataCombo2.Text + "'" Rp.Find Dato Txtcod = Rp.Fields("cod_prod") TxtPre = Rp.Fields("pre_prod") TxtStk = Rp.Fields("stk_prod")
TxtCat = Rp.Fields("COD_CAT") Exit Sub End If End Sub Private Sub SSTab1_Click(PreviousTab As Integer) Nopc = SSTab1.Tab Select Case Nopc Case 1 Set Rp = New ADODB.Recordset Rp.CursorLocation = adUseClient Rp.Open "PRODUCTOS", Cn, adOpenStatic, adLockReadOnly Set DataCombo2.RowSource = Rp DataCombo2.ListField = "DES_PROD" DataCombo2.BoundColumn = "DES_PROD" Case 2 'PROGRAMAR ELIMINACION End Select End Sub 'Procedimiento que valida el precio Private Sub TxtPre_Prod_LostFocus() If Not IsNumeric(TxtPre_Prod) Then MsgBox "Error dato no numerico" TxtPre_Prod = 0: TxtPre_Prod.SetFocus End If End Sub Ejercicio .Modificar el ejercicio de registros , pasandolo a archivos
Ejemplo Practico : Para este ejemplo debemos tener una base de datos en ACCESS llamada BDIDAT que debe estar en la misma carpeta que el proyecto. y dentro de esta un tabla llamada alumno con los sgtes campos:codalu, nomalu, sexo, foto(aquí se guarda el nombre de una imagen osea es una cadena) Debemos diseñar un formulario el cual debe contener un TabbedDialog el cual tendra 3 pestañas Registrar.- En esta parte se debera realizar un mantenimiento a la tabla alumno Contaremos con controles como Txtcod, Txtnom, Option1, Option2, CboFoto y DataGrid1
Consulta x Codigo.- En esta parte se ingresara un codigo y al dar ENTER se mostraran los datos de ese alumno caso contrario saldra un mensaje de error Para esto contaremos con los controles TxtBuscaCod, TxtBuscaNom, Opt1, Opt2, ImageBusca
Consulta x Sexo .- se escogera un sexo y al hacer clic en el boton OK sale los alumnos de ese sexo.(AquĂ tenemos los controles OP1, OP2 y cmdok ademas del grid DATAGRID2)
OJO: El control TABBED Dialog solo sirve como contenedor es como un Frame la diferencia es que tiene pestaĂąas para jalarlo tenemos que ir a Proyecto- ComponentesMicrosoft Tabbed Dialo Controls 6.0 Tambien utilizaremos un datagrid que esun control en forma de cuadricula el cual me va a permitir mostrar datos de un recordset mediante su propiedad DATASOURCE para jalarlo nos vamos Proyecto- Componentes-Microsoft DataGrid Controls 6.0
La programacion seria: Primero en un modulo debemos poner: Public cn$ ‘Cn es publica por lo tanto sera reconocida en todo el proyecto Sub main() cn = "Provider=Microsoft.Jet.Oledb.4.0;data Source=” & app.path &”\BDIDAT.mdb” FrmMant.Show End Sub Se debe utilizar siempre un Procedimiento llamado main ya que este permitira inicializar valores, definir constantes, etc. Y de ahí podemos llamar al formulario inicial, generalmente el formulario inicial debe ser uno que llame a los demas puede ser un MDI. Para crearlo solo ponemos SUB MAIN y programamos dentro todo lo que queramos. Notemos que guardamos la cadena de conexion y llamamos al formulario si estamos dentro de un Sub main del modulo debemos ponerlo como inicial(Explorador de ProyectoPropiedades- Objeto Inicial) En el formulario: No olvidar de hacer la referencia a ADO(Proyecto-Referencias) Dim rs As New ADODB.Recordset Dim Si_Nuevo% Sub ActivaControles(ByVal Modo As Boolean) 'Para activar los botones y texto(FRAME1) Frame1.Enabled = Modo 'Boton Nuevo y Grabar es el mismo CmdNuevo.Caption = IIf(Modo, "Grabar", "Nuevo") CmdNuevo.Picture = LoadPicture(App.Path & IIf(Modo, "\SAVE.BMP", "\NEW.BMP")) CmdModificar.Caption = "Modificar" CmdModificar.Picture = LoadPicture(App.Path & "\edit.bmp") CmdEliminar.Caption = "Eliminar" CmdEliminar.Picture = LoadPicture(App.Path & "\delete.bmp") 'Boton salir y Cancelar es el mismo CmdSalir.Caption = IIf(Modo, "Cancelar", "Salir") CmdSalir.Picture = LoadPicture(App.Path "\CLOSE.BMP"))
& IIf(Modo, "\UNDO.BMP",
CmdModificar.Enabled = Not Modo CmdEliminar.Enabled = Not Modo End Sub Este procedimiento tiene como finalidad activar o desactivar los controles se le envia un parámetro llamado MODO que puede ser True o False y según eso activa o desactiva ademas de cambiar el caption y la imagen a los botones ya que el boton Nuevo y Grabar es el mismo boton lo mismo sucede con Cancelar y Salir
Sub Limpia() txtcod = "" txtnom = "" Option1.Value = True CboFoto.Text = "" Image1.Picture = Nothing End Sub ‘Limpia el formulario Function valida() As Boolean 'Validar si se ingresa datos If Trim(txtcod) = "" Then MsgBox "Ingrese Codigo", vbCritical, "Mensaje" txtcod.SetFocus valida = False Exit Function End If If Trim(txtnom) = "" Then MsgBox "Ingrese Nombre", vbCritical, "Mensaje" txtnom.SetFocus valida = False Exit Function End If valida = True End Function Sub llena() ‘llena datos de los textos al RS rs(0) = Val(txtcod) rs(1) = txtnom rs(2) = IIf(Option1.Value, "M", "F") End Sub Private Sub CboFoto_Click() Image1.Picture = LoadPicture(App.Path & "\" & CboFoto.Text) ‘Muestra la foto que se escoge en el combo en el control Image End Sub Private Sub CmdEliminar_Click() rs.Delete ‘elimina un registro End Sub Private Sub CmdModificar_Click() Si_Nuevo = 3 Call ActivaControles(True) End Sub
Private Sub CmdNuevo_Click()
Dim p% If Si_Nuevo = 1 Then ‘Si el boton es nuevo Call ActivaControles(True) Call Limpia txtcod.SetFocus Si_Nuevo = 2 Else ‘El boton puede grabar o Modificar If valida Then ‘Si se validaron los datos If Si_Nuevo = 2 Then ‘Si se va a grabar rs.AddNew End If Call llena ‘Pasa los datos rs.Update ‘Actualiza la tabla Si_Nuevo = 1 ‘Y Vuelve a 1 Call ActivaControles(False) End If End If End Sub Private Sub CmdSalir_Click() If Si_Nuevo > 1 Then ‘Osea si se va a grabar o Modificar se puede cancelar Si_Nuevo = 1 Call ActivaControles(False) Else End End If End Sub Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) On Error GoTo xerr ‘Pasa los datos del grid a los textos txtcod = DataGrid1.Columns(0).Text txtnom = DataGrid1.Columns(1).Text If DataGrid1.Columns(2).Text = "M" Then Option1.Value = True Else Option2.Value = True End If CboFoto.Text = DataGrid1.Columns(3) Call CboFoto_Click ‘Se llama a lo que se programo en el combo xerr: End Sub Private Sub Form_Load() Call ActivaControles(False) Si_Nuevo = 1 rs.CursorLocation = adUseClient rs.Open "Alumno", cn, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs End Sub Private Sub SSTab1_Click(PreviousTab As Integer) ‘Se esta preguntado si el tab anterior fue Consulta x Sexo ya que Registrar seria 0 y Consulta ‘x Codigo seria 1 If PreviousTab = 2 Then rs.Filter = adFilterNone ‘Se quita el filtro rs.Requery End If End Sub
Consulta x Codigo Private Sub TxtBuscaCod_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then rs.MoveFirst rs.Find "codalu = " & Val(TxtBuscaCod) If rs.EOF Then MsgBox "No existe el codigo buscado", vbCritical, "Mensaje" Else TxtBuscaCod = rs(0) txtbuscaNom = rs(1) If rs(2) = "M" Then Opt1.Value = True Else Opt2.Value = True End If ImageBusca.Picture = LoadPicture(App.Path & "\" & rs(3)) End If End If End Sub Consulta x Sexo Private Sub CmdOk_Click() ‘Este boton es de la pestaña de Consulta X Sexo If Op1.Value Then rs.Filter = "sexo='M'" Else rs.Filter = "sexo='F'" End If Set DataGrid2.DataSource = rs ‘Se aplica el filter y se muestra en el grid End Sub NOTA: En el campo foto se debe grabar el nombre de una imagen con la extensión, la imagen debe encontrarse en el mismo sitio que el proyecto.