Top Banner

of 372

Visual Basic 6

Jul 17, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

1 2 P Pr ro og gr ra am ma ac ci i n n O Or ri ie en nt ta a a a O Ob bj je et to os s Primera edicin JOSE ALEJANDRO PORRAS RIVERA Autor de este libro Maestro actual del COBACH PLANTEL No13 XALTIANGUIS CONALEP ACAPULCO II 1998-2004 3 CAPTULO 1 FUNDAMENTOS MicrosoftVisualBasicesunconjuntodeherramientasque posibilitaneldesarrollodeaplicacionesparaWindowsdeunamanerarpidaysencilla,basadoenellenguajeBASICyenla programacin orientada a objetos. La palabra Visual hace referencia al mtodo que se utiliza para crear la interfaz grfica de usuario. En lugar de escribir numerosaslneasdecdigoparaimplementarlainterfaz, simplementeseutilizaelratnparaagregarobjetos prefabricados en el lugar deseado dentro de la pantalla. LapalabraBasichacereferenciaallenguajeBASIC (BeginnersAll-PurposeSymbolicInstructionCode),unlenguaje utilizadopormsprogramadoresqueningnotrolenguajeenla historia de la informtica. Visual Basic ha evolucionado a partir dellenguajeBASICoriginalyahoracontienecentenaresde instrucciones, funciones y palabras clave, muchas de las cuales estndirectamenterelacionadasconlainterfazgrficade Windows. El lenguaje de programacin Visual Basic no es exclusivo de MicrosoftVisualBasic.Estelenguajeesutilizadotambinpor MicrosoftExcel,MicrosoftAccessymuchasotrasaplicaciones 4 Windows.EllenguajedeprogramacinVisualBasicScriptpara programarenInternetesunsubconjuntodellenguajeVisual Basic. De tal forma, que la inversin realizada en el aprendizaje de Visual Basic le ayudar a abarcar estas otras reas. EJECUTANDO VISUAL BASIC Si ya tiene instalado Visual Basic, para ejecutarlo proceda igual que con cualquier otra aplicacin Windows: hacer click en el icono correspondiente. Enseguidasepresentarunaventanasimilaralafigura siguiente: 5 En la ventana anterior indicar el tipo de proyecto que desea crear(paranuestrocasoseleccionarEXEestndar)ydarclick sobre el botn Abrir. En ese instante se presentar el Entorno Integrado de Desarrollo (IDE) de Visual Basic: Los elementos que componen el IDE de Visual Basic son: -Barra de mens-Barra de herramientas -Cuadro de herramientas-Diseador de formularios -Explorador de proyectos-Ventana de propiedades -Posicin del formulario-Mens contextuales Barra de mens 6 Presentalasrdenesqueseutilizanparadesarrollaruna aplicacin.Lasopcionesmsutilizadasson:Archivo,Edicin, Ver,VentanayAyuda.Seproporcionanotrosmensparatener accesoafuncionesespecficasdeprogramacincomoProyecto, Formato o Depuracin. Barra de herramientas Facilitaelaccesorpidoalasrdenesmscomnmente utilizadas. Omitimos el significado de cada botn porque le ser mostrado al pasar el puntero del ratn sobre cada uno de ellos. Puede visualizar otras barras de herramientas ejecutando la opcin Barra de herramientas del Men Ver. Cuadro de herramientas Proporciona un conjunto de herramientas que permiten disear la interfaz grfica de usuario. 7 IconoDescripcin Puntero Cuadro de imagen Etiqueta Cuadro de texto Marco Botn de comando Casilla de verificacin Botn de opcin Cuadro combinado Cuadro de lista Barra de desplazamiento horizontal Barra de desplazamiento vertical Cronmetro Cuadro de lista de unidades Cuadro de lista de directorios Cuadro de lista de archivos Formas Lneas Imagen Contenedor OLE 8 Parautilizaralgnobjetosimplementedebehacerdoble clicksobreeliconocorrespondiente,luegopuedecambiarsu posicin y sus dimensiones. Diseador de formularios Eslaventanasobrelaquecolocaremoslosobjetos (controles) de la interfaz de usuario. Explorador de proyectos Contieneelconjuntodearchivosqueconstituyenla aplicacin o proyecto. 9 Ventana de propiedades Comoveremosmsadelante,cadaobjetollevaasociadoun conjuntodepropiedades.Paraveroespecificarlosvaloresde laspropiedadesdelosobjetos,utilizaremoslaventanade propiedades. Posicin del formulario Estaventanalepermiteespecificarlaposicindelos formularios de la aplicacin. Mens contextuales 10 Esunmenemergentequepresentardenesespecficas relativas a un determinado objeto. Para abrir un men contextual, darclickderechosobreelobjeto.Porejemplo,aldarclick derechosobreelformulariosepresentaelsiguientemen contextual. Ventana de cdigo Se presenta cuando se hace doble click sobre un objeto que se encuentra en el Diseador de formularios. Esta ventana muestra doscuadroscombinados(combos)enlapartesuperior,enuna aparece el nombre del objeto (izquierda) y en la otra el nombre del evento (derecha). 11 MI PRIMERA APLICACIN Haytrespasosprincipalesparacrearunaaplicacinen Visual Basic: -Crear la interfaz. -Establecer propiedades. -Escribir el cdigo. Para ver como se realiza esto, siga los pasos del siguiente ejemploparacrearunaaplicacinsencillaqueconsisteenun formulario y un botn de comando. Cuando haga click en el botn decomandoaparecerelmensajeVisualBasicesfcilenun cuadro de dilogo predefinido. Creacin de la interfaz Para el desarrollo del presente ejemplo proceda a crear una nuevaaplicacin.Enseguidaaadirunbotndecomandoal formulario,paraelloenelCuadrodeherramientas,dardoble click sobre el control deseado, tal como se indica en la figura siguiente: 12 Laaparienciadelainterfazdebesersimilaralafigura mostrada: Estableciendo las propiedades Paraverlaspropiedadesdeunobjeto,simplementedebe seleccionarloypulsarlateclaF4.Porejemplolafigura siguiente muestra las propiedades del botn de comando y podemos ver que la propiedad Caption tiene el valor Command1. 13 Puedecambiarelvalordecualquierpropiedad seleccionndolo de la ventana anterior y simplemente modificando su valor, por ejemplo para el caso anterior establezca el valor de la propiedad Caption de Command1 a Haga click aqu. De manera similar proceda cambiar la propiedad Caption del formularioaMiprimeraaplicacin.Laaparienciadela interfaz debe ser similar a la figura mostrada: Escribiendo el cdigo 14 Para ingresar el cdigo a la aplicacin debe dar doble click sobre el control al cual asociaremos dicho cdigo. Para nuestro casodardobleclicksobreelbotndecomandoeingresarel cdigo que se indica a continuacin: Para guardar la aplicacin que acaba de crear, seleccione la opcin Guardar Proyecto del Men Archivo.Bueno, ahora slo falta que ejecute su aplicacin. Para ello simplementedebepulsarlateclaF5.Elresultadodebeser similar al siguiente: 15 CAPTULO 2 LOS OBJETOS Visual Basic se basa en la programacin orientada a objetos (POO), la cual es una forma de programacin que utiliza objetos (similaresalosobjetosdelmundoreal)paralasolucinde problemas.LaPOOpermitedescomponerunproblemaenbloques relacionados. Cada bloque pasa a ser un objeto autocontenido que contienesuspropiosdatoseinstrucciones.Deestamanera,la complejidad se reduce y se pueden realizar programas ms largos de una manera sencilla. MECANISMOS BSICOS DE LA POO Losmecanismosbsicosdelaprogramacinorientadaa objetos son: -Objetos -Propiedades -Mtodos -Eventos -Mensajes -Clases - 16 Objetos Unobjetoesunaentidadquetieneatributosparticulares (propiedades) y unas formas de operar sobre ellos (mtodos). Por tanto, un objeto contiene variables que especifican su estado y operaciones que definen su comportamiento. Sonejemplosdeobjetos:formularios,botonesdecomando, cuadros de texto, etiquetas, etc. Propiedades Las propiedades representan las caractersticas del objeto. Haypropiedadesparticulares,comoCaptionquelaposeenlos botonesdecomandoporejemplo,ygenricascomoNamequela poseen todos lo objetos. Mtodos Losmtodossonprocedimientosasociadosaunobjeto.Se ejecutan como respuesta a un evento, por ejemplo al dar click en un botn de comando. Tambin pueden ser invocados explcitamente en el programa. Eventos Un evento es la capacidad de un objeto de reaccionar cuando ocurre una determinada accin (accin y reaccin). Como respuesta auneventoseenvaunmensajeyseejecutaundeterminado mtodo (procedimiento). 17 Mensajes Unmensajeesunallamadaaunmtodo(procedimiento),de tal forma que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el procedimiento asociado. Cuandoseejecutaunprogramaorientadoaobjetos,los objetosestnconstantementerecibiendo,interpretandoy respondiendo a mensajes de otros objetos. Clases Unaclaseesunadescripcinparaproducirobjetosdeesa clase o tipo. Es decir se trata de una generalizacin de un tipo especficodeobjetos.Enotraspalabras,unobjetoesuna variable del tipo definido por una clase. Por ejemplo, piense en un molde para hacer pasteles, el molde es la clase y los pasteles los objetos. CARACTERSTICAS DE LA POO Lascaractersticasfundamentalesdelaprogramacin orientada a objetos son: -Abstraccin -Encapsulamiento -Herencia -Polimorfismo 18 Abstraccin Laabstraccinpermitenodetenernosenlosdetalles concretos del funcionamiento de las cosas, sino centrarnos en los aspectosquerealmentenosimportanynossontilesenun determinadomomento,enciertamedida,sepodradecirquees sese el objeto y olvdese de como funciona en forma interna. Porejemplo,paramanejarunacomputadoranonecesitamos saber como funcionan sus circuitos electrnicos, en trminos de corriente, tensin, etc. Encapsulamiento Estacaractersticapermiteverunobjetocomounacaja negra autocontenida en la que se ha metido de alguna manera toda lainformacinquemanejadichoobjeto.Estopermitemanipular losobjetoscomounidadesbsicas,permaneciendoocultasu estructura interna. Herencia Laherenciaeslacaractersticaquepermitecompartir automticamente propiedades y mtodos entre objetos. Es decir, se puedencrearnuevasclasesdeobjetosenbaseaclases existentes.Msconcreto,unobjetopuedeheredarunconjunto general de propiedades y mtodos a las que puede aadir aquellas caractersticas que son especficas suyas. El usuario de Visual Basic no dispone de esta caracterstica. 19 Polimorfismo Polimorfismo,delgriegocuyosignificadoesmuchas formas,eslacaractersticaquepermiteimplementarmltiples formas de un mismo mtodo, dependiendo cada unade ellas de la clasesobrelaqueserealizalaimplementacin.Estohace posible que se puede acceder a una variedad de mtodos distintos (todos con el mismo nombre) utilizando exactamente el mismo medio de acceso. LOS OBJETOS DE VISUAL BASIC VisualBasicsoportalaabstraccin,laencapsulacin,el polimorfismo y la reutilizacin de cdigo. Lareutilizacindecdigoeslacapacidaddetrasladar caractersticas de un objeto a otro, lo que se logra con alguna formadeherencia.Estoseconsiguemediantelacreacinyuso del objeto. LosobjetosdeVisualBasicestndivididosendostipos: controles y contenedores. Loscontrolessonunmediogrficoquepermitenalos usuariosinteractuarconlaaplicacinparalamanipulacinde datos y ejecucin de tareas. Son ejemplo de controles: etiquetas, cuadros de texto, botones de comando,casillas de verificacin, botones de opcin, cuadros de lista, cuadros combinados, etc. 20 Loscontenedoressonobjetosquepuedenincluirotros objetos y permiten el acceso a los objetos que contienen. Entre losmsutilizadostenemosalosformularios,marcosy cuadrculas. El formulario ms los controles constituyen la interfaz de la aplicacin. REFERENCIANDO OBJETOS La sintaxis para referenciar objetos es la siguiente: OBJETO.PROPIEDAD = VALOR Porejemplo,paraestablecerelttulodeunformularioa Visual Basic es fcil, la orden sera: Form1.Caption = Visual Basic es fcil LOS EVENTOS Cadaobjetorespondeaunconjuntodeeventos.Como respuestaauneventoseejecutaundeterminadoprocedimiento. Los procedimientos asociados a un evento presentan la forma: Private Sub OBJETO_EVENTO() SENTENCIAS End Sub 21 Paraaclararesteconceptodesarrollaremoslasiguiente aplicacin, la cual consiste en un formulario, un cuadro de texto y un botn de comando. El usuario debe ingresar un mensaje en el cuadrodetextoyalpulsarelbotndecomando,elmensaje recientemente ingresado, se coloca como ttulo del formulario. Paraelloprocedaaconstruirlainterfazmostradaenla figura anterior. Luego, dar doble click sobre el botn de comando e ingrese el siguiente cdigo: Private Sub Command1_Click() Form1.Caption = Text1.Text End Sub Seguidamenteguardeyprocedaejecutarsuaplicacin.Como puedeverificar,eleventoClicksedisparacadavezqueel usuario pulsa (hace click) sobre un control. 22 CONVENCIN DE NOMBRES PARA LOS OBJETOS La convencin a seguir en la presente gua - para dar nombre a los objetos - consiste en utilizar ciertos prefijos, los cuales indicaran el tipo de objeto del que se trata. PrefijoObjeto FrmFormulario FraMarco LblEtiqueta TxtCuadro de texto CmdBotn de comando ChkCasilla de verificacin OptBotn de opcin LstCuadro de lista CboCuadro combinado TimCronmetro HSBarra de desplazamiento horizontal VSBarra de desplazamiento vertical PicCuadro de imagen ImgImagen DrvCuadro de lista de unidades DirCuadro de lista de directorios FilCuadro de lista de archivos OleContenedor OLE 23 GrdCuadrcula GraGrfico CtrControl (se utiliza en procedimientos cuando el tipo de control es desconocido) 24 CAPTULO 3 EL LENGUAJE VisualBasicesunlenguajedeprogramacinbasadoenel lenguajeBASIC,alcualincorporalafuncionalidaddela programacin orientada a objetos. El cdigo de Visual Basic se almacena en mdulos, donde cada mduloestsubdivididoendistintassecciones,unaparacada objetodelmdulo.Cadaseccindecdigopuedecontenerunoo msprocedimientos,formadospordeclaracionesdeconstantesy variables,expresiones,sentenciasdecontrolyllamadasa procedimientos y/o funciones. En este captulo vamos a analizar los diferentes elementos queintervienenalmomentoderealizarelcdigoparauna aplicacin. TIPOS DE DATOS Losdatosconlosquetrabajaremosprobablementeincluyan informacinrelacionadaconnmeros,dinero,nombres, descripciones,fechas,etc.Cadadatocorrespondeaun determinadotipo,esdecir,perteneceaunacategoradedatos que se manipulan de maneras similares. 25 TipoDescripcinRango IntegerEntero (2 bytes)-32768 a 32767 LongEntero largo (4 bytes)-2147483648 a 2147483647 SinglePuntoflotantedesimple precisin (4 bytes) -3.40E+38 a 3.40E+38DoublePuntoflotantededoble precisin (8 bytes) -1.79D+308 a 1.79D+308 CurrencyMonetario (8 bytes)+/-922337203685477.5807 ByteCarcter (1 byte)0 a 255 StringCadenadecaracteres(1 byte por carcter) Aproximadamente hasta64K(65400 caracteres) BooleanLgico (2 bytes)True o False DateFecha/Hora (8 bytes)01/ENERO/100 a31/DICIEMBRE/9999 Variant (por omisin) Cualquier tipo de datoCon nmeros hasta el intervalo de un tipo Double. Concaracteres22 bytes+1bytepor carcter 26 IDENTIFICADORES Los identificadores son nombres dados a los elementos de una aplicacin,talescomoconstantes,variables,procedimientos, funciones,objetos,etc.Unidentificadoresunasecuenciade caracteresquepuedeserdehasta255caracteres.Parala construccindeidentificadoresdebemostenerpresentelas siguientes reglas: -Debencomenzarconunaletraynopuedecontenerespaciosen blanco. -Letras,dgitosycaracteressubrayadosestnpermitidos despus del primer carcter. -No se puede utilizar una palabra reservada como identificador. Una palabra reservada tiene un significado especial para Visual Basic. CONSTANTES Una constante almacena un dato cuyo valor no cambia durante la ejecucin de un programa. Para declarar una constante utilice la siguiente sintaxis: Const NOMBRE_CONSTANTE [As TIPO] = VALOR Si no se declara el tipo de constante (utilizando As TIPO) seasignaalaconstanteeltipodedatomsapropiadoasu valor. 27 El valor de una constante puede ser numrico, alfanumrico, carcter o de tipo fecha y hora. Por ejemplo: Const MAXIT = 25 Const PI As Double = 3.141592Const CADENA As String = Visual Basic es fcilConst FECHA_POR_DEFECTO = #01/01/99# VARIABLES Unavariablealmacenaundatocuyovalorpuedecambiar durante la ejecucin de un programa. Para declarar una variable utilice la siguiente sintaxis: Dim NOMBRE_VARIABLE [As TIPO] Cuandosedeclaraunavariableynoseespecificasutipo (con As TIPO), se asume que es de tipo Variant. LainstruccinDimpuederealizarmsdeunadeclaracin, teniendoencuentaquelaclusulaopcionalAsTIPOlepermite definir el tipo de dato de cada variable que vaya a declarar. Por ejemplo: Dim X, Y As Integer Lasentenciaanteriorlepuedeinducirapensar queXeY sondetipoInteger,locualnoescierto,puesXesdetipo Variant (por omisin) e Y es de tipo Integer. 28 Para asignar valores a una variable, utilizar la siguiente sintaxis: NOMBRE_VARIABLE = VALOR A manera de ejemplo considere lo siguiente: Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double CANTIDAD = 30 PRECIO = 1.5 TOTAL = CANTIDAD * PRECIO OPERADORES Losoperadoressonsmbolosqueindicancmosern manipuladoslosoperandos.Losoperandossonlosdatos (constantesy/ovariables)sobrelosqueactalosoperadores para producir un determinado resultado. Operadores aritmticos OperadorSignificado ^Exponenciacin -Menos unario */Multiplicacin y divisin \ Divisin entera ModResto de una divisin entera 29 +-Suma y resta Operadores relacionales OperadorSignificado =Igual que

Diferente que < Menor que > Mayor que

Mayor o igual que Operadores lgicos OperadorSignificado NotNegacin AndConjuncin OrDisyuncin inclusiva XorDisyuncin exclusiva EqvEquivalencia (opuesto a Xor) ImpImplicacin(falsosiprimeroperando verdadero y segundo operando falso) Operadores de cadenas de caracteres OperadorSignificado 30 &Concatenacin LikeCompara dos cadenas de caracteres SENTENCIAS Unasentenciaesunalneadecdigoqueindicaunaoms operacionesarealizar.Unalneapuedeincluirvarias sentencias, separadas unas de otras por dos puntos. Por ejemplo: Dim CANTIDAD As Integer, PRECIO As Double, TOTAL As Double CANTIDAD = 30 : PRECIO = 1.5 : TOTAL = CANTIDAD * PRECIO UnasentenciaVisualBasicpuedeescribirseenmsdeuna lnea fsica utilizando el carcter de continuacin de lnea (un espacioenblancoseguidodelcarcterdesubrayado).Por ejemplo: Dim CH4_ENTRADA As Double, CH4_SALIDA As Double, _ CH4_GENERA As Double, CH4_CONSUME AS Double ENTRADA Y SALIDA DE DATOS VisualBasicposeeunaseriedeobjetos(controles)que pueden ser utilizados como mecanismos de entrada y salida (E/S) dedatos.Sinembargo,estossernestudiadosencaptulos posteriores. Otraposibilidaddeproporcionardatosodevisualizarlos durantelaejecucindeunaaplicacinesutilizandocajasde 31 dilogos predefinidas. Debido a que esta es la forma ms simple de realizar la E/S de datos nos ocuparemos de ella. Entrada de datos La entrada de datos permite proporcionar valores durante la ejecucindeunaaplicacin.Estosvaloressoningresados generalmentemedianteeltecladoyasignadosavariablesdel programa.EnVisualBasicunaformadeingresardatosala aplicacin es utilizando la caja de dilogo predefinida provista por la funcin InputBox. Su sintaxis es la siguiente: VARIABLE = InputBox(MENSAJE [, TTULO] [, PREDETERMINADO]) Donde MENSAJE es el mensaje que indica al usuario el tipo de informacin que debe ingresar. Por ejemplo, las sentencias: Dim EDAD As Integer EDAD = InputBox(Ingrese su edad?) DalugaraqueVisualBasicpresentelasiguientecajade dilogo solicitando la informacin requerida: 32 Comopuedeobservar,elrestodelosparmetrosson opcionales.TTULOeseltextoquesemuestraenlabarrade ttulo del cuadro de dilogo, si se omite TTULO, el nombre de la aplicacineslaquesemuestraenlabarradettulo. PREDETERMINADOesunaexpresindecadenaqueapareceenel cuadrodetextocomorespuestapredeterminadasinose proporcionaningnotrotexto.SiseomitePREDETERMINADOel cuadro de texto se muestra vaco. A manera de ejemplo considere lo siguiente: Dim EDAD As Integer EDAD = InputBox(Ingrese su edad?, Ficha de datos, 18) En este caso se visualiza la caja de dilogo que se presenta en la figura siguiente: Salida de datos La salida de datosgeneralmenteconsisteentomarla informacin de la memoria y mostrarla en pantalla. Para realizar 33 la operacin de salida de datos en Visual Basic, podemos utilizar el procedimiento MsgBox, cuya sintaxis es como sigue: MsgBox MENSAJE [, ICONO, TTULO] MENSAJE es La cadena que se muestra como salida en la caja de dilogo. ICONO es se refiere al estilo de icono que se va ha utilizaryTTULOesunatextoquesemostrarenlabarrade ttulo de la caja de dilogo. Por ejemplo: Dim EDAD As Integer EDAD = InputBox(Ingrese su edad?) EDAD = EDAD + 10 MsgBox Dentro de 10 aos su edad ser: & Str(EDAD) Si ejecuta el cdigo anterior e ingresa su edad (en mi caso 29 aos) la salida debe ser similar a la figura siguiente: Para que pueda ejecutar el cdigo anterior, proceda a crear unanuevaaplicacinyhagadobleclicksobreelformulario, luego ingrese el cdigo anterior: Private Sub Form_Load() Dim EDAD As Integer 34 EDAD = InputBox(Ingrese su edad?) EDAD = EDAD + 10 MsgBox Dentro de 10 aos su edad ser: & Str(EDAD) End Sub A manera de observacin cabe sealar que la funcin Str() se utilizaparaconvertirunaexpresinnumricaaunacadenade caracteres. ESTRUCTURAS DE CONTROL Lasestructurasdecontrolpermitentomardecisionesy realizarunprocesorepetidasveces(procesositerativos).Para elloVisualBasicdisponedelassiguientesestructurasde control: If . . . Then . . . Else, If . . . Then . . . ElseIf, Select Case, For . . . Next, While . . . . Wend, Do . . . Loop y GoTo. Estructura If . . . Then . . . Else Este tipo de estructura evala una determinada condicin y enfuncinaelloejecutaunodeentredosposiblesgruposde sentencias. Su sintaxis es la siguiente: If CONDICIN Then SENTENCIAS_VERDADERAS Else SENTENCIAS_FALSAS 35 End If SiCONDICINesverdaderaseejecutaelgrupode SENTENCIAS_VERDADERAS. Si CONDICIN es falsa se ejecuta el grupo de SENTENCIAS_FALSAS. Por ejemplo, el siguiente cdigo determina si un entero A es o no divisible por otro entero B: Dim A As Integer, B As Integer A = InputBox(Ingrese A?) B = InputBox(Ingrese B?) If A Mod B = 0 Then MsgBox Str(A) & es divisible por & Str(B) Else MsgBox Str(A) & no es divisible por & Str(B) End If Estructura If . . . Then . . . ElseIf Este tipo de estructura se utiliza para elegir una de entre mltiples alternativas. Su sintaxis es como sigue: If CONDICIN_1 Then SENTENCIAS_1 ElseIf CONDICIN_2 Then SENTENCIAS_2 . 36 . . Else SENTENCIAS_FALSAS End If SiCONDICIN_1esverdaderaseejecutaelgrupode SENTENCIAS_1,ysiesnosecumple,seevalansecuencialmente lascondicionessiguienteshastaElse,ejecutndoselas sentenciascorrespondientesalprimerElseIfcuyacondicinsea verdadera. Si todas las condiciones son falsas, se ejecutan las SENTENCIAS_FALSAS correspondientes a Else. Por ejemplo considere el siguiente cdigo, el cual imprime el nombre del mes correspondiente a los nmeros del 1 al 12. Dim N As Integer N = InputBox(Ingrese N?) If N = 1 Then MsgBox Enero ElseIf N = 2 Then: MsgBox Febrero ElseIf N = 3 Then: MsgBox Marzo ElseIf N = 4 Then: MsgBox Abril ElseIf N = 5 Then: MsgBox Mayo ElseIf N = 6 Then: MsgBox Junio ElseIf N = 7 Then: MsgBox Julio ElseIf N = 8 Then: MsgBox Agosto 37 ElseIf N = 9 Then: MsgBox Setiembre ElseIf N = 10 Then : MsgBox Octubre ElseIf N = 11 Then : MsgBox Noviembre ElseIf N = 12 Then : MsgBox Diciembre Else : MsgBox Error de datos End If Estructura Select Case Este estructura es una alternativa a la estructuraIf . . . Then . . . ElseIf, cuando lo que necesita es comparar la mismaexpresincondiferentesvalores.Susintaxisesla siguiente: Select Case EXPRESIN_TEST Case EXPRESIN_1 SENTENCIAS_1 Case EXPRESIN_2 SENTENCIAS_2 . . . Case Else SENTENCIAS_FALSAS End Select 38 En este caso se comprueba el valor de EXPRESIN_TEST frente alalistaexpresionesEXPRESIN_1,EXPRESIN_2,...yas sucesivamente,ybuscaelprimerCasequeincluyaelvalor evaluadoenEXPRESIN_TEST,ejecutandoacontinuacinelbloque desentenciascorrespondiente.Sinoexisteunvaloriguala EXPRESIN_TEST,entoncesseejecutalasSENTENCIAS_FALSAS correspondientes al Case Else.Amaneradeejemplovamosacodificarelprogramadela seccinanteriorelcualimprimeelnombredelmes correspondientealosnmerosdel1al12.Peroenestavez utilizaremos la estructura Select Case (compare con cual de ambas estructuras es ms cmodo trabajar). Dim N As Integer N = InputBox(Ingrese N?) Select Case N Case 1: MsgBox Enero Case 2: MsgBox Febrero Case 3: MsgBox Marzo Case 4: MsgBox Abril Case 5: MsgBox Mayo Case 6: MsgBox Junio Case 7: MsgBox Julio Case 8: MsgBox Agosto 39 Case 9: MsgBox Setiembre Case 10 : MsgBox Octubre Case 11 : MsgBox Noviembre Case 12 : MsgBox Diciembre Case Else MsgBox Error de datos End Select Cabe destacar que Select Case tambin se puede utilizar de la siguiente manera: Dim X As Integer X = InputBox(Ingrese X?) Select Case X Case 1 MsgBox X = 1 Case 2, 3 MsgBox X = 2 o X = 3 Case 4 To 10 MsgBox 4 = 0 Then LstProgramado.AddItem CURSO LstSeleccionar.RemoveItem I End If End Sub Private Sub CmdQuitar_Click() Dim CURSO As String, I As Integer CURSO = LstProgramado.Text I = LstProgramado.ListIndex If LstProgramado.ListIndex >= 0 Then 79 LstSeleccionar.AddItem CURSO LstProgramado.RemoveItem I End If End Sub Private Sub CmdAgregarTodo_Click() Dim I As Integer For I = 0 To LstSeleccionar.ListCount - 1 LstProgramado.AddItem LstSeleccionar.List(I) Next LstSeleccionar.Clear End Sub Private Sub CmdQuitarTodo_Click() Dim I As Integer For I = 0 To LstProgramado.ListCount - 1 LstSeleccionar.AddItem LstProgramado.List(I) Next LstProgramado.Clear End Sub Seguidamente mostraremos un ejemplo del uso de los cuadros combinados. Para tal fin vamos a desarrollar una aplicacin que permitarealizarconsultasacercadeundeterminadocurso.La relacindecursossepresentarmedianteuncuadrocombinado, del cual el usuario debe seleccionar el curso de su inters y en 80 seguida se presentar el nombre del profesor encargado del curso (teora), el nombre del jefe de prctica (laboratorio), as como los horarios de teora y de laboratorio, respectivamente. Paraeldesarrollodelapresenteaplicacinprocedaa ubicar los siguientes controles en el formulario: 1 etiqueta 1 cuadro de texto 1 cuadro combinado 1 botn de comando Enseguidaprocedaaestablecerlaspropiedadessegnse indica: Form1 81 NombreFrmConsultaCursos BorderStyle3-Fixed Dialog CaptionConsulta de cursos Label1 NombreLblCursos CaptionCursos: Text1 NombreTxtCurso MultiLineTrue ScrollBars2-Vertical Text Combo1 NombreCboCursos Text Style2-Dropdown List Command1 NombreCmdSalir Caption &Salir Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Dim Matriz(5, 3) As String Private Sub Form_Load() CboCursos.AddItem Microsoft Visual Basic Nivel I CboCursos.AddItem Microsoft Visual Basic Nivel II 82 CboCursos.AddItem Microsoft Visual FoxPro Nivel I CboCursos.AddItem Microsoft Visual FoxPro Nivel II CboCursos.AddItem Microsoft Visual C++ Nivel I CboCursos.AddItem Microsoft Visual C++ Nivel II Matriz(0, 0) = Castillo Peralta, Carlos Matriz(1, 0) = Castillo Peralta, Carlos Matriz(2, 0) = Linares Alarcon, Adams Matriz(3, 0) = Castillo Peralta, Carlos Matriz(4, 0) = Crdoba Saavedra, Javier Matriz(5, 0) = Castillo Peralta, Carlos Matriz(0, 1) = Sa 08-11 Matriz(1, 1) = Sa 14-17 Matriz(2, 1) = Sa 08-11 Matriz(3, 1) = Do 08-11 Matriz(4, 1) = Sa 14-17 Matriz(5, 1) = Sa 17-20 Matriz(0, 2) = Castillo Peralta, Carlos Matriz(1, 2) = Linares Alarcon, Adams Matriz(2, 2) = Montes Tejada, Estela Matriz(3, 2) = Linares Alarcon, Adams Matriz(4, 2) = Crdoba Saavedra, Javier Matriz(5, 2) = Crdoba Saavedra, Javier Matriz(0, 3) = Sa 11-13 Matriz(1, 3) = Do 08-10 83 Matriz(2, 3) = Sa 11-13 Matriz(3, 3) = Do 14-16 Matriz(4, 3) = Sa 18-20 Matriz(5, 3) = Do 08-10 End Sub Private Sub CboCursos_Click() Dim P_TEORIA As String, H_TEORIA As String Dim P_LAB As String, H_LAB As String P_TEORIA = Profesor de teora: & _ Matriz(CboCursos.ListIndex, 0) H_TEORIA = Horario de teora: & _ Matriz(CboCursos.ListIndex, 1) P_LAB = Jefe de prctica: & _ Matriz(CboCursos.ListIndex, 2) H_LAB = Horario laboratorio: & _ Matriz(CboCursos.ListIndex, 3) TxtCurso = P_TEORIA & vbCrLf & H_TEORIA & vbCrLf & _ P_LAB & vbCrLf & H_LAB End Sub Private Sub CmdSalir_Click() End End Sub 84 La constante vbCrLf es una combinacin de retorno de carro y avance de lnea, es equivalente a Chr(13) + Chr(10). Paraesteejemploenparticularhemosalmacenadola informacinenmemoriaRAMmedianteelusodeunarreglo bidimensional (Matriz). Cronmetro Uncronmetrosirveparacontrolareltiempotranscurrido desde el inicio de una accin. PropiedadDescripcin IntervalEspecificaelnmerodemilisegundosquese esperar para disparar el evento Timer. ElcontrolCronmetrorespondealeventoTimer,cuya descripcin es: EventoDescripcin TimerOcurrecuandoelnmerodemilisegundos especificadoenlapropiedadIntervalha transcurrido. Amaneradeejemplovamosadesarrollarlasiguiente aplicacin que simula el funcionamiento de un reloj digital. 85 Paraeldesarrollodelapresenteaplicacinprocedaa ubicar los siguientes controles sobre el formulario: 1 etiqueta 1 cuadro de texto 1 cronmetro 1 botn de comando Enseguidaprocedaaestablecerlaspropiedadessegnse indica: Form1 NombreFrmReloj BorderStyle3-Fixed Dialog CaptionReloj digital Label1 NombreLblHora CaptionHora Text1 86 NombreTxtHora Text Timer1 NombreTimer1 Interval500 Command1 NombreCmdTerminar Caption &Terminar Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub Form_Activate() TxtHora = Time() End Sub Private Sub Timer1_Timer() If TxtHora Time() Then TxtHora = Time() End If End Sub Private Sub CmdTerminar_Click() End End Sub Cuadro de imagen 87 Uncuadrodeimagenseutilizaparamostrarunarchivode imagen (BMP, GIF o JPG). Recorta el grfico si el control no es lo bastante grande para mostrar la imagen completa. PropiedadDescripcin AutoSizeEspecificasielcontrolajusta automticamentesutamaoparamostrarun grfico completo. PictureEspecificaelarchivodeimagenparael control. Eleventoquesuelemanejarseparaestecontroles MouseMove, cuya descripcin es: EventoDescripcin MouseMoveOcurre cuando el usuario mueve el ratn sobre el control. Imagen Uncontrolimagenseutilizarparamostrarunarchivode imagen (BMP, GIF o JPG) de manera similar a un Cuadro de imagen. Sin embargo, este control utiliza menos recursos del sistema y se actualiza con ms rapidez que un cuadro de imagen. PropiedadDescripcin PictureEspecificaelarchivodeimagenparael control. 88 StretchEspecificacomoseajustaeltamaodel archivogrficoparaquequepadentrodel control imagen. Paraestecontroltambinsesuelemanejarelevento MouseMove. Barras de desplazamiento horizontal Unabarradedesplazamientohorizontalrepresentaunvalor entero, la cual tiene un cuadrado que se desplaza a lo largo de la misma para fijar un valor. La posicin ms a la izquierda se corresponde con el valor mnimo,laposicinmsaladerechaconelvalormximo,y cualquier otra posicin es un valor entre ellos dos. PropiedadDescripcin MaxEspecifica el valor mximo que puede tomar la propiedad Value. MinEspecifica el valor mnimo que puede tomar la propiedad Value. LargeChangeEspecifica en cuanto cambiar el valor de la propiedad Value cuando el usuario haga click antesodespusdelcuadradode desplazamiento. SmallChangeEspecifica en cuanto cambiar el valor de la propiedad Value cuando el usuario haga click en alguna de las flechas de los extremos de la barra. 89 ValueEspecificaelvalordelcontrol,estese encuentrasiempreentrelosvaloresdelas propiedades Min y Max. Las barras de desplazamientos responden a los eventos: EventoDescripcin ChangeOcurre inmediatamente despus que el cuadrado de desplazamiento ha sido movido. ScrollOcurre mientras el cuadrado de desplazamiento estsiendomovido(esteeventosloocurre cuando el cuadrado es arrastrado). Barras de desplazamiento vertical Unabarradedesplazamientoverticalrepresentaunvalor entero, la cual tiene un cuadrado que se desplaza a lo largo de la misma para fijar un valor. Laposicinmshaciaarribasecorrespondeconelvalor mnimo, la posicin ms hacia abajo se corresponde con el valor mximo, y cualquier otra posicin es un valor entre ellos dos. Laspropiedadesyeventosdelasbarrasdedesplazamiento horizontal y vertical son anlogas. Como ejemplo, vamos a construir una aplicacin que permita cambiar el color de fondo de un cuadro de imagen, mediante tres barras de desplazamiento (rojo, verde y azul). 90 Paraeldesarrollodelapresenteaplicacinprocedaa ubicar los siguientes controles en el formulario: 3 etiquetas 3 barras de desplazamiento horizontal 1 cuadro de imagen Enseguidaprocedaaestablecerlaspropiedadessegnse indica: Form1 NombreFrmColores BorderStyle3-Fixed Dialog CaptionColores Label1 NombreLblRojo CaptionRojo 91 Label2 NombreLblVerde CaptionVerde Label3 NombreLblAzul CaptionAzul HScroll1 NombreHSRojo LargeChange10 Max255 Min0 SmallChange1 Value255 HScroll2 NombreHSVerde LargeChange10 Max255 Min0 SmallChange1 Value0 HScroll3 NombreHSAzul LargeChange10 Max255 Min0 SmallChange1 Value0 92 Picture1 NombrePicFondo BackColor &H000000FF& Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub HSRojo_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub Private Sub HSVerde_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub Private Sub HSAzul_Change() PicFondo.BackColor = RGB(HSRojo, HSVerde, HSAzul) End Sub EnelcdigoanteriorsedebicolocarHSRojo.Value, HSVerde.ValueyHSAzul.Value,perodebidoaquelapropiedad Value es por defecto se puede omitir. Cuadro de lista de unidades Uncuadrodelistadeunidadespermitealusuario seleccionarunaunidaddediscovlidaentiempodeejecucin. 93 Utiliceestecontrolparapresentarunalistadetodaslas unidades vlidas del sistema. PropiedadDescripcin DriveEspecificalaunidadseleccionadaentiempo de ejecucin. Este control responde al evento Change, cuya descripcin es la siguiente: EventoDescripcin ChangeOcurre cuando el usuario hace click sobre la unidadquedeseaseleccionar.Elevento Changetambinocurresiseseleccionala unidad mediante el teclado. Cuadro de lista de directorios Uncuadrodelistadedirectoriosmuestradirectoriosy rutas de acceso en tiempo de ejecucin. Utilice este control para mostrar una lista jerrquica de directorios. PropiedadDescripcin PathEspecifica la ruta de acceso actual. Un cuadro de lista de directorios tambin responde al evento Change. 94 Cuadro de lista de archivos Uncuadrodelistadearchivosencuentraymuestralos archivosdeldirectorioespecificadoporlapropiedadPathen tiempo de ejecucin. Utilice este control para mostrar una lista de los archivos seleccionados por tipo. PropiedadDescripcin PathEspecifica la ruta de acceso actual. PatternEspecificaeltipodearchivoquesedesea visualizar en el control. ListDevuelve los elementos contenidos en la parte de lista del control. ListIndexEspecificaelndicedelelemento seleccionado actualmente en el control. Como ejemplo vamos a desarrollar una aplicacin que permita elmanejodeunidades,carpetasyarchivos.Elusuariopuede seleccionar la unidad actual de trabajo, la carpeta y el archivo y poder visualizar su contenido (en este caso archivos grficos *.JPG). 95 Paraeldesarrollodelapresenteaplicacinprocedaa ubicar los siguientes controles en el formulario: 4 etiquetas 1 cuadro de lista de unidades 1 cuadro de lista de directorios 1 cuadro de lista de archivos 1 imagen Enseguidaprocedaaestablecerlaspropiedadessegnse indica: Form1 NombreFrmVisor CaptionVisor Label1 NombreLblUnidad CaptionUnidad 96 Label2 NombreLblCarpeta CaptionCarpeta Label3 NombreLblArchivo CaptionArchivo Label4 NombreLblVista CaptionVista previa Drive1 NombreDrive1 Dir1 NombreDir1 File1 NombreFile1 Pattern*.JPG Image1 NombreImgVista StretchTrue Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub Drive1_Change() On Error GoTo DRIVE_ERROR Dir1.Path = Drive1.Drive 97 Exit Sub DRIVE_ERROR: MsgBox ERROR: Unidad no preparada, vbCritical, Error Exit Sub End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub File1_Click() Dim ARCHIVO As String ARCHIVO = File1.Path & \ ARCHIVO = ARCHIVO & File1.List(File1.ListIndex) ImgVista.Picture = LoadPicture(ARCHIVO) End Sub LainstruccinOnErroractivaunarutinadecontrolde erroresyespecificalaubicacindelamismaenun procedimiento. LA FUNCIN MSGBOX Amenudohabrsituacionesenlascualestendrque presentar algn mensaje (por ejemplo una pregunta) y en funcin de la respuesta del usuario se ejecutar una determinada accin. 98 La funcin MsgBox() muestra un cuadro de dilogo predefinido yretornaunvalordetipoenterodependiendodelbotn seleccionadoporelusuario.Susintaxisesdelasiguiente forma: VALOR = MsgBox(MENSAJE [, BOTN + ICONO, TTULO]) DondeMENSAJEserefiereaunaexpresindecadenaquese muestra como mensaje en el cuadro de dilogo. BOTNesunaexpresinnumricaqueserefierealtipoy cantidad de botones a utilizar. ICONO es una expresin numrica que se refiere al estilo de icono que se va ha utilizar. TTULO es una texto que se mostrar en la barra de ttulo de la caja de dilogo. Tipo de botn ValorBotnNombre 0AceptarvbOKOnly 1Aceptar y CancelarvbOKCancel 2Anular, Reintentar, IgnorarvbAbortRetryIgnore 99 3S, No y CancelarvbYesNoCancel 4S y NovbYesNo 5Reintentar y CancelarvbRetryCancel Tipo de icono ValorIconoNombre 16Mensaje crticovbCritical 32Signo de interrogacinvbQuestion 48Signo de exclamacinvbExclamation 64Signo de informacinvbInformation Valores retornados ValorBotnNombre 1AceptarvbOK 2CancelarvbCancel 3AnularvbAbort 4ReintentarvbRetry 5IgnorarvbIgnore 6SvbYes 7NovbNo Como ejemplo vamos a construir un formulario que presente un botnSalir,detalformaquecuandoelusuariopulsedicho botn se presente el siguiente mensaje: 100 EncasodequeelusuarioelijalaopcinS,la aplicacindebeterminar.Encasocontrario,esdecirsiel usuarioeligelaopcinNo,sedebeproseguirconla aplicacin. Paraeldesarrollodelpresenteejemplo,procedaaubicar sobreelformulariounbotndecomando(CmdSalir),a continuacin ingresar el siguiente cdigo: Private Sub CmdSalir_Click() Dim RESP As Integer RESP = MsgBox(Desea terminar la aplicacin?, _ vbQuestion + vbYesNo, Pregunta) If RESP = vbYes Then End End If End Sub ParailustrarmejorelusodelafuncinMsgBox()vamosa desarrollarlasiguienteaplicacinquepermitemostrarlos diferentes tipos de botones e iconos generados por la funcin. 101 Paraelloprocedaaubicarlossiguientescontrolesenel formulario: 2 cuadros de lista 1 botn de comando Enseguidaprocedaaestablecerlaspropiedadessegnse indica: Form1 NombreFrmFuncionMsgBox BorderStyle3-Fixed Dialog CaptionFuncin MsgBox List1 NombreLstBoton List2 NombreLstIcono Command1 102 NombreCmdMensaje Caption &Mensaje Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub Form_Load() LstBoton.AddItem Aceptar LstBoton.AddItem Aceptar y Cancelar LstBoton.AddItem Anular, Reintentar, Ignorar LstBoton.AddItem S, No y Cancelar LstBoton.AddItem S y No LstBoton.AddItem Reintentar y Cancelar LstIcono.AddItem Mensaje crtico LstIcono.AddItem Signo de interrogacin LstIcono.AddItem Signo de exclamacin LstIcono.AddItem Signo de informacin End Sub Private Sub CmdMensaje_Click() Dim RESP As Integer, BOTON As Integer, ICONO As Integer BOTON = LstBoton.ListIndex ICONO = (LstIcono.ListIndex + 1) * 16 RESP = MsgBox(Hola Mundo, BOTON + ICONO, Ejemplo) End Sub 103 CAPTULO 5 EL FORMULARIO Un formulario es un objeto contenedor que sirve para disear la interfaz de usuario. En el formulario se colocan los controles paraqueelusuariopuedainteractuarconlaaplicacindeuna manera fcil e intuitiva. Los formularios tienen sus propias propiedades, eventosy mtodosconlosquesepuedecontrolarsuaparienciay comportamiento,muchosdeloscualesyahansidoutilizadosen las aplicaciones de los captulos anteriores y que a continuacin pasamos a describir. 104 PropiedadDescripcin AutoRedrawEspecificasiseactivaelredibujado automtico del formulario. BackColorEspecifica el color de fondo del formulario. BorderStyleEspecificaunestilodebordeparael formulario. CaptionEspecificaeltextoquesemuestraenla barra de ttulo del formulario. ControlBoxEspecificasiapareceuniconodemen desplegableenelngulosuperiorizquierdo del formulario. ForeColorEspecifica el color de primer plano utilizado para mostrar texto sobre el formulario. HeightEspecifica el alto del formulario. Se mide en twips. IconEspecificaeliconoquesemuestraparaun formulario. MaxButtonEspecificasielformulariotieneunbotn Maximizar. MinButtonEspecificasielformulariotieneunbotn Minimizar. PictureEspecifica el archivo de imagen que se va ha mostrar como fondo para el formulario. StartUpPositionEspecificalaposicindelformulariola primera vez que se ejecuta. VisibleEstablece si el formulario es visible o est oculto. WidthEspecificaelanchodelformulario.Semide en twips. WindowStateEstableceelestadodelformulario(normal, 105 minimizado o maximizado). Nota Un twip es una unidad independiente de la pantalla utilizada para asegurar que la colocacin y la proporcin de los elementos delapantalladelaaplicacinsonlosmismosentodoslos sistemasdepantallas.Untwipesiguala1/20deunpuntode impresora.Existenaproximadamente1440twipsenunapulgadao 567 twips en un centmetro. Loseventosalosquerespondeunformulariosonlos siguientes: EventoDescripcin ActivateOcurrecuandoelformularioseconvierteen ventana activa. DeactivateOcurrecuandoelformulariodejadeserla ventana activa. LoadOcurrecuandoelformulariosecargaenla memoria. MouseDownOcurrecuandoelusuariopulsaelbotn derecho del ratn sobre el formulario. QueryUnloadOcurreantesdeiniciarseelprocesode descargadelformulario(antesdelevento Unload). ResizeOcurrecuandosemuestraprimeroel formulario o se cambian sus dimensiones. UnloadOcurre cuando el formulario se descarga de la 106 memoria. Los mtodos que se pueden utilizar con un formulario son los siguientes: MtodoDescripcin HideOculta un formulario. PopupMenuPresenta un men popup en la posicin actual del ratn. PrintImprime un valor sobre el formulario. RefreshVuelveapintarunformularioyactualiza todos los valores contenidos en l. ShowMuestra un formulario y determina si es modal o carece de modo. Si el formulario a mostrar noestcargadoVisualBasiclocarga automticamente. Como ejemplo vamos a desarrollar una aplicacin que utilice dos formularios. Desde el primer formulario el usuario podr ir al segundo formulario y viceversa. 107 Para el desarrollo de la presente aplicacin proceda a crear unnuevoproyecto.Seguidamentedebeubicardosbotonesde comandoenelformulario.Luegoestablezcalassiguientes propiedades: Form1 NombreForm1 CaptionPrimer formulario Command1 NombreCmdIr Caption &Ir Command2 NombreCmdSalir Caption &Salir Seguidamente procede a ingresar el cdigo que se muestra a continuacin: 108 Private Sub CmdIr_Click() Form2.Show Form1.Hide End Sub Private Sub CmdSalir_Click() End End Sub Luego debe aadir un formulario adicional al proyecto. Para talfin,seleccioneelmenProyectoyelijalaopcinAgregar formulario. Delcuadrodedilogoquesepresentaelijaelicono Formulario y haga click en el botn Abrir, tal como se indica en la figura. En ese instante se aadir un nuevo formulario al 109 proyecto.Luego,procedaaubicarunbotndecomandosenel formularioqueacabadeaadiryestablezcalassiguientes propiedades: Form2 NombreForm2 CaptionSegundo formulario ControlBoxFalse Command2 NombreCmdVolver Caption &Volver Enseguidaprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub CmdVolver_Click() Form1.Show Form2.Hide End Sub ESTILOS DE FORMULARIO VisualBasiccuentaconseisdiferentesestilosde formulario, cuya descripcin es la siguiente: ValorEstiloDescripcin 0NoneNo presenta ningn borde. 110 1Fixed SinglePuedeincluirunMendecontrol, unaBarradettulo,unbotn MaximizaryunbotnMinimizar. Slopuedecambiardetamao mediantelosbotonesMaximizary Minimizar. 2Sizable(Predeterminado).Puedecambiarde tamaomediantecualquieradelos elementosopcionalesdeborde indicados para Fixed Single. ValorEstiloDescripcin 3Fixed DialogPuede incluir un Men de control y unaBarradettulo,peronolos botonesMaximizarniMinimizar.No puede cambiar de tamao. 4Fixed ToolWindowSlomuestraelbotnCerraryel texto de la barra de ttulo aparece conuntamaodefuentereducido. No puede cambiar su tamao. 5Sizable ToolWindowSlomuestraelbotnCerraryel texto de la barra de ttulo aparece conuntamaodefuentereducido. Puede cambiar de tamao. Como ejemplo vamos a desarrollar una aplicacin que permita representar los diferentes estilos de formulario de Visual Basic. 111 Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto y luego ubique los siguientes controles en el formulario: 1 cuadro de lista 2 botones de comando Luegodebeestablecerlaspropiedadesqueseindicana continuacin: Form1 NombreFrmPrincipal CaptionEstilos de formulario BorderStyle3-Fixed Dialog List1 NombreLstTipoForm List0-None 112 1-Fixed Single 2-Sizable 3-Fixed Dialog 4-Fixed ToolWindow 5-Sizable ToolWindow Command1 NombreCmdMostrar Caption &Mostrar Command2 NombreCmdSalir Caption &Salir Seguidamente procede a ingresar el cdigo que se muestra a continuacin: Private Sub Form_Load() Load FrmNone Load FrmFixedSingle Load FrmSizable Load FrmFixedDialog Load FrmFixedToolWindow Load FrmSizableToolWindow End Sub Private Sub CmdMostrar_Click() Dim OP As Integer OP = LstTipoForm.ListIndex Select Case OP 113 Case 0 : FrmNone.Show vbModal Case 1 : FrmFixedSingle.Show vbModal Case 2 : FrmSizable.Show vbModal Case 3 : FrmFixedDialog.Show vbModal Case 4 : FrmFixedToolWindow.Show vbModal Case 5 : FrmSizableToolWindow.Show vbModal Case Else MsgBox Debe seleccionar estilo de formulario End Select End Sub Private Sub LstTipoForm_DblClick() Call CmdMostrar_Click End Sub Private Sub CmdSalir_Click() End End Sub Seguidamenteprocedaaaadirlosformulariosparalas diferentesopcionesdelcuadrodelista.Cambielosnombresde los formularios segn se indica: FormularioNombre Form2FrmNone Form3FrmFixedSingle Form4FrmSizable 114 Form5FrmFixedDialog Form6FrmFixedToolWindow Form7FrmSizableToolWindow Luego debe activar el formulario FrmNone, ubicar un botn de comandos sobre el mismo y establecer las siguientes propiedades: Form2 NombreFrmNone BorderStyle0-None CaptionNone Command1 NombreCmdVolver Caption &Volver Una vez establecidas las propiedades, proceda a ingresar el cdigo que se muestra a continuacin: Private Sub CmdVolver_Click() Unload Me End Sub Paraconcluirconeldiseodelaaplicacin,simplemente repitaelprocedimientoanteriorparalosdemstiposde formularios. Comohabrpodidoobservar,almostrarunformulario mediante el mtodo Show podemos hacerlo de forma modal (vbModal) 115 o no modal (opcin por defecto). Un formulario modal es aquel que necesita cerrarse antes de pasar el enfoque a otro formulario. Un formulario no modal no requiere cerrarse para pasar el enfoque a otro formulario. PASANDO VALORES ENTRE FORMULARIOS Muchas veces se requieren pasar valores de un formulario a otro,estosepuederealizarmedianteelusomdulosestndar, los cuales son contenedores de procedimientos y declaraciones a los que tienen acceso otros mdulos de la aplicacin. Como ejemplo vamos a construir la siguiente aplicacin, la cualenvaunmensajedetextodelprimerformulariohaciael segundo formulario. Para el desarrollo de la presente aplicacin proceda a crear un nuevo proyecto y aada un formulario adicional, de tal forma 116 que tenga los formularios Form1 y Form2. Seguidamente ubicar los siguientes controles: Form1Form2 Text1TxtMensaje1Text1TxtMensaje2 Command1CmdEnviarCommand1CmdRecibir Command2CmdSalirCommand2CmdVolver Acontinuacinprocedaaingresarelcdigoqueseindica para el primer formulario (Form1): Private Sub CmdEnviar_Click() Mensaje = TxtMensaje1 Form1.Hide Form2.Show End Sub Private Sub CmdSalir_Click() End End Sub Paraelsegundoformulario(Form2)procedaaingresarel cdigo siguiente: Private Sub CmdRecibir_Click() TxtMensaje2 = Mensaje 117 End Sub Private Sub CmdVolver_Click() Form2.Hide Form1.Show End Sub Seguidamentedebeaadirunmduloestndaralproyecto, para ello, seleccione el Men Proyecto y elija la opcin Agregar mdulo,sedebepresentaruncuadrodedilogosimilarala figura mostrada, en el cual debe dar click en el botn Abrir. SeguidamenteprocedaadeclararlavariableMensajecomo pblica en la seccin de declaraciones del mdulo que acaba de aadir: 118 Una variable pblica (Public) es una variable que se declara aniveldemduloyselepuedeaccederdesdecualquierotro mdulo. FORMULARIOS MDI Un formulario MDI (Interfaz de Documentos Mltiples) es una ventana que acta como fondo de una aplicacin y es el contenedor (ventana padre) de otros formularios (ventanas hijas). 119 EnunaaplicacinMDIpuedenhabervariasventanashijas, pero slo una ventana padre por aplicacin. Para que una ventana actecomohijadebetenersupropiedadMDIChildestablecidaa True. ComoejemplovamosadesarrollarunaaplicacinMDIque incluyatresventanashijas.Paratalfinprocedaacrearun nuevoproyectoyseguidamenteagregardosformularios(simples) al mismo. NoolvideestablecerlapropiedadMDIChilddelos formularios Form1, Form2 y Form3 a True. Luego, debemos agregar el formulario MDI, para ello acceder al Men Proyecto y elegir la opcin Agregar formulario MDI, del cuadrodedilogoquesepresentahacerclickenelbotn Abrir. 120 AcontinuacindardobleclicksobreelformularioMDIe ingresar el siguiente cdigo: Private Sub MDIForm_Load() Form1.Show Form2.Show Form3.Show End Sub AhoraslotienequeindicarleaVisualBasicqueel formulariodearranque(inicial)serelformularioMDI.Para ellovayaalMenProyectoyelijalaopcinPropiedadesde Proyecto.EnelcuadrocombinadoObjetoinicialseleccionar MDIForm1, tal como se indica en la figura: 121 Esoestodo,ahorasimplementetienequeejecutarsu aplicacin. Cabe destacar que en los formularios MDI por lo general no se pueden incluir controles, debido a ello se suele trabajar con mensdeopcionesobarrasdeherramientasparaindicaralguna accin a realizar. CREACIN DE MENS Unmenesunconjuntodeopcionesquesepresentanal usuario, entre las cuales debe elegir una de ellas. Dependiendo de la decisin se realizarn una serie de acciones. 122 Para disear un men cualquiera dar click derecho sobre el formulario y del men emergente que se presenta elegir la opcin Editor de mens. En seguida se ha de presentar el Editor de mens de Visual Basic. 123 Paracrearunmen,tenerencuentalossiguiente procedimientos: -Ingresar el Editor de mens. -Introducir el ttulo del men en el cuadro de texto Caption, el cual aparecer en la barra de mens. -Introducir un nombre para el men en el cuadro de texto Name, el cual ser utilizado en el cdigo para referirse al men. -Introducirloselementosquecomponenelmen,paraello escriba en los cuadros de texto Caption y Name el ttulo y el nombre del correspondiente elemento del men. 124 -Para diferenciar un elemento del men del propio men, hay que sangrarelttulodelelemento,paratalfin,seleccineloy haga click en el botn flecha hacia la derecha ( ). -Unelementodemenpuedeserunaorden(sielelemento siguiente aparece sangrado al mismo nivel) o un submen (si el elemento siguiente aparece sangrado un nivel ms). -Utilizando separadores puede agrupar las rdenes en funcin de lo que realizan. Para insertar un separador, escriba un nico guin (-) en el cuadro Caption del Editor de mens. Tiene que especificar tambin un nombre para el separador. -Paraaadirunacelerador(unateclaocombinacindeteclas que permiten activar un men), utilizar la propiedad Shortcut. -LapropiedadCheckedestilparaindicarsiunaordenest activaonoloest.Cuandoseespecificaestapropiedad aparece una marca (3) a la izquierda del elemento de men. -LapropiedadEnabledestilparadesactivarunaordenenun momento en el cual no tiene sentido que est activa. -LapropiedadVisibleestilcuandodurantelaejecucinse desea ocultar un elemento de men. -CerrarelEditordemens,paraellounavezquehaya finalizado su diseo pulse el botn Aceptar. Comoejerciciointenteconstruirelmenmostradoenla figura anterior. 125 CaptionNameShortCut &Archivo MnuArchivoNinguno . . . &Artculo MnuArchivoArticuloNinguno . . . &Cliente MnuArchivoClienteNinguno . . . &Vendedor MnuArchivoVendedorNinguno . . . -MnuArchivoLineaNinguno . . . &Salir MnuArchivoSalirCtrl + X &Proceso MnuProcesoNinguno . . . &Pedido MnuProcesoPedidoNinguno . . . &Facturacin MnuProcesoFacturacionNinguno &Reporte MnuReporteNinguno . . . &Registro de ventas MnuReporteRegVentasNinguno . . . Catlogo de &artculos Ninguno . . . -MnuReporteLineaNinguno . . . &Cliente del mes MnuReporteClienteMesNinguno . . . &Vendedor del mes MnuReporteVendMesNinguno Ay&uda MnuAyudaNinguno . . . &Contenido MnuAyudaContenidoNinguno . . . &Indice MnuAyudaIndiceNinguno . . . &Bsqueda MnuAyudaBusquedaNinguno . . . -MnuAyudaLineaNinguno . . . &Acerca de MnuAyudaAboutNinguno Para probar el men que acaba de crear, ingrese el siguiente cdigo: Private Sub MnuArchivoArticulo_Click() 126 MsgBox Seleccion la opcin Artculo End Sub Private Sub MnuArchivoCliente_Click() MsgBox Seleccion la opcin Cliente End Sub Private Sub MnuArchivoVendedor_Click() MsgBox Seleccion la opcin Vendedor End Sub Private Sub MnuArchivoSalir_Click() Unload Me End Sub Private Sub MDIForm_Unload(Cancel As Integer) Dim RESP As Integer RESP = MsgBox(Desea terminar la aplicacin?, _ vbQuestion + vbYesNo, Pregunta) If RESP = vbYes Then End Else: Cancel = True End If End Sub Luegoalejecutarsuaplicacinyseleccionarelmen Archivo, opcin Artculo, el resultado ser similar a la figura mostrada: 127 Hastaahorahemosprogramadolasalidadeunaaplicacin, asociandoelcdigoalbotnSalir.Sinembargo,cuandoel usuario hace click en el botn Cerrar de la barra de ttulo o enlaopcinSalirdelMendecontroldelformulario,el cdigo escrito para el botn Salir es ignorado. Para remediar esta situacin, en el ejemplo anterior cuando el usuario pulsa el botn Salir, se invoca al evento Unload. La palabrareservadaMeproporcionaunaformadereferirseal formulario desde donde se est ejecutando el cdigo. Recordar que el evento Unload del formulario se desencadena cuandoelusuariointentacerrarelformulariomediante cualquiera de las formas descritas anteriormente.Para determinar si ocurre la descarga del formulario utilice elparmetroCancel.SiCancelesFalseocurreladescarga,si Cancel es True impide que el formulario se quite. CREACIN DE UNA BARRA DE HERRAMIENTAS Una barra de herramientas contiene botones con las opciones ms utilizadas de un men, de tal manera que el usuario haciendo 128 click en dicho control activara la opcin indicada de una manera ms rpida. Paracrearunabarradeherramientasdebemosutilizardos controlesquenoestnenlalistadecontrolesestndar,por tantodebemosagregardichoscontrolesqueseencuentranenel componenteMicrosoftWindowsCommonControls6.0,talcomose indica a continuacin: Como ejemplo, vamos a crear la barra de herramientas de la figura mostrada: 129 Para ello, ubicar un control ImageList sobre el formulario, paraestablecersuspropiedadesdarclickderechosobreel control y elija la opcin Propiedades. Se ha de presentar un cuadro de dilogo similar a la figura mostrada: 130 ActivarlafichaImgenesypulsarelbotnInsertar imagenparaseleccionarlasimgenesqueseincluirnenel control ImageList. Para el ejemplo, debe incluir ocho imgenes que corresponden a cada uno de los botones de la barra de herramientas. Concluido el proceso anterior, proceda a ubicar un control Toolbarsobreelformulario.Luegohacerclickderechosobre dicho control y del men emergente que se presenta seleccionar la opcin Propiedades. Del cuadro de dilogo que se presenta en la ficha General establecer las siguientes propiedades: 131 Luego, en la ficha Botones pulse el botn Insertar botn. EnelcuadrodetextoImagesedebeindicarunnmeroque corresponde al orden de imagen a mostrar. 132 Ellectordebecontinuarconesteprocesohastacompletar los botones restantes, segn: IndexToolTipTextImage 1Artculo1 2Cliente2 3Vendedor3 4Pedido4 5Facturacin5 6Registro de ventas6 7Catlogo de artculos7 8Ayuda8 Como el cdigo a ejecutar tiene que ser el mismo cuando el usuario elija una opcin del men o de un click sobre un botn de labarradeherramientassepuedenprogramarprocedimientosde usuarioquerealicendichastareas,luegosedebeninvocara estos procedimientos tanto para las opciones del men como para la barra de herramientas. Sin embargo, para el ejemplo el cdigo es muy sencillo, ya que slo muestra un mensaje con la opcin seleccionada (esto por razones de simplicidad). Para probar la funcionalidad de la barra de herramientas que acaba de crear ingrese el siguiente cdigo: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) 133 Select Case Button.Index Case 1: MsgBox Seleccion la opcin Artculo Case 2: MsgBox Seleccion la opcin Cliente Case 3: MsgBox Seleccion la opcin Vendedor Case 4: MsgBox Seleccion la opcin Pedido Case 5: MsgBox Seleccion la opcin Facturacin Case 6: MsgBox Seleccion la opcin Registro de ventas Case 7: MsgBox Seleccion opcin Catlogo de artculos Case 8: MsgBox Seleccion la opcin Ayuda End Select End Sub EleventoButtonClicksedisparacuandoelusuariohace clicksobreunbotndelabarradeherramientas.Lapropiedad Index permite identificar el nmero de botn pulsado. CREACIN DE UNA BARRA DE ESTADO Unabarradeestadoesunmarcoqueseubicaenlaparte inferiordelformularioypuedecontenervariospanelesque informanalusuarioacercadelestadodelaaplicacin.Para crear una barra de estado utilizar el control StatusBar, el cual formadeloscontrolespersonalizadosqueseencuentranenel componente Microsoft Windows Common Controls 6.0. Como ejemplo vamos a crear una barra de estado similar a la de la figura mostrada: 134 Para elloubicar un control StatusBar sobre el formulario, dar click derecho sobre el mismo y en la fichaPaneles incluir una imagen para la hora del sistema. 135 El resto de propiedades se establecern mediante cdigo al momento de la carga del formulario. Private Sub MDIForm_Load() Dim I As Integer For I = 1 To 2 StatusBar1.Panels.Add' Se agregan 2 paneles ms Next With StatusBar1.Panels .Item(1).Style = sbrTime .Item(2).Style = sbrCaps .Item(3).Style = sbrIns End With End Sub La propiedad Style permite mostrar el estado de las teclas, la hora y la fecha del sistema con un mnimo de cdigo. ConstanteValorDescripcin sbrText0(Predeterminado). Texto o mapa de bits. sbrCaps1Tecla BLOQ MAYS.sbrNum2Tecla BLOQ NM. sbrIns3Tecla INS. sbrScrl4Tecla BLOQ DESPL. sbrTime5Muestra la hora actual con el formato del sistema. sbrDate6Muestralafechaactualconelformato 136 del sistema. CREACIN DE UN MEN CONTEXTUAL Unmencontextualesunmenemergente(flotante)quese muestra sobre un formulario, independiente de la barra de mens. Para mostrar un men contextual el usuario debe pulsar el botn derecho del ratn sobre el formulario. A menudo querr usar un men contextual para tener acceso a opciones que no se encuentran disponibles en la barra de mens. Para crear un men que no se presente en la barra de mens, haga invisibleunelementodemendenivelsuperiorentiempode diseo (asegrese de que la casilla de verificacin Visible del Editor de mens no est activada). Cuando Visual Basic presenta un men emergente, pasa por alto la propiedad Visible del men de nivel superior especificado. 137 Para crear el men contextual de la figura, debe ingresar al Editor de mens y aadir lo siguiente: CaptionNameVisible &Herramientas MnuTools . . . CalculadoraMnuToolsCalc 3 . . . CalendarioMnuToolsCalen 3 . . . SolitarioMnuToolsSol 3 Seguidamenteprocedaaingresarelcdigoqueseindicaa continuacin: Private Sub MDIForm_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu MnuTools End If End Sub Private Sub MnuToolsCalc_Click() Dim I I = Shell(C:\WINDOWS\CALC.EXE, 1) End Sub Private Sub MnuToolsCalen_Click() FrmCalendario.Show 138 End Sub Private Sub MnuToolsSol_Click() Dim I I = Shell(C:\WINDOWS\SOL.EXE, 1) End Sub En el ejemplo anterior se asume que existe otro formulario denombreFrmCalendario.Estepuedeserconstruidousandoel control MonthView. La funcin Shell ejecuta un programa ejecutable y devuelve un tipo Variant (Double) que representa la identificacin de la tareadelprogramasisehaejecutadoconxito,encaso contrario devuelve cero. 139 CAPTULO 6 CONTROLES ACTIVEX LoscontrolesActiveXsonobjetosquenoformanpartedel conjunto de controles estndar de Visual Basic, sino ms bien han sido desarrollados por terceras personas. LoscontrolesActiveXexistencomoarchivosindependientes con extensin .OCX y deben ser cargados antes de utilizarse. Para ello ingresar al Men Proyecto y elija la opcin Componentes. CONTROL ANIMATION 140 ElcontrolAnimationpermitereproducirarchivosde extensin .AVI que no tengan sonido para crear animaciones. Para agregarestecontroldebeseleccionarelcomponenteMicrosoft Windows Common Controls-2 6.0. PropiedadDescripcin AutoPlayEspecificasielarchivoAVIsereproducir automticamente al cargarse el control. MtodoDescripcin CloseCierra el archivo AVI abierto actualmente. OpenPermite abrir el archivo AVI. PlayReproduceelarchivoAVIenelcontrol Animation. StopTermina la reproduccin del archivo AVI. Como ejemplo vamos a desarrollar un formulario que permita reproducir un archivo AVI, tal como se muestra en la figura: 141 Paraellocrearunnuevoformularioyagregaruncontrol Animation(Animation1)ydosbotonesdecomando(CmdIniciary CmdTerminar,respectivamente).Luegoingreseelcdigoquese muestra: Private Sub CmdIniciar_Click() Dim RUTA As String RUTA = C:\Archivos de programa\Microsoft Visual Studio\ RUTA = RUTA & Common\Graphics\Videos\Filenuke.avi Animation1.Open (RUTA) Animation1.Play End Sub Private Sub CmdTerminar_Click() Animation1.Close End End Sub CONTROL COMMONDIALOG ElcontrolCommonDialogproporcionaunconjuntodecuadros dedilogoestndarquepermitenrealizarlasoperacionesms comnmente empleadas en el diseo de aplicaciones, como abrir y guardararchivos,seleccionarcoloresyfuentes,imprimir,etc. ParaagregarestecontrolseleccionarelcomponenteMicrosoft Common Dialog Control 6.0. 142 PropiedadDescripcin ColorEspecifica el color seleccionado. FileNameEspecificalarutaynombredelarchivo seleccionado. FilterEspecifica el tipo de archivos que se han de mostrarenuncuadrodedilogoAbriro Guardar como. FilterIndexEspecificaelfiltropredeterminadoparaun cuadrodedilogoAbriroGuardarcomo,en caso se est utilizando varios filtros. MtodoDescripcin ShowColorPresenta la paleta de colores. ShowFontPresenta el cuadro de dilogo Fuentes. ShowHelpPresenta la ayuda de Windows. ShowOpenPresenta el cuadro de dilogo Abrir. ShowPrinterPresenta el cuadro de dilogo Imprimir. ShowSavePresenta el cuadro de dilogo Guardar como. Como ejemplo vamos a desarrollar una aplicacin que permite cambiarelcolordefondodeunformularioentiempode ejecucin.Paraelloelusuariodebedarclickenelbotn Cambiar color y en seguida se presentar la paleta de colores de donde debe elegir el color deseado, tal como se muestra en la figura siguiente: 143 Para ello crear un nuevo formulario, agregarle un botn de comando(CmdCambiarColor)yuncontrolCommonDialog.Luego ingresar el siguiente cdigo: Private Sub CmdCambiarColor_Click() CommonDialog1.ShowColor Form1.BackColor = CommonDialog1.Color End Sub Comosiguienteejemplovamosadesarrollarunaaplicacin que permita mostrar el contenido de un archivo JPG. Este deber serseleccionadoporelusuariodeuncuadrodedilogoAbrir, tal como se indica en la figura: 144 Al hacer click en el botn Abrir, el archivo seleccionado debe ser mostrado en el formulario: Para el diseo de esta aplicacin crear un nuevo formulario y ubicar un botn de comando (CmdAbrirArchivo), un control imagen y un control CommonDialog. 145 Seguidamente ingrese el cdigo que se indica a continuacin: Private Sub CmdAbrirArchivo_Click() Dim FILTRO As String, FILE As String FILTRO = Imgenes JPEG (*.JPG)|*.JPG CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName Image1.Picture = LoadPicture(FILE) End Sub CONTROL MARCHOSO ElcontrolMarchosotienecomofuncinreproducirarchivos GIF animados. Para agregar este control seleccionar el componente MarchosoActiveXControlModule.Estecontrolfuecreadoen Visual Basic y si no lo tiene en su disco duro lo puede bajar de Internet. PropiedadDescripcin FileNameEspecifica la ruta ynombre del archivo GIF animado. Amaneradeejemplovamosadisearunformularioque permita mostrar archivos GIF animados. 146 Paraelloprocedaacrearunnuevoformularioyubicarun botndecomando(CmdVerGIFAnimado),uncontrolMarchosoyun control CommonDialog. Luego, ingresar el siguiente cdigo: Private Sub CmdVerGIFAnimado_Click() Dim FILTRO As String, FILE As String FILTRO = Archivos GIF Animados (*.GIF)|*.GIF CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName Marchoso1.FileName = FILE End Sub CONTROL HIERARCHICAL FLEXGRID El control Hierarchical FlexGrid presenta una cuadrcula la cual permite mostrar datos en forma de celdas. Una celda es la regin formada por la interseccin de una fila y una columna. 147 Paraagregarestecontroldebeseleccionarelcomponente Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB). PropiedadDescripcin ColEspecifica el nmero de columnade la celda actual. ColsEspecifica el nmero total de columnas, fijas y no fijas. FixedColsEspecificaelnmerodecolumnasfijas.El valor por defecto es 1. FixedRowsEspecifica el nmero de filas fijas. El valor por defecto es 1. RowEspecificaelnmerodefiladelacelda actual. RowsEspecifica el nmero total de filas, fijas y no fijas. TextEspecifica el contenido de la celda actual. TextArrayEspecifica el contenido de una celda elegida aleatoriamente, se debe especificar el ndice de la celda a la cual se desea acceder. ScrollBarsEspecificasilacuadrculapresentabarras de desplazamiento horizontales, verticales o ambas a la vez. Comoejemplovamosadesarrollarunaaplicacinque visualiceuncuadradomgicodeordenimparN .Uncuadrado mgico se compone de nmeros enteros comprendidos entre 1 y 2N . La suma de los nmeros que figuran en cada fila, cada columna y cada diagonal son idnticos. 148 PorejemploparaN =5tenemoselsiguientearreglode nmeros: Un mtodo de construccin del cuadrado consiste en situar el nmero 1 en el centro de la primera fila, el nmero siguiente en la casilla situada encima y a la derecha, y as sucesivamente. Es preciso considerar que el cuadrado se cierra sobre s mismo, la fila encima de la primera es de hecho la ltima y la columna a la derechadelaltimaeslaprimera.Sinembargo,cuandola posicindelnmerocaigaenunaceldaocupada,seeligela casilla situada por debajo del nmero que acaba de ser situado. Para el desarrollo de la presente aplicacin proceda a crear unnuevoformularioyubicarunaetiqueta(N?),uncuadrode texto(TxtN)yuncontrolHierarchicalFlexGrid.Seguidamente debe ingresar el cdigo que se indica: Private Sub TxtN_Change() Dim N As Integer, I As Integer 149 Dim FIL As Integer, COL As Integer N = Val(TxtN) FIL = 1 COL = (N \ 2) + 1 MSHFlexGrid1.Cols = N MSHFlexGrid1.Rows = N MSHFlexGrid1.FixedCols = 0 MSHFlexGrid1.FixedRows = 0 For I = 1 To N ^ 2 MSHFlexGrid1.COL = COL - 1 MSHFlexGrid1.Row = FIL - 1 MSHFlexGrid1.Text = Str(I) If I Mod N = 0 Then FIL = FIL + 1 If FIL = N + 1 Then FIL = 1 Else FIL = FIL - 1 If FIL = 0 Then FIL = N COL = COL + 1 If COL = N + 1 Then COL = 1 End If Next End Sub CONTROL UPDOWN 150 El control UpDown tiene dos botones con flechas en los que el usuario puede hacer clic para incrementar o disminuir un valor de un control asociado, denominado control auxiliar. A menudo, al usuario le parecer que el control UpDown y su control auxiliar son un nico control. Por lo general se usa un control UpDown con uncuadrodetextoparasolicitaralusuariounaentrada numrica,unacombinacinqueenocasionessedenominacontrol Spinner. ParaagregaruncontrolUpDowndebeseleccionarel componente Microsoft Windows Common Controls-2 6.0. PropiedadDescripcin BuddyControlEspecificaelcontrolutilizadocomo auxiliar. BuddyPropertyEspecificalapropiedadutilizadapara sincronizarelcontrolUpDownconsu auxiliar. IncrementEspecifica un valor que determina la cantidad enquevaralapropiedadValuecuandose hace click en los botones del control UpDown. MaxEspecificaelvalormximodelintervalode desplazamiento del control UpDown. MinEspecificaelvalormnimodelintervalode desplazamiento del control UpDown. SyncBuddyEspecifica si el control UpDown sincroniza la propiedad Value con una propiedad del control auxiliar. 151 Como ejemplo vamos a desarrollar una aplicacin que permita mostrar el cdigo ANSI de un carcter especificado. Paratalfincrearunnuevoformularioyubicarlos siguientescontroles:2etiquetas(CdigoANSI,Carcter),2 cuadros de texto (TxtANSI, TxtCaracter) y 1 control UpDown. Luego establezca las propiedades que se indican: UpDown1 NombreUpDown1 BuddyControlTxtANSI BuddyPropertyText Increment1 Max255 Min0 SyncBuddyTrue Seguidamente proceda a transcribir el siguiente cdigo: Private Sub TxtANSI_Change() TxtCaracter = Chr(TxtANSI) End Sub 152 CONTROL MONTHVIEW ElcontrolMonthViewpermitealusuariolaposibilidadde veryestablecerinformacindefechasmedianteunainterfaz similar a un calendario. Para agregar este control seleccionar el componente Microsoft Windows Common Controls-2 6.0. PropiedadDescripcin DayEspecifica el nmero de da mostrado. MonthEspecifica el nmero de mes mostrado. YearEspecifica el nmero de ao mostrado. ValueEspecifica la fecha mostrada. DayOfWeekEspecificaeldadelasemana correspondiente a la fecha mostrada. WeekEspecifica el nmero de la semana en que cae la fecha mostrada. MultiSelectEspecificasisepuedeseleccionarun intervalo contiguo de fechas. MaxSelCountEspecificaelnmeromximodedasque puedenseleccionarsemediantelapropiedad MultiSelect. SelStart SelEnd Especificaloslmiteinferiorysuperior respectivamentedelintervalodefechas seleccionado. MonthColumns MonthRows Permitenmostrarmsdeunmes simultneamente.MonthColumnsespecificael nmero de mesesque se mostrarn en sentido horizontal. MonthRows especifica el nmero de meses que se mostrarn en sentido vertical. 153 EventoDescripcin ClickOcurrecadavezqueelusuariohaceclick sobre el control. DateClickOcurrecadavezqueelusuariohaceclick sobre una fecha mostrada en el control. Como ejemplo vamos a crear un sencillo calendario. Cuando el usuariohagaclicksobrealgunafecha,estaaparecerenel cuadro de texto. Pamela Anderson representar la parte atractiva de nuestra aplicacin. Para ello crear un nuevo formulario y agregar una etiqueta (Lafechaseleccionaes),uncuadrodetexto(TxtFecha),un control imagen (ImgPamela) y un control MonthView. Luego ingresar el siguiente cdigo: 154 Private Sub MonthView1_DateClick(ByVal DateClicked As Date) TxtFecha = WeekdayName(MonthView1.DayOfWeek) & , _ & Str(MonthView1.Day) & de _ & MonthName(MonthView1.Month) & de _ & Str(MonthView1.Year) End Sub Private Sub MonthView1_Click() Call MonthView1_DateClick(MonthView1.Value) End Sub Private Sub Form_Load() Call MonthView1_DateClick(MonthView1.Value) End Sub La funcin WeekdayName retorna una cadena con el nombre del da de la semana especificado. Requiere como argumento el nmero de da de la semana. LafuncinMonthNameretornaunacadenaconelnombredel mes especificado. Requiere como argumento el nmero de mes. EleventoDateClicktieneunparmetroDateClickedque especificalafechaseleccionada.Puedeutilizarestevalor (DateClicked)paraobtenerlafechaenlaqueelusuariohizo click. 155 CONTROL CALENDAR El control Calendar es similar en funcionalidad al control MonthView, pues tambin presenta un calendario. Para agregar este controlseleccionarelcomponenteControlCalendardeMicrosoft 9.0. PropiedadDescripcin DayEspecifica el nmero de da mostrado. MonthEspecifica el nmero de mes mostrado. YearEspecifica el nmero de ao mostrado. ValueEspecifica la fecha mostrada. Comoejemplovamosadesarrollarlaaplicacinanterior, pero esta vez haciendo uso de un control Calendar. 156 Para ello crear un nuevo formulario y agregar una etiqueta (Lafechaseleccionaes),uncuadrodetexto(TxtFecha),un control imagen (ImgPamela) y un control Calendar. Luego ingresar el siguiente cdigo: Private Sub Calendar1_Click() TxtFecha = WeekdayName(Weekday(Calendar1.Value)) & , _ & Str(Calendar1.Day) & de _ & MonthName(Calendar1.Month) & de _ & Str(Calendar1.Year) End Sub La funcin Weekday retorna un nmero entero que representa el da de la semana de una fecha dada. Se utiliza para suplir a 157 la propiedad DayOfWeek la cual no est permitida para el control Calendar. 158 CAPTULO 7 ARCHIVOS Unarchivo(fichero)esunconjuntodeinformacin relacionadaentres,almacenadacomounaunidadenun dispositivo de almacenamiento secundario (disquete, discoduro). Los datos almacenados en un archivo son de manera permanente de modoquepuedensermanipuladosencualquiermomento.Cada archivo est referenciado por un identificador, su nombre. CONCEPTO DE ARCHIVO BAJO WINDOWS/VISUAL BASIC Un archivo tiene un nombre almacenado en una carpeta junto conotrosarchivosdedisco.Losnombresdelosarchivosen Windows y Visual Basic requieren de 1 a 215 caracteres (incluidos espacios en blanco), y pueden incluir tambin una extensin de 1 a3letras,normalmentesonsignificativasyrelativasal contenido del mismo. Por ejemplo: LEAME.TXT Archivo de texto MISDATOS.DATArchivo de datos PLANILLA.XLSArchivo de MS-Excel SHAKIRA.BMPArchivo de mapa de bits El nombre de un archivo para ser referenciado correctamente consta de: 159 -Unidad (Especificador de unidad, por ejemplo A, B, C) -Camino (Especificador de ruta, por ejemplo \DATA\) -Nombre (Especificador de archivo, por ejemplo DEMO.DAT) Comoejemplo,supongaqueelarchivoDEMO.DATestenla carpeta DATA de la unidad C (disco duro); la descripcin completa del nombre del archivo es: C:\DATA\DEMO.DAT Ahora, suponga que el archivo CONSTANTES.DAT se encuentra en la carpeta LIB, que a su vez est contenida en la carpeta DATA de la unidad C. La descripcin completa del nombre de dicho archivo est dada por: C:\DATA\LIB\CONSTANTES.DAT Desde el punto de vista de Visual Basic un archivo almacena los datos como un conjunto de registros, conteniendo todos ellos, generalmente, los mismos campos. Cada campo almacena un dato de tipopredefinidoodeuntipodefinidoporelusuario.El elementodeinformacinmssimpleestaraformadoporun carcter. OPERACIONES SOBRE EL SISTEMA DE ARCHIVOS 160 Paramanipularelsistemadearchivosdeundisco,Visual Basic proporciona las sentencias que a continuacin se describen. Sentencia Kill Permiteeliminarunarchivoalmacenadoenundisco.Su sintaxis es de la forma: Kill NOMBRE_ARCHIVO DondeNOMBRE_ARCHIVOesunacadenadecaracteresque identifica al archivo que se desea borrar. Se permiten caracteres comodn (* y ?). Si el archivo no existe se produce un error. Por ejemplo: Kill C:\TEMP\TEMPO.DAT La instruccin anterior elimina el archivo TEMPO.DAT ubicado en la carpeta C:\TEMP. Sentencia Name Permitecambiarelnombre(renombrar)deunarchivodel disco y moverlo a otro directorio si fuera preciso. Su sintaxis es la siguiente: Name NOMBRE_ACTUAL As NOMBRE_NUEVO DondeNOMBRE_ACTUALesunacadenadecaracteresque especificaelnombreactualdelarchivoyNOMBRE_NUEVOesotra 161 cadena de caracteres que indica el nuevo nombre que se desea dar alarchivo.Estenombrenodebeexistir,delocontrariose obtendr un error. Por ejemplo: Name C:\TEMP\TEMPO.DAT As C:\DATA\CURSO.DAT Lainstruccinanteriorcambiaelnombredelarchivo TEMPO.DATporelnombreCURSO.DAT.Elcontenidodelarchivo permaneceinalteradoysulocalizacinfsicasecambiadela carpeta C:\TEMP a C:\DATA. Sentencia MkDir Permite crear una nueva carpeta. Su sintaxis es: MkDir NUEVA_CARPETA DondeNUEVA_CARPETAesunacadenadecaracteresque identifica la carpeta que se va ha crear. Por ejemplo: MkDir C:\DATA\TEMP Sentencia RmDir Elimina una carpeta vaca existente en el disco. Su sintaxis es de la forma: RmDir NOMBRE_CARPETA 162 DondeNOMBRE_CARPETAesunacadenadecaracteresque identifica la carpeta que se desea eliminar. Por ejemplo: RmDir C:\DATA\TEMP Sentencia ChDirPermite cambiar la carpeta actual. Su sintaxis es: ChDir NOMBRE_CARPETA DondeNOMBRE_CARPETAesunacadenadecaracteresque identifica la nueva ruta de acceso predeterminada. Por ejemplo: ChDir C:\DATA\GRAFICOS MsgBox App.Path LapropiedadPathdelobjetoAppespecificalarutade acceso actual. Sentencia ChDrive Permite cambiar la unidad de disco actual. Su sintaxis es: ChDrive UNIDAD Donde UNIDAD es un carcter que especifica la nueva unidad dedisco.SielparmetroUNIDADesunacadenademltiples caracteres slo se lee la primera letra. Por ejemplo: ChDrive A 163 OPERACIONES CON ARCHIVOS Pararealizaralgunaoperacinsobreunarchivohay referenciarlomediantesunombrecompleto.Lasoperaciones bsicas que se pueden realizar con los archivos son: -Abrir, preparar un archivo para hacer referencia a l. -Escribir, introducir un elemento de informacin a un archivo. -Leer, obtener un elemento de informacin de un archivo. -Modificar, alterar un elemento de informacin ya existente en un archivo. -Cerrar, evitar cualquier otra referencia al archivo en tanto no se le abra otra vez. TIPOS DE ARCHIVOS Lostiposdearchivosdependendelmodocomoestn organizados los registros y de la forma de accesar a la los datos contenidosenellos.EnVisualBasicexistentrestiposde archivos de datos, estos son: -Archivos secuenciales (acceso secuencial). -Archivos aleatorios (acceso aleatorio). -Archivos binarios (acceso binario). Acontinuacinpasamosadescribircadaunodeellosen forma detallada. 164 ARCHIVOS DE ACCESO SECUENCIAL Enunarchivodeaccesosecuenciallosregistrosse almacenansiguiendounaaotro,segnelordenenqueson ingresados.Cuandoseleelainformacin,seempiezaporel primerregistroysecontinuaalsiguientehastaalcanzarel final.Lassentenciasyfuncionesnecesariasparamanipular archivos de tipo secuencial se presentan a continuacin. Sentencia Open Permite abrir un archivo. La sintaxis para esta sentencia es la siguiente: Open NOMBRE_ARCHIVO For MODO As # NMERO_ARCHIVO Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre delarchivoquesedebeserabiertoenMODOOutput,Appendo Input. ModoDescripcin OutputEscrituradedatos.Sielarchivoexiste,su contenidoactualsedestruye.Sielarchivono existe, se crea. AppendAadir datos. Los datos son aadidos a partir de los ltimos existentes. Si el archivo no existe, se crea. InputLecturadedatos.Lalecturaempiezadesdeel principio del archivo. Si el archivo no existe, se produce un error. 165 ElparmetroNMERO_ARCHIVOesunenterocuyovalordebe estarcomprendidoentre1y511.Estenmeroserasociadoal nombre del archivo mientras ste permanezca abierto. Para obtener el nmero del siguiente archivo disponible se utiliza la funcin FreeFile(). Comoejemplosupongaqueserequiereabrirelarchivo DEMO.DAT ubicado en la carpeta C:\DATA, la instruccin sera la siguiente: Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Sentencia Print Permiteescribirdatossecuencialmenteenunarchivo.Su sintaxis es: Print # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES DondeNMERO_ARCHIVOeselnmeroutilizadocuandoel archivofueabierto.LISTA_DE_EXPRESIONESesunconjuntode expresiones (numricas, de cadena, de fecha, etc.) separadas por punto y coma (;) que sern escritas en el archivo. La sentencia Print escribe en el archivo una imagen de los datos tal y como se habran visualizado sobre el formulario con la sentencia Print. Por ejemplo: 166 Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Print # N1, Visual Basic es fcil; , ; Date() Al ejecutarse el cdigo anterior se escribira en el archivo la siguiente informacin: Visual Basic es fcil, 24/04/2001 Comoseobserva,alutilizarlasentenciaPrintsedeben delimitar los datos para que se impriman correctamente. Sentencia Write Permiteescribirdatossecuencialmenteenunarchivo.Su sintaxis es: Write # NMERO_ARCHIVO, LISTA_DE_EXPRESIONES DondeNMERO_ARCHIVOeselnmeroutilizadocuandoel archivofueabierto.LISTA_DE_EXPRESIONESesunconjuntode expresiones (numricas, de cadena, de fecha, etc.) separadas por punto y coma (;) que sern escritas en el archivo. La sentencia Write inserta comas (,) entre las expresiones delaLISTA_DE_EXPRESIONES,portantonoesnecesarioponer delimitadoresexplcitamentecomoenelcasodelasentencia Print. 167 CuandoseutilizalasentenciaWriteparaescribir informacinenunarchivo,sesiguendistintasconvenciones universales,demodoquelosdatossiempresepuedenleere interpretar correctamente, independientemente de la configuracin regional, estas convenciones son: -Los datos numricos siempre se escriben utilizando la coma (,) como separador decimal. -Para datos de tipo Boolean se imprime # TRUE # o # FALSE #. -LosdatosdetipoDateseescribenenelarchivousandoel formatodefechauniversal(fechascomo#aaaa-mm-dd#yhoras como # hh:mm:ss #). Amaneradeejemploconsidereelsiguientesegmentode cdigo: Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Output As # N1 Write # N1, Visual Basic es fcil; Date() Laejecucindeestecdigoescribiraenelarchivola siguiente informacin: Visual Basic es fcil", # 2002-04-11 # 168 Sentencia Close CierraunoarchivoabiertomediantelasentenciaOpen.Su sintaxis es la siguiente: Close # NMERO_ARCHIVO [, # NMERO_ARCHIVO, . . .] DondeNMERO_ARCHIVOeselnmeroconelcualseabriel archivo. Por ejemplo: Close # 1, # 2 Lainstruccinanteriorcierralosarchivosasociadoscon losnmeros1y2.Lasiguientesentenciacierratodoslos archivos abiertos. Close Sentencia Input Permite leer datos de un archivo secuencial y los asigna a las variables especificadas. Su sintaxis es: Input # NMERO_ARCHIVO, VARIABLE1 [, VARIABLE2, . . .] DondeNMERO_ARCHIVOeselnmeroutilizadocuandoel archivo fue abierto. VARIABLE1, VARIABLE2, . . . son los nombres delasvariablesquehanderecibirloscorrespondientesdatos del archivo. 169 Los datos del archivo deben aparecer en el mismo orden que tienen las variables en la sentencia Input y deben coincidir con variables del mismo tipo de datos. Por ejemplo: Dim N1 As Integer N1 = FreeFile() Open C:\DATA\DEMO.DAT For Input As # N1 Dim A As Integer Dim B As Double Dim S As String Dim F As Date Input # N1, A, B, S, F Elsegmentodecdigoanterioresperaencontrarenel archivo un entero, un real, una cadena y una fecha, en ese orden (separados por comas o un retorno de carro). Sentencia Line Input Permiteleerunalneadeunarchivosecuencialignorando los delimitadores (comas) y la asigna a una variable tipo cadena. Su sintaxis es: Line Input # NMERO_ARCHIVO, VARIABLE 170 DondeNMERO_ARCHIVOeselnmeroutilizadocuandoel archivo fue abierto. VARIABLE es el nombre de una variable tipo cadena de caracteres. La sentencia Line Input se utiliza especialmente para leer unarchivodetextolneaalnea,yaqueestasentencialee todos los caracteres del archivo hasta que encuentra un retorno decarro,entoncescontinuaenlasiguientelneayas sucesivamente. Por ejemplo: Dim N1 As Integer, LINE1 As String, LINE2 As String N1 = FreeFile() Open C:\DATA\DEMO.TXT For Output As # N1 Print # N1, Lnea de prueba 1 Print # N1, Lnea de prueba 2 Close # N1 Open C:\DATA\DEMO.TXT For Input As # N1 Line Input # N1, LINE1 MsgBox LINE1 Line Input # N1, LINE2 MsgBox LINE2 La ejecucin del cdigo anterior produce la siguiente salida: 171 Funcin Input RetornalossiguientesN caracteresdeunarchivo secuencial y los asigna a una variable de cadena. Su sintaxis es de la forma: VARIABLE = Input( N , # NMERO_ARCHIVO) AdiferenciadelasentenciaInput,lafuncinInput() retorna todos los caracteres que lee, incluyendo comas, retornos de carro, continuaciones de lnea, etc. Por ejemplo: Dim N1 As Integer, S As String N1 = FreeFile() Open C:\DATA\DEMO.TXT For Output As # N1 Print # N1, Lnea de prueba 1Print # N1, Lnea de prueba 2 Close # N1 Open C:\DATA\DEMO.TXT For Input As # N1 S = Input(24, # N1) MsgBox S 172 La ejecucin del cdigo anterior produce la siguiente salida: Funcin EOF Especificasisehallegadoalfinaldeunarchivo.Su sintaxis es de la forma: VARIABLE = EOF(NMERO_ARCHIVO) Se utiliza EOF() para evitar producir un error al intentar obtener informacin ms all del final del archivo. EOF() retorna un valor True si se ha alcanzado el final del archivo y False en caso contrario. Por ejemplo: Dim N1 As Integer Dim CADENA As String N1 = FreeFile() Open C:\DATA\DEMO.TXT For Input As # N1 While Not EOF(N1) Line Input # N1, CADENA Print CADENA Wend Close # N1 173 Estesegmentodecdigoleeyvisualizacadalneadel archivo de texto DEMO.TXT. El bucle finaliza cuando se detecta el finaldelarchivo.Paraqueelcdigoanteriorfuncione correctamente,noolvideponerlapropiedadAutoRedrawdel formulario a True. Como ejemplo final del uso de archivos secuenciales vamos a desarrollar un sencillo editor de texto. Este editor aunque sus prestacionessonbastantelimitadasvahaservirparaponeren prctica lo aprendido recientemente. El men que se muestra en la figura obedece a la siguiente descripcin: CaptionNameShortCut &Archivo MnuArchivoNinguno 174 . . . &Nuevo MnuArchivoNuevoNinguno . . . &Abrir MnuArchivoAbrirNinguno . . . &Guardar MnuArchivoGuardarNinguno . . . -MnuArchivoLineaNinguno . . . &Salir MnuArchivoSalirCtrl + X Luegoprocedaaubicarlossiguientescontrolessobreel formulario: 1 cuadro de texto 1 control CommonDialog Seguidamente debe establecer las propiedades que se indican: Form1 NombreFrmEditor CaptionEditor Text1 NombreTxtEditor MultiLineTrue ScrollBars3-Both Text CommonDialog1 NombreCommonDialog1 CancelErrorTrue Una vez establecidas las propiedades de la interfaz ingresar el cdigo que se muestra: 175 Private Sub Form_Resize() TxtEditor.Move 0, 0, ScaleWidth, ScaleHeight End Sub Private Sub MnuArchivoNuevo_Click() TxtEditor = End Sub Private Sub MnuArchivoAbrir_Click() Dim FILTRO As String, FILE As String Dim N1 As Integer, CADENA As String On Error GoTo ERROR_ABRIR FILTRO = Archivos de texto (*.TXT)|*.TXT CommonDialog1.Filter = FILTRO CommonDialog1.ShowOpen FILE = CommonDialog1.FileName N1 = FreeFile() CADENA = TxtEditor = Open FILE For Input As # N1 While Not EOF(N1) Input # N1, CADENA TxtEditor = TxtEditor & CADENA & vbCrLf Wend Close # N1 FrmEditor.Caption = Editor - & FILE SALIR_ABRIR: 176 Exit Sub ERROR_ABRIR: MsgBox Err.Description Resume SALIR_ABRIR End Sub Private Sub MnuArchivoGuardar_Click() Dim FILTRO As String, FILE As String Dim N1 As Integer On Error GoTo ERROR_GUARDAR FILTRO = Archivos de texto (*.TXT)|*.TXT CommonDialog1.Filter = FILTRO CommonDialog1.ShowSave FILE = CommonDialog1.FileName N1 = FreeFile() Open FILE For Output As # N1 Print # N1, TxtEditor Close # N1 FrmEditor.Caption = Editor - & FILE SALIR_GUARDAR: Exit Sub ERROR_GUARDAR: MsgBox Err.Description Resume SALIR_GUARDAR End Sub 177 La sentencia Err.Description retorna una cadena que contiene la descripcin asociada a un error en tiempo de ejecucin. LasentenciaResumecontinualaejecucinenlaetiqueta especificada cuando termina una rutina de gestin de errores.ARCHIVOS DE ACCESO ALEATORIO En los archivo de acceso aleatorio el almacenamiento de los datos se hace mediante registros (todos de la misma longitud), lo cualessonidentificadosmedianteunniconmerodenominado ndice. El primer registro de un archivo tiene como ndice 1, el segundotienendice2yassucesivamente.Lainformacin contenidaenunarchivodeestetipopuedeseraccedidaen cualquiersecuencia,yaquecadaregistroindividualseasocia consurespectivondiceypuedeserledo,escritoo actualizado. Lassentenciasyfuncionesnecesariasparamanipular archivos de tipo aleatorio se presentan a continuacin. Sentencia Open Permiteabrirunarchivo.Lasintaxisparaacceder aleatoriamente a un archivo es: Open NOMBRE_ARCHIVO For Random As # NMERO_ARCHIVO Len = LON_REG Donde NOMBRE_ARCHIVO es una cadena que especifica el nombre del archivo que se debe ser abierto en modo Random. 178 ElparmetroNMERO_ARCHIVOesunenterocuyovalorest comprendidoentre1y511.Estenmeroserasociadoconel nombre del archivo mientras permanezca abierto. LON_REG es un entero que establece la longitud del registro para archivos aleatorios. Sentencia Put Permite grabar un registro en un archivo abierto para acceso aleatorio. Su sintaxis es: Put # NMERO_ARCHIVO, NMERO_REG, VARIABLE Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo, NMERO_REG es el nmero correspondiente al registro que se va ha grabar y VARIABLE contiene los datos a escribir en el archivo. Por ejemplo: Dim N1 As Integer, REG As DISTRITO REG.ID_DISTRITO = L09 REG.NOMBRE = Chorrillos N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) Put # N1, 1, REG Close # N1 El segmento de cdigo anterior utiliza una variable REG de tipo DISTRITO, cuya definicin es la siguiente: 179 Private Type DISTRITO ID_DISTRITO As String * 3 NOMBRE As String * 30 End Type Sentencia Get Permite leer un registro procedente de un archivo de acceso aleatorio, almacenando los datos en una variable especfica. Su sintaxis es de la forma: Get # NMERO_ARCHIVO, NMERO_REG, VARIABLE Donde NMERO_ARCHIVO es el nmero bajo el cual se abri el archivo, NMERO_REG es el nmero correspondiente al registro que se va ha leer y VARIABLE almacena los datos del registro ledo. Por ejemplo: Dim N1 As Integer, I As Integer, REG As DISTRITO N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) I = 1 While Not EOF(# N1) Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE I = I + 1 Wend 180 Close # N1 Cuando EOF() se utiliza con un archivo aleatorio, retorna un valor True si una sentencia Get intenta leer y no puede porque ha alcanzado el final del archivo. Funcin LOF Retornaelnmerodebytes(caracteres)queocupaun determinadoarchivoabiertomediantelasentenciaOpen.Su sintaxis es: VARIABLE = LOF(# NMERO_ARCHIVO) DondeNMERO_ARCHIVOeselnmeroconelqueseabriel archivo. Esta funcin es de utilidad, porque aplicada a un archivo de accesoaleatorio,permiteconocerelnmeroderegistros almacenadosenelarchivo.Paraellodebedividirelvalor retornado entre la longitud del registro. Como ejemplo, considere lo siguiente: Dim N1 As Integer, REG As DISTRITO Dim NUM_REGS As Integer, I As Integer N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) NUM_REGS = LOF(N1) / Len(REG) For I = 1 To NUM_REGS 181 Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE Next Close # N1 Funcin Loc Estafuncinretornalaposicinactualdentrodeun fichero. Su sintaxis es: VARIABLE = Loc(# NMERO_ARCHIVO) La funcin Loc() aplicada a un archivo de acceso aleatorio retornaelnmerodelltimoregistroledoograbadoenel archivo especificado. Por ejemplo: Dim N1 As Integer, REG As DISTRITO Dim NUM_REGS As Integer, I As Integer N1 = FreeFile() Open C:\DATA\RAND1.DAT For Random As # N1 Len = Len(REG) NUM_REGS = LOF(N1) / Len(REG) I = 1 Do While True Get # N1, I, REG MsgBox REG.ID_DISTRITO & & REG.NOMBRE I = I + 1 If Loc(N1) = NUM_REGS Then Exit Do 182 Loop Close # N1 LasentenciaIffinalizaelbuclesisehaalcanzadoel ltimo registro. Comoejemplofinalvamosadesarrollarunaaplicacinque permita realizar el mantenimiento de los datos almacenados en el archivo C:\DATA\CURSO.DAT. LosbotonesubicadosenelmarcoNavegador(Primero, Anterior,SiguienteyUltimo,deizquierdaad