You are on page 1of 627

APRENDA VISUAL BASIC

PRACTICANDO

























APRENDA VISUAL BASIC
PRACTICANDO
Jos Felipe Ramrez Ramrez
Master en Informtica Administrativa,
Catedrtico de la Facultad de Contadura Pblica y Administracin,
Universidad Autnoma de Nuevo Len, Mxico
Revisin tcnica:
Lic. Jos Luis Ramos
Coordinador de la Carrera de Informtica Administrativa, Facultad de Contadura
Pblica y Administracin, Universidad Autnoma de Nuevo Len, Mxico

Pearson
Educacin
MXICO ARGENTINA BRASIL COLOMBIA COSTA RICA CHILE
ESPAA GUATEMALA PER PUERTO RICO VENEZUELA



















/ Datos de catalogacin bibliogrfica
RAMREZ RAMREZ, JOS
FELIPE Aprenda Visual Basic
practicando
PEARSON EDUCACIN. Mxico, 2001
ISBN: 970-26-0285-8
rea: Universitarios
Formato: 18.5x23.5cm Pginas: 848
Editor: Jos Luis Vzquez Chavarra
e-mail: luis.vazquez@pearsoned.com
Editor de desarrollo: Amonio Nuez Ramos
Supervisor de produccin: Jos D. Hernndez
Garduo
Diseo de portada: Iliana H. Gonzlez Villafn
PRIMERA EDICIN. 2001
D-R, 2001 por Pearson Educacin de
Mxico, S.A. de C.V. Calle 4 No, 25-
2do. Piso
Fracc. Industrial Alce Blanco 53370 Naucalpan de
Jurez, Edo. de Mxico E-mail:
editorial.universidades@pearsoned.com
Cmara Nacional de la Industria Editorial Mexicana. Registro No. 1031

Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden
reproducirse, registrarse o transmitirse, por un sistema de recuperacin de
informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico.
fotoqumico, magntico o electro ptico, por fotocopia, grabacin o cualquier otro.
sin permiso previo por escrito del editor.
El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar
requerir tambin la autorizacin del editor o de sus representantes.
ISBN: 970-26-0285-8
Impreso en Mxico- Primea in Mxico
1234567890-03 02 01
Pearson
Educacin














A Adriana, mi esposa,
porque ama mis propiedades,
hace mejores todos mis eventos
y motiva todos mis mtodos.



















CONTENIDO
____________________________________________________________________

Contenido ..........................................................................................................................................vi
ndice de prcticas .............................................................................................................................xv
Lo inesperado ....................................................................................................................................xx
Prlogo ..............................................................................................................................................xxii
Forma y contenido del libro .............................................................................................................xxiii
Agradecimientos...............................................................................................................................xxvii

Parte 1: Entorno Integrado de Desarrollo
Captulo 1: Visual Basic como plataforma de desarrollo ................................................. 3
Objeto de la programacin ...................................................................................................................... 4
Visual Basic: ms que un lenguaje de programacin ............................................................................. 5
Entorno Integrado de Desarrollo ............................................................................................................ 6
Ediciones de Visual Basic ........................................................................................................................ 8
Elementos del IDE .................................................................................................................................. 9
La barra de mens ................................................................................................................................... 12
La barra de herramientas ......................................................................................................................... 12
Formulario (Form) .................................................................................................................................. 13
Modos de trabajo con formularios: SD1 y MDI ..................................................................................... 13
Tecnologa orientada a objetos y Visual Basic ....................................................................................... 16
Controles ................................................................................................................................................. 18
Clase ........................................................................................................................................................ 18
Objetos .................................................................................................................................................... 18
Cuadro de herramientas .......................................................................................................................... 19
Propiedades ............................................................................................................................................. 23
Mtodos .................................................................................................................................................. 24
Ejemplificacin de objeto - propiedad - mtodo .................................................................................... 24
Explorador de proyectos ......................................................................................................................... 25
Tiempos de desarrollo de Visual Basic ................................................................................................... 27
Ventana Propiedades ............................................................................................................................... 28
Ventana Posicin del formulario ............................................................................................................. 31
Pasos para crear una aplicacin en Visual Basic ..................................................................................... 32
Resumen................................................................................................................................................... 33
Algunas respuestas a los ejercicios ........................................................................................................ 34

Capitulo 2: Creacin de la interfaz de usuario ............................................................... 35
El punto de partida: Qu desea hacer? .................................................................................................. 36
Paso 1: Crear la interfaz de usuario .................................................................................................... 37
























Contenido vii

Insercin de objetos............................................................................................................................... 37
Propiedades de posicin y dimensin .................................................................................................. 41
Organizacin de los objetos en el formulario ...................................................................................... 48
Cmo establecer las aplicaciones para diferentes resoluciones de monitores ..................................... 52
Resumen ....................................................................................................................................................... 55
Algunas respuestas a los ejercicios ..................................................................................................... 56

Captulo 3: Cmo establecer las propiedades de los objetos .............................................. 57
Consideraciones de diseo en Visual Basic .......................................................................................... 58
Paso 2: Establecer las propiedades de los objetos ....................................................................................... 59
Validar que ya se tienen lodos los objetos que se requieren en el formulario..................................... 59
Cmo asignar el nombre adecuado a cada uno de los objetos .......................................................... 62
Cmo establecer las propiedades de apariencia y comportamiento .................................................. 67
Tablas de objetos y propiedades ........................................................................................................ 73
Resumen ..................................................................................................................................................... 74
Captulo 4: Escritura del cdigo de los eventos ................................................................... 75
Paso 3: Escribir el cdigo de los eventos .................................................................................................... 76
El editor de cdigo de Visual Basic ............................................................................................................ 76
Elementos de la ventana Cdigo .......................................................................................................... 79
Caracteres especiales ............................................................................................................................ 81
Asistencia en la edicin de cdigo ....................................................................................................... 84
El evento predeterminado de los objetos............................................................................................... .84
Convenciones para la codificacin ....................................................................................................... .94
Especificaciones de codificacin ........................................................................................................... 96
Qu hacer con los procedimientos de evento sin cdigo? .................................................................... .97
Resumen ...................................................................................................................................................... 98
Algunas respuestas a los ejercicios ..................................................................................................... 98
Captulo 5: Cmo guardar y ejecutar aplicaciones ............................................................. 101
Cmo se almacena su trabajo en Visual Basic? ......................................................................................... 102
Cmo guardar aplicaciones .......................................................................................................................... 103
Recomendaciones para nombrar archivos en Visual Basic .................................................................... 107
Cmo ejecutar su aplicacin ......................................................................................................................... 108
Depuracin y control del programa............................................................................................................... 114
Indicadores de margen ............................................................................................................................. 115
La ventana Cdigo al depurar una aplicacin ..........................................................................................117
Ejecucin paso a paso .............................................................................................................................. 118
Puntos de interrupcin ............................................................................................................................. 119
Cmo generar un archivo ejecutable (EXE) ................................................................................................. 120
Forma esquemtica de presentacin de aplicaciones ................................................................................... 123
Resumen ...................................................................................................................................................... 127
Algunas respuestas a los ejercicios .......................................................................................................... 128


Parte 2: Elementos de programacin
Captulo 6: Variables y tipos de datos ...................................................................................................... 131
MsgBox .................................................................................................................................................. 132
Constantes de Visual Basic .................................................................................................................... 135


























viii Contenido
InputBox .................................................................................................................................................... 139
Declaracin de variables ................................................................................................................................ 142
Tipos de datos ................................................................................................................................................ 143
DIM: declaracin de variables de memoria ................................................................................................... 145
Alcance .......................................................................................................................................................... 147
Nombre .......................................................................................................................................................... 148
Constantes ...................................................................................................................................................... 150
Matrices .......................................................................................................................................................... 150
Funciones de lmite de posiciones .................................................................................................................. 153
Option Explicit ......................................................................................................................................... 155
Conversin de datos ........................................................................................................................................ 158
La funcin Format ........................................................................................................................................ 161
Resumen ......................................................................................................................................................... 166
Algunas respuestas a los ejercicios ....................................................................................................... 166

Captulo 7: Operadores y estructuras de control ...................................................................... 169
Operadores aritmticos .................................................................................................................................... 170
Operadores comparativos ................................................................................................................................ 172
Cdigo ASCII ......................................................................................................................................... 173
Operadores lgicos .......................................................................................................................................... 174
Prioridad entre operadores ............................................................................................................................... 177
Instruccin If (condicional) ........................................................................................................................... 178
Select Case ................................................................................................................................................ 184
For Next ....................................................................................................................................................... 186
Do Loop .......................................................................................................................................................... 189
Resumen .......................................................................................................................................................... 191
Algunas respuestas a los ejercicios ...................................................................................................... 191

Captulo 8: Funciones de manipulacin de datos ......................................................................193
Qu son las funciones .......................................................................................................................................194
Funciones de fecha y hora ................................................................................................................................ 195
Funciones de manipulacin de cadenas (string) ......................................................................................... 202
Funciones numricas ........................................................................................................................................ 210
Funciones de decisin ...................................................................................................................................... 213
Funciones de uso especfico ............................................................................................................................. 216
Funciones financieras ................................................................................................................................ 216
Funciones trigonomtricas ........................................................................................................................ 217
Resumen ........................................................................................................................................................... 218

Captulo 9: Procedimientos y funciones definidas por el usuario .......................................... 219
Procedimientos ................................................................................................................................................. 220
Ejecucin de procedimientos ............................................................................................................... 221
Cmo agregar procedimientos en Visual Basic ................................................................................... 222
Procedimientos que no utilizan argumentos y no devuelven valores ................................................. 224
Procedimientos que no utilizan argumentos y s devuelven valores .................................................. 225
Procedimientos que utilizan argumentos ........................................................................................... 227
Especificacin de argumentos opcionales ......................................................................................... 229
Valores predeterminados para argumentos opcionales ...................................................................... 232
Funciones con nmero incierto de argumentos ................................................................................ 233
Resumen ......................................................................................................................................................... 237
























Contenido jx
Parte 3: Controles grficos y programacin orientada a eventos
Captulo 10: Controles bsicos para la introduccin de datos ................................................................ 241
Controles bsicos para el acceso de datos ..................................................................................................... 242
Label....................................................................................................................................................... 242
TextBox.................................................................................................................................................. 243
CommandButton...................................................................................................................... 244
Enfoque ......................................................................................................................................................... 249
La tecla presionada: evento KeyPress .................................................................................................. 259
Resumen ........................................................................................................................................................ 262
Captulo 11: Programacin orientada a eventos ........................................................................................ 263
Eventos y su clasificacin ............................................................................................................................... 264
Argumentos implcitos ............................................................................................................................. 266
Resumen de las categoras de eventos, consideradas de uso general .............................................................. 266
TipoClic .................................................................................................................................................. 267
Tipo Cambios ......................................................................................................................................... 268
Tipo Enfoque .......................................................................................................................................... 270
Tipo Ratn .............................................................................................................................................. 284
Prioridad de los eventos .................................................................................................................................. 294
Resumen .......................................................................................................................................................... 303
Captulo 12: Controles contenedores y controles de seleccin .................................................................. 305
Objetos contenedores ...................................................................................................................................... 306
Frame ............................................................................................................................................................. 306
CheckBox ...................................................................................................................................................... 312
Matriz de controles .......................................................................................................................................... 316
Colores en Visual Basic utilizando RGB y QBColor .................................................................................... 323
RGB ........................................................................................................................................................... 323
QBColor ............................................................................................................................................... 324
OptionButton ............................................................................................................................................ 325
HscrollBary y ScrollBar ..................................................................................................................... 330
Resumen ........................................................................................................................................................... 337
Captulo 13: Controles de listas desplegables .............................................................................................. 339
Concepto de coleccin ..................................................................................................................................... 340
Listas desplegables: ListBox y ComboBox ................................................................................................ 342
Cmo agregar y eliminar opciones de las listas desplegables ......................................................................... 343
Mtodo Additem ..................................................................................................................................... 343
Propiedad ListCount ............................................................................................................................ 344
Propiedad List ........................................................................................................................................ 345
Propiedades Selected y Listindex ................................................................................................. 346
Mtodo Removeltem .............................................................................................................................. 347
Mtodo Clear .......................................................................................................................................... 348
Resumen ........................................................................................................................................................... 368
Captulo 14: Editor de mens y manejo del Portapapeles ......................................................................... 371
El Editor de mens .......................................................................................................................................... 372
Cmo invocar el Editor de mens .......................................................................................................... 373
























x Contenido
Manejo del Portapapeles ............................................................................................................................... 385
Len: longitud del texto .......................................................................................................................... 386
Propiedades del objeto fuente: SelStart, SelLength y SelText .............................................. 386
Mtodos del objeto Clipboard: Clear, SetText y GetText .......................................................... 387
Resumen ........................................................................................................................................................ 393
Captulo 15: Manejo de imgenes .............................................................................................................. 395
Controles bsicos para mostrar imgenes ....................................................................................................... 396
Image .............................................................................................................................................................. 396
LoadPicture ......................................................................................................................................... 396
PictureBox ................................................................................................................................................. 400
Adicin de componentes al proyecto .............................................................................................................. 405
Almacenamiento de imgenes ......................................................................................................................... 409
ImageList ( Microsoft Windows Common Controls 6.0) ...................................................................... 410
Resumen .......................................................................................................................................................... 419
Algunas respuestas a los ejercicios ............................................................................................................. 419
Captulo 16; Arrastrar y colocar ................................................................................................................. 421
Arrastrar y colocar .......................................................................................................................................... 422
Estados de transicin y punteros predefinidos ................................................................................................ 432
Punteros predefinidos del entorno de Windows ..................................................................................... 433
Manejo en modo manual de arrastrar y colocar .............................................................................................. 435
Resumen .......................................................................................................................................................... 441
Captulo 17: Control del tiempo .................................................................................................................. 443
Control bsico para controlar el tiempo .......................................................................................................... 444
Timer ...................................................................................................................................................... 444
Resumen .......................................................................................................................................................... 449
Captulo 18: Manejo del sistema de archivos ............................................................................................. 451
El sistema de archivos ..................................................................................................................................... 452
Controles bsicos para el manejo del sistema de archivos .............................................................................. 452
DriveListBox ............................................................................................................................................ 452
DirListBox ................................................................................................................................................. 453
FileListBox .............................................................................................................................................. 453
Manejo del objeto FileSystem ................................................................................................................... 461
Manipulacin de subdirectorios ................................................................................................................... 461
Manipulacin de archivos ............................................................................................................................ 468
Resumen ........................................................................................................................................................... 474
Captulo 19: Cuadros de dilogo comunes ...................................................................................................477
Cuadros de dilogo comunes ............................................................................................................................478
CommonDialog ( Microsoft Common Dialog Control 6.0) ..................................................................... 478
Indicadores ................................................................................................................................................... 480
Manejo de errores ......................................................................................................................................... 481
Cuadro de dilogo Color ............................................................................................................................. 482
Cuadro de dilogo Fuente ............................................................................................................................ 485
Cuadro de dilogo Imprimir ........................................................................................................................ 491
Cuadro de dilogo Abrir/Guardar como ...................................................................................................... 497
Resumen .......................................................................................................................................................... 504


























Contenido xi
Captulo 20: Cmo trabajar en una interfaz de mltiples documentos ............................................... 505
Fundamentos del entorno MDI .................................................................................................................. 506
Limitaciones que implica el uso de un formulario MDI ....................................................................... 508
Cmo preparar su aplicacin para compilacin y distribucin ................................................................... 511
Resumen ...................................................................................................................................................... 512
Captulo 21: Controles ActiveX para mejorar la interfaz ..................................................................... 513
Controles comunes de Windows ................................................................................................................. 514
ProgressBar ( Microsoft Windows Common Controls 6.0) ....................................................... 514
TreeView ( Microsoft Windows Common Controls 6.0) ............................................................. 518
Cmo agregar opciones a un sistema TreeView ............................................................................... 519
StatusBar ( Microsoft Windows Common Controls 6.0) ............................................................ 526
Cmo agregar opciones a un objeto basado en StatusBar .............................................................. 526
ToolBar ( Microsoft Windows Common Controls 6.0) ................................................................. 529
Cmo agregar opciones a un objeto basado en StatusBar .............................................................. 530
Resumen ...................................................................................................................................................... 537


Parte 4: Archivos y bases de datos
Captulo 22: Bases de datos y DAO ......................................................................................................... 541
Conceptos de bases de datos ....................................................................................................................... 542
Base de datos, tabla, registro y campo ................................................................................................... 542
Clave primaria ........................................................................................................................................ 543
Clave externa y relaciones ...................................................................................................................... 544
Integridad referencial .............................................................................................................................. 545
ndices ..................................................................................................................................................... 545
El motor de base de datos Microsoft Jet ...................................................................................................... 550
La interfaz de usuario y el cdigo de aplicaciones ................................................................................ 550
El motor de base de datos ....................................................................................................................... 551
El almacn de datos ................................................................................................................................ 551
DAO ............................................................................................................................................................. 551
Clases, objetos y colecciones ................................................................................................................. 554
Divisiones de la programacin de bases de datos .................................................................................. 555
Lenguaje de Definicin de Datos ........................................................................................................... 555
Lenguaje de Manipulacin de Datos ...................................................................................................... 556
Resumen ...................................................................................................................................................... 556
Algunas respuestas a los ejercicios ........................................................................................................ 556
Captulo 23: Lenguaje de Definicin de Datos y DAO ........................................................................... 559
Lenguaje de Definicin de Datos ................................................................................................................. 560
Tipos de objetos en DAO ........................................................................................................................ 561
Sintaxis para el uso de colecciones ........................................................................................................ 562
Variables objeto ...................................................................................................................................... 563
Espacio de trabajo e integracin de la base de datos .............................................................................. 570
Mtodos Create ................................................................................................................................... 570
Bloque With... End With ................................................................................................................ 573
Elementos requeridos para agregar objetos ............................................................................................ 576


























xii Contenido
Cmo trabajar con las colecciones de DAO ................................................................................................... 587
Resumen .......................................................................................................................................................... 594
Algunas respuestas a los ejercicios ........................................................................................................ 595
Captulo 24: Lenguaje de Manipulacin de Datos y DAO ........................................................................ 597
Lenguaje de Manipulacin de Datos .............................................................................................................. 598
Validaciones a nivel tabla ....................................................................................................................... 599
Validaciones a nivel base de datos .......................................................................................................... 599
Operaciones bsicas de manipulacin de bases de datos ............................................................................... 600
Tareas de apertura de base de datos ................................................................................................................ 601
OpenDatabase ....................................................................................................................... 601
OpenRecordset ..................................................................................................................... 602
Tipos de Recordset ............................................................................................................... 603
Close ...................................................................................................................................... 605
Tareas de escritura de datos (partel) ................................................................................................................ 605
AddNew y actualizacin al almacn de datos .......................................................................................... 606
Tareas de bsqueda de datos (parte 1) ............................................................................................................. 609
Seek ........................................................................................................................................................ 609
Propiedad Index ..................................................................................................................................... 609
Propiedad NoMatch ................................................................................................................................ 610
Tareas de escritura de datos (parte 2) .............................................................................................................. 610
Edit ........................................................................................................................................................ 611
Update .................................................................................................................................................... 611
Delete .................................................................................................................................................... 612
Tcnica RAR ................................................................................................................................................... 613
Tareas de movimiento entre datos ................................................................................................................... 622
Tareas de bsqueda de datos (parte 2) ............................................................................................................. 627
Condicin ................................................................................................................................................... 628
Mtodos Find ........................................................................................................................................... 629
Resumen ........................................................................................................................................................... 636
Captulo 25: Controles Data y FlexGrid ................................................................................................ 639
Control Data .................................................................................................................................................... 640
Objetos vinculados a campos de base de datos ........................................................................................ 641
FlexGrid ...................................................................................................................................................... 646
Consideraciones de incompatibilidad entre Access 97 y Access 2000 ........................................................... 649
Resumen .......................................................................................................................................................... 655
Captulo 26: Bases de datos multiusuario usando DAO ........................................................................... 657
La necesidad de capacidades multiusuario ..................................................................................................... 658
Cmo abrir la base de datos en modo compartido ................................................................................... 658
Cmo abrir los Recordsets en modo compartido .............................................................................. 659
Problemas al escribir y concepto de bloqueo ........................................................................................... 660
Bloqueo pesimista y optimista ....................................................................................................................... 662
Bloqueo pesimista .................................................................................................................................... 662
Bloqueo optimista .................................................................................................................................... 663
Aclaracin del "bloqueo de registros" ..................................................................................................... 664
Manejo de errores para el modo multiusuario ................................................................................................ 665
On Error ............................................................................................................................... 665
Etiquetas ................................................................................................................................. 665
GoTo ........................................................................................................................................ 665

























Contenido xiii
Resume ............................................................................................................................................... 666
Err y Error ....................................................................................................................................... 666
Exit Sub ............................................................................................................................................. 666
Resumen ....................................................................................................................................... 672

Captulo 27: Archivos planos para transferencia de datos ...................................................... 675
Los archivos planos siguen vigentes ............................................................................................................... 676
Creacin y lectura de archivos planos ............................................................................................................. 677
Open ........................................................................................................................................................ 678
FreeFile ............................................................................................................................................... 678
Tipos de datos definidos por el usuario .................................................................................................... 679
Cmo escribir en un archivo ..................................................................................................................... 679
Input ...................................................................................................................................................... 684
Resumen .......................................................................................................................................................... 688

Captulo 28: Manejo de bases de datos corporativas usando ADO ........................................ 689
Bases de datos ms all de la computadora personal ...................................................................................... 690
Objeto de Datos ActiveX .......................................................................................................................... 690
Pubs: La base de datos de ejemplo ............................................................................................................ 692
Ejecucin front - end a travs de ADO ..................................................................................................... 693
Conexin a una base de datos corporativa mediante ADO ...................................................................... 694
Peticiones al servidor de bases de datos utilizando ADO ........................................................................ 701
DataGr-id ( Microsoft DataGrid Control OLEDB) ................................................................................... 704
SQL............................................................................................................................................................... 709
DML usando ADO ........................................................................................................................................ 720
ADO a travs de ODBC ................................................................................................................................ 732
Conexin a travs de DSN almacenado en el Registro ........................................................................... 733
Conexin a travs de DSN almacenado en archivo DSN ....................................................................... 733
MDAC y problemas comunes en el enlace ................................................................................................... 735
Resumen ........................................................................................................................................................ 736

Captulo 29: Data Environment ................................................................................................. 737
Organizacin de enlaces a datos utilizando el Data Environment ................................................................ 738
Estructura jerrquica del Data Environment .......................................................................................... 739
Resumen ....................................................................................................................................................... 749
Captulo 30: Data Report ........................................................................................................... 751
Informes a travs del Data Report ................................................................................................................ 752
Cmo agregar un Data Report a un proyecto .......................................................................................... 752
Objetos del Data Report .......................................................................................................................... 753
Secciones del Data Report ....................................................................................................................... 753
Controles del Data Report ...................................................................................................................... 754
Desarrollo de un informe .............................................................................................................................. 755
Qu queremos? La imagen visual del informe ...................................................................................... 755
Cmo agregar campos del Data Environment al Data Report ................................................................ 760
Cmo agregar objetos al Data Report ..................................................................................................... 762
Informes con grupos de datos ........................................................................................................................ 769
Data Environment para informes con grupos .......................................................................................... 771
Cmo se organizan las secciones ............................................................................................................. 776
Campos calculados y objetos rptFunction ........................................................................................ 783
Resumen ......................................................................................................................................................... 787
























xiv Contenido

Parte 5: Apndices
Apndice I: Convenciones ......................................................................................................................... 791
Prefijos para los controles ............................................................................................................................ 791
Prefijos sugeridos para DAO .................................................................................................................. 794
Prefijos sugeridos para mens ................................................................................................................ 795
Seleccin de prefijos para otros controles .............................................................................................. 795
Convenciones de nombres de constantes y variables ................................................................................... 795
Prefijos de alcance de variables .............................................................................................................. 796
Constantes ............................................................................................................................................... 797
Variables .................................................................................................................................................. 797
Tipos de datos de variables ..................................................................................................................... 798
Nombres descriptivos de variables y procedimientos ............................................................................ 798
Tipos definidos por el usuario ................................................................................................................ 799
Convenciones de codificacin estructurada ................................................................................................. 799
Convenciones de comentarios al cdigo ................................................................................................ 799
Cmo formatear el cdigo ...................................................................................................................... 801
Agrupacin de constantes ....................................................................................................................... 801
Operadores & y + .................................................................................................................................... 802
Creacin de cadenas para MsgBox, InputBox y consultas SQL ........................................................ 802
Apndice II: Service Pack 5.0 de Visual Studio 6.0 ................................................................................... 803
Necesidad del Service Pack ............................................................................................................................ 803
Consideraciones de instalacin ................................................................................................................. 805
Actualizaciones de productos relativos a Visual Basic ................................................................................... 807
Microsoft Agent 2.0 ............................................................................................................................... 807
Visual Studio Installer ............................................................................................................................... 807
Problemas con los controles, resueltos con SP5 .............................................................................................. 807
Artculos de Microsoft Knowledge Base sobre los errores solucionados ........................................................ 812

ndice ................................................................................................................................................................813








































NDICE DE PRCTICAS
_________________________________________________________________________


Parte 1: Entorno Integrado de Desarrollo
Capitulo 1: Visual Basic como plataforma de desarrollo
01.01 Cmo iniciar sesin en Visual Basic...................................................................................... 6
01.02 Cmo cerrar una sesin en Visual Basic................................................................................ 8
01.03 Cmo activar los elementos del IDE ................................................................................... 11
01.04 Cmo establecer el entorno de desarrollo a SDI ................................................................. 14
01.05 Ubicacin de los controles ................................................................................................... 22
01.06 Cmo ocultar y mostrar formularios..................................................................................... 26
01.07 Uso de la ventana Propiedades ............................................................................................. 30
Capitulo 2: Creacin de la interfaz de usuario
02.01 Cmo insertar un objeto en la interfaz.................................................................................. 38
02.02 Cmo cambiar la posicin o las dimensiones de un objeto................................................... 43
02.03 Cmo seleccionar un formulario... ....................................................................................... 45
02.04 Corno cambiar el tamao de un formulario. ......................................................................... 45
02.05 Cmo guardar su trabajo....................................................................................................... 46
02.06 Cmo agregar objetos en modo de trazo .............................................................................. 47
02.07 Seleccin de objeto activo. en forma individual o en modo de grupo ................................. 49
02.08 Cmo determinar la posicin de un formulario en la pantalla ............................................. 51
02.09 Cmo establecer las Guas de resolucin ............................................................................. 53
02.10 Cmo utilizar las herramientas del men Formato para organizar objetos...................................... 54
Captulo 3: Cmo establecer las propiedades de los objetos
03.01 Cmo validar la cantidad y el tipo de objetos requeridos en una aplicacin......................... 60
03.02 Cmo modificar la propiedad ame de los objetos............................................................... 66
03.03 Cmo modificar las propiedades de apariencia y comportamiento....................................... 68
Captulo 4: Escritura del cdigo de los eventos
04.01 Cmo abrir la ventana Cdigo............................................................................................... 81
04.02 Cmo manejar los componentes de la ventana Cdigo ........................................................ 82
04.03 Manejo de colores y autoformato al editar cdigo................................................................. 85
04.04 Compilacin y deteccin de errores en modo de edicin...................................................... 86
04.05 Sugerencia de propiedades y mtodos en modo de edicin................................................... 87
04.06 Uso de los cuadros Objeto y Evento para la seleccin y codificacin de un procedimiento
de evento determinado .......................................................................................................... 90
04.07 Uso del carcter de .subrayado y la ayuda contextual en modo de edicin........................... 92
Captulo 5: Cmo guardar y ejecutar aplicaciones
05.01 Archivos de trabajo en Visual Basic ................................................................................. 104
05.02 Cmo abrir un proyecto previamente guardado................................................................. 107
05.03 Cmo ejecutar e interrumpir su programa.......................................................................... 110
05.04 Cmo seleccionar el proyecto inicial.............. ................................................................... 111





xv


















xvi ndice de prcticas
05.05 Cmo seleccionar el objeto de inicio en un proyecto..........................................................................113
05.06 Despliegue de errores en tiempo de ejecucin ................................................................................... 116
05.07 Cmo corregir cdigo en modo de interrupcin................................................................................. 118
05.08 Cmo ejecutar un programa lnea por lnea................................................. ...................................... 119
05.09 Cmo agregar y eliminar un punto de interrupcin............................................................................ 120
05.10 Cmo compilar un proyecto para generar un ejecutable en Visual Basic.......................................... 121

Parte 2: Elementos de programacin
Captulo 6: Variables y tipos de datos
06.01 MsgBox: creacin de cuadros de informacin y confirmacin de manera rpida..............................133
06.02 Uso de constantes de Visual Basic...................................................................................................... 138
06.03 InputBox: acceso rpido de datos ...................................................................................................140
06.04 Determinacin del nombre. tipo de datos y alcance indicado para las variables de memoria.............148
06.05 Uso de matrices y determinacin de lmites mnimos y mximos del intervalo de subndices...........154
06.06 Declaracin automtica de variables en Visual Basic..........................................................................155
06.07 Uso de Option Explicit (requerir la declaracin de variables de manera explcita)...................156
06.08 Cmo establecer Option Explicit de manera automtica para todos los formularios nuevos....157
06.09 Uso de funciones de conversin........................................................................ ................................. 160
06.10 Uso de la funcin Format ................................................................................................................ 163
06.11 Uso de la funcin Format. en formatos definidos por el usuario..................................................... 165
Captulo 7: Operadores y estructuras de control
07.01 Uso de los operadores aritmticos .......................................................................................................171
07.02 Cmo se resuelven las condiciones que incluyen operadores de comparacin....................................174
07.03 Cmo especificar la preferencia al resolver condiciones. mediante el uso de parntesis ....................177
07.04 Uso de For Next ................................................................................................................ ...............187
07.05 Uso de Exit For ................................................................................................................................188
07.06 Uso de Do Loop .................................................................... .............................................................190
Captulo 8: Funciones de manipulacin de datos
08.01 Uso de funciones de fecha y hora...................................................... .................................................201
08.02 Uso de funciones de manipulacin de cadenas................................................................................... 209
08.03 Uso de funciones numricas y de decisin.......................................................................................... 214
Captulo 9: Procedimientos y funciones definidas por el usuario
09.01 Creacin de un procedimiento ............................................................................................................ 224
09.02 Creacin de un procedimiento que no utilice argumentos y devuelva valores................................... 226
09.03 Creacin de un procedimiento que utilice argumentos y devuelva valores........................................ 228
09.04 Creacin de un procedimiento que utilice argumentos opcionales y devuelva valores ..................... 231
09.05 Creacin de un procedimiento que utilice argumentos opcionales con valor predeterminado
y devuelva valores................................................................................................................ 233
09.06 Creacin de un procedimiento que utilice un nmero de argumentos incierto.................................. 236


Parte 3: Controles grficos y programacin orientada a eventos
Captulo 10: Controles bsicos para la introduccin de datos
10.01 Uso de objetos basados en los controles Label. TextBox y CommandButton......................... 245












ndice de prcticas xvii
10.02 Uso de botones predefinidos de aceptacin y cancelacin y cuadros de texto multilneas,
de capacidad limitada.......................................................................................................................................... 251
10.03 Uso de caracteres para escritura oculta y validacin inmediata de caracteres, asegurando
la captura de caracteres en mayscula. Habilitar e inhabilitar botones............................................................... 256
Captulo 11: Programacin orientada a eventos
11.01 Demostracin de algunos de los eventos de tipo Clic, Cambios y Enfoque.............................................. 271
11.02 Demostracin de algunos de los eventos de tipo Teclado ......................................................................... 279
11.03 Demostracin de algunos de los eventos de tipo Ratn ............................................................................ 285
11.04 Cmo darle riqueza visual a un programa, mediante el evento MouseMove........................................... 287
11.05 Elaboracin de un programa que le permita visualizar la prioridad en la ejecucin
de los eventos................................................................................................................................................. 295
11.06 Demostracin de la precedencia del evento MouseMove sobre el evento Click.................................. 301
Captulo 12: Controles contenedores y controles de seleccin
12.01 Cmo utilizar un objeto contenedor para darle funcionalidad a una aplicacin ................................... 307
12.02 Uso de un control CheckBox para seleccionar varias caractersticas de manera simultnea ............. 312
12.03 Uso de una matriz de controles y su uso a travs de For Next y For Each .................................... 319
12.04 Uso de funciones RGB y QBGolor para la manipulacin de colores................................................... 325
12.05 Uso de objetos tipo OptionButton y Shape, y de una matriz de controles ................................... 326
12.06 Uso de barras de desplazamiento y nmeros aleatorios ........................................................................ 332
Captulo 13: Controles de listas desplegables
13.01 Utilizacin de un objeto ListBox, agregndole y eliminndole elementos
de forma dinmica............................................................................................................................................. 349
13.02 Uso de objetos ListBox de seleccin mltiple, que pasan elementos de una lista a otra.................... 354
13.03 Uso de un objeto ListBox con estilo CheckBox................................................................................ 358
13.04 Uso de los objetos ComboBox y ListBox para crear un explorador de fuentes.................................. 361
13.05 Uso de un objeto ComboBox sensible a la escritura............................................................................... 365
Captulo 14: Editor de mens y manejo del Portapapeles
14.01 Cmo se agrega un objeto de tipo men.................................................................................................. 375
14.02 Cmo introducir cdigo a una opcin de men y utilizar un men......................................................... 380
14.03 Activacin dinmica de opciones............................................................................................................. 381
14.04 Modificacin del tipo de letra utilizando el men.................................................................................... 383
14.05 Opciones de men mutuamente excluyentes............................................................................................ 384
14.06 Cmo se maneja el Portapapeles en Visual Basic..................................................................................... 387
Captulo 15: Manejo de imgenes
15.01 Uso de objetos basados en el control Image y carga de imgenes con LoadPicture....................... 398
15.02 Uso de objetos basados en el control PictureBox y modificacin dinmica de imgenes ................ 401
15.03 Cmo agregar componentes a un proyecto de Visual Basic .................................................................... 406
15.04 Almacenamiento de imgenes en un objeto ImageList ...................................................................... 410
15.05 Uso de una coleccin de imgenes ImageList .................................................................................... 416
Captulo 16: Arrastrar y colocar
16.01 Programa que comprueba las operaciones de arrastrar y colocar.............................................................. 423
16.02 Programa que comprueba las operaciones de arrastrar y colocar cuando el objeto de destino
no es de tipo Form......................................................................................................................................... 426












xviii ndice de prcticas
16.03 Programa que comprueba las operaciones de arrastrar y colocar, y que utiliza un objeto
de destino que no es de tipo Form ......................................................................................................... 428
16.04 Programa que comprueba los estados de las operaciones de arrastrar y colocar, as como
los punteros predefinidos del entorno de Windows ............................................................................... 434
16.05 Programa que comprueba las operaciones de arrastrar y colocar utilizando el modo manual ........... 436
Captulo 17: Control del tiempo
17.01 Uso del control Timer como valor absoluto. Un reloj.......................................................................444
17.02 Uso del control Timer como valor relativo. Cuenta regresiva en captura.........................................446
Captulo 18: Manejo del sistema de archivos
18.01 Uso de los controles bsicos para el manejo del sistema de archivos................................................. 454
18.02 Uso del objeto FileSystem para manipulacin de directorios....................................................... 463
18.03 Uso del objeto FileSystem para manipulacin de archivos........................................................... 469
Captulo 19: Cuadros de dilogo comunes
19.01 Cmo agregar el control CommonDialog al Cuadro de herramientas............................................. 479
19.02 Uso del control CommonDialog para manipular el color en el formato estndar
de Windows................................................................................................................................................... 482
19.03 Uso del control CommonDialog para manipular las fuentes (tipos de letra) en el formato
estndar de Windows.................................................................................................................................... 488
19.04 Uso del control CommonDialog para manipular las especificaciones de impresora
en el formato estndar de Windows.............................................................................................................. 493
19.05 Uso del control CommonDialog para manejar el cuadro de dilogo Abrir/ Guardar como,
en el formato estndar de Windows ............................................................................................................. 501
Captulo 20: Cmo trabajar en una interfaz de mltiples documentos
20.01 Cmo agregar un formulario maestro para trabajo en MDI y los formularios hijos.......................... 506
20.02 Cmo trabajar con varios formularios ............................................................................................... 509
Captulo 21: Controles ActiveX para mejorar la interfaz
21.01 Uso de objetos basados en el control ProgressBar ..................................................................... 515
21.02 Uso de TreeView ............................................................................................................................ 521
21.03 Uso de StatusBar y ToolBar ..................................................................................................... 532

Parte 4: Archivos y bases de datos
Captulo 22: Bases de datos y DAO
22.01 Anlisis de un modelo relacional de bases de datos.
22.02 Identificacin de elementos del modelo de datos ......
Captulo 23: Lenguaje de Definicin de Datos y DAO
23.01 Habilitacin de DAO.......................................................................................................................... 564
23.02 DDL utilizando DAO: declaracin de variables objeto...................................................................... 565
23.03 DDL utilizando DAO: creacin del almacn de base de datos........................................................... 574
23.04 DDL utilizando DAO: creacin de estructura de tablas y sus campos................................................ 579
23.05 DDL utilizando DAO: creacin de ndices .........................................................................................582












ndice de prcticas xix
23.06 DDL utilizando DAO: creacin de relaciones.................................................................................. 584
23.07 Ingeniera inversa utilizando DAO: determinacin del modelo de datos a partir
de un almacn de datos .......................................................................................................................... 589
Captulo 24: Lenguaje de Manipulacin de Datos y DAO
24.01 DML utilizando DAO: actualizacin de una tabla mediante la tcnica RAR..................................... 614
24.02 DML utilizando DAO: mtodos de movimiento entre registros......................................................... 623
24.03 DML utilizando DAO: bsqueda basada en criterios ......................................................................... 630
Captulo 25: Controles Data y FlexGrid
25.01 Uso del control Data para agregar, eliminar, modificar y consultar registros................................... 642
25.02 Uso del control Data para alimentar un FlexGrid ........................................................................647
25.03 SQLViewer: intrprete de SQL para DAO, usando los controles Data y FlexGrid..................... 650
Captulo 26: Bases de datos multiusuario usando DAO
26.01 Rutina de manejo de errores ............................................................................................................... 666
26.02 Uso del DAO para aplicaciones multiusuario..................................................................................... 669
Captulo 27: Archivos planos para transferencia de datos
27.01 Creacin y escritura en archivos planos.............................................................................................. 680
27.02 Proceso para bajar datos de una base de datos a archivos planos ...................................................... 682
27.03 Cmo cargar datos a una base de datos desde un archivo.................................................................. 685
Captulo 28: Manejo de bases de datos corporativas usando ADO
28.01 Conexin a bases de datos corporativas usando ADO........................................................................ 697
28.02 Visualizacin de bases de datos corporativas utilizando el control DataGrid y ADO....................705
28.03 Consultas SQL a bases de datos corporativas usando ADO............................................................... 713
28.04 DML utilizando ADO: actualizacin de una tabla mediante la tcnica RAR..................................... 722
Captulo 29: Data Environment
29.01 Uso del Data Environment para manejar bases de datos corporativas ............................................... 742
Captulo 30: Data Report
30.01 Cmo definir un Data Environment para utilizarlo con el Data Report.............................................. 757
30.02 Cmo complementar con objetos rptTextBox la seccin Detalle de un Data Report................... 761
30.03 Cmo complementar el Data Report con objetos rptLabel y rptLine. Asignacin
de valores a objetos rptLabel ............................................................................................ 763
30.04 Cmo complementar el Data Report con objetos rptShape y rptimage................................... 767
30.05 Cmo definir un Data Environment para utilizarlo con el Data Report basado
en grupos de informacin........................................................................................................................ 772
30.06 Cmo definir un Data Report basado en grupos de informacin........................................................ 778
30.07 Cmo integrar a un informe datos consolidados, de la base de datos y de campos calculados...........785















LO INESPERADO
_________________________________________________________________________
Errores en tiempo de diseo
Apertura no solicitada de la ventana Cdigo.................................................................................................... 43
Changed database context to "Database" ...................................................................................................... 735
Desea crear una matriz de controles?............................................................................................................... 65
Especificacin de alcance de procedimiento no requerida................................................................................ 93
Formato regional de Windows afecta el valor devuelto de la funcin Format............................................... 165
Las secciones del informe no coinciden con el origen de datos ..................................................................... 786
No aparece la ventana Nuevo proyecto............................................................................................................... 7
No hay ninguna fuente .................................................................................................................................... 488
No se encontr campo <campo>.................................................................................................................... 786
No se encuentra Data Environment en el men Proyecto ............................................................................... 743
No se puede colocar el control <control> en esta seccin.............................................................................. 786
No se recuperan datos,..................................................................................................................................... 748

Errores de compilacin (orden alfabtico)
Bloque if sin end if .......................................................................................................................................... 180
Do sin Loop ..................................................................................................................................................... 190
El Character de declaracin de tipo no coincide con el tipo de datos declarado.......................................... 147
El Character no es vlido ............................................................................................................................... 147
El nmero de dimensiones es incorrecto ......................................................................................................... 153
End if sin bloque if .......................................................................................................................................... 180
End Select sin Select Case .............................................................................................................................. 185
For sin Next ..................................................................................................................................................... 188
Loop sin Do ..................................................................................................................................................... 191
Next sin For ..................................................................................................................................................... 189
No coinciden los tipos ..................................................................................................................................... 397
No se encontr el mtodo o el dato miembro .................................................................................................. 248
No se encontr mtodo o elemento de datos ................................................................................................... 114
No se ha definido el tipo definido por el usuario ........................................................................................... 570
No se ha encontrado el archivo ....................................................................................................................... 397
No se puede asignar a una matriz .................................................................................................................. 153
Origen de datos no vlido............................................................................................................................... 786
Procedimiento Sub o Function no definido ..................................................................................................... 115
Referencia de variable de control Next no vlida ........................................................................................... 189
Se esperaba ")", "(" ......................................................................................................................................... 228
Se esperaba el fin de la instruccin.................................................................................................................. 146
Se esperaba fin de la funcin ........................................................................................................................... 228
Select Case sin End Select .............................................................................................................................. 185
Uso no vlido de una propiedad ..................................................................................................................... .248
XX










Lo inesperado xxi
Errores en tiempo de ejecucin (orden consecutivo)
Algunos campos no regresan valores al ejecutar el informe........................................................................... 766
El tamao del informe excede el tamao de la pgina.................................................................................... 766
Error desconocido ADO................................................................................................................................. 734
No se encuentra el nombre del origen de datos (Administrador ODBC)....................................................... 734
Error 5: Llamada a procedimientos o argumentos no vlidos ........................................................................ 368
Error 6: Desbordamiento................................................................................................................................. 146
Error 9: El subndice est fuera del intervalo....................,............................................................................ 153
Error 13: No coinciden los tipos ...................................................................................................................... 228
Error 48: Error al cargar la biblioteca "archivo.ocx".................................................................................... 735
Error 53: No se ha encontrado el archivo....................................................................................................... 397
Error 68: El dispositivo no est disponible ..................................................................................................... 463
Error 75: Error de acceso a ruta o archivo ..................................................................................................... 463
Error 76: No se ha encontrado la ruta de archivo........................................................................................... 462
Error 91: Variable de tipo objeto o la variable de bloque With no est definida............................................ 730
Error 380: El valor de la propiedad no es vlido ........................................................................................... 515
Error 424: Se requiere un objeto ............................................................................................................. 115, 247
Error 481: La imagen no es vlida.................................................................................................................. 397
Error 3020: Update o CancelUpdate sinAddNew o Edit ................................................................................ 612
Error 3044: {Rutaj No es una ruta vlida ...................................................................................................... 575
Error 3078: El motor de base de datos Jet no encuentra la tabla o query ..................................................... 603
Error 3204: Base de datos ya existe................................................................................................................. 575
Error 3264: No hay campos definidos - No se puede agregar el objeto TableDefo ndex ............................. 576
Error 3265: Elemento no encontrado en esta coleccin ................................................................................ 608
Error 3368: Relaciones deben ser por el mismo nmero de campos del mismo tipo de datos ....................... 587
Error 3420: Objeto invlido o no permanece definido ................................................................................... 578
Error 3421: Error de conversin de tipo de datos .......................................................................................... 620
Error 35600 El ndice est fuera de los lmites .............................................................................................. 415
Error 35601 No se encontr el elemento ........................................................................................................ 415
Error-2147217843: Conexin invlida............................................................................................................ 707
Error -2147217843: Login failed.................................................................................................................... 707
Error -2147217843: Attempt to locate entry in sysdatabase.......................................,................................... 708



















PRLOGO
_________________________________________________________________________
Aprenda Visual Basic practicando es un libro de propuesta.
Nace de una realidad evidente: la gente compra los libros de programacin para aprender. En muchos casos
adquiere el conocimiento como resultado de la lectura y, sin embargo, est inconforme con el resultado y con sus
propias potencialidades. La consecuencia obligada, si su afn de aprender persiste o si las necesidades de trabajo
as lo demandan, es que termina tomando un curso.
Tal pareciera entonces que los cursos son ms completos, ms efectivos, lo que nos lleva a planteamos la pregunta
cuya respuesta mueve este libro: qu tienen los cursos que no tengan los libros? La respuesta es simple: los
cursos tienen ms accin, como diran algunos; hay interaccin, aciertos y errores, el hacer del participante es
diferente al hacer que corresponde al lector de un libro.
Conocer la teora es importante, pero no suficiente; todo lo plasmado en un libro funciona bien, pero en la realidad
las cosas no siempre suceden de manera tan favorable en el trabajo diario. En la realidad aparecen situaciones
inexploradas por los libros, en donde ms que conocer la teora, se requiere haberla comprendido mediante la
vivencia prctica, para poder as ejercer el pensamiento lateral que nos lleve a resolver problemas ante los cuales
nunca nos habamos enfrentado.
ste es un libro prctico y creemos firmemente que la prctica hace al maestro. Cada captulo tiene su objetivo
particular, no slo explica algo, sino sirve para algo. Es un libro en el que se vale escribir, de hecho se
recomienda; est lleno de conceptos, cuestionarios, ejemplos, ejemplos y ejemplos. Es como leer un libro que
adems le brinda los elementos para que trabaje como lo hara en un curso. Rene lo mejor de los dos mundos.
Es excelente para el lector autodidacta, ya que le permite asimilar la informacin y practicar lo aprendido, as
como dar seguimiento a sus propios avances en el aprendizaje. Para los maestros e instructores de Visual Basic, es
un apoyo valioso como material de texto. Para el programador que ya ha tenido contacto con Visual Basic, es una
caja de trucos que le puede facilitar la tarea de desarrollar aplicaciones avanzadas o pulir las que haya
desarrollado. En trminos generales, es til para aquellos que no se dejan llevar por la engaosa creencia de que
programar se aprende leyendo; programar se aprende programando y punto.
Slo esperamos una cosa: que practique, comprenda y aprenda Visual Basic.
Jos Felipe Ramrez Ramrez
Catedrtico de la Universidad
Autnoma de Nuevo Len
xxii










FORMA Y CONTENIDO DEl LIBRO
_________________________________________________________________________


La organizacin de este libro
Este libro est dividido en cinco partes:
Entorno Integrado de Desarrollo. Trata de manera detallada los elementos y herramientas que
Visual Basic proporciona para soportar el desarrollo de aplicaciones para Windows 95, 98, 2000 y
NT. En esta parte se revisa el ciclo de desarrollo de aplicaciones de Visual Basic, desde el inicio
de un proyecto hasta su compilacin a ejecutable (EXE) para su distribucin. Es fundamental que
asimile y domine todo lo expuesto en esta parte, incluso si ya maneja Visual Basic, a efecto de
unificar los conceptos que maneja el libro.
Elementos de programacin. Trata de manera detallada los elementos de programacin en Visual
Basic, como el manejo de variables, procedimientos, funciones implcitas del lenguaje, tipos de
datos, estructuras de control, etctera. Si verdaderamente quiere ser un experto en Visual Basic, es
necesario que deje lo sencillo, el lado "Visual", para profundizar en primera instancia en su lado
"Basic".
Controles grficos y programacin orientada a eventos. Trata de manera detallada los controles
bsicos de Visual Basic. Al terminar esta parte, estar listo para disear cualquier interfaz de
usuario que se proponga desarrollar. Tambin se revisa el manejo de algunos controles ActiveX
que proporcionarn un aspecto profesional a sus aplicaciones.
Archivos y bases de datos. Trata de manera especfica la forma de utilizar bases de datos con
Visual Basic, introducindolo a tcnicas avanzadas para el registro, recuperacin y eliminacin de
informacin, representacin de modelos de datos en Visual Basic y el manejo de instrucciones
SQL, utilizando para ello las versiones ms recientes de las colecciones de objetos para manejo de
datos:
Objetos de Acceso a Datos de Microsoft, Objetos de Datos ActiveX de Microsoft y enlaces mediante
ODBC. Esta parte tambin trata la manipulacin de archivos de texto utilizando Visual Basic, as
como el manejo del diseador Data Report, que le permitir crear informes para su salida en
pantalla o papel.
Apndices. Aqu se detallar informacin del producto y las costumbres asociadas a su uso. Los
apndices constituyen una referencia que no debe dejar de consultar para obtener buenos productos
de su trabajo. Se tratarn en este caso las
xxiii













xxiv Forma y contenido del libro
convenciones de la programacin en Visual Basic, as como las mejoras relacionadas con el Service
Pack 5.0 de Visual Studio.
Cada parte se divide a su vez en captulos; cada uno de los cuales tiene una organizacin consistente
que facilita la presentacin del material.
Cada captulo tiene el tamao adecuado para manejar un tema de manera completa, sin ser muy
extenso; la idea es que no interrumpa un tema sin agotarlo.
Cada captulo inicia con una seccin de Objetivos, la cual describe de manera rpida lo que se
pretende aprender en dicho captulo.
Al final de cada captulo se encontrar una seccin de Resumen, en la cual se enumerarn los
puntos ms importantes, principalmente los que sern indispensables para captulos posteriores. En
el resumen tambin podr encontrar respuestas relativas a algunas prcticas del captulo.

Notas
Las notas que aparecen en el contenido de este libro pueden ser de los siguientes tipos:
Las referencias marcadas como Nota contienen informacin suplementaria, que no repercute en la
realizacin de una tarea, pero que sin duda enriquecer su acervo de conocimientos relativos a
Visual Basic.
Las notas marcadas como Lo inesperado contienen explicaciones de aquello que le puede suceder
y que no esperaba que ocurriera; comportamientos extraos, errores, situaciones imprevistas de
toda ndole. Por lo general, seguirn de prcticas que con toda intencin generan el error, a efecto
de que usted lo pueda analizar y prevenir. Este tipo de notas ser vital para usted, ya que los
errores ms comunes y la forma de solucionarlos se detallarn en el momento oportuno.

Prcticas
Las prcticas que se encuentren en este libro (que son muchas) estarn presentadas como listas
numeradas (1, 2, 3, y as sucesivamente). Una vieta triangular (>>) indica el inicio de una
prctica. Las prcticas estarn numeradas por Captulo.Prctica; las prcticas sern su gua para
saber cmo hacer algo.
En el desarrollo de las prcticas ser muy frecuente el uso de los mens de Visual Basic; algunos
de ellos tienen diferentes niveles de profundidad, es decir, de un












Forma y contenido del libro xxv
men surge otro men, y as sucesivamente. Para manejar esa situacin, ser lo mismo decir
"Seleccione en la barra de mens la opcin Herramientas, despus seleccione Opciones y despus, en
el cuadro de dilogo que aparece, seleccione la ficha Avanzadas", que "Seleccione el men
Herramientas Opciones Avanzadas".

Lo simplificamos porque en la prctica es as de fcil: mediante tres clics usted ya habr hecho todo el
proceso de seleccin de una opcin, en menos de tres segundos. La idea es que el libro no haga que lo
sencillo parezca complejo.

Notaciones y uso de tipos de letra
Se utilizarn itlicas cuando surjan conceptos y trminos nuevos, incluyendo elementos propios del
lenguaje que sean referidos por primera vez. Tambin aplicar para las variables y argumentos,
cuando aparezcan como parte de una sintaxis. Aplicarn cuando se haga referencia a otros textos,
cuando se haga referencia a bibliotecas del lenguaje y cuando se describan mensajes de error en las
secciones de Lo inesperado.
Se utilizar MCPdigital (u OCR A Extended) para las propiedades de los objetos (estn o no
asociadas a los objetos), las referencias a funciones, palabras reservadas y el cdigo de Visual Basic.
En la sintaxis, los corchetes "[ ]" encierran aquellos elementos opcionales. Las llaves "( }", por su
parte, contendrn opciones mutuamente excluyentes.
Se utilizarn negritas en los nombres de directorios o archivos. Se utilizarn de igual manera para
referir nombres de procedimientos creados por el usuario, as como para los datos de entrada que el
usuario tiene que escribir, incluyendo pulsaciones de teclas. Se utilizarn para identificar las
herramientas y componentes del Entorno Integrado de Desarrollo, en sus partes no utilizables
como opcin.
Se utilizarn negritas itlicas para los elementos de la interfaz que pueden ser utilizados como
opcin, las opciones de men y otras opciones de interfaz, como botones de comando u otros que
desencadenen alguna accin determinada, formen parte del Entorno Integrado de Desarrollo, o de
la interfaz creada por los usuarios.
















xxvi Forma y contenido del libro

Convenciones del teclado
El signo de suma (+) entre dos teclas indica que stas debern ser presionadas de manera
simultnea; por ejemplo, "Alt+A".
Archivos de apoyo
En el sitio Web http://www.enlace.net/ramirez2 se ha colocado un archivo llamado
AVBP.ZIP, que contiene los archivos comprimidos que son necesarios para la realizacin de las
prcticas del libro. Al ejecutar el programa, se generar un directorio llamado \avbp, que a su
vez tendr varios directorios, como sigue:

\avbp
\cap01
\cap02
\cap03
..
En \avbp\capn se colocarn los archivos necesarios para que pueda realizar de manera completa
y correcta las prcticas. La ncorresponde al nmero de captulo en donde son requeridos los
archivos.
En \avbp\capn se debern guardar las aplicaciones que vaya generando, a efecto de que tenga
debidamente organizado su avance. La n corresponde al nmero de captulo en el que son
generadas las aplicaciones.
Aunque no todos los captulos requieren archivos o generan aplicaciones, se incluirn de tal forma
que se tenga un estndar de uso. No se incluyen los ejercicios ya resueltos; la idea es que usted
programe, o no?














AGRADECIMIENTOS
Aprenda Visual Basic practicando no es el esfuerzo de una sola persona, y mucho menos la visin unipersonal de
un profesional en informtica con nimo de sentarse a escribir; ms bien es una especie de consolidacin
colectiva, la contribucin de muchas cabezas y muchas manos, con el objeto de producir un libro idneo para
capacitar a estudiantes de informtica en la programacin, utilizando para ello Visual Basic.
Quiero agradecer a todos los que de una forma u otra contribuyeron con el desarrollo de este libro. Los miembros
de la generacin LI@ 1996-2000, de la Facultad de Contadura y Administracin, habitan de manera cmoda y
curiosa en cada uno de los ejercicios contenidos en el texto: para ustedes mi amistad, mi respeto y mi apoyo
constante.
Especialmente agradezco a dos personas: a Dalila Garza Villarreal, quien de manera exhaustiva y dedicada corri
a cargo de los trabajos de edicin del texto, le agradezco su paciencia y precisin en la revisin de los
documentos; sin su atinado apoyo, este libro sera una retrica tcnica y extraa. A Juan Francisco Guevara
lvarez, por otro lado, le agradezco haber probado y criticado todos y cada uno de los ejercicios y su explicacin,
haber aportado ideas ("por qu no le agrega esto Lic...") y por transmitirme la sensacin de que la docencia slo
tiene esperanza si el alumno llega a superar al maestro. En palabras de Don Alfonso Reyes, son unos hroes en
mangas de camisa. No temen al trabajo arduo y llegarn lejos.
Agradezco a todos mis compaeros, que como yo, tienen muy presente que los egresados de la UANL deben ir
abriendo surco, y que de hecho lo hacen con gusto: Jos Luis Ramos, Juvencio Jaramillo, Magdiel Martnez, Jos
Mndez, Ismael Rodrguez Elizalde, Enrique Hernndez Hernndez, y a todos los compaeros de la Divisin de
Postgrado de la FACPyA; agradezco tambin a mis amigos de la Universidad del Norte, Instituto Tecnolgico de
Monterrey, ITESM, y dems; son tantos que no puedo precisarlos.
Agradezco a mis amigos Javier Chalup Ayala, Jos Rogelio Martnez Delgadillo, Abraham Alvarez Escobedo, y
tantos otros que comprendieron que mi preferente atencin hacia el monitor de la computadora era un trance
pasajero: si me dieran a escoger entre el libro y ustedes, adis libro!
Agradezco a los alumnos y ex alumnos que con su retroalimentacin ayudaron a obtener un mejor texto:
Guadalupe Rangel Vzquez, Elsa Marcela Lugo, Anna Elizabeth Franco, Mnica Castaeda Guerra y,
especialmente, a Mario Alberto Tamez Garca, quien prob todo el cdigo del libro.
Como siempre, dejo al ltimo lo ms importante: agradezco a mi esposa, a quien dedico este libro, por su
paciencia y apoyo; a mi padre y a mi madre, porque les debo ser el profesional que soy: slo cuando uno crece
comienza a entender y a agradecer. A mis hermanos, todo mi amor y todo lo bueno.
xxvii


















Parte 1
Entorno integrado de
Desarrollo

En esta primera parte conocer a Visual Basic como herramienta de
desarrollo de aplicaciones para el entorno de Windows. As como el
artesano que termina primero su trabajo es aquel que sabe con
exactitud de qu herramientas dispone y dnde se encuentran stas, de
la misma forma el desarrollador de aplicaciones conoce la enorme
variedad de utileras y caractersticas que Visual Basic pone a su
disposicin.

Esta primera parte tiene como objetivo que usted sepa qu partes
componen Visual Basic, cmo se utilizan esas partes, dnde las
encuentra y cmo puede administrarlas.

Tambin se revisa el ciclo de desarrollo de aplicaciones en Visual
Basic, que es el tpico para la programacin orientada a eventos. Se
propondr una forma de trabajo sistemtica y metdica, que pueda
repetir una y otra vez; recuerde: lo importante no es lo que hace, sino
el mtodo que utiliza. Si bajo un mtodo obtiene e| xito, repitiendo el
mtodo repetir el xito.

Captulos:
1,2,3,4,5
Nmero de prcticas: 37
1






















2



Captulo
1

Visual Basic
como plataforma
de desarrollo

Objetivos
Aprender el objeto principal de la programacin. Conocer la parte
grfica de Visual Basic, a travs de su Entorno Integrado de Desarrollo
(IDE), y la parte procedural, a travs del manejo del lenguaje orientado
a eventos,
Al finalizar este captulo deber:
Saber cul es el objeto de la programacin
Entender la tecnologa orientada a eventos
Conocer el Entorno Integrado de Desarrollo
Saber cmo est compuesto el IDE y para qu sirven cada una de sus
partes
Dominar los conceptos bsicos del desarrollo de aplicaciones en
Visual Basic
Conocer los siete pasos para crear una aplicacin en Visual Basic



3


4 Parte 1; Entorno Integrado de Desarrollo

Objeto de la programacin
Usted quiere aprender a programar en Visual Basic. Si no lo ha hecho antes en ningn
lenguaje y quiere empegar de lleno con la programacin, djeme decirle que estar
empezando a la mitad en el proceso de desarrollo de aplicaciones: una mediana que si
no percibe, puede costarle mucho trabajo entender,
No siempre aprender a programar lo conducir a solucionar sus problemas de infor-
macin. Simplemente automatizar tareas, y stas pueden constituir en s mismas una
solucin o un problema.
En conclusin, queremos decirle que la programacin no es una actividad aislada que
produzca resultados por s misma: la programacin es una de las muchas tareas que se
tienen que hacer al desarrollar una aplicacin.
El modelo clsico del Ciclo de Desarrollo de Aplicaciones tiene las siguientes fases:

Anlisis. Se observa detenidamente un problema o situacin con el fin de deter-
minar qu aplicacin se requiere desarrollar. Se delimitan los problemas o se
identifican reas de oportunidad sobre las que hay que trabajar.
Diseo, Se define de manera sistemtica y estructurada la forma en que se va a
llevar a cabo el desarrollo. En el diseo se definen las vistas de la aplicacin, as
como su comportamiento y sus restricciones.
Programacin. Se disea y codifica la aplicacin de tal forma que haga, sin
errores, lo que est definido en la fase de diseo.
Pruebas. Se ejecuta la aplicacin en todas sus variantes, a efecto de determinar si
cumple con lo estipulado en el diseo, y se comprueba que la misma satisfaga los
requerimientos determinados en la fase de anlisis. En caso de que se detecten
errores o funcionamientos equivocados, es necesario volver sobre las fases
anteriores, a fin de aislar el problema y corregirlo.

Como puede darse cuenta, la programacin es una fase muy avanzada en e] proceso
de desarrollo; si no sabe qu necesita hacer, mucho menos sabr cmo hacerlo. Por
otro lado. si ya sabe qu es lo que necesita hacer, debe asegurarse de que la transicin
del "qu" al "cmo" se haga sin errores. La mayora de los errores de sistemas son
debido a que lo especificado en e] anlisis y el producto final no representan lo
mismo. El argumento de los usuarios: "eso no es lo que yo quera", es generalmente
vlido.
Concluimos que el objeto de la programacin es generar cdigo sin errores que
cumpla con lo definido en el diseo y que satisfaga los requerimientos del anlisis.
En este libro seremos bastante claros con respecto a lo que queremos que el programa
haga, a cmo lo haga, y adems nos aseguraremos de que no tenga errores. An ms
importante, queremos que usted aprenda a resolver situaciones que generan error,




Capitulo 1: Visual Basic como plataforma de desarrollo 5
ya que una vez que concluya el ejercicio de este libro nadie le dir cmo resolver los
errores que le aparezcan; sern suyos, como suya ser la solucin a ellos.
Nuestros grandes consejos:
No comience a programar sino hasta saber qu desea que su programa realice.
Olvide la creencia de que en un momento de inexplicable lucidez programadora, las
ideas con respecto a la solucin de un problema aparecern en el proceso de
codificacin.
Aprenda a desarrollar siempre de manera organizada y sistemtica. Adquirir
destreza, experiencia y una facilidad casi automtica para resolver errores.
Hgalo bien desde el principio. Cree programas bien desarrollados, aunque se tarde
ms; dice un dicho de mi tierra que "el flojo y el atenido trabajan dos veces".
Piense en el tiempo de desarrollo como la suma del tiempo de desarrollo ms el
tiempo de mantenimiento; en ocasiones los trabajos de mantenimiento son
demasiado onerosos, y en otros casos, hasta imposibles.
Consistencia cognoscitiva en comparacin con ignorancia veloz. Con respecto al
aprendizaje del contenido de este libro, no olvide la parbola de la tortuga y la
liebre: no siempre el que corre ms rpido llega primero a la meta. Comprenda los
temas hasta que sea capaz de explicarlos sin ayuda del libro, y tema por tema,
convirtase en un experto. Antes de mover los dedos, hay que mover las neuronas.

Visual Basic ms que un lenguaje de programacin
Algunos ubican a Visual Basic como un lenguaje de programacin de propsito ge-
neral, otros le atribuyen el carcter de Desarrollo Rpido de Aplicaciones (RAD), e
incluso hay quienes dicen que es un 4GL. Lo ms cercano a la verdad, dentro de las
definiciones que citamos, es que Visual Basic es un lenguaje de programacin de
propsito general, pero esa apreciacin es muy limitada para describir lo que en
realidad es Visual Basic- El lenguaje es slo una parte de lo que el producto ofrece; en
trminos generales, Visual Basic es una plataforma de desarrollo de aplicaciones.
Visual Basic proporciona elementos grficos de diseo de aplicaciones, compilador,
editor de programas con capacidad de depuracin al instante y asistencia basada en
colores, ayuda contextual, poderosos asistentes (wizards) que automatizan tareas de
uso comn, tan dismbolas en su objeto como en su complejidad, por citar slo algu-
nas caractersticas. No por nada Visual Basic es la plataforma de desarrollo de apli-
caciones para Windows 95, Windows 98, Windows 2000 y Windows NT, lder en el
mercado.









6 Parte 1; Entorno Integrado de Desarrollo
Visual Basic lleva en su nombre los dos elementos generales que lo conforman.

Su parte "Visual" indica que es una interfaz grfica de usuario (GUI), que en lugar de
requerir el uso de comandos escritos para realizar tareas, slo requiere el uso de
herramientas grficas, de tal forma que desarrollar se asemeja mucho a estar "dibujando"
el trabajo. Esta parte est compuesta por el IDE, que ocupa casi todo este captulo.
Su parte "Basic" indica que aquellas tareas que no se pueden realizar a travs de las
herramientas grficas (que no pueden ser dibujadas), son posibles a travs de un
lenguaje de programacin basado en el legendario lenguaje de propsito general
llamado Cdigo de Instrucciones Simblicas Multipropsito para Principiantes
(BASIC) con el que prcticamente se puede desarrollar cualquier cosa.
Visual Basic no es slo producto, tambin es tecnologa aplicada: su parte "Visual" est
basada en tecnologa orientada a objetos (00), su parte "Basic" es de tipo procedural, y la
mezcla de estas dos tecnologas dan lugar a productos hbridos, orientados a eventos (EO).

Entorno Integrado de Desarrollo
Al iniciar una sesin en Visual Basic, entra en contacto con lo que se llama IDE. Este
entorno es un conjunto de herramientas y elementos que le permiten disear y
programar aplicaciones interactuando con Visual Basic.

Nota: Es el momento adecuado de que instale los archivos que complementan este
libro, mismos que se encuentran en el sitio Web
http://www.enlace.net/ramirez2; descargue el archivo AVBP.ZIP en el
directorio raz de su disco duro, y ejectelo para su instalacin.

>> Cmo iniciar sesin en Visual Basic. [01.01]
A continuacin aprender la forma de iniciar una sesin de trabajo en Visual Basic.
1. En el escritorio de Windows haga clic en el botn Inicio, seleccione Programas,
Microsoft Visual Basic 6.0 y la opcin Microsoft Visual Basic 6.0.








Captulo 1; Visual Basic como plataforma de desarrollo 7

Nota: Visual Basic inicia una sesin mediante la ejecucin del programa VB6.EXE;
si tiene definidos los accesos directos a Microsoft Visual Basic 6.0 y su computadora no lo
encuentra, puede buscar el programa ejecutable para iniciar la sesin. Tambin puede estar
como miembro de un grupo de programas Microsoft Visual Studio 6.0; depende de su
instalacin.


Al iniciar Visual Basic, aparecer la ventana Nuevo proyecto que se muestra en la
figura 1.1.




Figura 1.1
Ventana Nuevo
proyecto

2. En la ficha Nuevo, haga clic en el icono EXE estndar, que de manera predeterminada est
seleccionado.
3. Haga clic en el botn de comando Abrir.



Lo inesperado: Si se fija, en la parte inferior de la ventana Nuevo proyecto aparece la
casilla de verificacin "No mostrar este cuadro de dilogo en el futuro", si alguien antes que
usted le dijo a Visual Basic que no apareciera la ventana Nuevo proyecto al iniciar, la ventana
de la figura 1.1 no aparecer. Si ese es su caso, para seguir con la prctica vaya al men
Archivo - Nuevo proyecto, que mostrar una ventana similar. Este cambio no es para siempre,
ya que puede modificarlo a travs del



8 Parte 1: Entorno Integrado de Desarrollo
men Herramientas - Opciones... - Entorno, seleccionando la opcin Preguntar por un proyecto del
rea Cuando se inicie Visual Basic.

>> Cmo cerrar una sesin en Visual Basic. [01.02]
Enseguida conocer la forma de cerrar una sesin de trabajo en Visual Basic.
1. Seleccione el men Archivo - Salir. Tambin es vlida la combinacin de teclas
Alt+Q, o el estndar para todas las aplicaciones de Windows: A1t+F4.

Ediciones de Visual Basic
En la ventana Nuevo proyecto aparece un conjunto de iconos, mismos que deber
seleccionar de acuerdo a lo que desee realizar en Visual Basic. Si tiene la oportunidad
de trabajar en varios lugares con Visual Basic, tal vez se percate de que no siempre
aparecen los mismos iconos en la ventana Nuevo proyecto; el nmero de iconos dis-
ponibles depende de la edicin de Visual Basic que tenga instalada; en la versin 6.0
del producto, se tienen las siguientes ediciones:
Edicin de aprendizaje. Esta edicin de Visual Basic permite a los programa-
dores crear aplicaciones robustas para Windows 95, Windows 98, Windows 2000 y
Windows NT. Incluye todos los controles intrnsecos, adems de los de cuadrcula,
de fichas y los enlazados a datos. La documentacin proporcionada con esta
edicin incluye el CD "Aprenda Visual Basic ya", junto con el de la biblioteca de
Microsoft Developer Network (MSDN) que contiene documentacin completa en
pantalla. Una desventaja de esta versin con respecto a la versin 5.0 es que
anteriormente se acompaaba el Crystal Reports, mdulo para elaborar informes en
papel, mismo que ahora tiene que comprarse por separado. Visual Basic suple esta
herramienta con un diseador llamado Data Report, que es un producto ms
modesto. Para el que desea iniciarse en Visual Basic, comprar la edicin de
aprendizaje pueden ser los cien dlares mejor gastados; claro, no olvidando
comprar este libro que tiene en sus manos!
Edicin profesional. Proporciona a los profesionales un conjunto completo de
herramientas para desarrollar soluciones para terceros. Incluye todas las caracters-
ticas de la edicin de aprendizaje, as como controles ActiveX adicionales, el di-
seador de aplicaciones para Internet Information Server y Visual Database Tools
and Data. La documentacin que se proporciona con la edicin profesional incluye
el libro Caractersticas empresariales de Visual Studio ms los CDs de Microsoft
Developer Network, la cual contiene documentacin completa en pantalla.
Edicin empresarial. Permite a los profesionales crear slidas aplicaciones dis-
tribuidas en un entorno de trabajo en equipo. Si decide utilizar a Visual Basic







Captulo 1: Visual Basic como plataforma de desarrollo 9
para proyectos grandes, complejos y que involucren un nmero considerable de
programadores trabajando en un mismo proyecto simultneamente, o bien si piensa
que Visual Basic ser el componente front end de un esquema cliente/servidor, la
compra de esta edicin es casi obligatoria. Incluye todas las caractersticas de la
edicin profesional, as como herramientas de enlace con productos Back Office
como SQL Server, Microsoft Transaction Server, Internet Information Server, Visual
SourceSafe, SNA Server, etctera. La documentacin impresa que se proporciona
con la edicin empresarial incluye el libro Caractersticas empresariales de Visual
Studio ms los CDs de Microsoft Developer Network, la cual contiene
documentacin completa en pantalla.
Entre ms completa sea la edicin, ms capacidades tendr; el nmero de iconos es un
indicador de ese hecho. Entre ms iconos haya en la ventana Nuevo proyecto, obviamente,
mayor ser el costo.

Nota: Aunque la documentacin de Visual Basic hace referencia a los Libros en pantalla,
stos no son parte del producto. En la versin 5.0, al momento de la instalacin se generaba
dentro del men de Microsoft Visual Basic 5.0 una opcin que deca Libros en lnea, que a
travs de hipertexto dinmico proporcionaba la documentacin del producto. En la versin 6.0,
tiene que instalar la MSDN Library Visual Studio 6.0 (otro producto) para disponer de ayuda.
MSDN Library es una referencia tcnica muy completa, de ms de 1 GB de informacin de los
productos que integran Visual Studio 6.0; si usted est dispuesto a consumir ms de 1 GB en
informacin de Visual C++, Visual Basic 6.0, Visual InterDev, Visual FoxPro, Visual J++ y
Visual SourceSafe, adelante. Por otro lado, puede decidir que no desea informacin de
productos que no le interesan, e instalar slo la ayuda de Visual Basic con la finalidad de no
consumir mucho espacio en disco. Esto es posible, pero se puede llevar la sorpresa de que
algunos componentes compartidos por varios productos no se integren si usted solicita instalar
nicamente informacin de Visual Basic. O instala toda la informacin de MSDN Library que
comparten todos los productos de Visual Studio 6.0, o corre el riesgo que algo que necesite
consultar no se encuentre instalado.

Elementos del IDE
Una vez que haya abierto un proyecto como EXE estndar, aparecer el IDE (vea la figura
1.2).

Nota: La distribucin del IDE es bastante parecida en todos los productos de Visual Studio 6.0
(Visual C++, Visual InterDev, etctera), as como en los mdulos basados






10 Parte 1: Entorno Integrado de Desarrollo
en Visual Basic para Aplicaciones (nuevo manejo de macros de la Suite Microsoft
Office), por lo que identificarse con la distribucin de los elementos para aprender
Visual Basic proporciona el beneficio adicional de reducir la curva de aprendizaje que
usted tendr si desea aprender otras herramientas.


Figura 1.2
Entorno
Integrado de
Desarrollo












El IDE contiene todos los elementos y herramientas grficas que Visual Basic pro-
porciona para desarrollar una aplicacin.
No todos los elementos se requieren todo el tiempo, por lo que a travs del men Ver
puede decidir qu elementos desea utilizar, y por tanto, tener presentes en la pantalla.
Esto es importante porque en ocasiones el espacio en la pantalla es muy preciado.


Nota: Al estar desarrollando en Visual Basic, es importante disponer del mayor
nmero de elementos del IDE para realizar las tareas. Esto se dificulta en virtud de
que el espacio en la pantalla es reducido y los elementos aparecen demasiado amon-
tonados. Si desarrollar profesionalmente un monitor de 17" o ms, sera una verda-
dera bendicin; si su presupuesto no se lo permite, aumente la resolucin mxima
soportada por su monitor, aunque su vista pedir un poco de piedad ante lo diminuto
de ciertas figuras.









Captulo 1: Visual Basic como plataforma de desarrollo 11
Visual Basic respeta las preferencias del desarrollador, de tal forma que si distribuye en
la pantalla los elementos del IDE a su gusto, la prxima vez que inicie sesin en Visual
Basic, los elementos del IDE se encontrarn donde los dej la ltima vez.
>> Cmo activar los elementos del IDE. [01.03]
A continuacin aprender a activar los elementos del IDE.
Para activar los elementos del IDE que no se encuentren actualmente en la pantalla,
haga lo siguiente:
1. Abra un nuevo proyecto EXE estndar de Visual Basic.
2. Seleccione el men Ver Explorador de proyectos (Ctrl+R).
3. Seleccione el men Ver Ventana Propiedades (F4).
4. Seleccione el men Ver Ventana Posicin del formulario.
5. Seleccione el men Ver Cuadro de herramientas.




Nota: Observe detenidamente las figuras que aparecen a la izquierda de las op-
ciones que se encuentran en el men Ver. Esto es importante porque dichas figuras
tambin se encuentran en la barra de herramientas, por lo que puede hacer clic en
ellas para activarlas en lugar de utilizar la barra de mens.

El IDE se compone de los siguientes elementos:
La barra de mens
La barra de herramientas Estndar
El Diseador de formularios
La ventana Propiedades
La ventana Posicin del formulario
La ventana Explorador de proyectos
El Cuadro de herramientas





12 Parte 1: Entorno Integrado de Desarrollo

A continuacin se definirn cada uno de los elementos del IDE, as como los con-
ceptos que estn asociados con l y que son indispensables para comprender su uti-
lidad.
La barra de mens
La barra de mens (vea la figura 1.3) proporciona los mens que contienen
comandos que Visual Basic tiene disponibles para su uso en aplicaciones
desarrolladas, o para la administracin de su propio entorno.
Figura 1.3
La barra
de mens



La barra de herramientas
La barra de herramientas (vea la figura 1.4) es un conjunto de botones que pro-
porcionan un acceso rpido a comandos ms comunes que Visual Basic tiene dispo-
nibles para su uso en aplicaciones desarrolladas o para la administracin de su
propio entorno.
Figura 1.4
La barra de herramientas


Nota: La existencia de la barra de herramientas sigue con la tradicin de los pro-
gramas basados en Windows. Seguramente usted reconocer algunos botones que
son estndar para todas las aplicaciones, como Abrir, Guardar, Cortar, Copiar,
Pegar y Deshacer.












Captulo 1: Visual Basic como plataforma de desarrollo 13

Figura 1.5
Formulario
Todo proyecto en Visual Basic inicia y se desarrolla en un formulario; un formulario
es una ventana, tal y como las hemos utilizado toda la vida; en ella pueden encon-
trarse objetos que responden a nuestras acciones, pueden minimizarse, maximizarse,
cerrarse, etctera (vea la figura 1.5).

Un formulario es un objeto contenedor, es decir puede contener a otros objetos, en
este caso, botones de comando, cuadros de texto, imgenes, botones de opcin,
etctera.
Modos de trabajo con formularios: SDI y MDI
En Visual Basic existen dos modos de trabajo con formularios:
Interfaz de Documentos Simples (SDI). Una aplicacin SDI se compone de un
solo formulario; al cerrar el formulario se cierra la aplicacin. Un ejemplo puede ser
la aplicacin Notepad.exe de Windows. Slo permite editar un documento a la vez
y si cierra el documento se cierra la aplicacin.
Interfaz de Documentos Mltiples (MDI). Una aplicacin MDI se compone de
un formulario maestro y ste puede contener uno o ms formularios. Un ejemplo








14 Parte 1: Entorno Integrado de Desarrollo
de este upo de aplicaciones es WinWord.exe; se pueden tener muchos
documentos abiertos al mismo tiempo, y cada uno es un formulario. Al cerrar un
documento (formulario dependiente) no necesariamente se cierra Word
(formulario maestro).

Trabajemos en SDI o MDI, siempre habr un formulario principal (objeto inicial).
La diferencia entre SDI y MDI es que en SDI el formulario maestro es el nico que
existe.

Podemos configurar el entorno de Visual Basic de tal forma que resulte conveniente
para el trabajo, dependiendo de si elaboramos una aplicacin SDI o MDI. Actual-
mente tenemos el entorno adecuado para MDI, pero los primeros programas que
desarrollaremos sern de un solo formulario, por lo que resultara conveniente cam-
biar el entorno a SDI. De manera predeterminada Visual Basic se instala en MDI.
>> Cmo establecer el entorno de desarrollo a SDI. [01.04]

A continuacin aprender a establecer su entorno de desarrollo en modo SDI.
Observe el entorno tal y como lo tiene actualmente.
1. Seleccione el men Herramientas - Opciones... - Avanzado. Aparecer el cuadro de
dilogo que se muestra en la figura 1.6.
2. Active la casilla de verificacin Entorno de desarrollo SDI.

3. Haga clic en el botn de comando Aceptar.



Captulo 1: Visual Basic como plataforma de desarrollo 15
La modificacin que acaba de realizar requiere iniciar nuevamente la sesin en Visual
Basic. Aparecer la ventana Microsoft Visual Basic (vea la figura 1.7), informndole
ese hecho.



Figura 1.7
Mensaje de
Visual Basic
4. Haga clic en el botn de comando Aceptar cuando Visual Basic le informe que el
cambio de la opcin MDI/SDI ser efectivo la prxima vez que inicie el entorno
de desarrollo.
5. Cierre la sesin de Visual Basic.
6. Inicie Basic nuevamente una sesin en Visual.
7. Qu cambios nota en el entorno?



8. En el men Herramientas - Opciones - Avanzado, desactive la casilla de veri-
ficacin Entorno de desarrollo SDI, cierre la sesin y vuelva a entrar, para dejar
el entorno como estaba.

Entre los beneficios que puede obtener al desarrollar en SDI, es que los elementos
del IDE se comportan como ventanas independientes de Windows, muy conveniente
si considera que en MDI el hecho de mover o cambiar el tamao de los elementos en
ocasiones resulta un problema, pues se ajustan entre s (se acoplan) de manera arbi-
traria y complican la distribucin de los objetos en la pantalla.


Nota: El acople inesperado de los elementos del IDE, en SDI o MDI, se controla
desde el men Herramientas - Opciones - Acople. El modo SDI se ajusta ms a lo
que queremos del entorno de desarrollo en estos momentos; sin embargo, mantendre-
mos la configuracin predeterminada de Visual Basic, es decir, MDI. Es slo
cuestin de prctica dominar ambos modos.






16 Parte 1: Entorno Integrado de Desarrollo

Tecnologa orientada a objetos y Visual Basic
Al inicio del captulo decamos que Visual Basic es una mezcla de tecnologas. La
ms importante de ellas es la tecnologa orientada a objetos, ya que en Visual Basic
todo termina siendo un objeto.
Aprendamos un poco al respecto, ya que nos ayudar mucho para entender cmo
desarrollar eficientemente utilizando Visual Basic. Esta prctica requiere de mucha
imaginacin; de ser posible genere en su mente las imgenes de lo que vamos a men-
cionar a continuacin.
Usted est sentado en una silla, frente a un escritorio.
Sobre ese escritorio se encuentran dos cosas: un sombrero de mago y un botn rojo.
Al presionar el botn rojo que se encuentra sobre el escritorio, del sombrero del
mago sale un conejo. A dicho conejo usted le llama "Fred".
Usted presiona nuevamente el botn rojo y sale otro conejo igual al anterior, al cual
usted llama "Angus".
En este momento sobre el escritorio se encuentran dos conejos, de igual color, ta-
mao y peso (mismas propiedades), y stos corren alegremente sobre el escritorio.
Slo los puede diferenciar por el nombre, pero como saltan de un lugar a otro, es
posible que en un momento determinado no sepa quin es Fred y quin es Angus.
A usted le gustara que Fred fuera ms pequeo, y de otro color que Angus.
Usted toca a Fred y como por arte de magia (y como en nuestra imaginacin todo
es posible), Fred se transforma en un conejo ms pequeo y de un color diferente
que el de Angus.
Volvamos a lo tcnico. En un mundo orientado a objetos, tenemos que:
Lo que sale del sombrero del mago cada que presiona el botn rojo es un animal
de una naturaleza bastante definida, en este caso, un Conejo. Decimos entonces
que Conejo es una clase.
Debido a que se presion dos veces el botn rojo, se generaron dos instancias de
la clase. A las instancias de una clase las llamamos objetos.
La clase define todas las propiedades que heredarn los conejos, es por ello que
Fred y Angus son iguales, y slo se diferencian por el nombre, ya que no
puede haber dos objetos con el mismo nombre.















Captulo 1: Visual Basic como plataforma de desarrollo 17
Fred y Angus no son inertes, por s mismos hacen algo, a veces saltan en el escritorio.
Lo que ellos pueden hacer por s mismos se le llama mtodo. Los mtodos que un
objeto puede realizar, son slo aquellos que la clase tiene definidos y permitidos. Ni
Fred ni Angus pueden ladrar; no est en su clase.
A Fred le sucedi una transformacin, que no se llev a cabo sino hasta que usted lo
toc. Lo que le sucede a un objeto por el hecho de interactuar con usted, se le llama
evento. Los eventos que le pueden suceder a un objeto, son slo aquellos que la clase
tiene definidos y permitidos.
La clase Conejo existe, pero no se manifiesta sino a travs de sus instancias, mismas
que son generadas solamente a travs del uso del botn rojo. Si no se presiona el botn
rojo, no hay conejos en el escritorio. Al elemento que sirve para crear la instancia de
una clase se le denomina control.
El escritorio sera el objeto contenedor de los objetos. Cumple con la misma funcin
que cumplir el formulario en sus aplicaciones de Visual Basic.
Suponga que Angus se queda inmvil, grficamente tendramos lo siguiente:


Figura 1.8
Esquema de
clase objeto-
propiedad









18 Parte 1: Entorno Integrado de Desarrollo
Controles
Los controles son representaciones grficas que permiten generar elementos de inter-
faz de Windows, tales como botones de comando, cuadros de texto, grficos, listas
desplegables, etiquetas, etctera. Estos controles invocan una clase determinada, con
base en la cual se generan objetos con una forma y comportamiento predefinido. Los
controles en Visual Basic se encuentran en el elemento IDE llamado Cuadro de he-
rramientas.
Clase
Una clase es la definicin formal de un elemento de interfaz de Windows. Una clase
acta como plantilla para cada una de las instancias generadas a partir de un deter-
minado control cuando es agregado a un formulado; la clase define las propiedades de
un objeto y los mtodos y eventos utilizados para controlar su comportamiento. Visual
Basic trata los trminos clase y control como uno solo, ya que la clase no se manifiesta
sino a travs de un control.


Objetos
Los objetos son ocurrencias de una clase en un formulario. Son controles una vez que
son insertados en una aplicacin; el desarrollador les dar las propiedades que necesite
y el comportamiento que requiera. Puede haber un solo control llamado
CommandButton, pero muchos objetos generados a partir de l, es decir, mltiples
botones en el formulario.
Por cuestiones prcticas, en ocasiones los trminos control y objeto se utilizan como
sinnimos; es posible usarlos de esta manera, pero no pierda de vista que son dife-
rentes. Un control es un medio para generar un objeto; un objeto es una ocurrencia del
control (que a su vez es el ejercicio de una clase), con nombre, tamao, colores y otras
especificaciones particulares.

Nota: No somos partidarios del uso como sinnimos de las palabras "Objeto" y
"Control", porque evidentemente no son lo mismo. No obstante. Visual Basic tiene
muchos mensajes del sistema que utilizan dichos trminos como equivalentes, y en la
ayuda en lnea en ocasiones los utilizan de manera indistinta.








Captulo 1: Visual Basic como plataforma de desarrollo 19
Cuadro de herramientas


El Cuadro de herramientas (vea la figura 1.9) es la ventana que muestra todos los
controles disponibles para la generacin de objetos en una aplicacin de Visual Basic.
El Cuadro de herramientas debera llamarse cuadro de controles, pero por cuestiones
histricas del producto su nombre persiste.

Figura 1.9
Cuadro de
herramientas
Los controles estn representados de manera grfica; por ejemplo, el control Label
est representado por una letra "a" mayscula (A).
Si desconoce qu representacin grfica le corresponde a un determinado control, slo
coloque el puntero del ratn sobre las figuras del Cuadro de herramientas, y
aparecer un texto identificando el control del que se trata. Dicho texto se conoce
como Informacin sobre herramientas.

Nota: Visual Basic tiene una capacidad de expansin increble; tal vez su carac-
terstica ms sobresaliente, base de su xito, sea la de integrar controles de terceros







20 Parte 1: Entorno Integrado de Desarrollo
(conocidos como controles ActiveX u OCX). Al integrar un control ActiveX, su repre-
sentacin grfica se agregar al Cuadro de herramientas, por lo que es comprensible
que la misma no siempre luzca igual.
Si tiene la necesidad de un control que no est en el Cuadro de herramientas, puede
buscar entre los controles ActiveX que tiene en su equipo, y si no lo tiene, puede com-
prar uno que alguien haya hecho (hay cientos en el mercado, casi siempre orientados a
una determinada funcin, como estadstica, graficacin, bases de datos, etctera.) En el
peor de los casos, si el control que necesita no ha sido desarrollado por terceros o no
quiere pagar por l, tiene la opcin de desarrollarlo usted mismo.
Aunque tal vez sobre decirlo, Microsoft no se hace responsable de los controles que no
vienen integrados en Visual Basic de manera intrnseca.

Los controles que aparecen en el Cuadro de herramientas de manera intrnseca y
como parte del IDE, pueden dividirse en las siguientes categoras:
Controles bsicos: Definen objetos que permiten elaborar una interfaz de usuario
bsica.
Label
TextBox
CommandButton
Controles de seleccin: Definen objetos que permiten elegir un valor sin que sea
necesario teclear nada.
OptionButton
CheckBox
ComboBox

ListBox
HScrollBar
VScrollBar










Captulo 1: Visual Basic como plataforma de desarrollo 21
Controles contenedores: Definen objetos que pueden contener a otros objetos.
Frame
Controles grficos: Definen objetos que permiten el manejo de grficos e imgenes.
PictureBox (tambin es contenedor)
Image
Shape
Line

Controles de gestin de archivos: Definen objetos que permiten gestionar el sistema
de archivos de la mquina.
DriveLlstBox
DirListBox
FileListBox
Controles de tiempo: Definen objetos que permiten manejar intervalos de ejecucin
de una aplicacin.
Timer
Controles de datos: Definen objetos que permiten tener acceso a bases de datos.
Data
Controles de vnculo: Definen objetos que permiten tener acceso otras aplicaciones o
funciones dentro del sistema.
OLE





22 Parte 1: Entorno Integrado de Desarrollo
Los controles que aparecen en el Cuadro de herramientas pueden incrementarse en la
medida en que se necesiten. En su momento ver cmo incluir algunos de suma
utilidad.

Nota: Si no tiene un formulario activo, los controles no aparecern en el Cuadro de
herramientas. Esto es lgico, ya que no tiene en dnde insertar las ocurrencias de los
controles, es decir, los objetos.
>> Ubicacin de los controles. [01.05]
A continuacin aprender a identificar los controles mediante la consulta de los
Informacin sobre herramientas.


1. Si coloca el puntero del ratn sobre las imgenes del Cuadro de herramientas,
aparecer informacin relativa al control del que se trata (esta informacin es llamada
Informacin sobre herramientas [vea la figura 1.10]).







Figura 1.10
Informacin sobre
herramientas: le
ayuda a identificar
los controles del
cuadro de
herramientas
Informacin sobre
herramientas
























Capitulo 1: Visual Basic como plataforma de desarrollo 23
2. Coloque al lado de cada una de las figuras representativas de los
controles, la Informacin sobre herramientas que aparece al colocar
el puntero del ratn sobre cada control.



Propiedades
Cada uno de los objetos que conforman un formulario, desde el formulario mismo
hasta los botones de comando, cuadros de texto, botones de opcin, cuadros de im-
genes, y dems objetos contenidos en l, tienen caractersticas particulares que los
hacen diferentes uno de otro. A estas caractersticas se les llama propiedades; las
propiedades le indican a Visual Basic la posicin de un objeto en el formulario, su
nombre, alto, ancho, comportamiento inicial, valor predeterminado, etctera.














24 Parte 1: Entorno Integrado de Desarrollo
Quiz la propiedad ms importante sea la que identifica a los objetos dentro de una
aplicacin: Name. Esta propiedad permite referir a un objeto determinado al momento
de programar en Visual Basic.

Mtodos
Los mtodos son rdenes predefinidas que realizan tareas especficas sobre los objetos.
Los mtodos son muy tiles porque permiten manipular los objetos y sus carac-
tersticas asociadas.
Los objetos se crean en tiempo de diseo y en tiempo de ejecucin se modifican las
caractersticas de estos objetos (propiedades) y se ejecutan tareas sobre los objetos
(mtodos).

Ejemplificacin de objeto - propiedad - mtodo
Suponga que tiene un objeto llamado "Saxofn".

Saxofn
Dicho objeto podra tener muchas caractersticas, tales como tamao, color, marca,
etctera. Actualmente aparece en color blanco, por lo que puede interpretarse que la
propiedad Color del objeto Saxofn es igual a Blanco.
Para Visual Basic eso se codificara de la siguiente manera:
Saxofn. Color = Blanco
Cambiar una propiedad modifica al objeto, por ejemplo, si cambiamos la propiedad
Color del objeto Saxofn a Amarillo, obtendramos lo siguiente:







Captulo 1; Visual Basic como plataforma de desarrollo 25



Saxofn. Color = Amarillo
En Visual Basic es una regla de sintaxis que las propiedades se refieran en conjunto
con el objeto al que pertenecen y se separan por un punto. En elcaso "Saxofn.
Color", "Color" es la propiedad del objeto "Saxofn".
Los mtodos se refieren de la misma forma que las propiedades, pero stos en lugar de
establecer una caracterstica para un objeto, realizan una tarea sobre o a travs del
objeto. Un mtodo posible a travs del objeto Saxofn es que ste toque msica.
Por ejemplo:

Saxofn.TocarMsica
Explorador de proyectos
La ventana Explorador de proyectos es una ventana que muestra los componentes del proyecto
Visual Basic, llamados mdulos. A travs de esta ventana puede ubicar y activar cualquier
mdulo del proyecto; esto es especialmente til cuando el proyecto se hace muy grande y que
cuenta con muchos mdulos, de tal manera que resulta incmodo tener presente a todos los
componentes del proyecto en la pantalla.
Los mdulos que se pueden tener en la ventana Explorador de proyectos son:
Mdulos de formulario (extensin .FRM). Puede contener objetos y los valores de sus
propiedades. Tambin puede contener declaraciones a nivel formulario
26 Parte 1: Entorno Integrado de Desarrollo
de constantes, variables y procedimientos externos, procedimientos de evento, y
procedimientos generales.
Mdulos de clase (extensin .CLS). Son similares a los mdulos de formulario,
a excepcin de que no tienen una interfaz visible.
Mdulos estndar (extensin .BAS). Pueden contener declaraciones pblicas o
a nivel mdulo de tipos de datos, constantes, variables, procedimientos externos
y procedimientos pblicos.



Figura 1.11
Ventana
Explorador
de proyectos
La ventana Explorador de proyectos muestra una estructura de jerarqua
similar a la del Explorador de Windows; los componentes que se pueden
seleccionar se encuentran a nivel mdulo. En la figura 1.11 se puede apreciar
que est seleccionado el nico formulario, Form1 (Form1), que se tiene en
el proyecto.
En la parte superior de la ventana aparecen tres botones:
Ver cdigo. Permite ver el cdigo que se ha escrito del mdulo que est
seleccionado.
Ver objeto. Permite ver el objeto en el IDE.
Alternar carpetas. Oculta y muestra las carpetas en el Explorador de
proyectos.
>> Cmo ocultar y mostrar formularios. [01.06]
A continuacin aprender a ocultar y mostrar formularios utilizando la ventana Ex-
plorador de proyectos.












Captulo 1: Visual Basic como plataforma de desarrollo 27
1. En este ejercicio asumimos que tiene un proyecto EXE estndar abierto. Si no lo
tiene, inicie sesin en Visual Basic.
2. En la jerarqua de elementos que aparece en la ventana Explorador de proyectos,
ubquese donde aparece Proyecto1 (Proyecto1). Al lado izquierdo aparece un
pequeo smbolo, que puede ser de ms (+) o de menos (-), dependiendo de si la
jerarqua est expandida o comprimida.
3. Haga clic en el smbolo hasta que se coloque un smbolo de ms (+). Esto significa
que se comprimir la jerarqua.
4. Qu sucede con el formulario?



5. Expanda la jerarqua haciendo clic en el smbolo que aparece a la izquierda, tanto
en Proyecto1 (Proyecto1) como en Formularios, hasta que ambos sean
smbolo de menos (-).
6. Seleccione Form-1 (Form-1). El
formulario se desplegar.

7. Haga clic en el botn Ver objeto.
La utilidad de estas funciones se apreciar cuando veamos proyectos MDI, en
donde hayan varios formularios en el mismo proyecto.
Tiempos de desarrollo de Visual Basic
El IDE de Visual Basic le permite disear la interfaz que utilizar para realizar una
determinada tarea. Esto lo logra agregando objetos a los formularios, estableciendo
propiedades a los objetos, agregando cdigo, etctera. Prcticamente "dibuja" la in-
terfaz.
Una vez que concluye el diseo de la interfaz, puede poner en ejecucin la interfaz
diseada; en dicha ejecucin puede modificar algunas cosas establecidas en tiempo
de diseo, por lo que es posible que el diseo se pueda afectar en tiempo de ejecu-
cin. Prcticamente se modifica "lo dibujado" con anterioridad.
En conclusin, en Visual Basic se determinan dos tiempos de desarrollo:
Tiempo de diseo. Son las labores de desarrollo de aplicaciones que se realizan a
travs del IDE, con la disponibilidad de todos sus elementos.



















28 Parte 1: Entorno Integrado de Desarrollo
Tiempo de ejecucin. Son las labores de desarrollo de aplicaciones que se reali-
zan durante la ejecucin de un formulario, a travs de cdigo.

Cmo saber en qu tiempo se encuentra? Muy simple, si est utilizando el IDE con
la disponibilidad de todos los elementos para su uso, est en tiempo de diseo; si
est ejecutando un formulario y no dispone de todos los elementos del IDE para su
uso, est en tiempo de ejecucin. Otra forma ms fcil de saberlo es la siguiente: en
tiempo de diseo, en la ventana principal de Visual Basic aparecer la palabra
"diseo". Ms obvio no poda ser.

Hay cosas que slo se pueden hacer en tiempo de diseo, por ejemplo, asignar el
nombre a los objetos, y hay otras cosas que slo se pueden hacer en tiempo de
ejecucin, como ver la Informacin sobre herramientas establecida para un
determinado objeto. En tiempo de diseo todo se hace visualmente, mediante el uso
de elementos del IDE, tales como el Cuadro de herramientas o la ventana
Propiedades; en tiempo de ejecucin, todo se hace mediante el cdigo que forma
parte del formulario.

Ya que conocemos los tiempos de desarrollo de Visual Basic, podemos establecer
una diferencia entre las propiedades y los mtodos; las propiedades pueden
establecerse en modo de diseo y, la mayora de las veces, tambin en tiempo de
ejecucin. En cambio, los mtodos no pueden ejecutarse ms que en tiempo de
ejecucin.
============================================================
Nota: En captulos posteriores de este libro se explicarn los controles que se en-
cuentran en el Cuadro de herramientas. Se profundizar en cules son sus propie-
dades ms tiles, as como los mtodos ms importantes que les aplican.
============================================================
Ventana Propiedades
La ventana Propiedades (vea la figura 1.12) es aquella en donde se identifica un
objeto y en donde se pueden modificar en tiempo de diseo las propiedades de dicho
objeto. Sus componentes son:
Lista desplegable de objetos
Cuadrcula de propiedades
Cuadro de informacin de propiedades















Capitulo 1: Visual Basic como plataforma de desarrollo 29

Figura 1.12
Ventana Propiedades


En la parte superior de la ventana Propiedades siempre se muestra una lista desple-gable, llamada
Lista desplegable de objetos (vea la figura 1.13); esta lista contiene el nombre del objeto activo (que
se encuentra en negritas) y el tipo de control en el que est basado dicho objeto (Form).
Figura 1.13
Lista desplegable
de objetos



Posteriormente, se encuentra una lista de propiedades vlidas para el objeto que se
est modificando; la distribucin consiste en dos columnas, que forman la Cua-
drcula de propiedades. Las propiedades se encuentran clasificadas alfabticamente
o por categoras; dicha lista aparece en forma de cuadrcula: en la columna izquierda
se muestra el nombre de las propiedades, y en la columna derecha aparecen los valo-
res que de manera predeterminada se le asignan a un objeto (vea la figura 1.14).



















30 Parte 1; Entorno Integrado de Desarrollo


Figura 1.14
Cuadrcula de
propiedades

Algunos valores de las propiedades se pueden modificar directamente, editando el
valor que aparece en la columna derecha de la propiedad que queremos modificar;
algunas propiedades tienen valor abierto, es decir, se puede colocar cualquier cosa
como valor, mientras que otras propiedades tienen valor limitado, es decir, tienen un
universo reducido de valores vlidos que les pueden ser asignados, mismos que
aparecern a manera de listas desplegables. De una u otra forma. Visual Basic siempre
sugiere, a travs de los valores predeterminados, qu tipo de valor puede asignarse a
cada propiedad (texto, nmero, booleano, representacin hexadecimal) y si el valor es
abierto o limitado.
En la parte inferior de la ventana Propiedades aparece el nombre de la propiedad en
la que est trabajando y la explicacin de su utilidad, es decir, para qu sirve. A esta
rea se le conoce como Cuadro de informacin de propiedades.
Uso de la ventana Propiedades. [01.07]
A continuacin aprender algunas de las capacidades de la ventana Propiedades.
1. Observe los grficos utilizados en este texto y apyese en el proyecto que actualmente
tiene en su computadora. Haga clic en el formulario que se encuentra en su IDE.
Conteste lo siguiente:

a) La ventana Propiedades
indica que est trabajando sobre
un objeto. Cmo se llama?
(Identifquelo por el texto en negritas en
la Lista desplegable de objetos;
tambin basta con ver el ttulo de la
ventana Propiedades, que dir
Propiedades - <nombre del objeto>.)










Captulo 1: Visual Basic como plataforma de desarrollo 31



b) Qu tipo de control es?
(Identifquelo por el texto que no
est en negritas en la Lista
desplegable de objetos.)

c) Est viendo la Lista de
propiedades alfabticamente o
por categoras?

d) La propiedad Caption es
de valor abierto o limitado?


e) La propiedad
Appearence es de valor
abierto o limitado?

f) Cules son los 3 valores
posibles que puede tener la
propiedad PaletteMode?


g) Mencione para qu sirve la
propiedad
StartUpPosition.
(Consulte el Cuadro de informacin
de propiedades.)



El contenido de la ventana Propiedades depender del objeto que tenga seleccionado,
es decir, las propiedades que aparecen al tener seleccionado un objeto basado en el
control Form no son las mismas que aparecen cuando selecciona otro objeto basado en
el control TextBox.
Si no tiene seleccionado ningn objeto, la ventana Propiedades estar vaca.
Ventana Posicin del formulario
En versiones anteriores de Visual Basic, era muy importante la posicin en la que se
encontraba la ventana al estar en tiempo de diseo, ya que dicha posicin determinaba
el lugar en donde el formulario se ubicara al ejecutar la aplicacin. En Visual Basic
6.0 la posicin del formulario en tiempo de diseo es irrelevante, ya que existe una
ventana llamada Posicin del formulario (vea la figura 1.15).




32 Parte 1: Entorno Integrado de Desarrollo


Figura 1.15
Ventana posicin
del formulario



En la ventana Posicin del formulario aparece representada la pantalla de un monitor
y el formulario que est diseando dentro de ella; usted puede determinar dnde
quiere que aparezca su formulario en el momento en que sea ejecutado, arrastrando la
pequea representacin de su formulario dentro de la representacin de la pantalla.

Pasos para crear una aplicacin en Visual Basic
Para desarrollar una aplicacin en Visual Basic, desde no tener nada hasta tener los
discos de distribucin de su aplicacin, transcurren siete pasos bsicos:
Crear la interfaz de usuario. Consiste en dibujar la interfaz con la que el usuario
va a interactuar. En este paso, lo importante es colocar en la interfaz la cantidad
suficiente de objetos, con los tamaos adecuados y la organizacin ptima para que
su uso sea ms fcil.
Establecer las propiedades de los objetos. Consiste en asignar los valores de
inicio para cada uno de los objetos, mismos que determinan la apariencia y com-
portamiento de dichos objetos.
Escribir el cdigo de los eventos. Consiste en escribir el cdigo que ha de eje-
cutarse como respuesta a algo que sucede en la interfaz del usuario.
Guardar el proyecto. Consiste en guardar, en algn medio de almacenamiento, el
proyecto que est creando. Guarde su trabajo con regularidad, a efecto de reducir al
mximo el riesgo de perderlo.
Probar y depurar la aplicacin. Consiste en ejecutar la aplicacin que ha creado,
detectar errores y corregirlos.
















Captulo 1: Visual Basic como plataforma de desarrollo 33

Compilar el ejecutable (EXE). Consiste en procesar la aplicacin a efecto
de que se pueda ejecutar de manera independiente al entorno de desarrollo de
Visual Basic.
Crear los discos de instalacin. Consiste en utilizar el Asistente para empa-
quetado y distribucin, a efecto de crear los discos que instalen su aplicacin
de manera profesional.

Cada uno de estos pasos se explicar en los captulos subsecuentes; el paso de
crear los discos de instalacin se ver cuando tengamos un ejemplo lo
suficientemente representativo para la tarea.
La explicacin se har a travs de su primer programa en Visual Basic, que
comenzar en el siguiente captulo.

________________________________________________________________________
Resumen

En este captulo:
Vimos cul es el objeto de la programacin.
Vimos por qu Visual Basic es ms que un simple lenguaje de programacin.
Vimos de manera esquemtica los conceptos que definen la orientacin a
objetos de Visual Basic.
Identificamos todos y cada uno de los componentes del IDE y explicamos para
qu sirven (no se preocupe por saber cmo se utilizan; en los siguientes captu-
los lo sabr).
Vimos qu ediciones tiene Visual Basic 6.0.
Vimos qu controles se encuentran disponibles en el Cuadro de herramientas
y a qu categora pertenecen.
Vimos en qu consisten los modos SDI y MDI.
Vimos cules son los tiempos de desarrollo en Visual Basic.
Vimos los conceptos objeto, control, propiedad, mtodo y la relacin que
guardan entre ellos.
Vimos cules son los pasos para desarrollar una aplicacin en Visual Basic.
Antes de seguir, es importante que domine todos los puntos anteriores.










34 Parte 1: Entorno Integrado de Desarrollo

Algunas respuestas a los ejercicios
[01.04] Cmo establecer el entorno de desarrollo a SDI.
7. Los elementos del IDE aparecen como ventanas independientes. Ya no hay una
ventana que contenga todos los elementos.
[01.06] Cmo ocultar y mostrar formularios.
3. Desaparece.
[01.07] Uso de la ventana Propiedades.
a) Forml.
b) Form.
c) Alfabticamente.
d) Abierto.
e) Limitado.
f) Halftone, UseZOrder, Custom.

g) Devuelve o establece un valor que especifica la posicin de un formulario cuando
aparece por primera vez.
























Captulo
2
Creacin de la interfaz
de usuario


Objetivo
Conocer los pasos para crear una interfaz de usuario efectiva para una aplicacin
de Visual Basic.
Al finalizar este captulo deber:
Saber cmo insertar objetos
Saber cmo trazar objetos
Conocer la forma de establecer la posicin y las dimensiones de un objeto
Conocer la forma en que se manejan las opciones del men Formato
Saber cmo manejar la ventana Posicin del formulario
Felicidades: comenzar a desarrollar su primer proyecto de Visual Basic
En este captulo comenzar a desarrollar su primer programa; quiz piense "en
otros libros desde el primer captulo se crea un programa". No se desespere: la
diferencia entre "copiar" un programa de un libro sin entenderlo y "hacer" un
programa es mucha. Preferimos que desarrolle una aplicacin con todo el
conocimiento posible, de tal forma que pueda reproducir los procedimientos sobre
aplicaciones basadas en necesidades propias cuando as lo requiera.
Le aseguramos que una vez que haya visto los pormenores de la programacin en
Visual Basic con el primer ejemplo, el libro tomar velocidad con respecto a los
dems
35











36 Parte 1: Entorno Integrado de Desarrollo
ejemplos, y lo mejor de todo, usted podr ir a la misma velocidad que el libro, para
despus ya no depender de l.

El punto de partida: Qu desea hacer?
Para crear su aplicacin, debe revisar el producto del anlisis (saber qu quiere) y
comenzar el diseo.
Su primer programa ser algo muy simple, pero que nos permitir revisar todo el
proceso de desarrollo de aplicaciones en Visual Basic.
La figura 2.1 muestra la forma en que se debe ver la interfaz a disear.

Figura 2.1
interfaz a disear.

La figura 2.2 muestra lo que debe suceder cuando haga clic en el botn de comando
Mostrar Mensaje.
Figura 2.2
Respuesta
esperada al hacer
clic en Mostrar
Mensaje.

Al hacer clic en el botn de comando Salir, la aplicacin deber cerrarse.






Captulo 2: Creacin de la interfaz de usuario 37

Paso 1: Crear la interfaz de usuario
Los objetivos de este paso son los siguientes:
Tener la cantidad de objetos necesarios para hacer lo que se quiere con la
aplicacin. En la interfaz slo debe tener los objetos que necesita; colocar objetos
innecesarios slo hace confusa su interfaz y hace que su aplicacin sea ms
demandante de recursos, principalmente memoria RAM. La pregunta bsica aqu
es: cuntos objetos se necesitan para realizar la tarea?
Tener los tipos de objetos adecuados para hacer lo que se quiere con la apli-
cacin. Los objetos creados a partir de un determinado control tienen una deter-
minada funcin (TextBox, introducir datos; OptionButton, seleccionar una
opcin; Label. mostrar un texto, etctera.). Pretender realizar con un objeto una
tarea contraria a su naturaleza puede complicar el uso de la interfaz; una mala
eleccin de objetos puede hacer de su labor de desarrollo una pesadilla; no hay que
pedirles a los controles un imposible. La pregunta bsica aqu es: en qu controles
nos basaremos para definir los objetos?
Definir la posicin y las dimensiones adecuadas para los objetos. Es importante
colocar los objetos de acuerdo a una distribucin que sea apegada a los estndares
del entorno de trabajo en Windows, con dimensiones proporcionadas, bien
alineadas. Para tomar ideas, analice los programas basados en Windows,
principalmente los desarrollados por Microsoft (Excel, Word, PowerPoint, et-
ctera), y vea cmo estn distribuidos los objetos en los cuadros de dilogo. La
pregunta bsica aqu es: dnde debemos colocar los objetos y de qu tamao?
Distribucin funcional. Los objetos deben estar distribuidos de tal forma que
faciliten el uso de la interfaz. La pregunta bsica aqu es: la captura se realiza de
manera natural y sencilla? Responder "NO" a esta pregunta es inadmisible.

Insercin de objetos
Si quisiera desarrollar la aplicacin de la figura 2.1, requerir lo siguiente:

Un control Form en donde colocar el resto de los objetos. El formulario es una
ventana.
Un control Label donde mostrar el mensaje.
Un control CommandButton que al hacer clic en l muestre el mensaje en la eti-
queta.
Un control CommandButton que permita salir de la aplicacin.







38 Parte 1: Entorno Integrado de Desarrollo

Total de objetos requeridos: 4
Tipos de objetos requeridos: 1 Form
1 Label
2 CommandButton
>> Cmo insertar un objeto en la interfaz. [02.01]
A continuacina aprender cmo insertar objetos en un formulario.
1. Inicie una sesin de Visual Basic y genere un nuevo proyecto EXE estndar.
2. En la ventana principal de Visual Basic (donde se encuentra la barra de mens y
la barra de herramientas Estndar) debe aparecer el encabezado Proyectol -
Microsoft Visual Basic (diseo). En este caso, Proyectol es el nombre que
Visual Basic les asigna de manera predeterminada a los proyectos al inicio. Tome
en cuenta que trabajaremos con proyectos EXE estndar solamente, hasta que
las necesidades del libro marquen lo contrario.
3. Aparecer un formulario en blanco. En un proyecto de tipo EXE estndar siem-
pre debe existir al menos un formulario, por lo que al crear un proyecto de ese
tipo siempre dispondr del primer objeto de la interfaz de usuario creada.

4.

Para insertar un objeto, haga doble che en el control CommandButton, que se
encuentra en el Cuadro de herramientas. Aparecer un objeto de tipo Com-
mandButton en el centro del formulario (vea la figura 2.3); dicho objeto mostrar
el texto Cominandi (todos los objetos tienen valores predeterminados en Visual
Basic). Cuando agregamos un objeto haciendo doble che en un control del
Cuadro de herramientas, se dice que agregamos un objeto en modo de in-
sercin.

============================================================
Nota: Si hace un solo clic, tambin puede insertar objetos, en lo que se llama modo
de trazo. Dicho modo ser explicado ms adelante en este captulo; si hizo un solo
clic en lugar de doble clic, seguramente el puntero del ratn es una cruz delgada, que
indica que est en modo de trazo. Cancele este modo haciendo clic en el control
Puntero del Cuadro de herramientas. El control Puntero es el nico del Cuadro
de herramientas que no genera un objeto en la interfaz.
============================================================












Captulo 2: Creacin de la interfaz de usuario 39


Figura 2.3
Objeto insertado al
hacer doble clic en
el control
CommandButton
del Cuadro de
herramientas


a) La ventana Propiedades indica
que est trabajando sobre un obje-
to. Cmo se llama?

b) En qu tipo de control est
basado?

c) El objeto que acaba de crear
tiene un nombre predeterminado.
Usted se lo asign o lo hizo Visual
Basic?








Consideremos qu ha hecho hasta ahora:
Cre un nuevo proyecto EXE estndar, por lo que se agreg un formulario nuevo. De
manera predeterminada, este formulario tiene diversas propiedades asignadas por
Visual Basic, entre las que se encuentran un nombre (Name), una posicin (Top,
Left) y un tamao predefinidos (Height, Width).













40 Parte 1: Entorno Integrado de Desarrollo
Utilizando el Cuadro de herramientas agreg un objeto basado en el control
CommandButton. El objeto CommandButton, al igual que el formulario,
tiene diversas propiedades asignadas de manera predeterminada por Visual Basic,
entre las que se encuentran un nombre, una posicin y un tamao predefinidos.

En el formulario aparecer un conjunto de puntos espaciados de forma regular, lla-
mados cuadrcula estndar. La cuadrcula estndar slo aparece mientras est dise-
ando su aplicacin en el Entorno Integrado de Desarrollo (IDE), y sirve como refe-
rencia para distribuir los objetos de manera organizada y simtrica.
Nota: De manera predeterminada, los puntos de la cuadrcula estn organizados cada
120 twips. Si desea modificar la distancia o eliminar la cuadrcula, seleccione
Herramientas - Opciones - General. Muy pronto sabr qu es un twip.
El objeto CommandButton aparece bordeado por ocho recuadros llamados contro-
ladores de tamao (vea la figura 2.4); stos sirven para modificar las dimensiones de
un objeto.

Figura 2.4
Controladores
de tamao

Arrastre hacia abajo para hacer
ms ancho el objeto.
Arrastre hacia abajo para hacer
ms ancho y ms alto el objeto.
Arrastre hacia abajo para hacer
ms alto el objeto.

Se le llama objeto activo al objeto sobre el cual est trabajando
actualmente. Los con-troladores de tamao, adems de permitir la
modificacin de las dimensiones de un objeto, permiten identificar de
manera visual qu objeto es el que est activo; esto es muy importante, ya
que si no ubica con precisin a los objetos, puede estar trabajando con un
objeto que no quera trabajar, lo que sera tiempo perdido.
Una forma adicional para identificar qu objeto es el objeto activo, es
revisando la lista desplegable de objetos que se encuentra en la ventana
Propiedades (vea la figura 2.5), o bien, observando la barra de ttulo de la
ventana Propiedades; esta ltima opcin no es muy confiable, ya que es
inexacta cuando se tienen seleccionados varios objetos al mismo tiempo.






Captulo 2: Creacin de la interfaz de usuario 41

Es un objeto basado en
el control
CommandButton.
El objeto activo se llama
Command1.
El objeto activo ser el que aparezca en la barra de ttulo de la ventana Propiedades (en
este caso. Propiedades Command1)

Propiedades de posicin y dimensin

En Visual Basic no todos los objetos que se agregan en un formulario se ven en la
interfaz al ejecutar la aplicacin, por lo que podemos decir que hay objetos visibles y
objetos invisibles en tiempo de ejecucin; todos los objetos visibles que sean agregados
tendrn una posicin dentro del formulario, as como un tamao.

A las propiedades que determinan la posicin de un objeto se les llaman propiedades de
posicin, las cuales determinan el punto a partir del cual el objeto se comenzar a trazar,
a dibujar; dicho punto es llamado punto de inicio, y siempre es la esquina superior
izquierda del objeto. El tamao del objeto est determinado por las propiedades de
dimensin, mismas que especifican la distancia entre el punto de inicio y la esquina
inferior derecha del objeto.

El tamao de un objeto en Visual Basic est determinado en twips. Un twip es la vi-
gsima parte de un punto, y si consideramos que un punto es 1/72 de pulgada, un twip
sera 1/1440 de pulgada. No se quiebre la cabeza tratando de encontrar un significado
para "twip"; la unidad de medida pudo haberse llamado "xwin" o "flox", o como fuera.





42 Parte 1: Entorno Integrado de Desarrollo
Las propiedades de posicin son:
Top Muestra la posicin con respecto al margen superior de la pantalla
o del objeto contenedor.

Left Muestra la posicin con respecto al margen izquierdo de la
pantalla o del objeto contenedor.
Las propiedades de dimensin son:
Height Altura del objeto.
Width Ancho del objeto.

La figura 2.6 muestra grficamente cmo se interpretan las propiedades de
posicin y las propiedades de dimensin. Vea como las dimensiones de Height
y Width comienzan a partir del punto de inicio.

Figura 2.6
Propiedades
de posicin
y dimensin de
los objetos











Captulo 2: Creacin de la interfaz de usuario 43
Las formas para cambiar la posicin de los objetos son:
Arrastrando el objeto
Utilizando las combinaciones de teclas Ctrl+<Flechas de direccin> Las formas para
cambiar el tamao de los objetos son;
Arrastrando los controladores de tamao
Utilizando las combinaciones de teclas Mays+<Flechas de direccin>
>> Cmo cambiar la posicin o las dimensiones de un objeto. [02.02]
A continuacin aprender la forma de modificar las dimensiones y la posicin a los objetos
que han sido agregados a un formulario.

1. Si no tiene seleccionado el objeto Command1, seleccinelo haciendo clic en el objeto.
Sabr que el objeto est seleccionado si los controladores de tamao se encuentran
alrededor de l. Observe dnde est ubicado y qu tamao tiene.
==================================================================
Lo inesperado: Puede ser que queriendo seleccionar el objeto Command1 a travs de un
clic, haya hecho doble clic. Si hace eso, aparecer la ventana Cdigo.
Aunque dicha ventana es muy importante, no es lo que queremos analizar en este momento,
por lo que deber cerrarla. Presione Alt+F4, en tal caso.
==================================================================
2. En la ventana Propiedades localice las propiedades de posicin y las propiedades de
dimensin; tome nota de los valores que tienen asignados en este momento.

Command1.Top = _____________________
Command1 .Left = _____________________
Command1.Height = _____________________
Command1.Width = _____________________










44 Parte 1: Entorno Integrado de Desarrollo

3. Arrastre el controlador de tamao que se encuentra en la esquina inferior derecha del
objeto; trate de dejar el botn de comando al doble de su ancho y de su alto actual.
Qu valores tienen ahora las propiedades de dimensin?
Command1.Height = _____________________
Command1.Width = _____________________
4. Coloque el puntero del ratn en el centro del objeto y arrstrelo de tal forma que el
punto de inicio (esquina superior izquierda) quede cerca de la esquina superior
izquierda del formulario. Qu valores tienen ahora las propiedades de posicin?
Command1.Top = _____________________
Command1.Left = _____________________
5. Seleccione el objeto Command1 haciendo clic en l y presione la tecla Mays y
mantngala presionada; al mismo tiempo utilice las teclas de movimiento (flechas)
hasta dejar el botn de comando de un tamao similar al que tena al inicio de esta
prctica. Suelte las teclas.

6. Presione la tecla Ctrl y mantngala presionada; al mismo tiempo utilice las teclas de
movimiento hasta dejar el botn de comando en la posicin similar a la que tena al
inicio de esta prctica. Suelte las teclas.

7. El botn de comando est en el centro del formulario; orintelo hacia la izquierda.
Ahora ya sabe cmo cambiar el tamao y la posicin de un objeto que se encuentra en un
formulario, ya sea con el ratn o con el teclado. Y qu pasa con el formulario?
El formulario tiene algunas consideraciones especiales:

Si el entorno se encuentra en modo SDI, el formulario no est dentro de ningn objeto
contenedor y al seleccionarlo no se colocan controladores de tamao.
Si el entorno se encuentra en modo MDI, el formulario est dentro de un objeto
contenedor, en este caso la Ventana de proyecto; al seleccionar el formulario se
colocarn los controladores de tamao.
Se muestren o no los controladores de tamao, es posible cambiar el tamao del
formulario.










Captulo 2: Creacin de la interfaz de usuario 45
>> Cmo seleccionar un formulario. [02.03]
A continuacin aprender cmo seleccionar el objeto Form.
1. Para seleccionar un formulario tiene que hacer clic en cualquier parte del formu-
lario que no est ocupado por algn otro objeto (de preferencia que no sea en la
barra de ttulo).
=============================================================
Nota: Una forma de "hacer clic en cualquier parte del formulario, que no sea la
barra de ttulo y que no est ocupado por otro objeto" es hacer clic en cualquier
pequeo punto de la cuadrcula estndar. Si puede ver el punto de la cuadrcula estn-
dar, resulta obvio que no tiene un objeto que lo cubre.
=============================================================
2. Seleccione el formulario como se indic en el punto 1. Si tena seleccionado
cualquier otro objeto, ste ya no lo estar ms.
3. Revise la lista desplegable de objetos que se encuentra en la ventana Propiedades,
en donde debe aparecer Form1 Form.
>> Cmo cambiar el tamao de un formulario. [02.04]
A continuacin aprender cmo modificar et tamao de un objeto Form.
1. Coloque el puntero del ratn exactamente sobre las esquinas del formulario y sobre
los mrgenes superior, inferior, derecho e izquierdo, estn o no visibles los
controladores de tamao (no deben estar presentes porque nos encontramos en
modoSDI).
2. Arrastrando la esquina inferior derecha del formulario, reduzca el tamao de su
formulario a un tamao suficiente para el desarrollo esttico del ejemplo mostrado
en la figura 2.1.
3. Haga los movimientos necesarios para que el formulario tenga las siguientes
dimensiones: que su alto sea aproximadamente 4 veces el alto del botn, y que su
ancho sea aproximadamente 4 veces el ancho del botn de comando. La figura 2.7
muestra cmo debe tener hasta este momento su formulario.












46 Parte 1: Entorno Integrado de Desarrollo


Figura 2.7
Vista parcial
del formulario,
hasta este
momento

>> Cmo guardar su trabajo. [02.05]
A continuacin aprender la forma de guardar su trabajo en Visual Basic.

Aunque es muy poco lo que ha hecho hasta ahora (aunque es mucho lo que ha apren-
dido con ese "poco"), no hay nada que desmoralice ms a un programador que perder su
trabajo y tener que volver a hacerlo. Aqu le diremos rpidamente cmo guardar su
trabajo, aunque este tema se trata con mayor profundidad en captulos posteriores.
1. Haga clic en el botn Guardar proyecto, que aparece en la barra de
herramientas. Recuerde que por organizacin del libro, deber guardar sus
prcticas en /avbp/capnn, donde nn es el nmero del captulo donde se desarrolla
la prctica. En este caso, lo que guarde en esta prctica debe ir a /avbp/cap02.
2. Aparecer la ventana Guardar archivo como...; como Nombre de archivo, escriba
frmMensaje; en Guardar como tipo, debe estar seleccionado Formulario
(*.frm), mismo que aparece seleccionado de manera predeterminada.
3. Haga clic en Guardar.
4. Enseguida aparecer la ventana Guardar proyecto como...; como Nombre de
archivo escriba Saludo; en Guardar como tipo, debe estar seleccionado Proyecto
(*.vbp), mismo que aparece seleccionado de manera predeterminada.

Los conceptos Formulario, Proyecto y Grupo de proyectos se analizarn a detalle
en el captulo 5. Las ventanas Guardar... aparecern slo la primera vez que
guarde el proyecto y el formulario; despus bastar con hacer clic en el botn
Guardar proyecto para almacenar los cambios hechos al trabajo.
Ya vimos que agregar objetos en modo de insercin es muy fcil: haciendo doble clic
en cualquier control del Cuadro de herramientas. El problema es que siempre se








Captulo 2: Creacin de la interfaz de usuario 47
agregarn en el centro del formulario; al agregar varios objetos de manera rpida,
provocar un juego de movimientos necesarios para poder disponer de cada uno de los
objetos (quitarle a un objeto los que tiene arriba). Lo ideal es agregar los objetos en el
lugar en donde cree que deben quedar de manera definitiva. Eso se realiza agregando
los objetos en modo de trazo, que no es otra cosa que hacer clic en un control que desea
agregar, para despus trazar en el formulario el espacio que desea que ocupe el objeto
que quiere agregar.
>> Cmo agregar objetos en modo de trazo. [02.06]
A continuacin aprender la forma de agregar objetos al formulario en modo de
trazo.

En este momento faltan de agregar dos objetos al formulario: un botn de comando
(CommandButton) y una etiqueta (Label).

Podramos hacer doble clic en los controles CommandButton y Label para
insertarlos, tal y como lo hicimos con el primer botn de comando. En este ejercicio
optaremos por trazar los objetos.

1. Haga clic en el control CommandButton. Traslade el puntero del ratn a un rea
no ocupada del formulario. Podr darse cuenta que el puntero del ratn ha cambiado
su forma: dentro del formulario aparece como una cruz delgada. Este puntero del
ratn indica que est en modo de trazo.
2. Trace el rea que desea que ocupe el botn de comando que est agregando. La figura
2.8 muestra cmo trazar ese objeto. En el proceso aparecer un recuadro de
Informacin sobre herramientas que muestra el ancho por alto en twips del objeto que
est trazando. Deliberadamente provoque que el nuevo botn de comando que est
agregando sea un poco ms grande que el primer botn de comando que ya haba
insertado.


Figura 2.8
Adicion de un
Objeto en modo
De trazo






48 Parte 1: Entorno Integrado de Desarrollo
3. Acomode los botones de tal forma que queden ms o menos a la misma altura, en la
parte inferior del formulario.
4. Trace el objeto Label arriba de los botones de control. La figura 2.9 muestra cmo
debe verse el formulario hasta el momento. De manera predeterminada, Visual Basic
le asigna nombres a cada uno de los objetos, en este caso, los nombres asignados a
cada objeto son visibles: Form1, Label1. Command1 y Command2.
Deliberadamente el objeto Command2 fue definido ms grande que Command1.




Figura 2.9
Vista parcial
del formulario,
hasta este
momento



Organizacin de los objetos en el formulario
Probablemente no est del todo satisfecho con el resultado obtenido, ya que los objetos estn
desproporcionados y no estn bien distribuidos; en pocas palabras, el formulario no se ve bien.
Visual Basic proporciona un conjunto de herramientas que facilitan la organizacin y
distribucin de los objetos, a travs de su men Formato.
Algunas de las opciones de dicho men funcionan para un solo objeto activo, otras funcionan
para un conjunto de objetos activos, a lo que se le llama modo de grupo, y otras funcionan para
ambos casos.
Cada que selecciona un objeto, los controladores de tamao aparecen bordendolo en forma de
recuadros azules. Cuando seleccione varios objetos en modo de grupo, se dar cuenta que todos
estn rodeados por controladores de tamao, sin embargo, slo uno de los objetos tendr los
controladores de tamao de color azul y el resto los tendrn de color blanco. Aquel objeto que
tenga los controladores de color azul ser el objeto principal del grupo; esto es muy importante,
ya que todos los dems objetos del grupo lo seguirn en sus propiedades.












Captulo 2: Creacin de la interfaz de usuario 49
>> Seleccin de objeto activo, en forma individual o en modo de grupo. [02.07]
A continuacin aprender la forma de seleccionar los objetos en modo de grupo y
comprobar que a medida que agrupa objetos, la ventana Propiedades muestra slo
aquellas propiedades que son aplicables a todos los objetos que conforman el grupo.
1. Para seleccionar un objeto y establecerlo como objeto activo, basta con hacer clic en
el objeto. Seleccione Command1 como objeto activo.
2. Presione la tecla Tab. Qu sucede?





3. Seleccione el objeto Command1 . Vea en la ventana Propiedades. Qu valor tiene
la propiedad Name y la propiedad CausesValidation?:
Command1 .Name = __________________
Command1 .CausesValidation = __________________


4. Seleccione en modo de grupo a los dos botones de comando; tiene dos opciones para
hacerlo. La primera, seleccione el botn de comando Command1 . presione la tecla
Mays y no la suelte, haga clic en el botn de comando Command2 . suelte la tecla
Mays. La segunda, trazando un cuadro o lnea imaginaria que abarque el rea que
ocupan los dos botones de comando. La figura 2.10 muestra cmo se ve su
formulario cuando selecciona en modo de grupo los objetos Command1 y
Command2 .
























50 Parte 1: Entorno Integrado de Desarrollo










5. Vea en la ventana Propiedades. Qu valor tiene la propiedad Name y la propiedad
CausesValidation?:
Name = _________________
CausesValidation= _________________

Por qu cree que la propiedad Name ya no est disponible y CausesValidation s?




6. Presione la tecla Mays y sin dejar de presionarla haga clic en el objeto Label1.
7. Vea en la ventana Propiedades. Qu valor tiene la propiedad Name y la propiedad
CausesValidation?:
Name = _________________
CausesValidation= _________________

Captulo 2: Creacin de la interfaz de usuario 51
Por qu cree que la propiedad CausesValidation ya no est disponible?



Hasta el momento ya sabe seleccionar, cambiar el tamao y mover los objetos. Lo que
no
ha visto es cmo determinar la posicin de un formulario. Para ello, utilice la ventana
Posicin del formulario.
>> Cmo determinar la posicin de un formulario en la pantalla. [02.08]
A continuacin aprender la forma de determinar la posicin de un formulario en la
pantalla.
Utilizar la ventana Posicin del formulario, misma que no hace otra cosa que modi-
ficar visualmente los valores de las propiedades de posicin del objeto Form.
1. Seleccione el formulario.
2. Vea qu valores tiene actualmente:
Form1.Top = ______________________
Form1.left = ______________________
3. Lo ms sencillo es arrastrar el formulario tomndolo de la barra de ttulo, si est en
SDI; en caso de que trabaje en MDI, utilice la ventana Posicin del formulario.
4. Otra forma es utilizando la ventana Posicin del formulario. Seleccione el men
Ver - Ventana Posicin del formulario. Aparecer la ventana que se muestra en la
figura 2.11.












52 Parte 1: Entorno Integrado de Desarrollo

Figura 2.11
Ventana Posicin
del formulario



5. La ventana representa la pantalla de un monitor, y dentro de dicha pantalla aparece
lo que sera su formulario (Form1).
6. Coloque el puntero del ratn sobre la representacin de su formulario, hasta que el
puntero del ratn cambie a .
7. Arrastre el pequeo formulario a la posicin que desea que ocupe en la pantalla en
modo de ejecucin.
8. Qu valores tiene actualmente en las siguientes propiedades:
Form1.Top = ______________________
Form1.left = ______________________

============================================================
LO inesperado: Es posible que no aparezca formulario alguno en la ventana
Posicin del formulario. Seleccione el men Ejecutar - Iniciar (tambin puede opri-
mir la tecla F5). Esto provoca que su aplicacin se ejecute (se coloque en tiempo de
ejecucin); lo que su formulario haga en este momento no es relevante. Seleccione el
men Ejecutar - Terminar (regresa a tiempo de diseo).
La ventana Posicin del formulario deber mostrar ya la representacin de su for-
mulario.

============================================================

Cmo establecer las aplicaciones para diferentes
resoluciones de monitores
Es posible que usted desarrolle una aplicacin que le parece vistosa y bien distribui-
da. Cuando libere la aplicacin, no se impresione si uno de los usuarios de sta se
queja de que la distribucin de su aplicacin en la pantalla es inadecuada dnde est
el problema?

Captulo 2: Creacin de la interfaz de usuario 53
Recuerde que sugeramos un monitor ms grande (17" o 19") para desarrollar cmo-
damente. Seguir esa recomendacin puede llevarlo a una involuntaria prdida de per-
spectiva: con seguridad los usuarios finales de la aplicacin dispondrn de un monitor
ms reducido. Para asegurarse de que su aplicacin tiene las dimensiones adecuadas
para los diferentes tipos de monitores y resoluciones que existen en el mercado, la
ventana Posicin del formulario puede ayudarle, si establece lo que se conoce como
Guas de resolucin, que sugieren las dimensiones de su aplicacin, comparada
relativamente con el espacio de trabajo de las resoluciones ms comunes de los
monitores actuales.
>> Cmo establecer las Guas de resolucin. [02.09]
A continuacin aprender la forma de establecer las Guas de resolucin.
En el proyecto Saludo.vbp utilizar la ventana Posicin del formulario.
1. Coloque el puntero del ratn en la ventana Posicin del formulario.
2. Haga clic con el botn derecho del ratn y seleccione la opcin Guas de resolucin
del men contextual que aparece (vea la figura 2.12).

Figura 2.12
La opcin Guas
de resolucin
3. En la figura 2.13 se muestra la forma en que se han agregado las Guas de resolucin.
Ahora podr dimensionar su aplicacin, de acuerdo con el espacio real que el usuario
final puede tener.

Figura 2.13
Guas de reso-
lucin en la
ventana Posicin
del formulario





54 Parte 1: Entorno Integrado de Desarrollo
>>Cmo utilizar las herramientas del men Formato para organizar objetos. [02.10]
A continuacin aprender a organizar los objetos con las herramientas que Visual
Basic tiene en su men Formato. Tambin aprender por qu es importante el orden
en que los objetos sean seleccionados.
1. Seleccione el objeto Label1y el men Formato - Centrar en el formulario
Horizontalmente,
2. Seleccione en modo de grupo los objetos Command1 y Command2. Asegrese de
que Command1 , que es el botn de comando ms grande, quede como objeto prin-
cipal del grupo (controladores de tamao en azul).
3. Seleccione el formulario, lo que implica dejar de tener seleccionados los botones de
comando.
4. Haga clic en el objeto Command1 , presione la tecla Mays y no la suelte, haga clic
en el objeto Command2, deje de presionar la tecla Mays. Los controladores de
tamao del objeto Command1 debern ser blancos, mientras que los del objeto
Command2 son azules. El ltimo objeto integrado al grupo permanece como objeto
principal de grupo.
5. Seleccione el men Formato - Igualar tamao - Ambos. Observe que los objetos
del grupo siguen las caractersticas del objeto principal del grupo.
6. Deshaga la modificacin que acaba de realizar. Para ello seleccione el men Edicin
- Deshacer tamao (tambin puede presionar Ctrl+Z).
7. Para seleccionar otro objeto como objeto principal de grupo, haga clic en el objeto
que desee como objeto principal del grupo. Teniendo seleccionados en modo de
grupo a los objetos Command1 y Command2. haga clic en el objeto Command1 .
Los controladores de tamao del objeto Command2 debern ser blancos, mientras
que los del objeto Command1 debern ser azules.
8. Seleccione el men Formato - Igualar tamao - Ambos. Observe que los objetos
del grupo siguen las caractersticas del objeto principal del grupo.
9. Todava teniendo los objetos Command1 y Command2 seleccionados en modo de
grupo, seleccione el men Formato - Espacio horizontal - Aumentar.
10. Seleccione el men Formato - Bloquear controles.
11. Trate de mover cualquier objeto dentro del formulario. Comprobar que no se
puede; asimismo, cada que seleccione un objeto, los controladores de tamao no
sern azules como lo eran antes, ahora son blancos.
12. Seleccione el men Formato - Bloquear controles. Se deshabilitar el bloqueo de
los objetos; ahora ya podr moverlos.
13. Su formulario deber verse aproximadamente como se muestra en la figura 2.14.






Captulo 2: Creacin de la interfaz de usuario 55
Figura 2.14
Vista parcial
del formulario
hasta este momento

14. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra
de herramientas Estndar.
____________________________________________________
Resumen
En este captulo:
Vimos cules son los objetivos que se persiguen al crear una interfaz de
usuario.
Vimos cmo se insertan objetos en un formulario.
Vimos cmo se agregan objetos a un formulario en modo de trazo.
Vimos qu son los controladores de tamao.
Vimos qu es un objeto activo, la seleccin de un objeto, la seleccin de
objetos en modo de grupo y el establecimiento de un objeto como principal
del grupo.
Vimos cmo mover y darle dimensin a los objetos.
Vimos cmo establecer la posicin de un formulario en la pantalla.
Vimos para qu sirven las opciones del men Formato de Visual Basic.
Vimos cmo guardar nuestro trabajo.
Es importante que domine todos esos puntos antes de continuar.




56 Parte 1: Entorno Integrado de Desarrollo
Algunas respuestas a los ejercicios
[02.01] Cmo insertar un objeto en la interfaz.
5.a) Command1
5.b) CommandButton
5.c) Visual Basic lo asign de manera predeterminada.
[02.07] Seleccin de objeto activo, en forma individual o en modo de grupo.
2. El control se mueve al siguiente objeto. Otro objeto es ahora el objeto activo.
3. Command1. Name = Command1 , Command1.CausesValidation = True.
5. Porque Name es una propiedad especfica para un solo objeto; en virtud de que los
dos objetos no pueden compartir un mismo nombre de objeto, la propiedad Name
ya no est disponible. CausesValidation es una propiedad no exclusiva para
un solo objeto, y como aplica a los objetos basados en CommandButton y
ambos estn basados en CommandButton, es posible asignarlo en modo de
grupo.
7. Porque no se aplica a todos los objetos del grupo. Puesto que los objetos basados
en el control Label no cuentan con la propiedad CausesValidation, sta
desaparece en un grupo en donde se encuentre un objeto basado en el control
Label.













Captulo
3
Cmo establecer
las propiedades
de los objetos
Objetivo
Aprender a establecer las caractersticas particulares de los objetos, en tiempo de di-
seo y en tiempo de ejecucin.
Al finalizar este captulo deber:
Dominar el manejo de la ventana Propiedades
Saber cmo modificar la propiedad de identificacin (Name)
Saber cmo modificar las propiedades de apariencia y comportamiento
Conocer la sintaxis que se sigue para modificar los valores de las propiedades en
tiempo de ejecucin
Saber cmo conformar una tabla de objetos y propiedades para las aplicaciones de
ejemplo de este libro
57







58 Parte 1: Entorno Integrado de Desarrollo
Consideraciones de diseo en Visual Basic
El diseo de las aplicaciones en Visual Basic no es tan sencillo como parece; no es
slo agregar objetos en un formulario de manera esttica y proporcionada.
En Visual Basic el desarrollo es minimalista, detallado, especfico. Esto no puede ser
de otra manera debido a que la plataforma es orientada a eventos, es decir, cualquier
cosa que suceda en la interfaz de usuario, por mnima que sea, puede desencadenar
una tarea. Hacer un clic con el ratn, presionar una tecla determinada, pasar el puntero
del ratn sobre un objeto, arrastrar un objeto, cualquier cosa puede disparar una
accin; es donde las cosas se complican ya que usted tiene que anticiparse y prevenir
todo lo que puede pasar.
Lo primero que puede hacer para que su aplicacin haga solamente lo que usted desea,
es establecer las propiedades adecuadas.
Al principio, la aplicacin Saludo pareca muy sencilla. Al momento de estar dise-
ando la aplicacin los detalles aparecen por todos lados. Es un hecho que su aplica-
cin, tal como est, ni luce como usted quiere, ni hace lo que usted quiere.
Observe las especificaciones de la aplicacin desde el punto de vista de diseo de
Visual Basic, es decir, cmo se espera que se vean y sucedan las cosas:
En la barra de ttulo del formulario debe aparecer Mensaje.
Al ejecutarse la aplicacin, el formulario debe colocarse en el centro de la pantalla.
Al iniciar la ejecucin de la aplicacin, la etiqueta donde se mostrar el mensaje no
debe tener contenido.
La etiqueta donde aparecer el mensaje Bienvenido a Visual Basic!!! debe estar
bordeado con el efecto 3-D estndar de Windows.
El botn de comando (CommandButton) que sirva para desplegar el mensaje de
bienvenida debe decir Mostrar Mensaje; adems, debe establecerse como tecla
de mtodo abreviado para ese botn la combinacin Alt+M, siendo visible dicha
capacidad en el estndar de Windows (la letra "M" debe aparecer subrayada).
El botn de comando que sirva para salir de la aplicacin debe decir Salir; adems,
debe establecerse como tecla de mtodo abreviado para ese botn la com-
binacin Alt+S, siendo visible dicha capacidad en el estndar de Windows (la
letra "S" debe aparecer subrayada).
Hacer clic en el botn de comando Mostrar Mensaje debe provocar que en la eti-
queta aparezca Bienvenido a Visual Basic!!!
Hacer clic en el botn de comando Salir debe provocar la salida de la aplicacin
(terminacin de la ejecucin).






Captulo 3: Cmo establecer las propiedades de los objetos 59
Todas las especificaciones anteriormente listadas son controladas a travs de la asig-
nacin de propiedades, excepto la relativa a lo que suceder cuando se haga clic en los
botones Mostrar Mensaje, y Salir; esta tarea slo puede ser realizada a travs de
programacin, en los procedimientos asociados a dicho uso de la interfaz.
Paso 2: Establecer las propiedades de los objetos
Los objetivos de establecer las propiedades de los objetos son:
Validar que ya se tienen todos los objetos que se requieren en el formulario.
Consiste en revisar que ya se tienen todos los objetos que la interfaz requiere. Para ello
se utiliza la ventana Propiedades.
Asignar el nombre adecuado a cada uno de los objetos. Consiste en darle un
nombre especfico a cada uno de los objetos, a efecto de poder hacer referencia a
ellos en la aplicacin y realizar operaciones con ellos, La propiedad de identificacin
es la propiedad Name. Es necesario que respete las convenciones de prefijo de
objetos que son reconocidas mundialmente para cdigo Visual Basic.
Establecer las propiedades de apariencia y comportamiento. Consiste en asignar
los valores necesarios a las propiedades para que los objetos luzcan y se comporten
como el diseo lo requiere. Las propiedades diferentes a la propiedad Name son
llamadas propiedades de apariencia y comportamiento.

Validar que ya se tienen todos los objetos
que se requieren en el formulario
Al inicio de este captulo se estableci lo siguiente para la aplicacin de ejemplo:
Total de objetos requeridos: 4
Tipos de objetos requeridos: 1 Form
1n Label
2 CommandButton








60 Parte 1: Entorno Integrado de Desarrollo
Debe verificar que efectivamente en este momento tiene en el formulario todos los
objetos requeridos; debe tener la cantidad suficiente de objetos que le permita cubrir
las especificaciones del diseo, de tal forma que exista un balance exacto entre la
esttica y la funcionalidad, con aplicacin estricta de los estndares de todo programa
basado en Windows.
============================================================
Nota: Uno de los atributos del entorno de Windows es que la interfaz de los
programas cuenta con convencionalismos de funcionalidad que permiten que una
persona, una vez que aprenda a manejar un programa, pueda manejar cualquier otro;
todos se parecen.
Usted puede hacer magia con la interfaz, pero si no se apega a los estndares de Win-
dows ser un programa incmodo para los usuarios. Uno de los atributos ms valio-
sos de la interfaz de una aplicacin es que sea fcil de usar y de aprender.
No rompa paradigmas de manera radical, a menos que sea estrictamente necesario.
============================================================
Aparte de tener el nmero correcto de objetos, es muy importante que sean el tipo de
objeto que necesita. Un error frecuente al desarrollar en Visual Basic es confundir los
controles, por ejemplo agregar al formulario un objeto basado en el control
TextBox en lugar de un objeto que debi estar basado en el control Label.
Qu pasar si hace esto? Al codificar har referencia a propiedades del objeto tipo
Label creyendo que tiene uno de ese tipo definido en el formulario. En el momento
en que haga referencia a una propiedad que no est disponible para el objeto que
defini (TextBox), su programa marcar error.
Si incurre en este error, necesita eliminar el objeto equivocado y agregar el correcto.
Esto es trabajo extra que puede ahorrarse con una verificacin sencilla, que no le
quita mucho tiempo y que debe establecer en su forma de trabajo como un hbito til
para la programacin en Visual Basic.
Evite ese trabajo extra verificando desde un principio si tiene los objetos que requie-
re, en cantidad y tipo. La lista desplegable de objetos de la ventana Propiedades
sirve para tal efecto.
>> Cmo validar la cantidad y el tipo de objetos requeridos en una aplicacin. [03.01]
A continuacin aprender a verificar cuntos objetos tiene definidos en un formulario
y de qu tipo son.
1. Seleccione el formulario. Para ello haga clic en cualquier parte del formulario que
no sea la barra de ttulo y que no est ocupada por otro objeto. Otra forma de
decirlo, haga clic en cualquier punto de la cuadrcula.
2. Haga clic en la lista desplegable de objetos de la ventana Propiedades. La figura
3.1 muestra cmo se debe desplegar la informacin.




Captulo 3: Cmo establecer las propiedades de los objetos 61

Figura 3.1
Verificacin de
la cantidad de
obetos y sus
tipos, utilizando
la Lista
desplegable de
objetos
haciendo clic en esta
lista, aparecern todos
los objetos que
componen el
formulario, incluyendo
el objeto contenedor












3. Marque afirmativamente si se da el caso:
Tiene definido un objeto basado en el control Form?
Tiene definido un objeto basado en el control Label?
Tiene definidos dos objetos basados en el control CommandButton?
Los anteriores son los nicos objetos definidos en la lista?


Si marc afirmativamente a todas las preguntas anteriores, puede continuar con el
captulo. Si no es as, stas son las alternativas que tiene:
Si sobran objetos. Seleccione los que no sean necesarios y presione la tecla Supr.
Con esto se eliminarn.
Si faltan objetos. Agregelos y acomdelos como debe ser (vea el captulo
anterior).






62 Parte 1: Entorno Integrado de Desarrollo

Si tiene la cantidad de objetos correcta, pero uno no es del tipo que esperaba.
Deber seleccionar el objeto basado en un control equivocado, y eliminarlo
presionando la tecla Supr; posteriormente deber agregar el objeto que haga falta
con el tipo de control correcto.

Cmo asignar el nombre adecuado
a cada uno de los objetos
En un formulario puede tener tantos objetos como la memoria RAM de la compu-
tadora lo permita; esto puede significar muchos objetos, algunos basados en el mismo
control.

Ya hemos visto que Visual Basic asigna un nombre predeterminado a cada uno de los
objetos que es agregado al formulario, a travs de la propiedad Name (Form1,
Label1, Command1. Command2. son ejemplos de ello).
============================================================
Nota: Un solo proyecto puede contener hasta 32,000 "identificadores" (cualquier
palabra clave no reservada), asociados a nombres de formularios, controles, mdulos,
variables, constantes, procedimientos, funciones y objetos. El nmero real de identi-
ficadores se limita a la memoria disponible.
============================================================

Utilizar los nombres proporcionados de manera predeterminada a los objetos no oca-
siona problemas en aplicaciones pequeas, pero suponga que tiene un formulario con
diez botones de comando (Command1, Command2,...., Command10) y cada uno de
ellos tiene una funcin especfica e importante que no debe confundirse con la
funcin de los otros botones de comando; en este caso, sera complicado mantener la
referencia de los objetos.
Para evitar estas complicaciones. Visual Basic permite modificar la propiedad Name
de los objetos, de tal forma que stos sean identificados con un nombre acorde a su
funcin. Aqu surge una problemtica nueva: aparte de que puede haber varios
objetos basados en un mismo control, puede haber objetos basados en otros
controles.
Para aquel que desarrolla aplicaciones en Visual Basic, lo ideal es tener un nombre
de objeto altamente significativo, que d a entender para qu sirve un objeto deter-
minado, as como en qu control est basado. De esa manera podr saber qu
propiedades estarn disponibles, as como el comportamiento y la apariencia que es
posible definir.
Por ejemplo, si tiene una etiqueta (Label) que servir para desplegar un texto deter-
minado, podra asignarle el siguiente nombre:

Texto







Capitulo 3: Cmo establecer las propiedades de los objetos 63
Sin embargo, este nombre por s mismo no proporciona informacin relativa al control
sobre el cual est basado el objeto; podra ser un objeto basado en el control Label. por
lo que para desplegar un mensaje tendra que modificar la propiedad Caption; pero
tambin podra ser un objeto basado en el control TextBox, por lo que para desplegar
un mensaje tendra que modificar la propiedad Text. Si no conoce con exactitud el tipo
de control sobre el cual est basado el objeto, podra utilizar propiedades que no se
apliquen a un objeto (por ejemplo, modificar la propiedad Text de un control un
Label, o la propiedad Caption de un control un TextBox), lo que generara un error
en tiempo de ejecucin.
Qu le parece este otro nombre para el objeto?

lblTexto
El prefijo lbl indica que el objeto est basado en el controLabelbel, y por otro lado,
el resto del nombre (Texto) nos da una idea en relacin con el uso del objeto.
En Visual Basic se tienen las siguientes convenciones para los objetos:





64 Parte 1: Entorno Integrado de Desarrollo














Captulo 3: Cmo establecer las propiedades de los objetos 65

A medida que vaya conociendo ms controles agregar las convenciones de prefijos para
cada uno de ellos. Revise el apndice 1: Convenciones, para ver la lista completa de
prefijos, entre otras cosas.
La propiedad Name de un objeto, al igual que los nombres de variables de memoria en
Visual Basic, debe comenzar con una letra y puede tener un mximo de 40 caracteres.
Puede incluir nmeros y caracteres de subrayado (_), pero no signos de puntuacin,
espacios en blanco, caracteres compuestos o caracteres especiales. Le recomendamos el
uso slo de letras, nmeros y el carcter de subrayado. Un formulario no puede tener el
mismo nombre que otro objeto pblico como Clipboard, Screen o App.
Aunque el valor de la propiedad Name puede ser una palabra clave, un nombre de
propiedad o el nombre de otro objeto, esto puede crear conflictos en el cdigo.

===============================================================
Lo inesperado: Si por equivocacin intenta ponerle a un objeto un nombre ya
utilizado por otro objeto, Visual Basic asume que desea crear una matriz de controles
(varios objetos identificados por un mismo nombre, diferenciados por un subndice). La
utilidad de una matriz de controles se ver en otro captulo; si por descuido intenta en
este momento repetir nombres, cuando Visual Basic le pregunte Desea crear una matriz
de controles?, conteste No. Este es uno de los casos en que Visual Basic utiliza el
trmino "controles" cuando debera utilizar "objetos".
===============================================================

Si analizamos nuestro ejemplo, podramos asignar los siguientes nombres de objeto:
frmMensaje (Form1), lblTexto (Label1), cmdDespliega (Command1) y
cmdSalir (Command2) (vea la figura 3.2).











66 Parte 1: Entorno Integrado de Desarrollo

>> Cmo modificar la propiedad Name de los objetos. [03.02]
A continuacin aprender a modificar la propiedad Name de los objetos.
1. Seleccione el formulario.
2. Asegrese de que la cuadrcula de propiedades est en orden alfabtico.
3. Haga doble clic en la cuadrcula de propiedades donde diga Name. Observe que el
valor asignado actualmente, en este caso Form1, se sombrea en azul al hacer doble
clic en el valor asignado a la propiedad.
4. Escriba frmMensaje. Presione la tecla Intro.

===============================================================
Nota: Las propiedades se asignan cuando presiona la tecla Intro, o bien cuando traslada
el control hacia otra propiedad u objeto; se dice que la propiedad se acepta. Mientras no
acepte un nuevo valor para una propiedad, puede presionar la tecla Esc y dar marcha atrs
a los cambios que haya realizado.
===============================================================

5. Vea que en la lista desplegable de objetos aparecer frmMensaje Form, lo que
indica que el objeto de tipo Form ahora se llama frmMensaje. Usted ha cambiado
el nombre del objeto.
6. En la lista desplegable de objetos seleccione Label1 Label; haga doble clic en la
cuadrcula de propiedades donde diga Name, escriba lbITexto.









Captulo 3: Cmo establecer las propiedades de los objetos 67
7. En la lista desplegable de objetos seleccione Command1 CommandButton; haga
doble clic en la cuadricula de propiedades donde diga Name, escriba cmdDes-
pliega.
8. En la lista desplegable de objetos seleccione Command2 CommandButton; haga
doble clic en la cuadrcula de propiedades donde diga (Name), escriba cmdSalir.
9. Vea el contenido actual de la lista desplegable de objetos de la ventana. Debe decir
Propiedades, como se muestra en la figura 3.3.

Cmo establecer las propiedades de apariencia y
comportamiento
Cambiar el valor de la propiedad Name y cambiar el valor de cualquier otra propiedad
es exactamente igual.
Para establecer el valor de una propiedad en tiempo de diseo:
Seleccione el objeto al que pertenece la propiedad que desea modificar. Esto lo
puede hacer de dos formas: seleccionando el objeto en la lista desplegable de objetos,
o bien haciendo clic en el objeto.






















68 Parte 1: Entorno Integrado de Desarrollo
Busque en la cuadricula de propiedades la propiedad que desea modificar. Haga doble clic en
el nombre de la propiedad que desea modificar (columna izquierda de la cuadrcula de
propiedades).
Escriba o seleccione el valor deseado.

===================================================================
Nota: Un formulario es un objeto contenedor (es decir, puede contener objetos basados en otros
controles); existe un lmite fijo de 254 nombres diferentes de objetos.
===================================================================

Para establecer el valor de una propiedad en tiempo de ejecucin:
Debe realizar una igualacin entre la propiedad de un objeto y el valor que se desea asignar.

Ejemplo:
Usted quiere establecer, para la propiedad Caption del objeto frmMensaje, la siguiente
expresin: Mensaje.
Sintaxis:
Objeto.Propiedad = ValorAEstablecer
Ejemplo:
frmMensaje.Caption = "Mensaje"
>> Cmo modificar las propiedades de apariencia y comportamiento. [03.03]
Enseguida aprender a modificar las propiedades de apariencia y comportamiento. El diseo nos
dice lo siguiente:
En la barra de ttulo del formulario debe aparecer Mensaje.
Al ejecutarse la aplicacin, el formulario debe colocarse en el centro de la pantalla.
1. Seleccione el objeto frmMensaje. El ttulo de la ventana Propiedades debe decir
Propiedades - frmMensaje.

===================================================================
Nota: Si el ttulo de la ventana Propiedades no dice Propiedades - frmMensaje, quiere decir
que usted est modificando las propiedades de otro objeto. Ese es el primer paso para arruinar el
funcionamiento de su aplicacin. Cercirese de que est modificando las propiedades del objeto
que realmente desea afectar.
===================================================================






Captulo 3: Cmo establecer las propiedades de los objetos 69
2. Localice en la cuadrcula de propiedades la propiedad Caption. Haga doble clic en el
nombre de la propiedad; se iluminar en azul el valor actual de la propiedad. Escriba Mensaje
y acepte la propiedad. Esto sera en tiempo de diseo; en tiempo de ejecucin el cdigo que
modificara la propiedad sera:
frmMensaje.Caption = "Mensaje"
3. Localice en la cuadrcula de propiedades la propiedad StartUpPosition, haga doble clic
en el nombre de la propiedad; como esta propiedad es de valor limitado, necesita seleccionar
en la lista desplegable el valor que requiera (vea la figura 3.4).

4. Seleccione el valor 2- Center Screen. Esto sera en tiempo de diseo; en tiempo de ejecucin
el cdigo que modificara la propiedad sera:
frmMensaje.StartUpPosition = 2

===================================================================
Nota: StartUpPosition es un ejemplo de aquellas propiedades que se ven afectadas por
otros movimientos y asignaciones realizadas posteriormente. StartUpPosition con valor
2 establece que al cargarse el formulario para su ejecucin, ste se colocar exactamente en el
centro de la pantalla. Si despus de haber colocado dicho















70 Parte 1: Entorno Integrado de Desarrollo
valor a la propiedad usted mueve el formulario de posicin, ya sea arrastrando el formulario por
su barra de ttulo o utilizando la ventana Posicin del formulario, la propiedad cambiar de
forma automtica a O (Manual).
Al ejecutar la aplicacin se preguntar por qu no se coloc en el centro si yo se lo especifiqu?
Simplemente porque hizo algo en tiempo de diseo que ocasion modificaciones automticas en
la propiedad que as lo establecan.
===================================================================
El diseo nos dice:
Al iniciar la ejecucin de la aplicacin, la etiqueta, donde se mostrar el mensaje no debe tener
contenido.
La etiqueta donde aparecer el mensaje Bienvenido a Visual Basic!!! debe estar bordeado
con el efecto 3-D estndar de Windows.
5. Seleccione el objeto indicado, en este caso lblTexto. (La ventana Propiedades debe decir
en su barra de ttulo Propiedades - lblTexto.)
6. Localice en la cuadrcula de propiedades la propiedad Caption, haga doble clic en el
nombre de la propiedad, y presione la tecla Supr para eliminar el contenido; acepte la
propiedad. En tiempo de ejecucin el cdigo que modificara la propiedad sera:
lblTexto.Caption = ""

7. Localice en la cuadrcula de propiedades la propiedad BorderStyIe, haga doble clic en el
nombre de. la propiedad y seleccione el valor 1 - Fixed single. Esto sera en tiempo de
diseo; en tiempo de ejecucin el cdigo que modificara la propiedad sera:
lblTexto.BorderStyle = 1
El diseo nos dice:
El botn de comando que sirva para desplegar el mensaje de bienvenida debe decir Mostrar
Mensaje; adems, debe establecerse como tecla de mtodo abreviado para ese botn de
comando la combinacin Alt+M, siendo visible dicha capacidad en el estndar de Windows
(la letra "M" debe aparecer subrayada).
8. Seleccione el objeto indicado, en este caso cmdDespliega. (La ventana Propiedades debe
decir en su barra de ttulo Propiedades - cmdDespliega.)
9. Localice en la cuadrcula de propiedades la propiedad Caption, haga doble clic en el
nombre de la propiedad, escriba &Mostrar Mensaje. Esto sera en tiempo













Captulo 3: Cmo establecer las propiedades de los objetos 71
de diseo; en tiempo de ejecucin el cdigo que modificara la propiedad sera
(vea la figura 3.5):
cmdDespliega.Caption = "&Mostrar Mensaje"

===================================================================
Nota: Al establecer la propiedad Caption de los objetos, anteponer a cualquier letra un signo
"&" hace que dicha letra sea asignada como tecla de mtodo abreviado. En tiempo de
ejecucin, presionar Alt+<letra> es lo mismo que seleccionar el objeto por otro medio.
Es importante que planee las teclas de mtodo abreviado, a efecto de que no tenga dos iguales
en un mismo formulario.
===================================================================
10. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra de
herramientas Estndar.

Debido a que es poco usual tener un botn de comando con dos lneas de contenido, es
recomendable ampliar el tamao del objeto.

===================================================================
Nota: Los objetos deben tener el tamao suficiente en relacin con su contenido. Si el
contenido excede el tamao del objeto, dicho contenido se truncar o se dividir. En el caso
de nuestro ejemplo, el contenido se dividi en dos lneas.
===================================================================







72 Parte 1: Entorno integrado de Desarrollo
11. Localice en la cuadrcula de propiedades la propiedad Width, haga doble clic en el nombre
de la propiedad, escriba 1500. Esto sera en tiempo de diseo; en tiempo de ejecucin el cdigo
que modificara la propiedad sera:
cmdDespliega.Width = 1500

12. Con este cambio, el tamao de los botones de comando queda desproporcionado. Para
corregir el problema seleccione en modo de grupo los objetos cmdDespliega y cmdSalir,
cuidando que el objeto cmdDespliega sea el objeto principal del grupo; despus seleccione
el men Formato - Igualar tamao - Ambos. Los dos botones de comando deben tener
establecida su propiedad Width a 1500 twips.
El diseo nos dice:
El botn de comando (CommandButton) que sirva para salir de la aplicacin debe decir
Salir; adems, debe establecer como tecla de mtodo abreviado para ese botn la combinacin
Alt+S, siendo visible dicha capacidad en el estndar de Windows (la letra "S" debe aparecer
subrayada).
13. Seleccione el objeto indicado, en este caso cmdSalir. (La ventana Propiedades debe decir
en su barra de ttulo Propiedades - cmdSalir.)
14. Localice en la cuadrcula de propiedades la propiedad Caption, haga doble clic en el
nombre de la propiedad, escriba &Salir. Esto sera en tiempo de diseo; en tiempo de
ejecucin el cdigo que modificara la propiedad sera;
cmdSalir. Caption = "&Salir"
15. Como ya no hay ms modificaciones de tamao ni de dimensin, se recomienda bloquear los
controles para no mover de manera involuntaria la interfaz que ya cre. Seleccione el objeto
frmMensaje y el men Formato - Bloquear controles.
16. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra
de herramientas.
====================================================================
Nota: De ahora en adelante, grabe su trabajo cada que lo considere conveniente. Le
recomendamos que lo haga antes de ejecutar una aplicacin, ya que en el transcurso de la
ejecucin podra surgir un anidamiento permanente o un error que impida hacerlo
posteriormente.
====================================================================
En este momento ya estableci todas las propiedades de su aplicacin.













Captulo 3: Cmo establecer las propiedades de Sos objetos 73
Tablas de objetos y propiedades
Sugerir los objetos y las propiedades a utilizar, as como los valores que debern asignarse en
tiempo de diseo a las propiedades, puede ser algo muy complejo si se realiza de manera
narrativa, como tal vez lo haya notado en la prctica 03.03.
Para simplificar el proceso, recurriremos a una alternativa esquemtica: una tabla en donde se
listar lo siguiente:
Contenedor. La identificacin del objeto sobre el que deber trabajar.
Objeto. Indica en qu clase ha de basarse el objeto a integrar a la interfaz.
Propiedad. Indica la propiedad que ha de modificarse en tiempo de diseo.
Valor. Representa el valor que debe asignarse a la propiedad.
Orden. El orden en que se mencionan los objetos en la tabla, es el sugerido para la interfaz.
A esta tabla la llamaremos tabla de objetos y propiedades; vea cmo quedara la tabla de objetos
y propiedades para la aplicacin que hemos estado desarrollando:
Tabla de objetos y propiedades de frmMensaje



Formulario: frmMensaje.frm
Objeto Propiedad Valor
Project

(Name)

Saludo

(Name) frmMensaje
StartUpPosition 2-CenterScreen
Form

Caption Mensaje
(Name) lblTexto
Caption Borre el texto
Label

BorderStyle 1-Fixed Single
(Name) cmdDespliega
Caption &Mostrar Mensaje
CommandButton

Width 1500
(Name) cmdSalir
Caption &Salir
CommandButton

Width 1500





















74 Parte 1: Entorno Integrado de Desarrollo
_________________________________________________
Resumen
En este captulo:
Vimos que algo simple en teora, se puede complicar al especificar el diseo de la aplicacin.
Vimos cmo validar la cantidad y tipos de objeto que se requieren para una aplicacin.
Vimos cmo establecer el valor de la propiedad de identificacin.
Vimos cmo utilizar la ventana Propiedades.
Vimos las convenciones para identificar objetos en Visual Basic, atendiendo a la funcin y el
tipo de control en el que estn basados los mismos.
Vimos cmo establecer valores a las propiedades de apariencia y comportamiento, tanto en
tiempo de diseo como en tiempo de ejecucin.
Vimos cmo se conforma una tabla de objetos y propiedades, herramienta que nos ser de
mucha utilidad en el desarrollo de programas detallados de este libro.
Es importante que comprenda muy bien todos estos puntos antes de continuar con el libro.





















Captulo
4
Escritura del cdigo
de los eventos


Objetivo
Conocer la forma en que el cdigo de programacin es escrito y ejecutado en Visual Basic.

Al finalizar este captulo deber:
Conocer en qu consiste la programacin orientada a eventos
Saber utilizar todas las caractersticas que brinda el editor de cdigo de Visual Basic
Conocer la estructura de los procedimientos de evento
Conocer algunos caracteres con significado especial en la codificacin en Visual Basic
75










76 Parte 1: Entorno Integrado de Desarrollo
Paso 3: Escribir el cdigo de los eventos
Antes de escribir cdigo de eventos, es necesario entender en qu consisten los eventos y
la forma de trabajo orientado a eventos que plantea Visual Basic.
Un evento es una accin reconocida por un formulario o control. Los eventos pueden
ocurrir como el resultado de una accin determinada por el usuario, por el cdigo de
programa, o bien puede ser invocada por el sistema. Puede escribir el cdigo que desee
que se ejecute cuando ocurra un evento; en Visual Basic prcticamente cualquier cosa
est asociado a un evento, lo que le proporciona un control muy estricto sobre todo lo que
sucede en su aplicacin. Si presiona una tecla, es un evento, si deja de presionarla, otro
evento, si hace clic es un evento, si mueve el puntero del ratn, tambin;
como puede ver, casi todo es un evento. La pregunta ahora es: qu desea que ocurra
cuando se presente un evento?
Los siguientes son ejemplos de eventos:
Change Cuando cambia algo en el objeto
Cllck Cuando hace clic en el objeto
DblClick Cuando hace doble clic en el objeto
KeyPress Cuando presiona alguna tecla
MouseMove Cuando mueve el puntero del ratn en un objeto
La programacin en Visual Basic se basa en la existencia y reconocimiento de los
eventos, por lo cual se dice que es una. programacin orientada a eventos. En este tipo
de programacin, la aplicacin responde a los eventos causados por el teclado, ratn o
por el sistema operativo.
===============================================================
Nota: No descarte algunos otros dispositivos de entrada, tales como lectores de cdigo
de barras, tarjetas electrnicas, etctera.
===============================================================
Dependiendo de la clase o el control en el que est basado un objeto, sern los eventos
disponibles para dicho objeto.
El cdigo de una aplicacin de Visual Basic se divide en bloques menores llamados
procedimientos, que no son otra cosa que un conjunto de rdenes que se ejecutan de
manera secuencial, que tienen un nombre, un principio y un fin. Un procedimiento














Captulo 4: Escritura del cdigo de los eventos 77
de evento es el procedimiento que se ejecutar para cuando a un objeto le suceda un evento.
Como vimos en el captulo anterior, las propiedades deben asociarse al objeto al que pertenecen
(Objeto. Propiedad); pues bien, de la misma forma, los eventos deben asociarse al objeto al que le
suceden o afectan. Una representacin ptima sera:
Objeto_Evento
Ejemplo:
CmdDespliega_Click
Volviendo a los requerimientos del ejemplo que nos ha acompaado en los primeros captulos de este
libro, necesitamos de la aplicacin lo siguiente:
Hacer clic en el botn de comando Mostrar Mensaje debe provocar que en la etiqueta que sirva para
mostrar el mensaje aparezca Bienvenido a Visual Basic!!!
Hacer clic en el botn de comando Salir debe provocar la salida de la aplicacin (terminacin de la
ejecucin).
La figura 4.1 muestra cmo se manejara el cdigo en Visual Basic:
















78 Parte 1: Entorno Integrado de Desarrollo
Analicemos la estructura de los procedimientos de evento. Tomaremos el procedimiento
que se ejecutar cuando haga clic en el objeto cmdDespliega (vea la figura 4.2).
Se ve simple. Analicmoslo.

Todos los procedimientos de evento tienen un inicio (Sub) y un fin (End Sub). El
inicio y el fin delimitan la totalidad del cdigo que se va a ejecutar cuando suceda el
evento.
El evento Click existe para todos los objetos que lo permiten. Por tal motivo, es
necesario identificar a qu objeto le sucede el evento.

El nombre del procedimiento de evento siempre estar compuesto por el nombre del
objeto ...
... y el nombre del evento, separados por un carcter de subrayado.
Todas las lneas de cdigo que se encuentren entre el inicio y el fin del procedi-
miento de evento se llama cdigo de evento. El cdigo de evento es lo que se ejecutar
de manera secuencial en el momento en que sucede un evento.











Captulo 4: Escritura del cdigo de los eventos 79

===============================================================
Nota: Es posible que antes de la palabra Sub, en el inicio del procedimiento aparezca
automticamente Private o Public, que indica el alcance del procedimiento.
Analizaremos posteriormente el alcance de los procedimientos.
===============================================================

Todo el cdigo debe encontrarse en el rea de declaraciones generales, procedimientos
de usuario o procedimientos de evento. Si agrega cdigo fuera de cualquiera de estas
zonas, nunca se ejecutar. Por ejemplo:
Sub cmdDespliega_Cllck()

LbITexto.Caption = " Bienvenido a Visual Basic! ! !
End Sub
frmMensaje.Caption = "Bienvenida"

Sub cmdSalir_Cllck()

End
End Sub
La lnea frmMensaje.Caption = "Bienvenida" no se ejecutar nunca, ya que no forma
parte del cdigo de evento de ningn procedimiento.

El editor de cdigo de Visual Basic
Visual Basic posee una poderosa herramienta para editar cdigo; entre las ventajas del
editor podemos mencionar las siguientes:
Clasificacin de elementos por colores que le permiten identificar los elementos del
programa.
Reconoce los objetos y asiste en el uso de propiedades y mtodos.
Interpreta el lenguaje mientras se escribe el cdigo; detecta errores de sintaxis al
momento de editar.
Posee ayuda interactiva y contextual.






80 Parte 1: Entorno Integrado de Desarrollo
Antes de ver las posibilidades de edicin, es necesario que comprendamos que un
lenguaje de programacin siempre tiene reglas que determinan su estructura, tanto de
forma como de significado:
Reglas de sintaxis (o sintcticas): Determinan la nica forma de manifestar ins-
trucciones y expresiones, correctas y completas.
Reglas de semntica (o semnticas): Determinan la validez del uso de expre-
siones dentro de una sintaxis correcta. El cumplimiento de las reglas semnticas
por lo general se ve en tiempo de ejecucin, cuando se sabe el significado de las
expresiones.


===============================================================
Nota: Por expresin se debe entender todo valor o referencia de un valor:
"A" & "B" (concatenacin) es una expresin de tipo carcter que equivale a
"AB".
20/5 (divisin) es una expresin numrica que equivale a 4.
5 > 3 (comparacin) es una expresin lgica que es True (verdadera).
===============================================================

Es importante comprender estos dos conceptos en virtud de que los errores en Visual
Basic sern violaciones a las reglas sintcticas o semnticas. Los errores de sintaxis no
deben preocuparle, ya que Visual Basic los reconoce en el mismo instante en que los
comete y le sugiere corregirlos, pero los errores de semntica pueden convertirse en
verdaderos dolores de cabeza, ya que son difciles de identificar; es una buena prctica
que documente sus desarrollos a efecto de evitar errores.
En Visual Basic slo podr incluir como cdigo instrucciones y funciones del lenguaje,
funciones y procedimientos definidos por el usuario, operadores y expresiones, cuidando
siempre la sintaxis y la semntica.
Al editor de cdigo de Visual Basic se le llama ventana Cdigo; sta se puede utilizar
para escribir, mostrar y editar cdigo de Visual Basic. El cdigo de Visual Basic est
asociado a un mdulo, por lo que puede abrir tantas ventanas Cdigo como mdulos
tenga, lo que facilita ver el cdigo en diferentes formularios o mdulos y copiarlo y
pegarlo entre ellos. En estos momentos, en su proyecto slo tiene un mdulo creado, que
es el formulario mismo.
Puede abrir una ventana Cdigo:

Utilizando la ventana Explorador de proyectos, seleccionando un formulario o mdulo
y haciendo clic en el botn Ver cdigo.
Haciendo doble clic en un control o formulario.











Captulo 4: Escritura del cdigo de los eventos 81
Seleccionando el men Ver - Cdigo.
Presionando F7.
>> Cmo abrir la ventana Cdigo. [04.01]
A continuacin aprender cmo abrir la ventana Cdigo.
1. En la ventana Explorador de proyectos seleccione el mdulo frmMensaje.
2. Haga clic en el botn Ver cdigo
3. Presione Alt+F4 para cerrar la ventana Cdigo.
4. Presione la tecla F7.
5. Presione Alt+F4 para cerrar la ventana Cdigo.
6. Seleccione el men Ver - Cdigo.
7. Presione Alt+F4 para cerrar la ventana Cdigo.
8. Haga doble clic en el objeto cmdDespliega.
9. Presione la tecla Ctrl+F4 para cerrar la ventana Cdigo.
Elementos de la ventana Cdigo
La ventana Cdigo est compuesta de los siguientes elementos:
Cuadro Objeto, Muestra el nombre del objeto seleccionado. Haga clic en la flecha
situada a la derecha del cuadro de lista para mostrar una lista de todos los objetos
asociados con el formulario.
Cuadro Procedimiento/Evento. Presenta una relacin de todos los eventos re-
conocidos por Visual Basic para un formulario o control mostrado en el cuadro
Objeto. Cuando seleccione un evento, el procedimiento de evento asociado con ese
evento se muestra en la ventana Cdigo.
Barra de divisin. Si arrastra hacia abajo esta barra, la ventana Cdigo se divide en
dos paneles horizontales, cada uno de los cuales tiene sus propias barras de
desplazamiento. Puede ver diferentes partes del cdigo a la vez. La informacin
que aparece en los cuadros Objeto y Procedimiento/Evento se aplica al cdigo del
panel que tiene el enfoque. Si arrastra la barra a la parte superior o inferior de la
ventana o hace doble clic en ella, se cierra un panel.
Botn Ver procedimiento. Muestra el procedimiento seleccionado. En la
ventana Cdigo slo se muestra un procedimiento a la vez.















82 Parte 1: Entorno integrado de Desarrollo
Botn Ver mdulo completo. Muestra todo el cdigo del mdulo.
La figura 4.4 muestra dnde se localizan cada uno de los componentes.

>> Cmo manejar los componentes de la ventana Cdigo. [04.02]
A continuacin aprender a manejar los elementos de la ventana Cdigo.
1. Seleccione el objeto frmMensaje.
2. Presione la tecla F7.
3. Haga clic en el botn Ver procedimiento. Observe que solamente se mostrar el
procedimiento que tiene el enfoque.

===============================================================
Nota: En Visual Basic, aquel objeto o elemento que posee el cursor (que puede res-
ponder al teclado) tiene el enfoque.
===============================================================


















Captulo 4: Escritura del cdigo de los eventos 83
4. Haga clic en el botn Ver mdulo. Se mostrarn todos los procedimientos defi-
nidos hasta el momento.
5. En el cuadro Objeto seleccione el objeto cmdSalir.
6. En el cuadro Procedimiento/Evento seleccione LostFocus.
7. Arrastre la barra de divisin hasta que quede a la mitad de la ventana Cdigo.
Debe verse aproximadamente como se muestra en la figura 4.5.



8. Puede editar en cualquiera de las dos mitades. Esta caracterstica es muy
valiosa en proyectos con cdigo muy extenso. Haga doble clic en la barra de
divisin para eliminarla.
9. Marque todo el cdigo que tenga en la ventana Cdigo y presione Supr para
eliminarlo. La ventana Cdigo debe quedar sin contenido.
10. Presione Alt+F4 para cerrar la ventana Cdigo.

















84 Parte 1: Entorno Integrado de Desarrollo

===============================================================
Nota: La ventana Cdigo tiene la misma funcionalidad que cualquier editor de texto
basado en Windows, por lo que seleccionar texto, eliminar, copiar, pegar, reemplazar,
etctera, se realiza de la misma forma que si lo estuviera haciendo en Word, WordPad o
Notepad.
===============================================================

Caracteres especiales
Antes de que comencemos con la edicin de cdigo, es recomendable que sepa la exis-
tencia de caracteres especiales con significado en el lenguaje de Visual Basic.
Apstrofe (). Todo el cdigo que contine en la misma lnea (hasta encontrar fin de
lnea) ser interpretado como comentario.
Comillas dobles ( ). Siempre engloban una expresin de tipo carcter, por lo que
siempre que abra unas comillas, tendr que cerrarlas.
Carcter de subrayado ( _ ). Es el continuador de lnea de Visual Basic. Antes de
ste siempre debe haber cuando menos un espacio en blanco, y despus de ste nunca
debe haber nada, o de lo contrario se generar un error.


Asistencia en la edicin de cdigo
Una de las capacidades ms sobresalientes de Visual Basic es el soporte a la edicin que
da la ventana Cdigo. Cuando edita cdigo en algn procedimiento, se dice que est en
modo de edicin de cdigo. El soporte se brinda de varias maneras:
Manejo de colores. Permite identificar por colores lo que se est editando; las
palabras reservadas e instrucciones de Visual Basic aparecern en azul, los errores de
sintaxis que Visual Basic detecte en tiempo de edicin aparecern en rojo, las
expresiones aparecern en negro y los comentarios que se hagan en el cdigo
aparecern en verde; lo que aparezca en verde carecer de significado para el
compilador.
Sugerencia de propiedades y mtodos en modo de edicin. Visual Basic sugiere qu
propiedades y mtodos son aplicables para un objeto determinado, reconocido por el
simple hecho de formar parte de un formulario.
Sugerencia de sintaxis. Muestra en modo de edicin de cdigo la sintaxis correcta de
la funcin o instrucciones que est a punto de escribir.
Ayuda contextual. Proporciona ayuda contextual sobre lo que est tecleado, siempre
y cuando exista ayuda disponible.
Formato de texto. Aplica autoformato al cdigo, a efecto de que sea ms legible y
estndar en cuanto al estilo.












Captulo 4: Escritura del cdigo de los eventos 85
>> Manejo de colores y autoformato al editar cdigo. [04.03]
A continuacin aprender a utilizar las formas de asistencia en la edicin de cdigo que
proporciona Visual Basic.
1. Haga doble clic en el objeto cmdDespliega. Visual Basic determina que el proce-
dimiento de evento ms comn para un objeto basado en el control
CommandButton es Click, por lo mismo procede a editar de manera
predeterminada dicho procedimiento.
De qu color estn las palabras Sub y End Sub, y por qu tienen ese color?
Color: ______________
Por qu?
________________________________________________________

===============================================================
Nota: En Visual Basic una lnea de cdigo no es evaluada y aceptada hasta que cambia
de lnea, ya sea utilizando las flechas de direccin o la tecla Intro.
===============================================================

2. Teclee lo siguiente como cdigo de evento (el primer carcter es un apstrofe).
' Instruccin que emite sonido por el altavoz
De qu color se puso la lnea y por qu tiene ese color?
Color: ______________
Por qu?
________________________________________________________
3. Teclee la siguiente lnea de cdigo debajo del comentario que acaba de escribir
(escrbalo todo en maysculas).
BEEP

Aplic Visual Basic autoformato a su instruccin?. ______________________









86 Parte 1: Entorno Integrado de Desarrollo
Hasta el momento su cdigo debe lucir como se muestra en la figura 4.6.

>>Compilacin y deteccin de errores en modo de edicin. [04.04]
1. Contine editando el cdigo; escriba la siguiente lnea (escriba hasta el punto, pero
NO ACEPTE LA LNEA TODAVA):
MiObjeto.

Existe algn objeto en su formulario llamado MiObjeto?. _______________
Al teclear el punto Visual Basic respondi de alguna forma?. _______________


















Captulo 4: Escritura del cdigo de los eventos 87

2. Ahora s, acepte la lnea (utilice las flechas de direccin o Intro para pasar a la siguiente
lnea). Visual Basic detecta un error de sintaxis y enva un error, como se muestra en la
figura 4.7. Observe que la lnea que causa el error se pone en rojo; cualquier lnea en
rojo en modo de edicin de cdigo es sinnimo de problemas.


3. Elimine la lnea que causa el problema.
>> Sugerencia de propiedades y mtodos en modo de edicin. [04.05]
1. A continuacin teclee una lnea de cdigo, pero hgalo en partes, sin presionar
Intro y sin cambiarse de lnea, comenzando con lo siguiente:
LblTexto.



















88 Parte 1: Entorno Integrado de Desarrollo


Observe que al llegar al punto, Visual Basic determina que efectivamente existe un
objeto llamado lblTexto, identifica en qu tipo de control est basado el objeto
(Label) y muestra todas las propiedades y mtodos vlidos para dicho control (vea la
figura 4.8) a travs de un cuadro de lista combinado de sugerencias. Vea que de
momento no est seleccionada ninguna propiedad o mtodo de la lista.
2. En cuanto comience a teclear un poco ms, alfabticamente se ubicar en la lista la
propiedad o mtodo que corresponda con lo que est tecleando (vea la figura 4.8).


Proyect
3. Contine tecleando en la misma lnea lo siguiente:
lblTexto.Ca
4. Observe que el simple hecho de comenzar a teclear la continuacin de la lnea,
encuentra la probable palabra que desea. Teclee slo las letras que requiera basta
encontrar la palabra Caption.
5. Una vez que est seleccionada la opcin que desea, en este caso Caption (vea la
figura 4.9), presione la barra espaciadora y Visual Basic colocar el nombre de la
propiedad por usted. Quiz en propiedades como Top o Left le resulte ms












Captuio 4: Escritura del cdigo de los eventos 89

simple teclear de manera completa el nombre de la propiedad; sin embargo, algunos
objetos tienen propiedades de nombre muy largo, como StartUpPosition, en donde
una ayuda no est de ms. Un beneficio adicional: dejar que Visual Basic le asista en el
nombre de las propiedades le garantiza que no tendr errores de sintaxis, debido a
nombres de propiedades mal escritos.


6. Termine de capturar, de tal forma que la lnea completa quede como se muestra a
continuacin:
lblTexto.Caption = "Bienvenido a Visual Basic!!!"
7. Borre todo el cdigo que tenga tecleado y cierre la ventana Cdigo.


















90 Parte 1: Entorno Integrado de Desarrollo
El evento predeterminado de los objetos
Como puede ver. Visual Basic y su editor de cdigo permiten una interaccin intuitiva
entre los objetos y lo que puede hacer con ellos; ya comprob que cada objeto, al
momento de hacer doble clic en l en tiempo de diseo, activa la ventana Cdigo en el
procedimiento de evento que Visual Basic considera como el ms usual, a lo que
llamaremos evento predeterminado.
Por ejemplo, cada objeto creado basado en el control CommandButton tendr como
evento predeterminado al evento Click; para qu puede servir un botn, si no es para
hacer clic en l?
No obstante, en ocasiones no desea editar el evento predeterminado. Para editar cualquier
otro evento, puede utilizar el cuadro Objeto (la lista desplegable que aparece a la
izquierda, debajo de la barra de ttulo de la ventana Cdigo) y del cuadro Proce-
dimiento/Evento (la lista desplegable que aparece a la derecha, debajo de la barra de
ttulo de la ventana Cdigo). Puede, sin necesidad de estar haciendo doble clic en los
objetos que tiene en modo de diseo, editar todos los procedimientos de todos los objetos
disponibles en la interfaz.
>> Uso de los cuadros Objeto y Evento para la seleccin y codificacin de un proce-
dimiento de evento determinado. [04.06]
1. Haga doble clic en el objeto cmdDespliega.
Qu procedimiento de evento se puso en modo de edicin?


2. Escriba el siguiente cdigo en dicho procedimiento:
Private Sub cmdDespliega_Click()
' Instruccin que emite sonido por el altavoz
Beep
' Cambia en modo de ejecucin la propiedad
' Caption del objeto lblTexto

lblTexto.Caption = "Bienvenido a Visual Basic!!!"
End Sub








Captulo 4: Escritura del cdigo de los eventos 91

3. Despliegue la lista del cuadro Procedimiento/Evento; aparecern los eventos
disponibles para el objeto cmdDespliega. Seleccione el evento GotFocus. El
procedimiento deber agregarse en la ventana Cdigo.
4. Despliegue nuevamente la lista del cuadro Procedimiento/Evento.
Qu diferencia existe, visualmente, entre Cllck y GotFocus?



5. Seleccione nuevamente GotFocus y escriba el siguiente cdigo (asegrese de dar
entrada a la lnea de cdigo, tecleando Intro al final de la lnea):

Private Sub cmdDespliega_GotFocus()
' Comentario de prueba
End Sub
6. Despliegue nuevamente la lista del cuadro Procedimiento/Evento. Debe verse como
se muestra en la figura 4.10.



















92 Parte 1: Entorno Integrado de Desarrollo
Qu significa si un nombre de evento aparece en negritas?



7. Cierre la ventana Cdigo y seleccione el objeto cmdDespliega (haciendo clic en
l).
8. Abra la ventana Cdigo (F7).
9. Despliegue la lista del cuadro Objeto. Seleccione lblTexto.
Fue necesario hacer doble clic en el objeto lblTexto, en tiempo de diseo en el for-
mulario para poder editar su cdigo?
____________________
10. Cierre la ventana Cdigo.
Por el hecho de haber solicitado editar cdigo para el objeto lblTexto, el objeto
cmdDespliega dej de estar seleccionado?
____________________
>>Uso del carcter de subrayado y la ayuda contextual en modo de edicin. [04.07]
1. Ya debe tener tecleadas todas las lneas del procedimiento cmdDespliega _Click
sin errores. Colquese en la ltima lnea que tecle, exactamente despus del signo de
igual ( = ) y antes de las comillas, teclee un espacio en blanco, seguido de un carcter
de subrayado (_), y despus teclee Intro. El continuador de lnea hizo su trabajo.
2. Ahora colquese despus la palabra "Bienvenido", inserte un espacio, teclee un
carcter de subrayado ( _ ) y despus teclee Intro. Vaya una lnea ms abajo en el
cdigo. Generar error, un continuador de lnea nunca debe dejar incompleta




















Captulo 4: Escritura del cdigo de los eventos 93
una expresin. Corrija el problema eliminando el continuador de lnea que caus el
error.
3. Su procedimiento debi haber quedado como se muestra a continuacin:
Private Sub cmdDespliega_Click()
' Instruccin que emite sonido por el altavoz
Beep
' Cambia en modo de ejecucin la propiedad
' Caption del objeto lblTexto
lblTexto.Caption = _
"Bienvenido a Visual Basic!!!"
End Sub


===============================================================
Lo inesperado: En la figura 4.3 se mostr el esquema de un procedimiento de
evento. En dicha figura no se hace referencia a la palabra Private, que como vemos en
los subsecuentes ejemplos, s aparece. Esa palabra se agrega de manera predeterminada e
indica el alcance del procedimiento; no es obligatoria. Con o sin la indicacin Private,
el procedimiento funciona; quisimos dejarla para que no se sorprenda cuando la vea.
===============================================================
4. En el cuadro Objeto seleccione el objeto cmdSalir y en el cuadro Procedimien-
to/Evento seleccione Click. Escriba el siguiente cdigo:

Private Sub cmdSalir_Click()

End
End Sub
5. Para qu sirve la instruccin End? Para saberlo, coloque el cursor exactamente sobre la
palabra End( entre la "E" y la "n" estara bien). Presione F1. Aparecer la ventana de
ayuda de Visual Basic con la ayuda relativa a la orden. Si tiene dudas de alguna
instruccin o funcin, esta ayuda contextual puede ser de gran utilidad. Cierre la
ventana de ayuda presionando Alt+F4. En este caso, End termina con la ejecucin de
la aplicacin.







94 Parte 1: Entorno Integrado de Desarrollo
6. Estando en la ventana Cdigo, presione Alt+F4 para cerrar dicha ventana.
Una de las cosas ms importantes al estar codificando en Visual Basic es la de dar mr-
genes a la izquierda, a lo que se llama sangra. Vea lo siguiente:


Observe que la distribucin A deja en claro cul es el cdigo de evento, dnde inicia y
dnde termina el procedimiento. La distribucin B es ms confusa, y una vez teniendo ms
procedimientos y estructuras de control en el cdigo, el problema se complica.
Al estar detallando los ejemplos en este libro, pondremos las tabulaciones ideales;
trate de escribir el cdigo tal y como aparece en el texto. Aunque en este libro tambin
ponemos la lnea de inicio y de conclusin del procedimiento (Sub, EndSub), usted no
tendr que teclear esas lneas, pues Visual Basic las escribe automticamente.
Convenciones para la codificacin
Hasta ahora, en el libro ha visto que para codificar un procedimiento de evento, per-
teneciente a un objeto, decimos "seleccione el objeto y presione F7, o bien haga doble clic
en el objeto"; tambin podemos decir "abra la ventana Cdigo y en el cuadro Objeto
seleccione el objeto que desea codificar, despus en el cuadro Procedimiento/Evento,
seleccione el evento que desea codificar".
Suponga que deseamos editar en el procedimiento cmdSalir_click, por lo cual
diramos "seleccione el objeto cmdSalir y presione F7, o bien haga doble clic en el
objeto cmdSalir en tiempo de diseo en el formulario"; tambin podemos decir "abra la
ventana Cdigo, despliegue el cuadro Objeto, seleccione el objeto cmdSalir y en el
cuadro Procedimiento/Evento, seleccione Click". Qu tedioso! Es ms fcil hacerlo
que leerlo.
Puesto que en este libro codificar todo el tiempo y seguir siempre estos procedimientos,
es recomendable que establezcamos una convencin para decir lo mismo, pero ms fcil.
Qu le parece lo siguiente?

















Captulo 4: Escritura del cdigo de los eventos 95
Editar cdigo: cmdSalir, Evento: Clck.
Con ello asumimos que no tendremos que repetir que en caso de que no se encuentre en la
ventana Cdigo, es necesario que la abra; asimismo, no ser necesario que le digamos a
detalle cmo llegar a editar el procedimiento de evento mencionado para el objeto referido.
Estamos seguros de que est de acuerdo con nosotros en que entender de una vez esto le
puede ahorrar mucha lectura de lo que ya resulta obvio. Despus de todo, siempre sabr
qu objeto es el que desea codificar, y en qu evento.
Tambin sabemos que todo procedimiento tiene inicio y fin:
Private Sub cmdSalir_Click()
End
End Sub
Por lo tanto no es necesario que coloquemos las lneas de inicio y fin todo el tiempo; por
ejemplo, para obtener el cdigo anterior sera suficiente lo que se muestra a continuacin:
Editar cdigo: cmdSalir, Evento: Click.
End

Existen algunas excepciones que es recomendable precisar para el funcionamiento ptimo
de esta convencin; por ejemplo, su formulario se llama frmMensaje, y es el objeto
contenedor de todos los dems objetos. Si lo busca en el cuadro Objeto de la ventana
Cdigo, se topar con la sorpresa de que es el nico objeto de su interfaz que no aparece.
Esto se debe a que dicho objeto acta como contenedor del mdulo, y Visual Basic lo
llama, para efecto de los eventos, simplemente Form, llmese como se llame el objeto
Form.
Tambin es importante que sepa que s es posible editar cdigo fuera de un procedimiento,
siempre y cuando se escriba al principio de toda codificacin, en una parte conocida como
declaraciones generales.














96 Parte 1: Entorno Integrado de Desarrollo
Para editar las declaraciones generales podemos decir: "escriba en las declaraciones
generales el siguiente cdigo", o bien. Editar cdigo: (General) Evento: (Declarations).
Tambin ser necesario, con aquellos procedimientos muy largos, agregar cdigo despus
de la ltima lnea que hayamos codificado; para ello haremos la referencia:
Continuar editando cdigo: cmdSalir, Evento: Click.
Que indica que continuaremos codificando despus de la ltima lnea que hayamos
codificado del procedimiento en cuestin.
En caso de que necesitramos agregar cdigo en una parte que no est despus de la ltima
lnea codificada, haremos la siguiente referencia:
Modificar cdigo: cmdSalir, Evento: Click.
Private sub cmdSalir_Click( )
MsgBox "Muchas gracias por utilizar este programa"
End
Se hace la referencia del evento a modificar, se escriben las lneas que se mantienen
intactas en letra normal, y lo que se modifica se pone en negritas.
Especificaciones de codificacin
Ser la forma en que se codificarn los programas en este libro. Las especificaciones de
codificacin estarn integradas por las siguientes partes:
Identificacin del mdulo (formulario) sobre el que hay que trabajar.
Especificacin de cdigo a agregar. Abrir la ventana Cdigo, seleccionar el objeto del
que desea editar un procedimiento de evento, a travs del cuadro Objeto; seleccionar el
evento en el que desea agregar cdigo de evento, a travs del cuadro
Procedimiento/Evento. Escribir el cdigo de evento.
Especificacin de cdigo a editar. Seleccionar el procedimiento de evento que est
inconcluso, y continuar con la codificacin.
Especificacin de cdigo a modificar. Seleccionar el procedimiento de evento que se va a
modificar, haciendo los cambios deseados.
















Captulo 4: Escritura del cdigo de los eventos 97
En nuestro ejemplo, la codificacin quedara cmo se muestra a continuacin:
Codificacin de frmMensaje
Editar cdigo: cmdDespliega, Evento: Click.

Instruccin que emite sonido por el altavoz
Beep
lblTexto.caption = _
" Bienvenido a Visual Basic!!!"
Editar cdigo: cmdSalir, Evento: Click.
End

Qu hacer con los procedimientos de evento sin cdigo?
Visual Basic asume muchas cosas con tal de facilitarle el trabajo. Por ejemplo, ya vimos
que al hacer doble clic en modo de diseo en un botn de comando, automticamente se
abre la ventana Cdigo sobre el procedimiento de evento Click para dicho objeto; Visual
Basic hace esto porque asume que la tarea ms comn que se hace con un botn de
comando es hacer clic en l para desencadenar una tarea.
Cada objeto, dependiendo del control sobre el que est basado, tendr un procedimiento de
evento predeterminado que se editar con el simple hecho de que invoque la ventana
Cdigo cuando el objeto est seleccionado.
Sin embargo, hay ocasiones en las que no se desea editar un determinado procedimiento
que Visual Basic coloca de manera predeterminada al invocar la ventana Cdigo. Quiz
resulte molesto tener que eliminar procedimientos que usted no haya agregado La figura
4.5 muestra muchos procedimientos que realmente no se utilizan.
No se preocupe por aquellos procedimientos de evento que no tienen cdigo de evento
(procedimientos que entre el inicio y fin del procedimiento no tienen nada de cdigo). Para
visual Basic es como si no existieran.
Al momento de ejecutar la aplicacin. Visual Basic detectar que no tienen cdigo de
evento, y proceder a borrarlos automticamente.









98 Parte 1: Entorno Integrado de Desarrollo
__________________________________________________________________________
Resumen
En este captulo:
Vimos qu son los eventos y los procedimientos de evento. ,
Vimos qu nomenclatura se aplica a los procedimientos de evento.
Vimos la utilidad de las herramientas que estn integradas en la ventana Cdigo.
Vimos los elementos que componen a la ventana Cdigo.
Vimos qu caracteres especiales tienen significado particular en la codificacin en Visual
Basic.
Vimos la asistencia en modo de edicin, mediante colores.
Vimos la asistencia en modo de edicin, a travs de sugerencias de propiedades y
mtodos.
Vimos la importancia de la distribucin del cdigo para que ste sea legible.
Establecimos convenciones para utilizar en el resto del libro.
Es muy importante que domine todos los puntos antes mencionados, para que el proceso de
codificacin sea lo ms asistido posible.

Algunas respuestas a los ejercicios
[04.03] Manejo de colores y autoformato al editar cdigo.
1. Color: Azul, por qu? Porque son palabras reservadas de Visual Basic.
2. Color: Verde, por qu? Porque es un comentario, sin significado para el compilador de
Visual Basic.
3. S lo aplic.
[04.04] Compilacin y deteccin de errores en modo de edicin.
1. No existe ningn objeto llamado MiObjeto. Al llegar al punto despus de MiObjeto,
Visual Basic no respondi de ninguna forma.






















Captulo 4: Escritura del cdigo de los eventos 99
[04.06] Uso de los cuadros Objeto y Evento para la seleccin y codificacin de un
procedimiento de evento determinado.
1. Click
4. Click est en negritas y GotFocus no lo est.
6. Si est en negritas indica que el evento para el objeto en cuestin tiene cdigo escrito
dentro de s.
9. No
10. No



















































100
























































Captulo
5
Cmo guardar
y ejecutar
aplicaciones
Objetivos
Conocer la forma en que se guardan las aplicaciones desarrolladas en Visual Basic,
cmo se ejecutan para su depuracin y cmo compilarlas para generar un programa
ejecutable.
Al finalizar este captulo deber:
Saber cmo guardar aplicaciones
Saber de qu forma se almacena su trabajo en Visual Basic
Saber cmo ejecutar sus aplicaciones y depurarlas
Saber cmo compilar las aplicaciones para generar un programa ejecutable
(EXE)
Despus de este captulo tendr todos los elementos para desarrollar aplicaciones en
Visual Basic de manera rpida. Preprese, porque a partir de este captulo adquirir la
destreza en la programacin en Visual Basic, propia del que sabe.
101






102 Parte 1: Entorno Integrado de Desarrollo
Cmo se almacena su trabajo en Visual Basic?
Si est acostumbrado a trabajar con programas como Word o PowerPoint, sabe que al
guardar su trabajo, ste es almacenado en un solo archivo de extensin doc o ppt,
respectivamente. Como ya sabr gracias a su experiencia en el manejo de Windows,
hay archivos de extensin especfica que se identifican como trabajo propio en un
programa determinado.
Visual Basic tambin tiene sus archivos especficos, aunque su conceptualizacin no
es tan primaria y simple como en el caso de Word o PowerPoint. Visual Basic tiene
muchas variantes que pueden darse en la creacin de los proyectos, tan es as que
algunos recursos tiles para una aplicacin no lo son para otras. La consecuencia
directa de este hecho es la divisin del trabajo en archivos de diferente tipo.
Cuando desarrolla una aplicacin en Visual Basic, trabaja con un archivo de proyecto
para administrar todos los diferentes archivos que se crean. Un proyecto puede
constar de:
Un archivo de proyecto que realiza el seguimiento de todos los componentes (.vbp).
Un archivo para cada formulario (.frm).
Un archivo de datos binarios para cada formulario que contiene datos sobre pro-
piedades de controles del formulario (.frx). Estos archivos no se pueden mo-
dificar y son generados automticamente por cualquier archivo de formulario
(.frm) que tenga propiedades en formato binario, como Picture o Icon.
Opcionalmente, un archivo para cada mdulo de clase (.cls).
Opcionalmente, un archivo para cada mdulo estndar (.bas).
Opcionalmente, uno o ms archivos con controles ActiveX (.ocx).
Opcionalmente, un nico archivo de recursos (.res).
El archivo de proyecto es simplemente una lista de todos los archivos y objetos aso-
ciados con el proyecto, as como informacin acerca de las opciones de entorno esta-
blecidas. Esta informacin se actualiza cada vez que se guarda el proyecto.
Todos los archivos y objetos presentes en un proyecto se pueden compartir con otros
proyectos, lo que le da a Visual Basic una facilidad de reuso de cdigo, muy impor-
tante para aquellas organizaciones que tienen una forma estndar de trabajar y que no
desean invertir tiempo en desarrollar lo ya desarrollado.




Captulo 5: Cmo guardar y ejecutar aplicaciones 103
Cmo guardar aplicaciones
Una vez que ha creado la interfaz, asignado propiedades a los objetos y agregado el
cdigo de los eventos, lo recomendable es que guarde su trabajo en un medio de alma-
cenamiento donde se pueda recuperar posteriormente. Mientras no guarde su trabajo,
ste se encontrar en la memoria RAM, que por su naturaleza temporal no es con-
fiable; una interrupcin en la energa elctrica o un error de la estacin de trabajo
pueden ocasionar la prdida de todo el trabajo que ha estado realizando.
Para almacenar su trabajo. Visual Basic tiene una jerarqua de contenedores, formada
por lo siguiente:
Mdulos. El cdigo en Visual Basic se almacena en mdulos; hay 3 tipos de m-
dulos: formulario, estndar y de clase. En los mdulos se pueden colocar decla-
raciones de constantes, tipos, variables y procedimientos de bibliotecas de vnculos
dinmicos (DLLs) al nivel de mdulo; tambin pueden estar contenidos los
procedimientos, en cualquiera de sus modalidades (Sub, Function o
Property). Un mdulo siempre est asociado a un proyecto de Visual Basic;
la forma ms comn de encontrar un mdulo en un proyecto es en forma de
formulario.
Proyectos. Es uno de los denominados objetos genricos de coleccin; estos objetos
permiten agrupar diversos elementos, mantenindolos relacionados como un todo.
En el caso de los proyectos de Visual Basic, permiten agrupar todos los mdulos
que componen una determinada aplicacin. Un proyecto en Visual Basic siempre
contiene uno o ms mdulos.
Grupos de proyectos. Es una coleccin de proyectos. Consiste en un archivo que
relaciona como miembros de un todo a varios proyectos de Visual Basic. El grupo
de proyectos no es un objeto, y puede o no existir.
La figura 5.1 muestra la jerarqua de contenedores que existe en Visual Basic. Consi-
dere lo siguiente: para poder utilizar un mdulo, deber pertenecer a un proyecto; un
proyecto sin mdulos no tiene razn de ser, por lo tanto, los mdulos y los proyectos
son inseparables. El grupo de proyectos slo existe cuando dos o ms proyectos coin-
ciden en una sesin de trabajo de Visual Basic.

=============================================================
Nota: Un proyecto en Visual Basic (.vbp) tiene sus propiedades especficas, por lo
que al seleccionarlo en la ventana Explorador de proyectos, la ventana Propiedades
mostrar las que le corresponden. No son muchas, de hecho un proyecto tiene una
sola propiedad (Name), que permite referir al proyecto con un nombre lgico, evitan-
do la necesidad de hacer referencia al nombre fsico del archivo que se guarda (.vbp).


104 Parte 1: Entorno Integrado de Desarrollo
No descarte la posibilidad de que en versiones posteriores de Visual Basic, el nmero
de propiedades para un proyecto se incremente.


Los mdulos y proyectos son tan dependientes entre s que cuando guarda por primera
vez su trabajo, se sigue la secuencia que se describe a continuacin:
Visual Basic le pide que guarde el mdulo, porque sin mdulo no existe proyecto.
Visual Basic le pide que guarde el proyecto, porque sin proyecto el mdulo no se
puede ejecutar.
Por ltimo. Visual Basic le pide que guarde el grupo de proyectos. Esto es opcional
y slo es posible en caso de que su aplicacin tenga ms de un proyecto abierto
en una misma sesin de Visual Basic.
Existen otros objetos contenedores que no fueron mostrados en la figura 5.1, como los
objetos basados en los controles Frame e Image; slo mencionamos el grupo,
proyecto y formulario porque son los nicos manejados a nivel archivo del sistema
operativo.
Frame e Image pueden contener objetos, pero stos a su vez ya estn dentro de un
formulario y no requeriran un archivo para su existencia.
>> Archivos de trabajo en Visual Basic. [05.01]
A continuacin aprender qu archivos almacenan su trabajo en Visual Basic y en qu
orden se guardan. Comprobar que siempre, y como mnimo, se guardar un formu-






Captulo 5: Cmo guardar y ejecutar aplicaciones 105
lario y un proyecto; en caso de que existan ms de dos proyectos en la sesin de tra-
bajo, opcionalmente podr guardar un grupo de proyectos.
1. Si tiene abierta una sesin en Visual Basic, cirrela utilizando el men Archivo
Salir, o bien presionando Alt+Q.
2. Inicie nuevamente sesin en Visual Basic y genere un nuevo proyecto EXE
estndar.
3. Observe la ventana Explorador de proyectos; en la jerarqua est representado un
solo proyecto (Proyecto1), mismo que contiene un solo formulario (Form1).
Qu dice la barra del ttulo de la ventana Propiedades?


4.. Sabemos que al proyecto le corresponde un archivo de extensin .vbp, y al for-
mulario un archivo de extensin .frm.
=============================================================
Nota: Visual Basic asigna nombres predeterminados a los formularios (Formn.frm),
a los proyectos (Proyecton.vbp) y a los grupos (Grupon.vbg), ya que desde el inicio
deben tener un nombre. No utilice estos nombres, ni siquiera como trabajo de prueba;
acostmbrese a asignar sus propios nombres.
Utilizar los nombres predeterminados es inseguro y confuso; considere dichos nom-
bres como reservados para el uso de Visual Basic.
=============================================================
5. Guarde su trabajo por primera vez haciendo clic en el botn Guardar
proyecto de la barra de herramientas.
6. Si es ser la primera ocasin que guarda su proyecto. Visual Basic le preguntar
cmo desea que se llamen sus archivos; actualmente tienen los nombres prede-
terminados que Visual Basic asigna. Guarde sus archivos de prueba en el direc-
torio que corresponde a las prcticas de este captulo (\avbp\cap05\).
7. Aparecer el cuadro de dilogo Guardar archivo como; en Nombre de archivo
escriba frmBorra1 (observe que en el cuadro de texto Guardar como tipo dice
Formulario (*.frm), es decir, primero se guarda el formulario).
8. Despus de guardar el formulario, aparecer el cuadro de dilogo Guardar
proyecto como; en Nombre de archivo escriba Borra1 (observe que en el cuadro
de texto Guardar como tipo dice Proyecto (*.vbp), es decir, despus del
formulario se guarda el proyecto). En este momento ya tiene guardado el formu-
lario y el proyecto, fsicamente, en su computadora.


106 Parte 1: Entorno Integrado de Desarrollo
9. Haga clic en el botn Agregar proyecto EXE estndar.
10. Vea la ventana Explorador de proyectos y observe que se ha agregado a la
jerarqua un nuevo proyecto (Proyecto2) con su formulario correspondiente
(Form1).
Qu dice la barra del ttulo de la ventana Propiedades?


11. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra de
herramientas.
12. Aparecer el cuadro de dilogo Guardar archivo como; en Nombre de archivo
escriba frmBorra2 (observe que en el cuadro de texto Guardar como tipo dice
Formulario (*.frm), es decir, primero se guardan los formularios pendientes de
guardarse).
13. Despus de guardar los formularios pendientes de guardarse, aparecer el cuadro
de dilogo Guardar proyecto como; en Nombre de archivo escriba Borra2
(observe que en el cuadro de texto Guardar como tipo dice Proyecto (*vbp), es
decir, despus de los formularios se guardan los proyectos pendientes de guar-
darse). En este momento ya tiene guardado el formulario y el proyecto que
faltaban de guardarse, fsicamente, en su computadora.
14. A continuacin aparecer la ventana Guardar grupo de proyectos como; en
Nombre de archivo escriba grpBorrar (observe que en el cuadro de texto
Guardar como tipo dice Grupo de proyectos (*.vbg), es decir, al detectar 2 o
ms proyectos en la sesin, Visual Basic procede a guardarlos como grupo).
15. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra
de herramientas.
Ya no aparecen las ventanas de Guardar cmo... Por qu?









Captulo 5: Cmo guardar y ejecutar aplicaciones 107
>> Cmo abrir un proyecto previamente guardado. [05.02]
A continuacin aprender cmo abrir un proyecto existente.
1. Abra un proyecto existente, utilizando el men Archivo - Abrir proyecto, o bien
presionando Ctrl+0.
2. Abra el archivo que se encuentra en el directorio \avbp\c02, llamado Saludo.vbp.
3. Si el formulario no aparece en primera instancia, expanda la jerarqua en la ventana
Explorador de proyectos, hasta que vea el formulario Form1 (frmMensaje).
Haga clic en el botn Ver objeto, de la misma ventana.
Recomendaciones para nombrar archivos en Visual Basic
Actualmente ya sabe cmo guardar su trabajo. Unas ltimas recomendaciones para
nombrar los archivos:
Es recomendable que el archivo de formulario (.frm) se llame igual que la propiedad
Name del formulario que almacena. En nuestro ejemplo, el objeto basado en el
control Form se llama frmMensaje, y por tanto, el archivo de formulario ter-
min llamndose frmMensaje.frm.
Es recomendable que el archivo de proyecto (.vbp) se llame de una forma repre-
sentativa de la aplicacin que contiene. Esto es importante, ya que el proyecto se
compilar para generar un programa ejecutable (.exe), y su nombre debe ser natural
y atractivo.
=============================================================
Nota: Un ejemplo de la conveniencia de la representatividad del nombre del pro-
grama ejecutable es el siguiente: la mayora de los programas instaladores se llaman
Instalar.exe o Setup.exe; el nombre del programa da una idea clara de la funcin que
realizan.
Si el programa instalador se llamara inpvb60.exe (porque es la Instalacin de su
Nuevo Proyecto en Visual Basic 6.0), el nombre sera poco natural y hasta inade-
cuado. El programa ejecutable puede llamarse de manera diferente al proyecto a partir
del cual se genere, pero le sugerimos que no complique las cosas; procure que el
programa ejecutable se llame de la misma forma que el proyecto a partir del cual se
genera. Esto, en ltima instancia, tendr injerencia en la forma en que el proyecto sea
nombrado.
=============================================================
Es recomendable que el archivo del grupo de proyectos se llame de una forma re-
presentativa a lo que agrupa; no llame al grupo de programas igual que un pro-


108 Parte 1: Entorno Integrado de Desarrollo
yecto contenido en l. Eso pone en evidencia que quiz la creacin de un grupo de
proyectos no era necesaria.
=============================================================
Nota: Visual Basic permite el uso de un mismo formulario en varios proyectos; un
formulario no pertenece de manera exclusiva a un proyecto. Si desea agregar un for-
mulario existente (.frm) a un proyecto, seleccione el proyecto en la ventana
Explorador de proyectos, haga clic con el botn derecho de su ratn, con lo que
aparecer un men contextual. Seleccione Agregar - Agregar archivo y el formulario
que desee integrar.
=============================================================
Cmo ejecutar su aplicacin
Visual Basic le proporciona herramientas que le permiten desarrollar y disear apli-
caciones, incluso le permiten ejecutar la aplicacin que desarroll sin haber guardado
su trabajo. Esto tiene algo de aventura, ya que en la ejecucin misma de la aplicacin
pueden surgir problemas que no permitan regresar al entorno de desarrollo, siendo
imposible entonces guardar lo que no haya guardado. En esta parte del libro veremos
cmo ejecutar y depurar su aplicacin, pero aprenda la regla de oro: guarde su trabajo
antes de ejecutar su aplicacin.
Visual Basic le asistir al momento de ejecutar su aplicacin para que le sea ms sen-
cillo comprobar que sus programas hacen lo que deben; bsicamente se trata de cubrir
dos tareas fundamentales de la programacin:
Ejecutar consiste en poner en operacin los elementos diseados y codificados en
tiempo de diseo. Al ejecutar la aplicacin Visual Basic entra en tiempo de
ejecucin, se pone sensible a todos los eventos, y por supuesto, es cuando suce-
den los errores, sean de sintaxis o de semntica.
Depurar consiste en probar el funcionamiento de la aplicacin, provocar los errores
y corregirlos. Al momento de depurar sus aplicaciones debe cambiar de actitud
con respecto a sus programas, debe ser el crtico ms feroz y el usuario ms necio
e impredecible, debe hacer lo que nadie en todos sus sentidos hara; debe
intentar, de manera decidida, que su aplicacin genere errores y comportamientos
equivocados. El tiempo que dedique a depurar ser recompensado con la
confianza que tendr en que su aplicacin est correcta.
=============================================================
Nota: El tiempo de ejecucin se divide en dos partes: el modo ejecucin, cuando la
aplicacin est ejecutndose brindando total atencin a las acciones que el usuario
realiza, y el modo de interrupcin, cuando la aplicacin est ejecutndose de manera





Captulo 5: Cmo guardar y ejecutar aplicaciones 109
parcial, ya que aparte de atender las acciones del usuario, atiende las facilidades de
depuracin de Visual Basic.
=============================================================
En la figura 5.2 se muestran los botones de la barra de herramientas que permiten
controlar la ejecucin de su aplicacin.


A continuacin se detalla cul es la funcin de cada uno de los botones:
Iniciar (men Ejecutar - Iniciar, o F5). Inicia la ejecucin del formulario;
cuando se inicia la ejecucin, se dice que est en modo de ejecucin. En caso de que
desee iniciar la ejecucin despus de corregir un error, haga che en el botn Iniciar y
la ejecucin iniciar en donde se haba interrumpido.
Interrumpir (men Ejecutar - Interrumpir, o Ctrl+Inter). Suspende o
interrumpe la ejecucin iniciada de una aplicacin. Una ejecucin interrumpida
puede continuarse a partir del momento en que se interrumpi, mediante el uso del
botn Iniciar. Cuando la ejecucin de un formulario est interrumpida, dicho
formulario puede estar visible, pero realmente no est ejecutndose; se dice que est
en modo de interrupcin.
=============================================================
Nota: La interrupcin de un programa sucede de tres maneras: haciendo clic en el
botn Interrumpir, por la presencia de un error o por haber encontrado un punto de
interrupcin (breakpoint).
=============================================================




110 Parte 1: Entorno Integrado de Desarrollo
Terminar (men Ejecutar - Terminar). Da por concluida la ejecucin de la
aplicacin.
La figura 5.3 muestra la manera en que el desarrollo en Visual Basic termina con la

ejecucin de las aplicaciones; todo lo que se hace en tiempo de diseo es bueno y
necesario, al igual que todo lo que se haga en modo de interrupcin, sin embargo, lo
ms importante es que su aplicacin funcione finalmente, por lo que la ejecucin es la
conclusin de todo proceso de desarrollo:


>> Cmo ejecutar e interrumpir su programa. [05.03]
A continuacin aprender a ejecutar e interrumpir una aplicacin.
Su aplicacin est preparada para mostrar el mensaje Bienvenido a Visual Basic!!!
al hacer clic en Mostrar Mensaje y concluir la ejecucin al hacer Salir.
1. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar la ejecucin.
En qu modo se encuentra?

2. Haga clic en el botn Mostrar Mensaje. Vea cmo el programa responde como se
esperaba, haciendo un sonido y mostrando el mensaje indicado.





Captulo 5: Cmo guardar y ejecutar aplicaciones 111
3. Haga clic en el botn Salir. Vea cmo el programa responde como se esperaba,
terminando la ejecucin de la aplicacin.
4. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar nuevamente la
ejecucin.
5. Haga clic en el botn Interrumpir.
En qu modo se encuentra?

6. Haga clic en el botn Salir.
La ejecucin de la aplicacin no se dio por concluida, en otras palabras, el botn Salir
no hizo lo que deba. A qu se debi?

7. Haga clic en el botn Iniciar o presione la tecla F5 para reanudar la ejecucin.
8. Haga clic en el botn Terminar para concluir con la ejecucin de la aplicacin.
Al iniciar la ejecucin, Visual Basic opt por ejecutar el formulario frmMensaje;
eso es obvio y comprensible, ya que es el nico formulario del nico proyecto que se
encuentra actualmente cargado en la sesin de Visual Basic. Pero qu pasa cuando
hay varios proyectos cargados y stos tienen varios formularios? En ese caso, debe
especificar claramente cul es el proyecto inicial, y en dicho proyecto inicial, el
objeto inicial (formulario). El objeto inicial siempre pertenece al proyecto inicial.
>> Cmo seleccionar el proyecto inicial. [05.04]
A continuacin aprender a determinar qu proyecto de entre varios ser el inicial.
1. Haga clic en el botn Agregar proyecto de EXE estndar. Tendr lo que se
muestra en la figura 5.4:




112 Parte 1: Entorno Integrado de Desarrollo

Proyecto1(Saludo.vbp) aparecer en negritas, ya que es el proyecto considerado
inicial.
2. Seleccione el Proyecto2 (Proyecto2), haga clic con el botn derecho del ratn para
que aparezca el men contextual seleccione Establecer como inicial. Dicho proyecto
deber establecerse como el inicial.
3. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar la ejecucin.
No se ejecut frmMensaje, Por qu?



4. Seleccione el Proyecto1(Saludo.vbp), haga clic con el botn derecho del ratn
para que aparezca el men contextual y seleccione Establecer como inicial. Dicho
proyecto deber establecerse como el inicial.
5. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar la ejecucin.
Deber ejecutarse frmMensaje.
6. Haga clic en el botn Terminar, para concluir con la ejecucin de la aplicacin.





Captulo 5: Cmo guardar y ejecutar aplicaciones 113
7. Seleccione el Proyecto2 (Proyecto2), haga clic con el botn derecho del ratn para
que aparezca el men contextual y seleccione Quitar proyecto. Este comando elimina un
proyecto de un grupo de proyectos. Si Visual Basic le pregunta si quiere guardar
Proyecto2 y Form1, haga clic en No.
8. Guarde su trabajo haciendo clic en el botn Guardar proyecto de la barra de
herramientas.
9. En trminos generales, el proyecto qued como estaba, pero Visual Basic, por el simple
hecho de haber trabajado en un momento dado con dos proyectos simultneamente,
asume que se est trabajando con un grupo de proyectos. Visual Basic le solicita un
nombre para guardar el grupo de proyectos. NO guarde el grupo de proyectos.
10. Salga de Visual Basic (No guarde el grupo de proyectos).
11. Entre nuevamente a Visual Basic y abra el proyecto Saludo.vbp. Al hacer esto, Visual
Basic pierde la referencia de que estamos trabajando con un grupo de proyectos.
Si tuviera varios formularios en un mismo proyecto, podra especificar qu formulario
desea que se ejecute al inicio, para ello debe seleccionar en la ventana Explorador de
proyectos, el proyecto en el que desea definir el objeto de inicio.
>> Cmo seleccionar el objeto de inicio en un proyecto. [05.05]
A continuacin aprender dnde puede determinar cul ser el objeto inicial.
1. Seleccione el Proyecto1 (Saludo.vbp), haga clic con el botn derecho del ratn para
que aparezca el men contextual y seleccione Propiedades de Proyecto1..., y aparecer
la ventana Propiedades del proyecto que se muestra en la figura 5.5.
===============================================================
Nota: Tanto en la ventana Propiedades como en la ventana Propiedades del proyecto,
aparece como Nombre de proyecto el que Visual Basic le asign de manera predeterminada
(Proyecto1). Quiz en estos momentos el nombre del proyecto sea irrelevante porque no
hemos tenido que referir de manera lgica un proyecto; no obstante, cuando trabaje con
mltiples proyectos simultneamente, la forma en que llame a los proyectos para
diferenciarlos en la codificacin cobra importancia. Acostmbrese a asignar a la propiedad
Name el nombre que desee para su proyecto; en este caso, le sugerimos que en lugar de
Proyecto1 le asigne Saludo.
===============================================================



114 Parte 1: Entorno Integrado de Desarrollo

2. En la ficha General, en la lista desplegable Objeto inicial, aparecern los objetos
(formularios) con los que puede iniciar la ejecucin del proyecto.
3. Haga clic en el botn de comando Cancelar.
Depuracin y control del programa
La depuracin es la actividad que consiste en dejar su aplicacin sin errores. Es importante
que sepa depurar sus aplicaciones porque es probable que tenga problemas con el cdigo
alguna vez.
Los errores ms comunes en Visual Basic son de semntica, ya que como pudimos ver, los
errores de sintaxis son detectados al momento de escribir el cdigo.
================================================================
Lo inesperado: Los errores ms comunes, aplicables a lo que hemos aprendido hasta
ahora, son tres:
No se encontr mtodo o elemento de datos (error de compilacin). Ocurre cuando se
utiliza una propiedad o mtodo en un objeto que no dispone de dicha propiedad o
mtodo. Por ejemplo, si define un objeto basado en el control Label






Captulo 5: Cmo guardar y ejecutar aplicaciones 115
y utiliza en tiempo de ejecucin una propiedad o mtodo no disponible para dicho objeto
(por ejemplo, Text o Value. Este error tambin sucede cuando comete un error al
escribir el nombre de la propiedad o del mtodo. Soluciones: escriba bien el nombre de la
propiedad o mtodo, utilice una propiedad o mtodo que sea vlido.
Procedimiento Sub o Function no definido (error de compilacin). Sucede cuando
escribimos mal una instruccin, de tal forma que Visual Basic piensa que es un
procedimiento definido por usted, mismo que no existe. Tambin sucede cuando usted
hace un llamado a algn procedimiento existente, pero que al escribir el nombre comete
un error. Soluciones: escriba correctamente las instrucciones de Visual Basic, si est
haciendo una llamada a un procedimiento, asegrese de que antes de ejecutar su
programa, dicho procedimiento ya haya sido creado.
Se requiere un objeto (error 424 en tiempo de ejecucin). As como se genera un error
cuando se aplica una propiedad o mtodo que no es vlido para un determinado objeto,
tambin se puede cometer un error al escribir el nombre del objeto. En ese caso estaremos
haciendo una llamada a un objeto que no existe y Visual Basic lo requerir. Este error es
muy frecuente cuando pensamos que definimos un nombre para un objeto y realmente no
lo hicimos; al hacer uso de ese objeto el error aparecer. Soluciones: escriba
correctamente el nombre del objeto que est mal escrito, revise que el objeto que usted
cree que ya existe no tiene an el nombre asignado de manera predeterminada por Visual
Basic.
================================================================

Indicadores de margen
Visual Basic proporciona elementos visuales al momento de editar el cdigo que tienen
injerencia en tiempo de ejecucin. En la ventana Cdigo aparece un pequeo margen
gris a la izquierda, llamada barra indicadora de margen; en dicha barra pueden aparecer
iconos, llamados indicadores de margen.
Veremos dos de estos indicadores de margen:









116 Parte 1: Entorno Integrado de Desarrollo

>> Despliegue de errores en tiempo de ejecucin. [05.06]
A continuacin conocer la forma en que Visual Basic reporta los errores.
1. Cierre la ventana Posicin del formulario para liberar espacio en el escritorio de
Windows.
2. En tiempo de diseo, haga doble clic en el botn Mostrar Mensaje para que aparezca la
ventana Cdigo en el procedimiento cmdDespliega_Click.
3. Haga los ajustes necesarios para que los elementos del entorno y su formulario estn
distribuidos como se muestra en la figura 5.6.

4. Modifique el cdigo del procedimiento cmdDespliega_Click; cambie la instruc-
cin Beep por Beeep. Esta situacin es la que pasara si cometiera un error al




Capitulo 5: Cmo guardar y ejecutar aplicaciones 117
teclear alguna instruccin; Visual Basic no reportar error de sintaxis porque desconoce si
posteriormente agregar un procedimiento llamado Beeep.
5. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar la ejecucin.
6. Haga clic en el botn Mostrar Mensaje. La aplicacin generar un error y su entorno lucir
como se muestra en la figura 5.7.

7. Haga clic en el botn Aceptar.
La ventana Cdigo al depurar una aplicacin
Al momento en que sucede un error, Visual Basic entra en modo de interrupcin y traslada el
control a la ventana Cdigo, esperando que usted proceda a corregir el cdigo y reanude la
ejecucin o bien, que termine la ejecucin.
Como puede ver, en la barra indicadora de margen aparece el icono Call Stack Marker, que
indica que la ejecucin est en posesin del procedimiento cmdDespliega_Click.
Tambin puede observar que est seleccionada la lnea que caus el error, en este caso
Beeep.





118 Parte 1: Entorno Integrado de Desarrollo

>> Cmo corregir cdigo en modo de interrupcin. [05.07]
A continuacin aprender a corregir cdigo y reanudar la ejecucin a partir de donde
se interrumpi.
1. Corrija el cdigo para que en lugar de Beeep diga Beep.
2. Haga clic en el botn Iniciar para reanudar la ejecucin.
3. Cmo sabemos que la ejecucin se reanud (es decir, que no se reinici)? Muy sencillo:
si se hubiera reiniciado la ejecucin, hubiera sido necesario hacer clic nuevamente en
Mostrar Mensaje para que el mensaje Bienvenido a Visual Basic!!! se desplegara, y
no lo hizo.
Ejecucin paso a paso
Visual Basic permite ejecutar las aplicaciones paso a paso, a efecto de vigilar de manera
particular las tareas que se realizan mediante cdigo, lnea tras lnea. Esta caracterstica es
especialmente til cuando quiere saber la secuencia de ejecucin que se est siguiendo
entre procedimientos y entre las lneas de los procedimientos.
Para ello es necesario ejecutar la aplicacin presionando la tecla F8, o bien seleccionar el
men Depuracin - Paso a paso por instrucciones.







Captulo 5: Cmo guardar y ejecutar aplicaciones 119
>> Cmo ejecutar un programa lnea por lnea. [05.08]
A continuacin aprender a ejecutar un programa paso a paso.
1. Presione la tecla F8. El programa se comenzar a ejecutar paso a paso.
2. Haga clic en el botn Mostrar Mensaje.
3. El icono Call Stack Marker aparecer en la barra indicadora de margen de la ventana
Cdigo, justo en la lnea de inicio del procedimiento cmdDespliega_Click.
4. Presione F8 varias veces y vea qu hace cada una de las lneas que se estn ejecutando.
Deje de presionar F8 hasta que ya no se vea el icono Call Stack Marker (una vez que se
ejecutan todas las lneas del procedimiento).
El icono Call Stack Marker no se coloc en la lnea de comentario, Por qu?




5. Haga clic en el botn Salir. Presione F8 varias veces, hasta que la aplicacin ejecute la
instruccin End y se termine la ejecucin.
Puntos de interrupcin
Una de las particularidades del modo de interrupcin es que se mantienen los valores que la
aplicacin guarda hasta el momento.
Suponga que su interfaz pregunta diez cosas que son obligatorias y al capturar la octava
genera error. No ser lo mismo corregir en modo de interrupcin y reanudar la ejecucin
donde se qued, que iniciarla nuevamente. Si la iniciara nuevamente, tendra que probar
nuevamente su interfaz y capturar todos los elementos que anteceden al que gener el error.
El modo de interrupcin es muy til, pero hasta ahora slo ha visto que puede entrar a ese
modo si la aplicacin genera error o si se hace clic en Interrumpir; en caso de que quiera
entrar en modo de interrupcin de manera voluntaria, la segunda opcin resulta ser la ms
recomendable, pero requiere precisin para poder hacerlo en la lnea exacta.
Una forma ms prctica es haciendo clic en la barra indicadora de margen, justo al lado de
la lnea en que quiera que Visual Basic entre en modo interrupcin; hacer esto




120 Parte 1: Entorno Integrado de Desarrollo
agrega un punto de interrupcin, mismo que se eliminar haciendo clic en el indicador
de margen Breakpoint.
>> Cmo agregar y eliminar un punto de interrupcin. [05.09]
A continuacin aprender a agregar y eliminar puntos de interrupcin en el cdigo.
1. Presione F7 para que aparezca la ventana Cdigo.
2. Busque el procedimiento cmdDespliega_Click.
3. Haga clic en la barra indicadora de margen exactamente al lado de la lnea Beep.
4. Se deber colocar el indicador de margen Breakpoint, y se resaltar toda la lnea.
5. Haga clic en el botn Iniciar o presione la tecla F5 para iniciar la ejecucin.
6. Haga clic en el botn Mostrar Mensaje. Vea cmo la aplicacin se pone en modo de
interrupcin al llegar a la lnea que posee el Breakpoint. Observe que dos indicadores
de margen pueden coincidir en una misma lnea; en este caso los indicadores
Breakpoint y Call Stack Marker se encuentran en la misma lnea.
7. Haga clic en el botn Iniciar o presione la tecla F5 para reanudar la ejecucin.
8. Haga clic en el botn Salir.
9. Presione F7 para que aparezca la ventana Cdigo.
10. Busque el procedimiento cmdDespliega_Click.
11. Haga clic en la barra indicadora de margen exactamente al lado de la lnea Beep. El
indicador de margen debe desaparecer.
Cmo generar un archivo ejecutable (EXE)
Una vez que la aplicacin est depurada, tenemos la opcin de generar a partir de ella un
programa ejecutable (EXE) que no requiera del entorno de desarrollo de Visual Basic
para ser utilizada.
Usted sabe que un proyecto en Visual Basic puede incluir muchos archivos (.fnn, .vbp,
.vbg, .bas, etctera). Cuando usted genera un programa ejecutable, todos los elementos
involucrados en su proyecto son conjuntados en el programa ejecutable.








Captulo 5: Cmo guardar y ejecutar aplicaciones 121
Ms aun, Visual Basic contiene en los archivos ejecutables que genera los archivos de
imgenes que son insertados en la aplicacin, iconos asociados y otros archivos adjuntos
que no tendr que distribuir por separado a su programa EXE.
>> Cmo compilar un proyecto para generar un ejecutable en Visual Basic. [05.10]
A continuacin aprender cmo compilar un proyecto para generar un programa
ejecutable (EXE) en Visual Basic. Aprovecharemos para que usted cambie el icono de la
aplicacin.
1. Debe tener abierto el proyecto Saludo.vbp, que se encuentra en \avbp\cap02\.
2. Seleccione el formulario frmMensaje.
3. Localice la propiedad Icon, haga doble clic en ella para que aparezca el cuadro de
dilogo Cargar icono, que permite seleccionar un archivo de icono (.ico o .cur) que
sustituir el icono estndar que Visual Basic asigna de manera predeterminada.
Seleccione el icono cdrom01.ico que se encuentra en el directorio \avbp\cap05\. El
icono que aparece en la esquina superior izquierda del formulario cambiar.
4. Seleccione en el men Archivo - Generar Saludo.exe (el nombre del programa variar
dependiendo del nombre de su proyecto). El nombre que coloque ser el que asumir
el programa ejecutable; por lo general. Visual Basic asignar el nombre del proyecto.
No obstante, usted puede cambiar el nombre, sin importar cul sea el nombre del
proyecto.
5. Asegrese de que en Nombre de archivo se encuentre Saludo.exe y que quede
almacenado en \avbp\cap05\.






122 Parte 1: Entorno Integrado de Desarrollo
6. Haga clic en el botn Opciones. Aparecer el cuadro de dilogo Propiedades del
proyecto.



7. Seleccione la casilla de verificacin Incremento automtico.
Qu valores se tienen en nmero de versin (principal, secundario, revisin)?

8. Haga clic en el botn Aceptar.
9. Haga clic en el botn Aceptar del cuadro de dilogo Generar proyecto. Visual Basic
comenzar a compilar su programa. En la barra de herramientas aparecer una barra
de progreso, que dir Compilando... y posteriormente Generando EXE.
10. Seleccione nuevamente Archivo - Generar Saludo.exe, haga clic en el botn
Opciones.
Qu valores se tienen en nmero de versin (principal, secundario, revisin) y
explique qu pas?




Capitulo 5: Cmo guardar y ejecutar aplicaciones 123



Ya compil a ejecutable su programa, lo que gener un programa llamado
Saludo.exe, de un tamao muy pequeo: tan slo 20 KB.
Un programa por ms simple que sea, que pueda ubicarse dentro de la pantalla, que
tenga todos los atributos de un programa de Windows, tales como minimizar, maxi-
mizar, cerrar, movimiento de la ventana, cambio de tamao de la ventana, sensibili-
dad a eventos, etctera, no puede ser tan pequeo. El secreto es que el programa
utiliza una biblioteca llamada Msvbvm60.dll, que tiene un tamao de 1,376 KB y que
debe estar presente en su equipo para que el programa funcione.
Dicha biblioteca se instala junto con Visual Basic, casi siempre en el directorio
\Windows\system; cuando genere los discos de instalacin puede seleccionar que la
biblioteca se agregue o no a los discos. El archivo de biblioteca es grande en tamao,
pero una vez que ya lo tiene en su equipo, podr ejecutar cualquier programa ejecu-
table creado en Visual Basic, sin necesidad de tener que instalarlo ms de una vez.
Saludo.exe ya incluye todos los archivos involucrados en el proyecto, por lo que no
es necesario distribuirlos con su aplicacin. Lo nico que debe agregar para su apli-
cacin ejecutable son otras bibliotecas ActiveX (.ocx), bases de datos (.mdb) u otros
archivos que usted designe para controlar su aplicacin (.ini).

============================================================
Nota: Puede distribuir libremente tanto su programa ejecutable como la biblioteca
Msvbvm60.dll, sin incurrir en violaciones a los derechos de autor. Si su proyecto
involucra componentes ActiveX (.ocx) o bibliotecas (.dll) generadas por terceros, cer-
cirese de que no est distribuyendo componentes sin pagar los derechos corres-
pondientes. En todos los casos, revise la licencia de uso y distribucin del producto.
============================================================
Forma esquemtica de presentacin de aplicaciones
Hasta este punto ya hemos desarrollado una aplicacin. Como podr haberse dado
cuenta, el camino para desarrollar una aplicacin simple fue largo, en virtud de que
nos aprovechamos de ella para explicar a detalle los elementos de Visual Basic.






124 Parte 1: Entorno Integrado de Desarrollo
Ahora que ya conoce los elementos del entorno de desarrollo es necesario que las
especificaciones de los programas sean ms concretas y prcticas, ya que de otra forma
el libro sera tedioso.
Simplifique la forma en que sern presentadas las especificaciones de las aplicaciones
para que pueda desarrollarlas fcilmente.
Por ejemplo, ya guardo el proyecto con un nombre Saludo.vbp, y ste contiene el
formulario frmMensaje.frm. Si este proyecto, se encontrara en alguna parte del libro
posterior a esta pgina se describira mediante las siguientes secciones:
Implementacin visual. Se mostrar en primera instancia lo que se busca realizar,
para ello se colocar el nombre del formulario que se est creando y la forma en que se
deber ver en tiempo de ejecucin.
Tabla de objetos y propiedades. Contendr los objetos que el formulario debe
contener; se especifican las propiedades y los valores que deben tener las mismas para
cada objeto. Aquellas propiedades que no se manifiestan debern ser establecidas de
acuerdo a la representacin grfica del formulario en tiempo de ejecucin. Se sugiere
que se ingresen los objetos y propiedades en el orden en que aparecen en esta tabla.
Propiedades nuevas. Le dar una breve descripcin de las propiedades nuevas que
estn siendo utilizadas en el formulario. Como ste es el primer programa, todo es
nuevo y por tanto aparecen todas.
Eventos nuevos. Le dar una breve descripcin de los eventos nuevos que estn siendo
utilizados en el formulario. Como ste es el primer programa, todo es nuevo y por
tanto aparecen todos.
Mtodos nuevos. Le dar una breve descripcin de los mtodos nuevos que estn
siendo utilizados en el formulario. Como ste es el primer programa, todo es nuevo y
por tanto aparecen todos.
Codificacin. Muestra los procedimientos que hay que agregar en forma de cdigo.
Ejecucin. Muestra la ejecucin demostrativa de la aplicacin. En esta parte se hacen
observaciones del comportamiento del programa, as como el cdigo que lo origina.
Vea nuestro primer ejemplo en esta modalidad:
frmMensaje.Trm
A continuacin aprender a agregar objetos en un formulario, establecer sus propiedades
y escribir cdigo de eventos




.
Captulo 5: Cmo guardar y ejecutar aplicaciones 125
Implementacin visual

===============================================================
Nota: En algunos casos, la implementacin visual se deber ilustrar mediante el uso de
varias figuras. En caso de que los colores sean protagonistas en la ejecucin del
programa, se har una breve descripcin de lo que se deber ver en la pantalla, en virtud
de que el manejo de colores es difcil de trasladar al texto impreso.
===============================================================
Tabla de objetos y propiedades de frmMensaje

126 Parte 1: Entorno Integrado de Desarrollo
Propiedades nuevas en frmMensaje

Eventos nuevos en frmMensaje
Codificacin de frmMensaje
Editar cdigo: cmdDespliega, Evento: Clic

Instruccin que emite sonido por el altavoz
Beep
lblTexto.Caption = _
"Bienvenido a Visual Basic!!!"
Editar cdigo: cmdSalir, Evento: Click.
End





Captulo 5: Cmo guardar y ejecutar aplicaciones 127
Ejecucin
Haga clic en el botn de comando Mostrar Mensaje.
El procedimiento cmdDespliega_Click emite un sonido y posteriormente modifica la
propiedad Caption del objeto lblTexto a efecto de que adquiera como valor
Bienvenido a Visual Basic!!!; eso se representa visualmente como un mensaje
desplegado.
Haga clic en el botn de comando Salir.
El procedimiento cmdSalir_Click slo condene la instruccin End, que da por
terminada la sesin de trabajo.
________________________________________________________________________________
Resumen
En este captulo:
Vimos cmo se almacena el trabajo en Visual Basic.
Vimos algunas extensiones asociadas a los archivos de trabajo en Visual Basic.
Vimos la jerarqua de contenedores manejada en Visual Basic.
Vimos sugerencias para nombrar archivos en Visual Basic.
Vimos la forma en que se puede ejecutar una aplicacin en Visual Basic.
Vimos cmo seleccionar un proyecto como proyecto de inicio, asimismo, vimos cmo
seleccionar un objeto como objeto de inicio.
Vimos qu son los indicadores de margen y la barra indicadora de margen.
Vimos el uso y funcionamiento de los indicadores de margen Call Stack Marker y
Breakpoint.
Vimos cmo ejecutar un programa lnea por lnea.
Vimos cmo establecer y remover puntos de interrupcin.
Vimos la forma en que se esquematizarn los programas en el resto del libro.
Es necesario que entienda los conceptos anteriores antes de continuar.






128 Parte 1: Entorno Integrado de Desarrollo
Algunas respuestas a los ejercicios
[05.01] Archivos de trabajo en Visual Basic.
3. Proyecto Proyecto1. Visual Basic asume que se est trabajando a nivel proyecto.
10. Grupo de proyectos Grupo1. Visual Basic, por el hecho de estar trabajando con
2 o ms proyectos simultneamente, asume que se desea tener un esquema de grupo de
proyectos.
15. Visual Basic slo muestra las ventanas Guardar como cuando hay algo pendiente de
guardar que an tenga el nombre proporcionado de manera predeterminada.
[05.03] Cmo ejecutar e interrumpir su programa.
1. En modo de ejecucin.
5. En modo de interrupcin.
6. La aplicacin no se concluy porque se encuentra en modo de interrupcin;
Visual Basic destina recursos para depuracin en dicho modo, de tal forma que no atiende
todos los eventos que estn sucediendo en la aplicacin.
[05.04] Cmo seleccionar el proyecto inicial.
3. Porque frmMensaje es un objeto perteneciente a un proyecto que no se encuentra
establecido como inicial. Para que se ejecutara sera necesario que Proyecto1 (que
contiene a frmMensaje) fuera el proyecto inicial y que frmMensaje fuera el objeto de
inicio.
[05.08] Cmo ejecutar un programa lnea por lnea.
4. Porque es un comentario, sin valor para el compilador.
[05.10] Cmo compilar un proyecto para generar un ejecutable en Visual Basic.
7. 1.0.0
10. 1.0.1; el nmero de versin se actualiza automticamente cada vez que se genera una
nueva versin del ejecutable.










129

Parte 2
Elementos
de programacin
En el mbito del desarrollo de aplicaciones, el dilema de qu fue
primero, si el huevo o la gallina, no existe. Una verdad irrefutable
es que primero existi la codificacin, y luego existieron las
herramientas de desarrollo basadas en objetos, interfaces
grficas de desarrollo, herramientas CASE, RAD, etctera.
Incluso las herramientas ms grficas de desarrollo, tenemos
que admitirlo, estn codificadas. Es por ello que se consider
oportuno revisar los elementos de codificacin antes que los
elementos grficos que proporciona el Entorno Integrado de
Desarrollo.
En esta parte se familiarizar con las estructuras de control y
con los operadores aritmticos, lgicos y de comparacin.
Aprender la sintaxis de las funciones implcitas del lenguaje, el
manejo de procedimientos y las funciones definidas por el
usuario, en fin, el lado BASIC de Visual Basic.
Adems, conocer estos elementos de programacin, le permitir
practicar de manera ms extensa y profunda el manejo de
objetos y elementos grficos en la tercera parte.
Desarrollar aplicaciones en Visual Basic sin conocer los ele-
mentos de programacin mostrados en esta parte resulta poco
til, pues con la experiencia llegar a la misma conclusin que
nosotros: los elementos grficos reducen la codificacin, pero el
espritu de fineza de la aplicacin estar siempre en el cdigo, en
aquellas cosas que ya no pueden hacerse mediante utileras
grficas.
Captulos:
6, 7, 8, 9
Nmero de prcticas: 26





130






















































Captulo
6
Variables y tipos
de datos
Objetivos
Comprender la forma en que se pueden declarar en Visual Basic las variables de me-
moria, as como la nomenclatura que se les debe dar basndose en su alcance y contenido.
Tambin ver algunas instrucciones que le permitirn realizar pruebas rpidas de
codificacin.
Al finalizar este captulo deber:
Saber cmo utilizar MsgBox e InputBox
Saber cmo declarar variables y constantes en Visual Basic
Saber cmo definir matrices de una y dos dimensiones
Conocer los diferentes tipos de datos con que cuenta Visual Basic
Saber darles un nombre significativo estndar a las variables y constantes
Manejar las constantes de Visual Basic
Saber cmo forzar las declaraciones de variables en Visual Basic
Conocer las funciones de conversin y formato de datos que tiene Visual Basic
131












132 Parte 2: Elementos de programacin
A partir de este captulo comenzar a programar de manera regular y progresiva; con ello
adquirir la destreza necesaria para desarrollar aplicaciones profesionales en Visual Basic.
Si entendi los fundamentos tratados en la parte I, la tarea ser fcil.
Usted puede comenzar a desarrollar en Visual Basic, y ser hbil en el manejo de la interfaz
y rpido para implementar visualmente las aplicaciones que desea; no obstante, de nada le
servir disear una pantalla bonita si carece de sentido, es decir, si no hace nada.
Antes de dominar todos los objetos que puede manejar en Visual Basic, son necesarios
algunos elementos de codificacin que le permitan darle sentido a las cosas a travs de una
funcionalidad que resulte explicativa. Al menos en este captulo, olvdese de que existen
los objetos y los controles en Visual Basic: trabajar prcticamente en el terreno del cdigo
puro (lo que algunos llaman hardcore code), donde no importa lo bonito sino lo eficiente.
MsgBox
La funcin MsgBox le permite indicar la aparicin de una ventana de notificacin en Vi-
sual Basic, tambin llamadas cuadros de dilogo, en el formato estndar de Windows.
La sintaxis de la funcin es la siguiente:
MsgBox ( Mensaje [ , CdigoDeBotn [ , TtuloDeVentana] ] )
Los elementos de la sintaxis son los siguientes:
El Mensaje es un argumento requerido. Consiste en una expresin String (texto) que
representa el mensaje que aparecer en el cuadro de dilogo. La longitud mxima de
mensaje es de aproximadamente 1024 caracteres, segn el ancho de los caracteres
utilizados. Si el mensaje consta de ms de una lnea, puede separarlas utilizando un
Character de retorno de carro (Chr(13)), un Character de avance de lnea (Chr(10))
o una combinacin de caracteres de retorno de carro/avance de lnea (Chr(l3) y
Chr(10)) entre cada lnea y la siguiente.

=================================================================
Nota: Posteriormente ver que Visual Basic le asiste en el uso de valores constantes;
Chr(l3) + Chr(10) es igual a vbCrL-f.
=================================================================
El CdigoDeBotn es un argumento opcional. Consiste en una expresin numrica que
corresponde a la suma de los valores que especifican el nmero y el tipo de los





Captulo 6: Variables y tipos de datos 133
botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del
botn predeterminado y la modalidad del cuadro de mensajes. Si se omite este
argumento, el valor predeterminado para CdigoDeBotn es 0.
El TtuloDeVentana es opcional. Consiste en una expresin String que se muestra en
la barra de ttulo del cuadro de dilogo. Si se omite TtuloDeVentana, en la barra de
ttulo se coloca el nombre de la aplicacin.
Dependiendo de la funcin que MsgBox desempee, devolver o no valores. En el caso
del ejemplo, slo despliega un mensaje y como su nica funcin es informar, aparecer
slo el botn Aceptar (cdigo de botn 0), con el mensaje.
A continuacin pruebe MsgBox a travs de un formulario que no ser necesario guardar,
ya que lo importante es ver qu hace el cdigo. Para ello utilizara el procedimiento
Form_Activate, que se ejecuta al momento en que el formulario est activo y
visible.

==============================================================
Nota: No se requiere guardar todos los ejemplos que se desarrollan en el libro, no
obstante, si desea guardar sus trabajos para revisiones posteriores, le recomendamos
que lo haga en el directorio de prcticas correspondiente (en este caso \avbp\cap06).
Cuando el libro indique que genere un nuevo proyecto EXE estndar, implica crear un
nuevo proyecto y trabajar nica y exclusivamente con ese proyecto. Si trabaja con dos o
ms proyectos simultneamente, puede confundirse, ya que Visual Basic asume que
est trabajando en modo de grupo de proyectos y tendr que especificar continuamente
el proyecto y el formulario de inicio, perdiendo tiempo sin ningn aprendizaje que
valga la pena.
==============================================================
>> MsgBox: creacin de cuadros de informacin y confirmacin de manera rpida.
[06.01]
A continuacin aprender a utilizar MsgBox y a comprobar cdigo sin necesidad de
agregar objetos en un formulario.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).

Editar cdigo: Form, Evento: Activate.
MsgBox ("Operacin concluida satisfactoriamente")
MsgBox ("Esto " & Chr(13) & Chr(10) & " est genial")
Print MsgBox("Desea borrar el archivo", 1)
Print MsgBox("Desea borrar el archivo", 1, "Confirmacin")







134 Parte 2: Elementos de programacin

2. Ejecute el formulario todas las veces que requiera para contestar las preguntas que se
presentan a continuacin.
3. En su opinin, el primer MsgBox para qu sirvi:



4. Cul es la diferencia entre los resultados obtenidos entre el ltimo y el penltimo
MsgBox.




5. La instruccin Print sirve para enviar a una salida (en nuestro caso al formulario)
un determinado contenido. En nuestro ejemplo realizamos un Print que enva al
formulario lo devuelto por MsgBox; qu devuelve si selecciona Aceptar y qu
devuelve si selecciona Cancelar?



6. Elimine la instruccin Print de cualquiera de los ltimos ejemplos. Ejecute el
formulario. Causa un error. Por qu? Por qu en los primeros dos ejemplos, que
no tienen Print, no causa error?

















Captulo 6: Variables y tipos de datos 135
Constantes de Visual Basic
Cuando citamos la sintaxis de MsgBox, en el tercer ejemplo colocamos lo siguiente:

MsgBox("Desea borrar el archivo", 1)
Qu le dice ese nmero 1? Si reemplazramos el nmero 1 por un 32, un 64 o un 256,
sabra lo que significa?
Si en el segundo argumento de la funcin MsgBox (CdigoDeBotn / Nmero de cdi-
go) no coloca ningn nmero. Visual Basic asume que es un valor de O, lo que indica que
usted desea que en el cuadro de dilogo slo aparezca un botn Aceptar, que al hacer clic
cierre el cuadro de dilogo. En este caso, la funcin MsgBox tiene un objetivo
eminentemente informativo y no devuelve valores.
Si coloca el nmero 1, Visual Basic interpreta que usted desea que en el cuadro de
dilogo aparezcan dos botones: Aceptar y Cancelar. Ahora dispone de dos opciones y
por tanto puede decidirse por alguna de ellas con un propsito definido. En este caso,
MsgBox devuelve un valor, dependiendo del botn en el que haya hecho clic. Si hace
clic en el botn Aceptar, devolver el valor 1; si hace clic en el botn Cancelar,
devolver el valor 2.
Considere que dispone de 16 diferentes estilos de cuadros de dilogo y como respuesta
MsgBox puede devolver 7 diferentes respuestas. Por supuesto que creemos que usted
tiene la suficiente memoria como para aprender qu significan 16 nmeros co-
rrespondientes a CdigoDeBotn y los 7 nmeros correspondientes a los valores
devueltos, sin embargo, quiz no todos los que lean sus programas tengan esa misma
capacidad.
Para simplificar la programacin y hacer ms legibles los programas, existen las cons-
tantes de Visual Basic, con las cuales se puede hacer referencia al significado de un valor
y no al valor mismo; pasamos de algo muy abstracto como lo es un nmero de cdigo, a
un nombre equivalente, comprensible en su propia lectura.
Si el nmero de cdigo 0, para efecto de la funcin MsgBox, equivale en Visual Basic
(vb) a ver el botn Aceptar (OK) solamente (Only), qu nombre le dara a ese 0 para
identificarlo de manera significativa? Qu le parece la siguiente propuesta:
0 vbOKOnly





136 Parte 2: Elementos de programacin
Y si el nmero de cdigo 1 equivale en Visual Basic (vb) a ver el botn Aceptar (OK) y
Cancelar (Cancel), qu nombre le dara a ese uno para identificarlo de manera sig-
nificativa? Qu le parece lo siguiente:
1 vbOKCancel
Si en lugar de escribir 0 escribiera vbOKOnly, o bien, si en lugar de 1 escribiera la
palabra vbOKCancel, sin duda alguna obtendra un cdigo ms claro para usted y
para los dems que lean su programa.
En MsgBox, los nmeros de cdigo adems de determinar el comportamiento del cua-
dro de dilogo y la cantidad de botones que han de mostrarse, determinan la apariencia
que identifica el propsito del cuadro de dilogo; para ello basta hacer la suma de los
diferentes valores, por ejemplo:
MsgBox("Desea borrar el archivo", 1 + 48)

Le indican a Visual Basic que deben aparecer dos botones. Aceptar y Cancelar (n-
mero de cdigo 1) y que adems debe aparecer como icono del cuadro de dilogo la
figura de advertencia estndar de Windows (nmero de cdigo 48).
Sin la existencia de constantes de Visual Basic, el cdigo sera muy oscuro. Vea cmo
luce el cdigo utilizando constantes de Visual Basic:

MsgBox("Desea borrar el archivo", vbOKCancel + vbExclamation)
A continuacin se muestra una lista de las constantes de Visual Basic que se aplican a
MsgBox, para efecto de mostrar el cuadro de dilogo.

==============================================================
Nota: Las constantes son de Visual Basic, no de MsgBox; por tal motivo, se encontrar
estas mismas constantes en otros elementos de programacin, con la misma fun-
cionalidad.
==============================================================





Captulo 6: Variables y tipos de datos 137




El primer grupo de valores (O a 5) describe el nmero y el tipo de los botones mos-
trados en el cuadro de dilogo; el segundo grupo (16, 32, 48, 64) describe el estilo del
icono, el tercer grupo (O, 256, 512) determina el botn predeterminado y el cuarto
grupo (0,4096) determina la modalidad del cuadro de mensajes. Cuando se suman n-
meros para obtener el valor final del argumento CdigoDeBotn, se utiliza solamente
un nmero de cada grupo.
A continuacin se muestra una lista de las constantes de Visual Basic que se aplican a
MsgBox como valores devueltos.



138 Parte 2: Elementos de programacin



Utilizar constantes de Visual Basic es una de las tantas formas que la herramienta de
desarrollo proporciona para asistirle en la programacin, al mismo tiempo que estandariza
la forma de trabajo.
>> Uso de constantes de Visual Basic. [06.02]
A continuacin aprender a seleccionar las constantes de Visual Basic para los cuadros de
dilogo que necesite.
1. En la parte de la derecha escriba el cdigo MsgBox que utilizara para generar lo que se
solicita; no olvide utilizar las constantes de Visual Basic. Deber obtener lo siguiente:








Captulo 6: Variables y tipos de datos 139

InputBox
La funcin InputBox sirve para desplegar un cuadro de dilogo que permite ingresar
datos.
Devuelve un valor String, correspondiente a lo que se captur; el valor puede aceptarse
(Aceptar), o en su caso, tambin se puede Cancelar la captura. En caso de que se d
Cancelar a la captura, InputBox devolver un valor String vaco ("").
La sintaxis de la funcin es la siguiente:
InputBox ( Mensaje [ ,Ttulo [ , Predeterminado [ ,PosX ( ,PosY] ] ] ] )
Los elementos de la sintaxis son los siguientes:
El argumento Mensaje es requerido. Consiste en una expresin String (texto) que
representa el mensaje que aparecer en el cuadro de dilogo. La longitud mxima de







140 Parte 2: Elementos de programacin
mensaje es de aproximadamente 1024 caracteres, segn el ancho de los caracteres uti-
lizados. Si el mensaje consta de ms de una lnea, puede separarlos utilizando un
Character de retomo de carro (Chr(13)) o un Character de avance de lnea
((Chr(10)) o una combinacin de caracteres de retomo de carro/avance de lnea
(Chr(l3) y Chr (10)) entre cada lnea.
El argumento Ttulo es opcional. Consiste en una expresin String que se muestra en
la barra de ttulo del cuadro de dilogo. Si se omite Ttulo, en la barra de ttulo se coloca
el nombre de la aplicacin.
El argumento Predeterminado es opcional. Consiste en el valor sugerido que aparecer
al inicio en el cuadro de dilogo.
El argumento PosX es opcional. Consiste en especificar la posicin horizontal donde
debe desplegarse el cuadro de dilogo (eje de las X).
El argumento PosY tambin es opcional. Consiste en especificar la posicin vertical
donde debe desplegarse el cuadro de dilogo (eje de las Y).
>> InputBox: acceso rpido de datos. [06.03]
A continuacin aprender a utilizar InputBox, a declarar variables de memoria para
utilizarse en los programas y a colocar comentarios en las lneas sin afectar la ejecucin.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate. I
' Define una variable de tipo String para utilizarla
' en el programa
Dim mstrSoftware As String ' Definicin de la variable
' Usos de InputBox
mstrSoftware$ = InputBox("Cul es su software preferido?")
Print "Captura: " & mstrSoftware$



Captulo 6: Variables y tipos de datos 141
mstrSoftware$ = InputBox("Cul es su software preferido?", _
"Preferencias")
Print "Captura: " & mstrSoftware$
mstrSoftware$ = InputBox("Cul es su software preferido?", _
"Preferencias", "Visual Basic")
Print "Captura: " & mstrSoftware$

mstrSoftware$ = InputBox("Cul es su software preferido?", _
"Preferencias", "Visual Basic", 2000, 4000)
Print "Captura: " & mstrSoftware$
2. Ejecute el formulario todas las veces que requiera para contestar las preguntas que a continuacin se
presentan.
3. Cul es la diferencia entre el primer ejemplo y el segundo?, qu aparece como ttulo del cuadro de
dilogo si no especifica algn ttulo para l?



4. Cul es la diferencia entre el tercer ejemplo y el cuarto?



5. Qu valor devuelve la funcin InputBox en caso de hacer clic en el botn Cancelar?












142 Parte 2: Elementos de programacin
6. Al declarar la variable, despus de la instruccin "Dim mstrSoftware As
String" se coloc un comentario (' Definicin de la variable). Afecta
la ejecucin del programa, s o no, por qu?




Declaracin de variables
En la explicacin de InputBox requerimos declarar una variable que nos permitiera
almacenar de manera temporal un dato en la memoria RAM. En la programacin eso
es el pan de cada da, en virtud de que la secuencia lgica no permite desarrollar un
proceso en una sola lnea; es necesario procesar algo y mantener los resultados del
proceso en alguna parte para su uso posterior.
Las variables o constantes de memoria son posiciones de memoria RAM, referidas a
travs de un nombre, disponibles para almacenar datos en ellas . Las variables tienen
tres atributos esenciales: nombre, tipo y alcance.
Nombre. Permite identificar el contenido de la memoria; deber estar compuesto
como sigue: debe comenzar con una letra, puede tener un mximo de 40 caracteres,
puede incluir nmeros y guiones bajos (_), pero no signos de puntuacin ni espacios
en blanco. Una variable no puede tener el mismo nombre que otro objeto pblico
como Clipboard, Screen o App. Los nombres de variable pueden repetirse en
mltiples procedimientos y mdulos, cuidando siempre el alcance.
Tipo de datos. Determina cmo se almacenan los bits que representan los valores
en la memoria del equipo. Cuando declara una variable, puede proporcionarle un
tipo de datos; todas las variables desde su creacin tienen un tipo de datos que
determina la clase que pueden almacenar, por lo cual una variable nunca carece de
un tipo de datos. De forma predeterminada, si no proporciona un tipo de datos al
momento de declarar una variable, sta toma el tipo de datos Variant, que permite
almacenar cualquier tipo de contenido soportado por Visual Basic.
Alcance. Determina la validez del uso de una variable entre procedimientos,
mdulos y aplicaciones. Pueden ser de nivel procedimiento (slo vlidas para un
procedimiento), a nivel mdulo (vlidas para todos los procedimientos de un m-
dulo, como podra ser un formulario) o globales (vlidos para todos los procedi-
mientos de todos los mdulos de todas las aplicaciones).





Captulo 6: Variables y tipos de datos 143

==============================================================
Nota: Optamos por no traducir la palabra "Character" al espaol; lo correcto seria
escribir "Carcter", lo cual tiene un significado muy diferente. Colocar "smbolo" o
"literal" tampoco satisface la semntica que se persigue. Podramos decir que Character
es una representacin simblica, de una posicin de longitud.
=============================================================
El tipo de datos de las variables determina dos cosas: el consumo en bytes de memoria y el
Character de declaracin de tipo. Este ltimo es un Character que permite identificar y
declarar a una variable como perteneciente a algn tipo de datos especfico; no todos los
tipos de datos tienen Character de declaracin de tipo. Por citar un ejemplo, aquellos datos
que sean de tipo String (texto) podrn ser identificados por el Character de moneda "$",
de tal manera que si vemos una variable de nombre MiVarable$, podremos saber que
se trata de una variable de tipo String.
El tipo de datos Variant puede almacenar cualquier cosa, por lo cual parecera prctico
utilizar slo ese tipo de datos; sin embargo, es el de ms consumo de memoria RAM, por lo
que su uso no se recomienda ms que para inexpertos. Si sabe que una variable almacenar
siempre un tipo de datos determinado. Visual Basic tratar de forma ms eficiente los datos
si declara la variable con el tipo que le corresponda. Antes de declarar una variable piense
en las siguientes preguntas:
Qu almacenar la variable? Esto es fundamental para poner el nombre a las
variables, ya que stas deben ser representativas de su contenido, su tipo de datos y su
alcance. Los nombres de variable deben respetar las convenciones de Visual Basic, por
lo que le sugerimos que revise el apndice I: Convenciones.
Qu tipo de datos almacenar la variable? Dependiendo de qu desea almacenar,
seleccione el tipo de datos adecuado, que consuma el mnimo suficiente y necesario de
memoria RAM; ms adelante se mostrar qu puede contener cada tipo de datos.
En dnde ser utilizada la variable? Se debe conocer en qu partes del cdigo se
utilizar una variable, a efecto de determinar qu alcance se le debe proporcionar al
momento de la declaracin. Como regla general, debe declarar las variables con el
mnimo de alcance.

Tipos de datos
Los tipos de datos bsicos de Visual Basic permiten el manejo de prcticamente cualquier
cosa. Es muy comn utilizar aplicaciones en Visual Basic como aplicaciones front-end de
bases de datos robustas como SQL Server y Oracle.
En Visual Basic se pueden manejar los siguientes tipos de datos:





144 Parte 2: Elementos de programacin









Captuio 6: Variables y tipos de datos 145


DIM: declaracin de variables de memoria
Como quiz ya se haya dado cuenta en la tabla de tipos de datos y en ejemplos anteriores,
la declaracin de variables de memoria se hace a travs de la instruccin Dim.
La sintaxis de la instruccin es la siguiente:
Dim NombreVariable { CharacterDeclaracin | As TipoDatos }
NombreVariable es el nombre que desea asignarle a su variable. CharacterDeclaracin es
el Character de declaracin del tipo de datos, en caso de que lo tenga. TipoDatos es
cualquier nombre de tipo de datos reconocido por Visual Basic.
En la sintaxis se ilustran dos posibilidades de declaracin de variables, que son mu-
tuamente excluyentes: una es utilizando el Character de declaracin de tipo (decla-














146 Parte 2: Elementos de programacin
racin implcita) o utilizando un nombre de tipo de datos reconocido por Visual Basic
(declaracin explcita).
En la tabla de tipos de datos hay una columna llamada "Character de declaracin de
tipo", que muestra los caracteres asociados a los diferentes tipos de datos para la
declaracin implcita. Como ver, no todos los tipos de datos tienen Character de de-
claracin de tipo, y por tanto, no pueden ser declarados de manera implcita.
Para declarar una variable que almacene el nmero de asistentes a una conferencia en un
recinto relativamente grande, tendramos las siguientes posibilidades:
Declaracin explcita:

Dim intAsistentes As Integer
Declaracin implcita:
Dim intAsistentes%

============================================================
Lo inesperado: Cuando trabaja con declaracin de variables, los errores ms
comunes son los siguientes:
Se esperaba el fin de la instruccin (error de compilacin). Sucede cuando hace una
doble declaracin, es decir, intenta una declaracin implcita y explcita al mismo
tiempo, por ejemplo Dim intAsistentes% As Integer. Al momento en que la
instruccin Dim se encuentra un Character de declaracin de tipo, asume la
declaracin implcita y no espera nada ms. Soluciones: decdase, o coloca el
Character de declaracin de tipo o el As TipoDatos, pero no ambas.
Desbordamiento (error 6 en tiempo de ejecucin). Sucede cuando trata de almacenar
un valor que excede los lmites que permite un determinado tipo de datos, por
ejemplo, un valor sobre 32, 767, en el caso de datos de tipo Integer. Esto se
presenta particularmente cuando no tiene claro el dominio de los datos o bien ela-
bora clculos y no se percata de que puede exceder el lmite: una suma de datos
Integer (por ejemplo, 20,000 + 40,000) no siempre da un tipo de datos Integer
(60,000). Soluciones: revise bien los tipos de datos que utiliza, determine el dominio
de los datos (conjunto de valores vlidos para un dato) y defina las variables en
consecuencia. Si no est seguro de los valores, asigne un tipo de datos con capacidad
sobrada.
============================================================





Captulo 6: Variables y tipos de datos 147
Es una convencin de programacin de Visual Basic que si las variables de un tipo de
datos que disponga de Character de declaracin de tipo, muestren este ltimo durante
todo el desarrollo del programa.

============================================================
Lo inesperado: Cuando trabaja con Characteres de declaracin de tipo, los errores
ms comunes son:
El Character de declaracin de tipo no coincide con el tipo de datos declarado (error
de compilacin). Sucede cuando declara una variable de un determinado tipo de datos,
con su correspondiente Character de declaracin de tipo, pero al hacer referencia a
dicho tipo de datos en alguna parte del programa, le coloca un Character de declaracin
de tipo que no le corresponde. Por ejemplo: define intAsistentes como Integer,
pero en el cdigo utiliza una referencia intAsistentes&, que es equivocada, ya
que el Character & corresponde al tipo de datos Long. Soluciones:
memorice los Characteres de declaracin de tipo y utilcelos adecuadamente.
El Character no es vlido (error de compilacin). Sucede cuando deja un espacio
entre el nombre de la variable y el Character de declaracin de tipo. Soluciones: no deje
espacios en blanco entre el nombre de la variable y el Character de declaracin de tipo.
============================================================

Alcance
El alcance determina la validez del uso de una variable entre procedimientos, mdulos y
aplicaciones. Los diferentes alcances que puede tener una variable en Visual Basic son
los siguientes:








148 Parte 2: Elementos de programacin Nombre
El nombre debe ser claramente representativo de lo que almacena y adems debe incluir
como prefijo los aplicables al alcance y tipo de datos que se pretende almacenar. Suponga
que en una aplicacin dada, en un formulario dado, desea utilizar una variable que
almacene las ventas acumuladas de un mes, misma que pueda ser utilizada por cualquier
procedimiento dentro del mismo mdulo, cmo se debera llamar la variable? La figura
6.1 nos resuelve esa incgnita:

>> Determinacin del nombre, tipo de datos y alcance indicado para las variables de
memoria. [06.04]
Con respecto a las variables de memoria, aprender a determinar cul es el tipo de datos
adecuado para una necesidad de almacenamiento y de alcance, as como darle nombre a las
variables respetando las convenciones internacionales sugeridas por Microsoft para la
codificacin en Visual Basic. Conteste segn el ejemplo.
1. Declare una variable que almacene el tipo de cambio peso-dlar, que pueda ser
utilizada en cualquier parte de una aplicacin de instrumentos de inversin.

2. Se requiere crear un efecto visual en un procedimiento, consistente en manipulacin
aleatoria de colores; en Visual Basic los colores RGB se representan a travs









Captulo 6: Variables y tipos de datos 149
de nmeros de color de O a 255. La variable slo se utilizar para manejar colores
RGB en ese procedimiento.



3. En un formulario se realiza manejo de bases de datos; cuando se hace una bsqueda
secuencial, es importante saber si la bsqueda a partir de un criterio encontr (True) o
no (False) registros que coincidan con el patrn buscado, a efecto de determinar si un
informe se enva o no a impresin. Se requiere una variable que indique si se
encontraron o no registros de acuerdo al patrn de bsqueda seleccionado.



4. Al iniciar una aplicacin, el usuario escribe su nombre de usuario y su contrasea como
medida de seguridad; una vez que la aplicacin le permite el acceso, en cada uno de los
formularios que componen la aplicacin, internamente se evala qu usuario fue el que
ingres a la aplicacin, a efecto de determinar cules son los privilegios de uso que
tiene. Se requiere una variable que guarde el nombre de usuario, que pueda utilizarse en
todos los formularios de la aplicacin.





150 Parte 2: Elementos de programacin
Constantes
Las constantes, como su nombre lo indica, son referencias de valores en memoria que
no pueden variar su valor.
La sintaxis para declarar constantes es:
Const Variable [As TipoDeDatos] = ValorConstante
Ejemplo:
Const msngPI As Single = 3.1416
Const msngPI! = 3.1416
La especificacin del tipo de datos es opcional, aunque se recomienda no omitirla. Las
constantes deben declararse a nivel mdulo, es decir, se colocan en las declaraciones
generales de un formulario, o bien en un archivo .bas.
Matrices
Las matrices son parte de todo lenguaje de programacin de propsito general; per-
miten la organizacin, a travs de subndices, de un conjunto de valores, bajo un
mismo nombre de referencia en memoria (nombre de variable).
Ya vimos que la instruccin Dim sirve para declarar variables:
La sintaxis de la instruccin es:
Dim Variable As TipoDeDatos
Por ejemplo, para declarar una variable que almacene las ventas netas de un producto
en el mes de enero (el mes 1 del ao), sera como se muestra a continuacin:
Dim curVentas1 As Currency

Capitulo 6: Variables y tipos de datos 151
Por otro lado, si queremos almacenar el mismo dato para el primer semestre del ao, tal
vez sera conveniente lo que se muestra a continuacin:
Dim curVentas1 As Currency
Dim curVentas2 As Currency
Dim curVentas3 As Currency
Dim curVentas4 As Currency
Dim curVentas5 As Currency
Dim curVentas6 As Currency
Lo que implica 6 posiciones en memoria, referenciadas por 6 identificadores o nombres
de variables. Como sabemos. Visual Basic tiene un nmero limitado de identificadores
posibles para una aplicacin y aunque ciertamente estamos muy lejos de agotar el lmite
mximo, estamos contribuyendo a reducir los identificadores disponibles. Adems, entre
ms nombres de variables diferentes utilicemos, ms trabajo le costar a Visual Basic (y a
usted) mantener siempre presente de qu se trata cada uno de ellos.
Debido a que cada una de las variables contendr informacin de la misma naturaleza, en
cierta forma relacionada, no se podra reducir a uno el nmero de identificadores
utilizados?
La respuesta es s, a travs de las matrices. La sintaxis de la instruccin para definir
matrices es:
Dim Variable(NmeroDeSubndices) As TipoDeDatos
Una matriz es un conjunto de posiciones de memoria (dimensin) que almacenan datos de
una misma naturaleza (elementos), mismos que pueden ser referenciados a travs de un
nmero consecutivo de posicin (subndice), que se encuentra entre un nmero mnimo y
un nmero mximo (intervalo). Por ejemplo, para definir una matriz que sustituya a las
seis variables del ejemplo anterior, podramos hacer lo siguiente:
Dim curVentas(5) As Currency
Se preguntar por qu se defini como nmero de subndice el 5 y no el 6, ya que se trata
de representar el equivalente a 6 variables; la respuesta es que Visual Basic siempre
considera el inicio de los subndices a partir del cero, de tal forma que se tendra en
memoria realmente lo siguiente:








152 Parte 2: Elementos de programacin
curVentas@(0)
curVentas@(1)
curVentas@(2)
curVentas@(3)
curVentas@(4)
curVentas@(5)
Es decir, 6 posiciones. En resumen: esto es una matriz llamada curVentas, tiene una
sola dimensin, almacena 6 elementos y el intervalo de sus subndices va de 0 a 5.
Si regresamos a la idea original, quiz resulte extrao que curVentas(0) almacene las
ventas del mes 1, que curVentas(1) almacene las ventas del mes 2, y as
sucesivamente; no resulta natural. Para omitir el comportamiento predeterminado de
Visual Basic, puede indicar de manera explcita qu nmeros de subndices desea, por
ejemplo:
Dim curVentas(1 to 6) As Currency
Equivale a:
curVentas@(1)
curVentas@(2)
curVentas@(3)
curVentas@(4)
curVentas@(5)
curVentas(6)
Con lo que tendra una representacin natural, acorde a lo que quiere.
Las matrices pueden ser de 2 y 3 dimensiones, es decir, incluir doble o triple subndice. Suponga
que ya no le basta saber cunto se vendi en cada uno de los primeros 6 meses: desea saber
cunto se vendi en cada uno de los meses del segundo semestre del ao (meses del 7 al 12) y
adems desea conocer de manera especfica cunto se vendi de cada uno de los tres productos
que maneja la compaa (productos A, B y C).
Una solucin podra ser la siguiente:
Dim curVentas(7 to 12, 1 to 3) As Currency






Captulo 6: Variables y tipos de datos 153
Las posiciones de memoria se distribuiran de la siguiente manera:

La primera dimensin tiene 6 elementos, con subndices en un intervalo de 7 a 12 y la segunda
dimensin tiene 3 elementos, con subndices en un intervalo de 1 a 3.
Fundones de lmite de posiciones
El hecho de que Visual Basic permita determinar de manera especfica el intervalo en el que se
encontrarn los subndices de las matrices es una ventaja, pero tambin es una nueva preocupacin,
ya que si usted hace referencia a un subndice que no existe, Visual Basic generar error.
En el ejemplo anterior, invocar la variable curVentas(1,1) generara error, ya que no existe un
subndice 1 para la primera dimensin de la matriz.
=============================================================
Lo inesperado: Los errores ms comunes cuando trabaja con matrices son los siguientes:
El subndice est fuera del intervalo (error 9 en tiempo de ejecucin). Se hace referencia a un
subndice que no se encuentra en el intervalo de una dimensin. Soluciones: determine
claramente los lmites del intervalo de subndices para una dimensin dada; tambin verifique que
no est haciendo referencia a una dimensin en lugar de otra. No es lo mismo
curVentas(7,2) que curVentas(2,7).
No se puede asignar a una matriz, (error de compilacin). Es comn que olvide que una variable
se trata de una matriz y que pretenda asignarle un valor directamente, sin especificar el subndice
correspondiente. En nuestro ejemplo, colocar la asignacin curVentas = 20000. generara
un error. Soluciones: una vez que defina una matriz, no olvide especificar los subndices, ya que
de lo contrario, Visual Basic no sabr a qu elemento de la matriz se est refiriendo.
El nmero de dimensiones es incorrecto (error de compilacin). Se presenta cuando el nmero de
subndices proporcionados no corresponde al nmero de dimensiones de la matriz. Soluciones:
verifique el nmero de subndices que requiere proporcionar, basado en el nmero de
dimensiones que tiene definidas. Up error clsico es que al definir la matriz sustituyamos la
declaracin To por una





154 Parte 2: Elementos de programacin
coma (1 To 3 < > 1,3), lo que genera un nmero equivocado de dimensiones;
esta confusin sucede porque en casi todas las funciones la separacin de argumentos se da
utilizando la coma y es inusual colocar To entre parntesis.
=============================================================
Para resolver el desconocimiento de los lmites mnimos y mximos de un subndice dentro de un
intervalo, estn las funciones Lbound () y Ubound().
La sintaxis de las funciones es la siguiente:
Lbound ( NombreMatriz. [, Dimensin])
Lbound ( NombreMatriz. [, Dimensin])
Donde NombreMatriz es el nombre de la matriz que desea explorar. Dimensin es el nmero de
dimensin (contando de izquierda a derecha con respecto a la declaracin) que desea evaluar.
>> Uso de matrices y determinacin de lmites mnimos y mximos del intervalo de
subndices. [06.05]
A continuacin definir matrices en Visual Basic y determinar los valores mnimos y mximos del
intervalo de subndices. Imagine que desea almacenar los nombres de los alumnos que obtuvieron
las 2 mejores calificaciones en los primeros 3 exmenes de ingls que han sido aplicados en una
escuela determinada.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate.

Dim strAlumno(1 To 2, 1 To 3) As String

strAlumno$(1, 1) = InputBox("1er lugar en el primer examen:")
strAlumno$(1, 2) = InputBox("1er lugar en el segundo examen:")
strAlumno$(1, 3) = InputBox("1er lugar en el tercer examen:")
strAlumno$(2, 1) = InputBox("2o lugar en el primer examen:")
strAlumno$(2, 2) = InputBox("2o lugar en el segundo examen:")
strAlumno$(2, 3) = InputBox("2o lugar en el tercer examen:")

Print "Reconocimientos por examen"
Print "Primer examen"
Print "1.-"; strAlumno$(1, 1)
Print "2.-"; strAlumno$(2, 1)





















Captulo 6: Variables y tipos de datos 155

Print "Segundo examen"
Print "1.-"; strAlumno$(1, 2)
Print "2.-"; strAlumno$(2, 2)
Print "Tercer examen"
Print "1.-"; strAlumno$(1, 3)
Print "2.-"; strAlumno$(2, 3)

Print "Inicio intervalo, dimensin 1: "; LBound(strAlumno$, 1)
Print "Fin intervalo, dimensin 1: "; UBound(strAlumno$, 1)

Print "Inicio intervalo, dimensin 2: "; LBound(strAlumno$, 2)
Print "Fin intervalo, dimensin 2: "; UBound(strAlumno$, 2)

MsgBox "Fin del programa"
End
2. Ejecute el programa.

Option Explicit
Visual Basic reconoce las variables que son utilizadas en el cdigo aun cuando no las haya
declarado de manera explcita. Para los principiantes esto resulta muy prctico, ya que si olvidan
declarar una variable, su programa no marcar error. Si no declaramos una variable. Visual Basic lo
hace por nosotros.
Como podr imaginar, tanta belleza no es posible. Alguien le dijo a Visual Basic de qu tipo de
datos debe ser una variable que olvidamos declarar? La respuesta a esa pregunta es no, y por lo
tanto declara la variable de tipo variant, que es la que ms memoria consume. En Visual Basic
los errores ms temibles son de semntica y no de sintaxis. Probablemente Visual Basic trate de
solucionarle un problema de sintaxis cambiando el resultado de sus programas; en procesos grandes
y complejos, puede perder horas tratando de buscar un error de semntica cuando el error es de
sintaxis.
Para evitar esto. Visual Basic cuenta con una instruccin, llamada Option Explicit, que
determina que todas las variables utilizadas en los programas debern ser declaradas de manera
explcita antes de ser utilizadas.
>> Declaracin automtica de variables en Visual Basic. [06.06]
A continuacin conocer la manera en que Visual Basic declara variables por usted y los problemas
que eso le puede ocasionar.


















156 Parte 2: Elementos de programacin
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
2. A travs del men Herramientas - Opciones... - Editor, revise que la opcin Requerir
declaracin de variables est desactivada.
Editar cdigo: Form, Evento: Activate.
intUnidadesVendidas% = 5
intPrecioUnitaric% = 100
3. Ejecute el programa. Vea que el programa no genera error.
Continuar editando cdigo: Form, Evento: Activate.

intTotal% = intUnidadesVendidas% * inttPrecioUnitario%
print intTotal%

4. Vea cmo en el punto 3 se le indic que tecleara el nombre de la variable
intPrecioUnitario con doble "T", siendo que en el punto 2 se haba especificado
un valor de 100 a una variable que no contiene doble "T". El clsico error del "dedo
veloz". Ejecute el programa.
5. Si hubiera cometido este error en la realidad, en un programa de 100 o ms lneas, se
preguntara, por qu me dio O si debi haber arrojado 500? Buscar la solucin sera
muy cansado e improductivo.
>> Uso de Option Explicit (requerir la declaracin de variables de manera explcita).
[06.07]
A continuacin utilizar Option Explicit para evitar el uso de variables no decla-
radas.
1. Hasta el momento, su cdigo en el procedimiento Form_Activate() luce como
sigue:
intUnidadesVendidas% = 5
intPrecioUnitario% = 100
intTotal% = intUnidadesVendidas%, * inttPrecioUnitario%
print intTotal%





Captulo 6: Variables y tipos de datos 157
Modificar cdigo: Form, Evento: Actvate.
Private Sub Form_Activate( )
Dim intUnidadesVendidas As Integer
Dim intPrecioUnitario As Integer
Dim intTotal As Integer
intUnidadesVendidas% = 5
intPrecioUnitario^ = 100

. . .
2. En el cuadro Objeto, seleccione (General). Observe cmo en el cuadro Proce-
dimiento/Evento se coloca automticamente la palabra (Declarations). Est usted nada ms
y nada menos que en la seccin de declaraciones generales. Lo que ponga aqu se aplicar a
todo el mdulo, es decir, a todo el formulario.
3. Escriba Option Explicit
4. Ejecute el programa. Vea cmo Visual Basic marcar error; haga clic en el botn Aceptar del
mensaje de error. Se abrir la ventana Cdigo, sealando precisamente dnde se encuentra la
variable mal declarada, en otras palabras, hemos encontrado el error.
5. Elimine la "T" que sobra. Detenga la ejecucin del programa y vuelva a ejecutar. Ahora el
programa enviar el resultado correcto.
Option Explicit es de uso obligatorio para el programador profesional de Visual Basic,
as como la declaracin precisa de las variables y el tipo de datos al que pertenecen. Puesto que
sera un poco incmodo tener que estar codificando Option Explicit en cada formulario
que generemos, podemos decirle a Visual Basic que de manera predeterminada le coloque
Option Explicit a todos los formularios que generemos.
>> Cmo establecer Option Explicit de manera automtica para todos los formularios
nuevos. [06.08]
A continuacin establecer Option Explicit como condicin predeterminada de sus
proyectos en Visual Basic.












158 Parte 2: Elementos de programacin
1. A travs del men Herramientas - Opciones... - Editor, active la opcin Requerir
declaracin de variables.
1. Haga clic en Aceptar.

Conversin de datos
Visual Basic es un lenguaje muy prctico, pues procura no generar errores por cues-
tiones de incompatibilidad de tipos de datos, tan comunes en otros lenguajes. Esto
puede llevarle a preocuparse poco por los tipos de datos, pero recuerde, cada tipo de
datos tiene sus lmites y particularidades.
Casi todo lo que se captura en una interfaz creada en Visual Basic es texto y si estamos
trabajando en aplicaciones profesionales, deber ser convertido al tipo de datos
especfico que se requiera.
Las funciones de conversin de Visual Basic son las siguientes:

CBool (ExpresinAConvertir)
CByte (ExpresinAConvertir)
CCur (ExpresinAConvertir)
CDate [ExpresinAConvertir)
CDbl (ExpresinAConvertir}
CDec {ExpresinAConvertir)
CInt (ExpresinAConvertir}
CLng (ExpresinAConvertir)
CSng (ExpresinAConvertir)
CStr (ExpresinAConvertir)
CVar (ExpresinAConvertir)
IsDate (ExpresinAEvaluar)
Str (ExpresinAEvaluar)






Captulo 6: Variables y tipos de datos 159
El argumento ExpresinAConvertir es obligatorio; corresponde a la expresin que ser
convertida a un tipo de datos determinado.
Los tipos de datos devueltos son los siguientes (el nombre de la funcin determina el
tipo devuelto, como se muestra a continuacin):

Si la expresin del argumento ExpresinAConvertir que se pasa a la funcin est fuera
del intervalo del tipo de datos al que se va a convertir, se produce un error. Por ejemplo,
si intentara lo siguiente:
CByte(1000)







160 Parte 2: Elementos de programacin
Marcara un error, ya que no podra ser la existencia de un dato de tipo Byte mayor que
255. En general, el cdigo se puede documentar utilizando las funciones de conversin
de tipos de datos para indicar que el resultado de alguna de las operaciones se debera
expresar como un tipo de datos en particular, no como el tipo de datos predeterminado.
Por ejemplo, utilice Ccur para forzar la ejecucin de operaciones con aritmtica
monetaria en los casos en los que se hara con precisin simple, doble precisin o
aritmtica entera, es decir, si es operacin monetaria, por qu darle un tratamiento
diferente?
La funcin Val es prctica para convertir caracteres a nmeros, sin embargo debe uti-
lizar funciones de conversin de tipos en lugar de Val para proporcionar conversiones
que reconozcan las Variantes internacionales. Por ejemplo, cuando utiliza CCur, se
reconocen diferentes separadores decimales, de millares y varias opciones monetarias,
dependiendo de la configuracin regional establecida en su equipo.
Con respecto al redondeo de nmeros en el proceso de conversin, tenemos que cuando
la parte fraccionaria es exactamente 0,5, Cint y CLng siempre redondean al nmero
par ms cercano. Por ejemplo, 0.5 se redondea a O y 1.5 se redondea a 2.
Es conveniente que antes de intentar una conversin con datos de tipo Date/Time,
verifique si lo que desea convertir es una distribucin vlida. Utilice la funcin IsDate
para determinar si se puede convertir a Date/Time una fecha o una hora. CDate re-
conoce literales de fecha y literales de hora adems de nmeros comprendidos dentro del
intervalo de fechas aceptables. Al convertir un nmero a una fecha, la parte numrica
entera se convierte a una fecha. Cualquier parte fraccionaria del nmero se convierte a
la hora del da, comenzando a medianoche.
CDate reconoce formatos de fecha que se ajusten a la configuracin regional de su sis-
tema. Es posible que no se determine el orden correcto del da, mes y ao si lo pro-
porciona en un formato diferente del que reconoce la configuracin de fecha. Si usted
coloca el formato en orden diferente. Visual Basic realizar el ajuste lgico de acuerdo a
lo que su sistema tiene definido.
>> Uso de funciones de conversin. [06.09]
A continuacin comprobar el uso de algunas de las funciones de conversin de datos de
Visual Basic.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).

Editar cdigo: Form, Evento: Activate.
Print "Fechas ------





Captulo 6: Variables y tipos de datos 161
' Comprueba el ajuste de fecha y el uso de Cdate
Dim strFecha As String * 10
strFecha$ = "24/10/2000"
Print IsDate(strFecha$)
Print CDate(strFecha$)
strFecha$ = "10/24/2000"
Print IsDate(strFecha$)
Print CDate(strFecha$)
strFecha$ = "2000/10/27"
Print IsDate(strFecha$)
Print CDate(strFecha$)
Print "Nmeros - - - -"
' Diferencia en el tratamiento de datos
Dim strNumero(1 to 2) As String * 3
strNumero$(1) = "20"
strNumero$(2) = "30"
Print strNumero$(1) + strNumero$(2)
Print CInt( strNumero$(1) ) + Cint( strNumero$(2) )
2. Ejecute el cdigo.
La funcin Format
Visual Basic tiene una funcin que le permitir formatear a los datos que maneje en su
programa. Dicha funcin se llama Format y su sintaxis es como se muestra a con-
tinuacin:
Format( DatoAFonnatear, MscaraDeFormato)
El argumento DatoAFonnatear puede ser cualquier tipo de datos alfabtico, numrico o
de fecha y hora. El argumento MscaraDeFormato puede ser predefinido por Visual
Basic, llamado formato estndar, invocado por un nombre de formato o bien definido
por usted. El resultado de Format siempre es una cadena.












162 Parte 2: Elementos de programacin
En la tabla siguiente se muestran algunos de los nombres de formato ms comunes:

















Captulo 6: Variables y tipos de datos 163
>> Uso de la funcin Format. [06.10]
A continuacin comprobar el uso de la funcin Format utilizando nombres de
formato.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: form. Evento: Activate.
Dim dtmFecha As Date
Dim sngExacto As Single
Dim strTexto As String * 20
Dim bolLogico As Boolean
Print "Texto -------"
strTexto$ = "Texto de prueba"
Print Format(strTexto$, ">")
Print Format(strTexto$, "<")
Print "Numero ------"
sngExacto! = 390922.23
Print Format(sngExacto!, "General Number")
Print Format(sngExacto!, "Currency")
Print Format(sngExacto!, "Fixed")
Print Format(sngExacto!, "Standard")
Print Format(sngExacto!, "Scientific")
sngExacto! = .24
Print Format(sngExacto!, "Percent")
Print "Fecha ------
dtmFecha = #24/12/2000#
Print Format(dtmFecha,"Long Date")
Print Format(dtmFecha,"Medium Date")
Print Format(dtmFecha,"Short Date")
dtmFecha = #12:23:05#
Print Format(dtmFecha,"Long Time")
Print Format(dtmFecha,"Medium Time")
Print Format(dtmFecha,"Short Time")








164 Parte 2: Elementos de programacin

Print "Lgicos --------"
bolLogico = (4 > 3) ' Esto es Verdadero
Print bolLogico
Print Format(bolLogico,"Yes/No")
Print Format(bolLogico,"True/False")
Print Format(bolLogico,"On/Off")
2. Ejecute su cdigo.
En caso de que desee especificar sus propios formatos, tiene una amplia gama de
posibilidades; usted dispone de los siguientes caracteres:

Por ejemplo, vea lo que devolvera la siguiente aplicacin de la funcin Format:

Por otro lado, las fechas tienen su particular forma de ser representadas, para ejem-
plificarlas utilizaremos la palabra reservada Now, que devuelve la fecha y hora actuales
del sistema:









Captulo 6: Variables y tipos de datos 165


===============================================================
Lo inesperado: Dependiendo de las bibliotecas que tenga instaladas y de su con-
figuracin regional, es posible que las especificaciones de ao (por ejemplo, "yyyy" o "yy"
de algunos formatos no funcionen adecuadamente. Ese problema se corrige si especifica la
nomenclatura en el idioma que maneja, por ejemplo, si su idioma es el espaol, podr
requerir la especificacin "aaaa" y "aa", respectivamente.
===============================================================
>> Uso de la funcin Format, en formatos definidos por el usuario. [06.11]
A continuacin comprobar el uso de la funcin Format utilizando caracteres de formato.
:

1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo; Form, Evento: Activate.
Print Format(3515.4, "00000.00")
Print Format(8315.4, "#####.##")
Print Format(8315.4, "##,##0.00")
Print Format(215.4, "$##0.00")
Print Format(Now, "m/d/aa")
Print Format(Now, "dddd, mmmm dd, yyyy")
Print Format(Now, "d-mmm")
Print Format(Now, "mmmm-yy")
Print Format(Now, "hh:mm AM/PM")
Print Format(Now, "h:mm:ss a/p")
Print Format(Now, "d-mmmm h:mm")


2. Ejecute su cdigo.




166 Parte 2: Elementos de programacin
___________________________________________________________________________
Resumen
En este captulo:
Vimos cmo se maneja la funcin MsgBox, para desplegar mensajes y hacer con-
firmaciones al estilo de Windows.
Vimos cmo se maneja la funcin inputBox.
Vimos las reglas de nombrado de variables, los tipos de datos, los lmites de datos,
los caracteres de declaracin de tipo, etctera.
Vimos cmo definir matrices de una y dos dimensiones.
Vimos las funciones de conversin de datos.
Vimos cmo darles formato a los datos en Visual Basic.
Algunas respuestas a los ejercicios
[06.02] Uso de constantes de Visual Basic.
1.
MsgBox "Operacin exitosa", vbExclamation, "Mensaje del sistema"
2.
MsgBox "Dato invlido", vbOKOnly + vbCritical, "Error!"
3.
MsgBox "La unidad de disco no est lista", vbRetryCancel + _
vbCritical, "Mensaje del sistema"
4.
MsgBox "Desea continuar?", vbOKCancel + vbQuestion, _
"Mensaje del sistema"
5.
MsgBox "Si acepta:" & chr(13) & chr(10) & _
"- Los registros se actualizan" & chr(l3) & chr(10) & _
"- Se inicia una nueva operacin", vbOKCancel + _
vbQuestion, "Confirmacin"














Captulo 6: Variables y tipos de datos 167
[06.04] Determinacin del nombre, tipo de datos y alcance indicado para las variables
de memoria.
Los nombres de variables son sugeridos. Usted puede tener su propia idea de nombre de
variable descriptiva.
1. gsngTipoDeCambio!
2. bytCodigocolor
3. mblnprocedeInforme
4. gstrUsuario$



















168































Captulo
7
Operadores
y estructuras de control


Objetivos
Conocer las diferentes estructuras de control que pueden utilizarse en Visual Basic, a
efecto de programar iteraciones y rboles de toma de decisiones. Tambin se pretende
que sepa elaborar expresiones lgicas y aritmticas, determinando la precedencia de la
solucin de las expresiones.
Al finalizar este captulo deber:
Conocer y saber utilizar los operadores aritmticos
Conocer y saber utilizar los operadores comparativos
Conocer y saber utilizar los operadores lgicos
Dominar el uso de la instruccin If
Dominar el uso de la instruccin Select Case
Dominar el uso de la instruccin For Next
Dominar el uso de la instruccin Do Loop
Este captulo seguir la pauta marcada por el captulo anterior: la codificacin lo es
todo. No se desespere: conociendo los elementos de la codificacin, la creacin de la
interfaz es ms sencilla y divertida.
169




170 Parte 2: Elementos de programacin
Operadores aritmticos
Quin no conoce los operadores aritmticos? Por formar parte de la educacin bsi-. ca
de cualquier profesional en sistemas, difcilmente podramos agregar algo que no sepa
con respecto a ellos; quiz la novedad puede ser que expliquemos cmo utiliza los
operadores aritmticos el Visual Basic.
El lenguaje dispone de los siguientes operadores aritmticos:

===============================================================
Nota: En el caso de los datos de tipo String, la suma se encarga de concatenar o unir
las expresiones. Para evitar la ambigedad del operador "+", Visual Basic soporta el uso
del smbolo "&" para concatenacin de expresiones String.
===============================================================





Captulo 7: Operadores y estructuras de control 171
>> Uso de los operadores aritmticos. [07.01]
A continuacin aprender a utilizar los operadores aritmticos.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate.
Dim sngNumero1 As Single
Dim sngNumero2 As Single
Dim strTexto1 As String * 10
Dim strTexto2 As String * 10
SngNumero1!=5
sngNumero2! =2
Print "Nmero 1: " & sngNumero1!
Print "Nmero 2: " & sngNumero2!
Print "Suma (+):" & sngNumero1! + sngNumero2!
Print "Resta (-):" & sngNumero1! - sngNumero2!
Print "Multiplicacin (*):" & sngNumero1! * sngNumero2!
Print "Divisin (/):" & sngNumero1! / sngNumero2!
Print "Divisin a enteros (\):" & sngNumero1! \ sngNumero2!
Print "Residuo (mod):" & sngNumero1! Mod sngNumero2!
Print "Exponenciacin (^):" & sngNumero1! ^ sngNumero2!
strTexto1$ = "Visual "
strTexto2$ = "Basic "
Print "Concatenacin (+):" & strTexto1$ + strTexto2$
Print "Concatenacin (&):" & strTexto1$ & strTexto2$
Print "Concatenacin (&):" & Trim(strTexto1$) & _
Trim(strTexto2$)
Print "Concatenacin (&):" & Trim(strTexto1$) & " " & _
Trim(strTexto2$)





172 Parte 2: Elementos de programacin
Operadores comparativos
Estos operadores permiten analizar la relacin que guardan dos elementos entre s,
regresando a travs de un valor de False (Falso) o True (Verdadero) o Null (Nulo).
Hasta el momento no hemos tratado los valores nulos; stos son la ausencia de valor alguno
y su utilidad es para aplicaciones especficas.
La siguiente tabla describe los operadores comparativos que Visual Basic maneja:

En el caso del operador "=", tambin se utiliza para la asignacin simple de valores a
variables y constantes; ser tomada en ese sentido dependiendo de la sintaxis del programa.
Algunos ejemplos del uso de estos operadores son:



"A" = "B" Falso
1 > 0.5 Verdadero
2 >= 2 Verdadero
"S" < "s" Verdadero


En lo que se refiere a la comparacin, las letras maysculas tienen un valor en cdigo
ASCII menor a las minsculas, y por tanto, son menores. Adicionalmente, la "A" es menor
que la "Z".




Captulo 7: Operadores y estructuras de control 173
Cdigo ASCII
El juego de caracteres de 7 bits denominado Cdigo Estndar Estadounidense para el
Intercambio de Informacin (ASCII) es ampliamente utilizado para representar letras y
smbolos de en un teclado estndar de EE.UU. El juego de caracteres ASCII es igual que
los primeros 128 caracteres (0-127) del juego de caracteres ANSI, utilizado por las
mquinas antiguas.
Es importante que conozca algunas referencias del cdigo ASCII que pueden serle de
utilidad.
Cdigo Representa
_________________________________________________________________________
8 BackSpace (retroceso)
9 Enter (Intro)
10 SpaceBar (Barra espadadora)
11 "@"
92 "\"
48 al 57 "0" al "9"
65 al 90 "A" a la "Z"
97 al 122 "a"ala"z"
255, 233, 237, 243, 250, 241 "", "", "", "", "", ""
Algunas personas, sobre todo aquellas que no tienen su teclado configurado ade-
cuadamente, saben que si mantienen oprimida la tecla Alt y teclean en el teclado numrico
un cdigo ASCII, ste aparecer. Para ello es necesario que el teclado numrico est
activado (teniendo el Bloq Num / NumLock activado).
De tal forma que:
Alt + <64> = @
Visual Basic, por otro lado, tiene funciones que permiten obtener la representacin grfica
de un cdigo ASCII, as como de obtener el cdigo ASCII a partir de una representacin
grfica. Las funciones que lo permiten son Chr( ) y Asc( ), respectivamente.








174 Parte' 2: Elementos de programacin
Sintaxis:
Chr( CdigoASCII)
Asc( Carcter )
Ejemplos:
Chr( 64 ) "@"
ASC( "@" ) 64
>> Cmo se resuelven las condiciones que incluyen operadores de comparacin. [07.02]
A continuacin aprender cmo se resuelven los operadores de comparacin. Escriba en
la lnea si el valor obtenido es True o False.
1. "Casa" > "casa" ____________
2. vbOKCancel = 1 ____________
3. 3000 <> 3000.00 ____________
4. 2000 >= -2000 ____________
Operadores lgicos
Los operadores lgicos sirven para unir o negar condiciones. Los operadores lgicos
bsicos son:
NOT. Niega el resultado de una condicin. Revierte el valor; si la condicin que
afecta es True, producir False y viceversa.
AND. Cuando de entre dos condiciones, ambas deben ser True para que en su
conjunto la expresin sea True. (Todas las condiciones True True.)
OR. Cuando de entre dos condiciones, al menos una debe ser True para que en su
conjunto la expresin sea True. (Al menos una condicin True True.)
XOR. Cuando de entre dos condiciones, al menos una cumple por True, pero no las
dos.







Captulo 7: Operadores y estructuras de control 175
================================================================
Nota: Tambin existen Eqv e Imp como operadores lgicos, mismos que no son
detallados en este libro. Tambin se excluyeron los resultados de aquellas expresiones que
involucran valores nulos (Null). ..
Evitamos su referencia para no complicar la explicacin del presente tema; revise la
documentacin en lnea de Visual Basic para profundizar sobre dichos temas.
================================================================
Ejemplos:
NOT "A" = "B"
True, porque "A" = "B" es False, pero la negacin es True.
"A" = "B" AND 1 > 0.6
False, porque no todas las condiciones son True.
"A" = "B" OR 1 > 0.5
True, porque al menos una condicin es True.
En caso de que tenga ms de dos condiciones conjuntas, entra en operacin la preferencia.
Consiste en determinar el orden en que las condiciones se deben resolver.
Ejemplos:
"A" = "B" OR 1 > 0.5 AND 2 >=2 AND "S" < "S"
True; las condiciones se resuelven de izquierda a derecha. Vea la explicacin
basada en la figura 7.1.




176 Parte 2: Elementos de programacin

Siguiendo el orden de izquierda a derecha, la primera y segunda condiciones se
resuelven ("A" = "B" OR 1 > 0.5) y generan un valor True.
Ese resultado se resuelve en conjunto con la tercera condicin (True AND 2 >= 2) y
generan un valor de True.
Ese resultado se resuelve con la cuarta condicin (True AND "S" < "s") y generan el
valor final, que es True.
Sera como tener parntesis imaginarios:
( ( ("A" = "B" OR 1 > 0.5) AND 2 >= 2) AND "S" < "s")
En donde las condiciones encerradas en los parntesis de mayor profundidad se
resuelven primero.
Si usted agrega de manera explcita parntesis en las condiciones, les asignar pre-
ferencia. Por ejemplo, cambiemos un poco el orden del ejercicio anterior y veamos qu
sucede.
"S" < "s" OR 2 >= 2 AND 1 > 0.5 AND "A" = "B"
De acuerdo a lo que vimos, se resolvera la primera condicin con la segunda (True OR
True True), el resultado se resolvera con la tercera (True AND True True) y el
resultado se resolvera con la cuarta (True AND False False).
El resultado de lo ltimo que se resolvi fue False.











Captulo 7: Operadores y estructuras de control 177
Cmo cambiara la condicin, mediante el uso de parntesis, para que el resultado
fuera verdadero? Soluciones:
("S" < "s" OR ( 2 >= 2 AND 1 > 0.5 AND "A" = "B"))
De esta forma, forzamos a qu en primera instancia se resuelva el parntesis de mayor
profundidad, que contiene la segunda, tercera y cuarta condiciones (True AND True
AND False False); el resultado se resuelve con la primera condicin, por ser el
siguiente parntesis de mayor profundidad (True OR False True). Considere como
regla que siempre tiene que cerrar los parntesis que abra.
Una colocacin inadecuada de condiciones puede arrojar resultados errneos; le
recomendamos que aunque de forma predefinida existe una preferencia, usted deter-
mine claramente qu preferencia desea, utilizando parntesis cuando tenga ms de una
condicin por resolver.
>> Cmo especificar la preferencia al resolver condiciones, mediante el uso de
parntesis. [07.03]
A continuacin aprender a manipular la preferencia de resolucin de condiciones
utilizando parntesis. Considere que la variable Sueldo tiene un valor de 1200.
1. Coloque los parntesis para que el resultado siempre sea Verdadero :
30 > 10 OR "Robles" > "Zaragoza" AND Sueldo = 10000
2. Coloque los parntesis para que el resultado siempre sea Falso :
30 > 10 OR "Robles" > "Zaragoza" AND Sueldo = 10000


Prioridad entre operadores
Cuando hay varias operaciones en una misma expresin, cada parte de la misma se
evala y se resuelve en un orden predeterminado, segn la prioridad de los operadores.
Cuando hay expresiones que contienen operadores de ms de una categora (arit-
mticos, de comparacin y lgicos), se resuelven antes las que tienen operadores
aritmticos, a continuacin las que tienen operadores de comparacin y por ltimo las
de operadores lgicos. Esto tiene sentido si toma en cuenta que la materia prima para
los operadores aritmticos son valores numricos o cadenas, para generar un nuevo












178 Parte 2: Elementos de programacin
valor numrico o de cadena; los operadores de comparacin, por su parte, tienen como
materia prima dos valores numricos o de cadena para determinar un valor lgico; por
ltimo, los operadores lgicos permiten generar un valor lgico de dos valores lgicos.
Todos los operadores de comparacin tienen la misma prioridad; es decir, se evalan de
izquierda a derecha, en el orden en que aparecen. Los operadores lgicos y aritmticos
se evalan en el siguiente orden de prioridad:


Cuando hay multiplicacin y divisin en la misma expresin, cada operacin se evala a
medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan
adiciones y sustracciones en una misma expresin, cada operacin se evala tal como
aparecen de izquierda a derecha. Es posible usar parntesis para saltar el orden de prefe-
rencia y forzar que algunas partes de una expresin se evalen antes que otras. Las
operaciones entre parntesis se realizan antes que las que no estn entre parntesis. Sin
embargo, dentro de los parntesis, la precedencia de los operadores se mantiene.
El operador de concatenacin de cadenas (&) no es realmente un operador aritmtico,
pero en orden de prioridad se encuentra a continuacin de todos los operadores
aritmticos y antes que todos los operadores de comparacin.
No olvide que por ms larga que parezca una expresin, todos los operadores actan
sobre dos expresiones y de dos en dos, hasta dejar un solo valor final.

Instruccin If (condicional)
Todo lenguaje de programacin requiere de una instruccin que le permita manejar
condiciones que le permitan elaborar un rbol de toma de decisiones, ya que es la nica
manera de especificar la secuencia lgica de un proceso; en el caso de Visual Basic, la
instruccin que se utiliza es If, que ejecutar instrucciones dependiendo de un valor
True o False, correspondiente a una expresin lgica.










Captulo 7: Operadores y estructuras de control 179
La sintaxis de la instruccin es la siguiente (sintaxis 1):
If Condicin Then
Instrucciones
End If
Donde If es el inicio de la estructura de control, End If es el fin de la estructura de
control. Instrucciones es el bloque de cdigo que se controla y Condicin es la expresin
lgica que determina si Instrucciones se ejecutar o no. Slo en caso de que Condicin
sea True, Instrucciones se ejecutar..
Ejemplo:

La expresin lgica que determina la ejecucin del cdigo controlado por If, puede
existir ya sea por el manejo de comparacin o a travs de una expresin de tipo lgico,
como podra ser una variable de tipo lgico con un valor True o False; el valor Null se
considera False.
If es una instruccin con principio y fin, por lo que si inicia un bloque, tendr que
concluirlo. If, al igual que otras instrucciones que tienen un inicio y un fin, son llamadas
estructuras de control, ya que basados en una condicin dada, determinan la forma en que
se ejecutar un bloque de cdigo (Instrucciones), una o ms veces.








180 Parte 2: Elementos de programacin
=====================================================
Lo inesperado: Cuando trabaja con la instruccin If, los errores ms comunes son:
Bloque if sin end if (error de compilacin}. Sucede cuando se abre un bloque If pero
nunca se concluye con un End if. Soluciones: verifique que el nmero de If y End If
sea el mismo. Es recomendable que sangre el cdigo para guardar la proporcin del
programa.
End If sin bloque If (error de compilacin). Sucede cuando se cierra (End If) un
bloque If que nunca fue abierto. Soluciones: verifique que el nmero de If y End If
sea el mismo. Es recomendable que sangre el cdigo para guardar la proporcin del
programa.
=====================================================

En nuestro caso, si (if) Sueldo es mayor que 4500 (condicin), entonces (then)
proceder a ejecutar las Instrucciones que se encuentren entre el inicio y el final del
bloque If, que asignan el valor 3000 a la variable Limite_Credito.
En caso de que slo se vaya a ejecutar una y slo una instruccin entre el inicio y el final
del bloque If, la instruccin puede escribirse en una sola lnea:

If Sueldo > 4500 Then Limite_Credito = 3000
If ejecutar las Instrucciones que sigan despus del componente Then en caso de que
la Condicin sea Verdadera, hasta encontrar el final del bloque (End If). If tambin
tiene la capacidad de ejecutar instrucciones si la condicin es Falsa, a travs del com-
ponente Else.
La sintaxis de la instruccin es la siguiente (sintaxis 2):

If Condicin Then
Instrucciones_Verdadero
[Else
Instrucciones _Falso ]
End if










Captulo 7: Operadores y estructuras de control 181
Donde Condicin es la expresin lgica a evaluarse. Instrucciones_Verdadero ser el
cdigo que se ejecutar en caso de que Condicin sea True. Instrucciones_Falso ser el
cdigo que se ejecutar en caso de que Condicin no sea True.
Ejemplo:

Lo que indicara que si (if) el Sueldo es mayor que 4000, entonces (then)
Limite_Credito tendr un valor de 3000, de lo contrario (Else),
Limite_Credito tendr el valor 1000.
En ocasiones es necesario enlazar varias condiciones para seleccionar una opcin de entre
varias posibles; para ello se utiliza el elemento Elself, que acta como Else pero
habilita un nuevo bloque If. El uso de Elself obliga a la definicin de una condicin
nueva a evaluar; el uso de Else simple, implica solamente que la ltima condicin
evaluada fue Falsa.
La sintaxis de la instruccin es la siguiente:
If Condicin Then
Instrucciones
[Elself Condicin1 Then
Instrucciones
. . .
[Else
Instrucciones] ]
Endif









182 Parte 2: Elementos de programacin
Ejemplo:


If Sueldo > 4000 Then
Limite_Credito = 3000
Elself Sueldo > 3500 Then
Limite_Credito = 1500
Elself Sueldo > 1500 Then
Limite_Credito = 500
Else
Limite_Credito = 0
End If

Lo que indicara que si (if) el Sueldo es mayor que 4000, entonces (then) Li-
mite_Credito tendr el valor 3000, de lo contrario, si (elseif) Limite_Credito
es mayor que 3500, entonces (then) Limite_Credito tendr el valor 1500, de lo
contrario, si (elseif) Limite_Credito es mayor que 1500, entonces (then) Li-
mite_Credito tendr el valor 500, de lo contrario (else) Limite_Credito
tendr el valor 0.
Los bloques If, por otro lado, pueden anidarse, es decir, estar unos dentro de otros.
Veamos el ejemplo del cdigo anterior visto a travs de condiciones anidadas.











Captulo 7; Operadores y estructuras de control 183


If Sueldo > 4500 Then
Limite_Credito = 3000
Else
If Sueldo > 3500 Then
Limite_Credito = 1500
Else
If Sueldo > 1500 Then
Limite_Credito = 500
Else
Limite_Credito = 0
End If
End If
End If

Vea la importancia de darle la sangra adecuada al cdigo; el hecho de que las lneas de
cdigo tengan diferente distancia con respecto a la primera posicin de la izquierda
permite visualizar de manera fcil que todos los bloques If se han cerrado de manera
adecuada con End If.





184 Parte 2: Elementos de programacin
Observe cmo se vera el cdigo sin sangra:
If Sueldo > 4500 Then
Limite_Credito = 3000
Else
If Sueldo > 3500 Then
Limite_Credito = 1500
Else
If Sueldo > 1500 Then
Limite_Credito = 500
Else
Limite_Credito = 0
End If
End If
End If
En este esquema sera muy fcil cometer un error y muy difcil detectarlo.
La sangra ser aplicada en todas las estructuras de control que sean referidas en
este libro.

Select Case
En el caso de nuestro ejemplo con la instruccin If, vimos que todas las comparaciones
se realizaron basndose en la evaluacin de un mismo dato, en este caso Sueldo.
Cuando se requiere realizar una cantidad de comparaciones sobre una misma expresin,
se recomienda utilizar la instruccin Select Case, cuya sintaxis es la siguinte:
Select Case ExpresinAEvaluar
Case Condicin
Instrucciones
[Case {Condicin | Else}
Instrucciones ]
End Select
Se va construyendo un rbol de toma de decisiones basado en una ExpresinAEvaluar.
Puede agregar tantas instrucciones Case como desee e incluso puede anidar las estruc-
turas Select Case.












Captulo 7: Operadores y estructuras de control 185
Si al momento de evaluar Condicin, un determinado valor de ExpresinAEvaluar se
cumple en dos casos, se ejecutar para el primero que se encuentre. El caso Else se
aplica cuando el valor de ExpresinAEvaluar no se cumple en ninguno de los casos
anteriores dentro de la estructura.

====================================================
Lo inesperado: Cuando trabaja con la instruccin If select case, los errores ms
comunes son:
Select Case sin End Select (error de compilacin). Sucede cuando se abre un bloque
Select Case pero nunca se concluye dicho bloque con un End Select.
Soluciones: verifique que el nmero de Select Case y End Select sea el
mismo. Es recomendable que sangre el cdigo para guardar la proporcin del
programa.
End Select sin Select Case (error de compilacin). Sucede cuando se cierra (End
Select) un bloque Select Case que nunca fue abierto. Soluciones: verifique
que el nmero de Select Case y End Select sea el mismo. Es recomendable
que sangre el cdigo para guardar la proporcin del programa.
====================================================

Para ver cmo funciona esta instruccin, imagnese la siguiente situacin hipottica:
una compaa tiene 35 categoras de empleados; cada categora tiene un ingreso
determinado, en donde las categoras de nmero ms alto son las de mayor ingreso por
salario, y existe una relacin directamente proporcional entre categora y sueldo. Se
acaba de autorizar un aumento de sueldo general en la compaa, bajo las siguientes
polticas: el personal de alto nivel (categora superior a 19) no tendr aumento; las
categoras 18, 17 y 14 recibirn el 15 por ciento de aumento; de la categora 8 a la 13,
recibirn el 10 por ciento de aumento, a excepcin de la categora 10, que es la categora
ms rezagada con respecto al salario, pues recibir el 25 por ciento. Al resto del
personal, se le dar un 5 por ciento de aumento.
Cmo codificara una estructura Select Case que atendiera esta necesidad?
Veamos:
Select Case Categoria
Case Is > 19
Aumento =0
Case 18, 17, 14
Aumento =0.15
Case 10
Aumento =0.25
Case 8 To 13
Aumento =0.1
Case Else
Aumento = 0.5
End Select





186 Parte 2: Elementos de programacin
Vea cmo se especificaron las condiciones y aplique la sintaxis en aquellos casos que lo
requiera.
Es importante que se d cuenta que todas las condiciones giran en tomo a la Expre-
sinAEvaluar (en nuestro ejemplo. Categora), ya que si no hace uso de dicha
expresin, las condiciones no se considerarn. Usted puede agregar como instruccin
una lnea con una condicin Case que se resuelva como True, pero que no involucre a
Categora; en ese caso, el cdigo dependiente de dicha condicin nunca se ejecutar.
For Next
For Next es la estructura iterativa por excelencia que permite repetir la ejecucin de un
conjunto de instrucciones un nmero conocido de veces, determinado por las ocu-
rrencias de un nmero que se incrementa o reduce a una determinada proporcin, desde
un lmite inferior hasta un lmite superior.
Su sintaxis es:
For Variable = Valorinicial To ValorMximofinal [Step Incremento]
Instrucciones
Next Variable
Donde Variable es una variable de memoria de tipo entero, que permitir controlar las
iteraciones del proceso. Valorinicial es el valor inicial a partir del cual el incremento o
decremento se llevar a cabo. ValorMximo es el valor al que la cuenta deber llegar.
Incremento es la constante entera que marcar la cantidad de incremento o decremento
que sufrir Variable en cada iteracin.
Ejemplos:
' Cuenta del 1 al 10
For i = 1 To 10
Print i
Next i
' Serie del 5
For i = 0 To 50 Step 5
Print i
Next i










Captulo 7: Operadores y estructuras de control 187

' Decremento del 10 al 1
For i = 10 To 1 Step -1
Print i
Next i
Si se omite la especificacin Step, se asume un incremento positivo de uno. Si in-
cremento es negativo, hablamos de un decremento, en trminos reales.
Una instruccin que puede ser til en el caso de For Next es Exit For, que interrum-
pe la ejecucin del For como si ya hubiera cumplido todas las iteraciones.
>> Uso de For Next. [07.04]
A continuacin aprender a utilizar For Next. Este ejemplo tambin le ayudar a
practicar otras instrucciones vistas hasta el momento.
El ejemplo consiste en preguntar 6 nmeros enteros, determinar cul es la suma de todos
y cul fue el nmero ms grande proporcionado.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate

Dim intVentas(1 To 6) As Integer
Dim strMensaje As String * 25
Dim intContador As Integer
Dim intSuma As Integer
Dim intMaximo As Integer
' Primer proceso iterativo: preguntar datos.
For intContador% = 1 To 6
strMensaje$ = "Captura del nmero " & _
Format(intContador%, "##")
intVentas!%(intContador%) = _
InputBox("Dame un nmero entero", strMensaje$)
Next intContador%







188 Parte 2: Elementos de programacin
' Segundo proceso iterativo: desplegar lo capturado-.
Print "Captura---"
For intContador% = 1 To 6
Print intVentas!%(intContador)
Next intContador%
' Tercer, proceso iterativo: sumar cantidades
' y determinar el nmero mximo.
intSuma% =0
IntMaximo% =0
For intContador% = 1 To 6
intSuma% = intSuma% + CInt(intVentas!%(intContador%))
If intVentas!%(intContador%) > intMaximo% Then
IntMaximo% = intVentas!%(intContador%)
End If
Next intContador%
Print "Resultados----"
Print "La suma es " & Format(intSuma%, "###,###,###.##")
Print "El nmero mximo fue " & _
Format(intMaximo%, "###,###,###.##")
>> Uso de Exit For. [07.05]
A continuacin aprender a utilizar Exit For.
Esta seccin requiere que ya haya realizado la prctica anterior. Si al capturar
los nmeros teclea cero, ya no se capturarn ms nmeros.

Modificar cdigo: Form, Evento: Activate.
For intContador% = 1 To 6
strMensaje$ = "Captura del nmero " & _
Format(intContador%, "##")
intVentas!%(intContador%) = _
InputBox("Introduzca un nmero entero", strMensaje$)
If intVentas!%(intContador%) = 0 then
MsgBox "No ms nmeros"
Exit For
End If
Next intContador%

====================================================
Lo inesperado: Cuando trabaja con la instruccin For Next, los errores
ms comunes son:
For sin Next (error de compilacin). Sucede cuando abre un bloque For pero
nunca concluye dicho bloque con un Next. Soluciones: verifique que el
nmero



Captulo 7: Operadores y estructuras de control 189
de For y Next sea el mismo. Es recomendable que sangre el cdigo para guardar la
proporcin del programa.
Next sin For (error de compilacin). Sucede cuando cierra (Next) un bloque For
que nunca abri. Soluciones: verifique que el nmero de For Case? y Next sea el
mismo. Es recomendable que sangre el cdigo para guardar la proporcin del
programa.
Referencia de variable de control Next no vlida (error de compilacin). La variable
utilizada en una instruccin For Next, determina el control iterativo; la misma
variable que se utiliza en el For debe ser utilizada en el Next. El error se presenta
cuando el primer Next encontrado no utiliza la variable utilizada en el ltimo For
abierto. Soluciones: verifique que los nombres de variables tanto en el For como en el
Next sean los mismos. En el caso de For Next anidados, verifique que el ltimo
abierto sea el primero en cerrarse.
===================================================
Do Loop
Do Loop es una estructura iterativa que permite repetir la ejecucin de un conjunto de
instrucciones un nmero desconocido de veces, determinada por el cumplimiento de una
condicin.
Su sintaxis es:
Do {While | Until} Condicin
Instrucciones
Loop
Donde Condicin es la expresin lgica que mientras su valor sea True, mantendr el
proceso iterativo, ejecutando Instrucciones. Do inicia la estructura de control, mientras
que Loop indica el final de dicha estructura.
Ejemplo:
Lo siguiente despliega un nmero mientras ste sea menor o igual a 10.
Dim intNumero As Integer
Do While intNumero% <= 10
intNumero% = intNumero% + 1
Print intNumero%
Loop






190 Parte 2: Elementos de programacin
La diferencia entre utilizar While (mientras que) o Until (hasta que) resulta obvia.
Dependiendo cmo quiera estructurar su cdigo, puede ser que desee ejecutar un
proceso mientras se cumpla una determinada situacin, o bien hasta que una deter-
minada condicin se cumpla.
En este tipo de estructura puede suspender la ejecucin en cualquier momento a travs
de la instruccin Exit Do. Es importante que sepa esto, ya que este tipo de estructura
de control se presta a crear estructuras de ejecucin indefinida, que slo podr romper a
travs de presionar la combinacin de teclas Ctrl+Inter (o Ctrl+Break).
>> Uso de Do Loop. [07.06]
A continuacin aprender a utilizar Do Loop. Comprobar que tienen un sentido
opuesto, pero son igualmente tiles.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).

Editar cdigo: Form, Evento: Activate.
Dim intNumero As Integer
intNumero% = 0
Print "Inicia Do While---"
Do While intNumero% <> 10
intNumero% = intNumero% + 1
Print intNumero%
Loop
Print "Fin---"
intNumero% = 0
Print "Inicia Do Until---"
Do Until intNumero% = 10
intNumero% = intNumero% + 1
Print intNumero%
Loop
Print "Fin---"

====================================================
Lo inesperado: Cuando trabaja con la instruccin Do Loop, los errores ms co-
munes son:
Do sin Loop (error de compilacin). Sucede cuando abre un bloque Do pero nunca
concluye con un Loop. Soluciones: verifique que el nmero de Do y Loop








Captulo 7: Operadores y estructuras de control 191
sea el mismo. Es recomendable que sangre el cdigo para guardar la proporcin del
programa.

Loop sin Do (error de compilacin). Sucede cuando cierra (Loop) un bloque Do que
nunca abri. Soluciones: verifique que el nmero de Do y Loop sea el mismo. Es
recomendable que sangre el cdigo para guardar la proporcin del programa.
====================================================


_____________________________________________________________________________________
Resumen
En este captulo:
Vimos los principales operadores de Visual Basic (aritmticos, de comparacin y
lgicos).
Vimos la precedencia en que se resuelven las expresiones y la utilidad de los
parntesis en dicha tarea.
Vimos las principales estructuras de control en Visual Basic, tales como If, Fon
Next,Case Select y Do Loop.
Vimos algunas generalidades del cdigo ASCH que nos pueden ser de utilidad.
Es importante tener bien comprendidos todos los puntos anteriormente referidos, ya que
son muy importantes para comprender el resto del libro.

Algunas respuestas a los ejercicios
[07.02] Cmo se resuelven las condiciones que incluyen operadores de com-
paracin.
1. False. Las maysculas tienen un valor menor que las minsculas y la comparacin se
hace letra por letra, comenzando de izquierda a derecha.
2. True.
3. False. En expresiones numricas el valor sin decimales o con decimales es lo mismo.
4. True.










192 Parte 2: Elementos de programacin
[07.03] Cmo especificar la preferencia al resolver condiciones, mediante el uso de
parntesis.
1. 30 > 10 OR ("Robles" > "Zaragoza" AND Sueldo = 10000)
2. (30 > 10 OR "Robles" > "Zaragoza") AND Sueldo = 10000

































Captulo
8
Funciones de
manipulacin
de datos


Objetivo
Conocer las funciones ms importantes que tiene Visual Basic para manejar tiempo,
nmeros y cadenas.
Al finalizar este captulo deber:
Saber qu son las funciones
Conocer y saber utilizar las funciones de fecha y hora
Conocer y saber utilizar las funciones de manipulacin de cadenas
Conocer y saber utilizar las funciones matemticas
Conocer y saber utilizar las funciones trigonomtricas
Saber calcular algunos resultados para los cuales Visual Basic no tiene funciones
implcitas
Estamos seguros de que este captulo le servir de referencia.
193













194 Parte 2: Elementos de programacin
Qu son las funciones
Las funciones son aquellas estructuras del lenguaje que permiten obtener un dato que
necesitamos, ya sea porque el sistema lo posee o bien porque le proporcionamos un dato
de entrada (argumento, llamado en ocasiones parmetro), para que siendo sometido a
un proceso determinado, derive en un resultado.
Las funciones pueden ser implcitas, es decir, formar parte de Visual Basic o bien
Funciones Definidas por el Usuario (UDF's). Este captulo tratar de aquellas funciones
implcitas que pueden ser de mucha ayuda para el programador en los diferentes
procesos; la ventaja de la existencia de funciones implcitas radica en que si la funcin
ya existe, no habr necesidad de programarla. El poder de un lenguaje puede medirse,
ciertamente, en la cantidad de funciones que posee y en la facilidad que brinda para
crear nuevas funciones.
Algunas funciones, como ya mencionbamos, no requieren argumentos, como es el caso
de:
Now

Que devuelve la fecha de hoy.
Hay otras que s requieren argumentos, como es el caso de MsgBox:
MsgBox Genera error
MsgBox ("Algo") Es correcto, porque posee argumentos
Si no especificamos el argumento de mensaje, marcar error. Algunas funciones per-
miten ejecutarse sin asignar el valor devuelto a una variable; sin embargo, otras no, es
decir, requieren ser el extremo derecho de una expresin de igualdad.
Los grandes grupos de funciones que analizaremos son las siguientes:
Funciones de fecha y hora
Punciones de manipulacin de cadenas
Funciones numricas
Funciones trigonomtricas
Funciones de decisin







Captulo 8: Funciones de manipulacin de datos 195

Funciones de fecha y hora
Resumen de funciones a revisar en esta clasificacin:
Date Fecha del sistema
DateAdd Agrega un intervalo de tiempo especificado
DateDiff Nmero de intervalos de tiempo entre dos fechas dadas
DatePart Nmero correspondiente a una parte de una fecha dada
Day Da de una fecha dada
Hour Hora de una fecha/hora dada
IsDate Indica si una expresin se puede convertir a fecha
Minute Minutos de una fecha/hora dada
Month Mes de una fecha dada
MonthName Indica el nombre de un mes especificado por nmero
Now Fecha del sistema
Second Segundos de una fecha/hora dada
Time Hora del sistema
Timer Nmero de segundos transcurridos desde la media noche
WeekDay Nmero correspondiente al da de la semana de la fecha dada
WeekdayName Indica el nombre del da de la semana especificado
Year Ao de una fecha dada





















196 Parte 2: Elementos de programacin
______________________________________________________________________
Date
Tipo de datos que devuelve: Variant (Date/Time).
Devuelve la fecha y hora del sistema. Si se hace una asignacin, modifica la fecha del
sistema.
Sintaxis:
Date
Date = FechaAAsignar
Donde FechaAAsignar es la expresin de tipo Date/Time de la fecha que queremos que
tenga el sistema.
______________________________________________________________________
DateAdd
Tipo de datos que devuelve: Variant (Date/Time).
Devuelve una nueva fecha, resultado de agregar un intervalo determinado de tiempo a
una fecha.
Sintaxis:
DateAdd (Intervalo, Nmero, Fecha)
Donde Intervalo puede ser cualquiera de los que aparecen en la siguiente tabla:

Nmero es la cantidad de intervalo a agregar y Fecha es la expresin de tipo Date/Time
a la cual se le va a agregar el intervalo.









Captulo 8: Funciones de manipulacin de datos 197
______________________________________________________________________
DateDiff
Tipo de datos que devuelve: Variant (Long).
Devuelve la cantidad dada de un intervalo que existe de diferencia entre dos fechas.
Sintaxis:
DateDiff (Intervalo, Fecha1, Fecha2)
Donde Intervalo puede ser cualquiera de los intervalos mostrados en la funcin
DateAdd.
Fecha1 y Fecha2 son las fechas entre las que se determinar la diferencia.
______________________________________________________________________
DatePart
Tipo de datos que devuelve: Variant (Integer).
Devuelve el nmero correspondiente a una parte de la fecha, misma que es especificada
como un intervalo.
Sintaxis:
DatePart (Intervalo, Fecha)
Donde Intervalo puede ser cualquiera de los intervalos mostrados en la funcin
DateAdd. Fecha es la expresin de tipo Date/Time a partir de la cual se va a determi-
nar la parte de la fecha.

______________________________________________________________________
Day
Tipo de datos que devuelve: Variant (Integer).
Devuelve el nmero del da (1 a 31) de una fecha dada.
Sintaxis:
Day (Fecha)
Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
nmero de da.










198 Parte 2: Elementos de programacin
______________________________________________________________________
Hour
Tipo de datos que devuelve: Variant (Integer). Devuelve el nmero de la hora de una
fecha/hora dada. Sintaxis:
Hour(Fecha)
Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
nmero de hora.
______________________________________________________________________
Minute
Tipo de datos que devuelve: Variant (Integer).
Devuelve el nmero del minuto de una fecha/hora dada.
Sintaxis:
Minute(Fecha)
Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
minuto de la hora.
______________________________________________________________________
Month
Tipo de datos que devuelve: Variant (Integer). Devuelve el nmero del mes de una
fecha dada.
Sintaxis:
Month (Fecha)
Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
mes.















Captulo 8: Funciones de manipulacin de datos 199
______________________________________________________________________
MonthName
Tipo de datos que devuelve: String.
Devuelve la cadena que especifica el mes expresado en nmero.
Sintaxis:
MonthName (Mes [ , Abreviar] )
Donde Mes es el nmero del mes que desea determinar en cadena. Si coloca Abreviar,
el valor ser True y si lo omite, el valor del argumento ser False.
______________________________________________________________________
Now
Tipo de datos que devuelve: Variant (Date/Time).
Devuelve la fecha y hora del sistema.
Sintaxis:
Now
______________________________________________________________________
Second
Tipo de datos que devuelve: Variant (Integer). Devuelve el nmero del segundo de una
fecha/hora dada.
. Sintaxis:
Second (Fecha)

Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
segundo de la hora.



















200 Parte 2: Elementos de programacin
______________________________________________________________________
Time
Tipo de datos que devuelve: Variant (Date/Time).
Devuelve la fecha y hora del sistema. Si se hace una asignacin, modifica la hora del
sistema.
Sintaxis:
Time
Time = HoraAAsignar
Donde HoraAAsignar es la expresin de tipo Date/Time a partir de la cual se va a
establecer la hora del sistema.
______________________________________________________________________
Timer
Tipo de datos que devuelve: Single.
Devuelve el nmero de segundos transcurridos desde la media noche.
Sintaxis:
Timer
______________________________________________________________________
WeekDay
Tipo de datos que devuelve: Variant (Integer).
Devuelve el nmero entero que representa el da de la semana, donde el Domingo es 1 y
el Sbado es 7.
Sintaxis:
WeekdayName( Da [ , Abreviar ] )
Donde Da es el nmero del da de la semana que se desea determinar en cadena. Si
coloca Abreviar, el valor ser True y si lo omite, el valor del argumento ser False.



Captulo 8: Funciones de manipulacin de datos 201
__________________________________________________________
Year
Tipo de datos que devuelve: Variant (Integer).
Devuelve el nmero del ao de una fecha dada.
Sintaxis;
Year (Fecha}
Donde Fecha es la expresin de tipo Date/Time a partir de la cual se va a determinar el
ao.
>> Uso de funciones de fecha y hora. [08.01]
A continuacin aprender a utilizar las funciones de fecha y hora.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate.
Print Date
Print Time
Print "------------------------------"
Print "La fecha de hoy es: " & Now
Print "Ao: " & Year(Now)
Print "Mes: " & Month(Now)
Print "Dia: " & Day(Now)
Print "-- Usando DatePart ---"
Print "Ao: " & DatePart("yyyy", Now)
Print "Mes: " & DatePart("m", Now)
Print "Da: " & DatePart ("d", Now)
Print "Ubicacin en el ao"
Print "Trimestre: " & DatePart("q", Now)
Print "Semana: " & DatePart("ww", Now)
Print "Dia de la semana: " & DatePart("w", Now)
Print "Dia del ao: " & DatePart("y", Now)
Print "------------------------------"
cambiar a 200x las siguientes 2 lneas para tener ao actual
Print "Falta para el fin de ao del 2002"
Print (DateSerial(2001, 12, 31) - Now) & " das"






202 Parte 2: Elementos de programacin

Funciones de manipulacin de cadenas
(string)
Resumen de funciones a revisa: en esta clasificacin:
Asc Proporciona el cdigo ASCII de una representacin carcter.
Chr Proporciona la representacin carcter de un cdigo ASCII.
InStr Especifica la posicin de la aparicin de una cadena en otra.
InStrRev Especifica la posicin de la aparicin de una cadena en otra,
iniciando desde el final de la cadena.
IsEmpty Indica si una variable ha sido declarada.
IsNull Indica Si una variable tiene valor nulo (Null),
LCase Cambia a minsculas una cadena.
Len Devuelve el nmero de caracteres de una expresin.
Ltrim Elimina los espacios a la izquierda.
Mid Extrae un nmero determinado de caracteres de una cadena.
Replace Reemplaza una subcadena especificada con otra subcadena.
Rtrim Elimina los espacios a la derecha.
Space Repite un nmero determinado de espacios.
Str Convierte un nmero a cadena.
StrConv Convierte una cadena en base a cdigo de conversin.
String Repite una cadena un nmero de veces especificado.
StrReverse Escribe al revs una cadena.
Trim Elimina los espacios a la derecha y a la izquierda.
UCase Cambia a maysculas una cadena.












Captulo 8: Funciones de manipulacin de datos 203
__________________________________________________________
ASC
Tipo de datos que devuelve: Integer.
Devuelve el cdigo ASCII de la primera letra de una cadena.
Sintaxis:
Asc(Cadena)
Donde Cadena es una cadena a la cual se le va a determinar el cdigo ASCII de la
primera posicin.

__________________________________________________________
Chr
Tipo de datos que devuelve: String.
Devuelve un carcter a partir de su cdigo ASCII.
Sintaxis:
Chr(CdigoASCII)
Donde CdigoASCII es un nmero de cdigo ASCII vlido (0 - 255).
__________________________________________________________
InStr
Tipo de datos que devuelve: Variant (Long).
Devuelve la posicin en que se encuentra una cadena dentro de otra, a partir de una
posicin opcional.
Sintaxis:
InStr([Inicio, ] Cadena1, Cadena2)
Donde Cadena1 es la cadena en donde se busca la existencia de Cadena2; Inicio es
opcional e indica la posicin a partir de la cual se pretende buscar. Si no se encuentra
ninguna ocurrencia de Cadena2, en Cadena1, la funcin devolver 0; de manera
predeterminada, Inicio tiene el valor 1.





204 Parte 2: Elementos de programacin
__________________________________________________________
InStrRev
Tipo de datos que devuelve: Variant (Long).
Devuelve la posicin en la que se encuentra una cadena dentro de otra, a partir de una
posicin opcional, en un orden invertido (de atrs para adelante).
Sintaxis:
InStrRev(Cadena1, Cadena2 [, Inicio] )
Donde Cadenal es la cadena en donde se busca la existencia de Cadena2; Inicio es
opcional e indica la posicin a partir de la cual se pretende buscar. Si no se encuentra
ninguna ocurrencia de Cadena2 en Cadenal, la funcin devolver 0.

__________________________________________________________
IsEmpty
Tipo de datos que devuelve: Boolean.
Indica si una expresin ha sido inicializada.
Sintaxis:
IsEmpty(Expresin)
Donde Expresin es cualquier variable que se busca determinar si ya fue o no declarada
(que ha obtenido valor alguna vez, aunque ste sea 0 o nulo, o est vaco).

__________________________________________________________
IsNull
Tipo de datos que devuelve: Boolean.
Indica si una expresin contiene datos no vlidos o nulos (Null).
Sintaxis:
IsNull (Expresin)
Donde Expresin es cualquier variable que se busca determinar si representa datos no
vlidos o nulos.






Captulo 8: Funciones de manipulacin de datos 205
__________________________________________________________
LCase
Tipo de datos que devuelve: String.
Transforma una cadena a minsculas.
Sintaxis:
LCase (Cadena)
Donde Cadena es la cadena a transformar.
__________________________________________________________
Len
Tipo de datos que devuelve: Long.
Devuelve el nmero de caracteres de una expresin.
Sintaxis:
Len (Cadena)
Donde Cadena es la cadena a evaluar.
__________________________________________________________
Ltrim
Tipo de datos que devuelve: Variant (String).
Elimina los espacios en blanco que se encuentran a la izquierda de una cadena.
Sintaxis:
Ltrim (Cadena)
Donde Cadena es la cadena tomada como base.




206 Parte 2: Elementos de programacin
__________________________________________________________
Mid
Tipo de datos que devuelve: Variant (String).
Devuelve una subcadena extrada de una cadena.
Sintaxis:
Mid(Cadena, Inicio [, Longitud] )
Donde Cadena es la cadena tomada como base, Inicio es la posicin inicial de la sub-
cadena y Longitud es el nmero de caracteres de la subcadena.
__________________________________________________________
Replace
Tipo de datos que devuelve: String.
Reemplaza una subcadena por otra, en una cadena.
Sintaxis:
Replace (Cadena, Cadena1, Cadena2[,Inicio])
Donde Cadena es la cadena tomada como base, Cadena1 es la cadena a buscar,
misma que ser remplazada por Cadena1. Inicio es la posicin inicial de la cadena, a
partir de donde se proceder a buscar; es opcional y si se omite es igual a 1.
__________________________________________________________
Rtrim
Tipo de datos que devuelve: String.
Elimina los espacios en blanco que se encuentran a la derecha en una cadena.
Sintaxis:
Rtrim(Cadena)
Donde Cadena es la cadena tomada como base.





Captulo 8: Funciones de manipulacin de datos 207
__________________________________________________________
Space
Tipo de datos que devuelve: Variant (String).
Devuelve un nmero determinado de espacios.
Sintaxis:
Space (Nmero)
Donde Nmero es la cantidad de espacios a devolver.
__________________________________________________________
Str
Tipo de datos que devuelve: Variant (String).
Convierte una expresin numrica a cadena.
Sintaxis:
Str (Nmero)
Donde Nmero es la expresin numrica tomada como base.
__________________________________________________________
StrConv
Tipo de datos que devuelve: Variant (String).
Convierte una cadena de acuerdo a un cdigo de conversin.
Sintaxis:
StrConv(Cadena, CdigoDeConversin)
Donde Cadena es la cadena tomada como base y CdigoDeConversin puede ser
cualquiera de los siguientes: vbUpperCase (MAYSCULAS), vbLowerCase (minscu-
las) y vbPropecCase (Maysculas Las Primeras Letras).




208 Parte 2; Elementos de programacin
__________________________________________________________
String
Tipo de datos que devuelve: Variant (String).
Repite una cadena un determinado nmero de veces.
Sintaxis:
String (Nmero, Cadena)
Donde Cadena es la cadena a repetir. Nmero es la cantidad de veces a repetirla.
__________________________________________________________
StrReverse
Tipo de datos que devuelve: String.
Escribe al revs una cadena.
Sintaxis:
StrReverse(Cadena)
Donde Cadena es la cadena a revertir.
__________________________________________________________
Trim
Tipo de datos que devuelve: String.
Elimina los espacios en blanco que se encuentran a la izquierda y a la derecha de una
cadena.
Sintaxis:
Trim(Cadena)
Donde Cadena es la cadena tomada como base.



Captulo 8: Funciones de manipulacin de datos 209
__________________________________________________________
UCase
Tipo de datos que devuelve: String.
Convierte una cadena a su equivalente en maysculas.
Sintaxis:
Ucase(Cadena)
Donde Cadena es la cadena a transformar.
>> Uso de funciones de manipulacin de cadenas. [08.02]
A continuacin aprender a utilizar las funciones de fecha y hora.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate.

Dim strMensaje As String
Dim intCuentaVocales As Integer
Dim intContador As Integer
Dim strLetra As String * 1
strMensaje$ = "ste es un mensaje de prueba"
Print LCase(strMensaje$)
Print UCase(strMensaje$)
Print StrConv(strMensaje$, vbProperCase)
Print "El primer espacio en la posicin:" & _
InStr(strMensaje$, " ")
Print "De atrs para adelante:" &
InStrRev(strMensaje$, _
" ")
Print "Texto al revs:" & StrReverse(strMensaje$)
Print "Longitud del texto:" & Len(strMensaje$)
Print "A partir de la posicin 9, 4 letras:" & _
Mid(strMensaje$, 9, 4)


210 Parte 2: Elementos de programacin
intCuentaVocales% = 0
For intContador% = 1 To Len(strMensaje$)
strLetra$ = Mid(strMensaje$, intContador%, 1)
If InStr("aeiouAEIOU", strLetra$) > 0 Then
intCuentaVocales% = intCuentaVocales% +
1
End If
Next intContador%
Print "Cantidad de vocales:" & intCuentavocales%
Print "Remplazando espacios:" & _
Replace(strMensaje$, " ", "_")
Funciones numricas
Resumen de funciones a revisar en esta clasificacin:
Abs Valor absoluto
Hex Valor hexadecimal de un nmero
Int, Fix Devuelve la parte entera de un nmero
IsNumeric Indica si una expresin puede convertirse en nmero
Oct Valor octal de un nmero
Rnd Devuelve un nmero aleatorio
Round Redondea un nmero, cierto nmero de posiciones
decimales
Sgn Indica el signo de un nmero
Sqr Raz cuadrada de un nmero

__________________________________________________________
Abs
Tipo de datos que devuelve: segn los argumentos. Devuelve el valor absoluto de un
nmero.
Sintaxis:
Abs (Nmero)
Donde Nmero es el valor base del clculo.


Captulo 8: Fundones de manipulacin de datos 211
__________________________________________________________
Hex
Tipo de datos que devuelve: String.
Devuelve el valor hexadecimal de un nmero.
Sintaxis:
Hex(Nmero)
Donde Nmero es el valor base del clculo.
__________________________________________________________
Int, Fix
Tipo de datos que devuelve: Double.
Devuelve la parte entera de un nmero.
Sintaxis:
Int(Nmero)
Fix(Nmero)
Donde Nmero es el valor base del clculo. La diferencia entre Int y Fix consiste en
que Si Nmero es negativo, Int devuelve el primer entero negativo menor o igual a
Nmero, mientras que Fix devuelve el primer entero negativo mayor o igual a Nmero.

__________________________________________________________
IsNumeric
Tipo de datos que devuelve: Boolean.
Especifica si una expresin puede o no ser convertida a nmero.
Sintaxis:
IsNumeric (Expresin)
Donde Expresin es el dato a evaluar.







212 Parte 2: Elementos de programacin
__________________________________________________________
Rnd
Tipo de datos que devuelve: Single.
Devuelve un nmero aleatorio.
Sintaxis:
Rnd
__________________________________________________________
Round
Tipo de datos que devuelve: segn los argumentos.
Devuelve un nmero redondeado, tomando como base un nmero determinado de
posiciones.
Sintaxis:
Round (Nmero [, Decimales] )
Donde Nmero es el valor base del clculo. Decimales es el nmero de posiciones
decimales hacia la derecha que se desean considerar para el redondeo.
__________________________________________________________
Sgn
Tipo de datos que devuelve: Variant (Integer).
Devuelve el signo del nmero.
Sintaxis:
Sgn (Nmero).
Donde Nmero es el valor base del clculo. Si devuelve 1, Nmero es mayor que cero, si
es O, Nmero es cero y si devuelve -1, Nmero es menor que cero.













Captulo 8: Funciones de manipulacin de datos 213
__________________________________________________________
Sqr
Tipo de datos que devuelve: Double.
Devuelve la raz cuadrada de un nmero.
Sintaxis:
Sqr (Nmero)
Donde Nmero es el valor base del clculo.


Funciones de decisin
Resumen de funciones a revisar en esta clasificacin:
Choose Devuelve un valor de una lista de argumentos
iif Devuelve uno de entre dos valores, dependiendo de una condicin
__________________________________________________________
Choose
Tipo de datos que devuelve: segn los argumentos.
Selecciona o devuelve un valor de entre una lista de argumentos.
Sintaxis:
Choose (ndice, Opcin1 [, Opcin2,... [OpcinN] ] )
Donde ndice es el elemento a devolver y Opcinl a OpcinN, la lista de elementos.









214 Parte 2: Elementos de programacin
__________________________________________________________
IIf
Tipo de datos que devuelve: segn los argumentos.
Devuelve uno de entre dos valores, dependiendo de una condicin.
Sintaxis:
IIf (Condicin, PorVerdadero, PorFalso)
Donde Condicin es una condicin o expresin lgica que implique valor falso o ver-
dadero; si es verdadero, se devolver PorVerdadero y si es falso, se devolver PorFalso.
>>Uso de funciones numricas y de decisin. [08.03]
A continuacin aprender a utilizar las funciones de fecha y hora.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
Editar cdigo: Form, Evento: Activate.

Dim strCaptura As String
Dim sngNumero As Single
Dim blnBandera As Boolean
Dim intOpcion As Integer
blnBandera = True
Do While blnBandera
strCaptura$ = InputBox("Nmero (con o sin
decimales):")
If IsNumeric(strCaptura) Then
Print "Lo capturado puede traducirse a numero"
sngNumero! = CSng(strCaptura$)
Print "Valor absoluto:" & Abs(sngNumero!)
Print "Nmero " & IIf(Int(sngNumero!) =
sngNumero!, _
"entero", "con decimales")









Captulo 8: Funciones de manipulacin de datos 215
If Int(sngNumero!) = sngNumero! Then
Print "Redondeado a 2 posiciones:" & _
Round(sngNumero!, 2)
End If
Select Case Sgn(sngNumero!)
Case Is = -1
intOpcion% =1
Case Is = 0
intOpcion% = 2
Case Is = 1
intOpcion% = 3
End Select
Print "El nmero es " & _
Choose(intOpcion%, "negativo", "cero", "positivo")
Print "Hexadecimal:" & Hex(sngNumero!)
Print "Octal:" & Oct(sngNumero!)
If sngNumero! > 0 Then
Print "Raz cuadrada:" & Sqr(sngNumero!)
End If
Else
Print "Nada que hacer; no es expresin numrica"
End If
Print ------------------------
If MsgBox("Desea otro ejemplo?", vbOKCancel + vbQuestion, _
"Nmeros") = vbCancel Then
blnBandera = False
End If
Loop
End






216 Parte 2: Elementos de programacin

Funciones de uso especfico
Las funciones que hemos visto pueden ser aplicadas en mbitos muy amplios,
es decir, son funciones de propsito general; es indispensable conocerlas para
desarrollar sin complicaciones cualquier proceso dentro de Visual Basic.
Sin embargo, este lenguaje posee muchas otras funciones, pero sera muy
complicado explicarlas sin perder el objetivo de este libro. Lo que no
queremos hacer es dejar de mencionar algunas funciones de las que llamamos
de proceso especfico, mismas que dividimos en dos categoras: financieras y
trigonomtricas.
Hasta el momento ha podido comprobar cmo se comportan las funciones
con su simple ejecucin. En el caso de las funciones financieras y
trigonomtricas, requiere algo ms que la simple ejecucin, requiere saber la
mecnica de los clculos, principios matemticos, manejo de tablas de
logaritmos, etctera. No nos meteremos con esas complicaciones;
simplemente describiremos qu funciones de propsito especfico existen.

Funciones financieras










Captulo 8; Funciones de manipulacin de datos 217



Funciones trigonomtricas

Si los clculos que requiere hacer son ms complicados y necesita otras funciones ms
elaboradas, tal vez le sea til ver algunas funciones derivadas:
"X" es el nmero base para el clculo.









218 Parte 2: Elementos de programacin


Se ilustraron muchas funciones de Visual Basic; an faltan muchas ms, pero se revi-
sarn en el desarrollo de otros captulos de este libro.
__________________________________________________________________________________
Resumen
En este captulo:
Vimos las funciones para el manejo de fecha y hora
Vimos las funciones para la manipulacin de cadenas
Vimos las funciones de decisin
Se resumieron las funciones trigonomtricas y financieras
Se resumieron funciones derivadas equivalentes
Este captulo es de referencia, consltelo conforme lo necesite.








Captulo
9
Procedimientos
y funciones definidas
por el usuario
Objetivo
Conocer las diferentes formas de procedimientos que se pueden utilizar en Visual Basic,
lo que permitir la reutilizacin de cdigo, la modularizacin de las tareas y la creacin
de funciones definidas por el usuario.
Al finalizar este captulo deber:
Conocer qu son los procedimientos y cmo los puede agregar a las aplicaciones en
Visual Basic
Conocer el uso de las instrucciones Sub y Function
Conocer el proceso de elaboracin de procedimientos en Visual Basic
Saber como elaborar procedimientos que reciban argumentos y que devuelvan valores
Saber definir funciones que reciban argumentos opcionales y argumentos opcionales
con valor predeterminado
Saber definir funciones que manejen un nmero incierto de argumentos
219


















220 Parte 2: Elementos de programacin

Procedimientos
Un procedimiento es una secuencia de instrucciones que se ejecuta como una unidad, a
peticin, bajo un nombre que identifica dicha secuencia. Por s mismos, los proce-
dimientos no constituyen un programa formal, sino que operan a manera de soporte con
respecto a un programa que los llama.
Los procedimientos pueden tener los siguientes comportamientos:
No utilizan argumentos, no devuelven valores
No utilizan argumentos, devuelven valores
Utilizan argumentos, no devuelven valores
Utilizan argumentos, no devuelven valores
Los argumentos, tambin llamados parmetros, son aquellas expresiones que se le
proporcionan a un procedimiento o instruccin para que realicen una determinada tarea
con base en ellos. En otras palabras, el resultado de la ejecucin de un procedimiento
depende de los argumentos que se le proporcionen.
A los procedimientos que devuelven valores, utilicen o no argumentos, por lo general se
les llaman funciones.
==============================================================
Nota: Debido a que los procedimientos y funciones que usted codifique no existen de
manera implcita en Visual Basic, son conocidos como definidos por el usuario. La
expresin Funcin Definida por el Usuario (UDF) es muy comn en la mayora de los
lenguajes.
Usted puede incluso crear, a travs de un mdulo BAS, su propia biblioteca de pro-
cedimientos y funciones, aplicando lo que se llama reutilizacin de cdigo; si conoce la
funcionalidad de su aplicacin y los estndares en los que quiere basarse, es una buena
idea programar primero los procedimientos y luego el programa que los utiliza.
==============================================================
Todos los procedimientos que usted agregue en un mdulo (formulario) se colocarn en
el rea de declaraciones generales de dicho mdulo. Si desea editar y definir un
procedimiento definido por usted, tendr que buscar en la ventana Cdigo, en el cuadro
Objeto, la especificacin (General) y en el cuadro Procedimiento/Evento, el nombre
de procedimiento o funcin con el que haya identificado su cdigo.
==============================================================
Nota: Al compilarse, un procedimiento o funcin no debe exceder los 64 Kbytes de
tamao. Si se presenta ese caso, deber dividir el procedimiento.
==============================================================








Captulo 9: Procedimientos y funciones definidas por el usuario 221
Ejecucin de procedimientos
Una vez definido un procedimiento, ste puede ser ejecutado desde cualquier otro
procedimiento. La forma de invocar a los procedimientos es a travs del nombre que lo
identifica, por ejemplo, si tiene un procedimiento que no utiliza argumentos y no
devuelve valores, que se llama CalcTot, la forma de ejecutarlo es la siguiente:
CalcTot
Visual Basic revisa que la palabra no sea una palabra reservada del lenguaje (instruc-
cin o constante), en caso de no reconocer la palabra, revisa si en el mdulo que se est
ejecutando existe un procedimiento con ese nombre; si no lo encuentra, buscar en otros
mdulos dentro del proyecto y despus en mdulos o bibliotecas especficas, asociadas
al proyecto. Es posible que para un programador que no conozca mucho el lenguaje
Visual Basic, CalcTot pueda pasar por una instruccin implcita del lenguaje. Usted
puede hacer que su programa sea ms claro si agrega la instruccin Call y ejecuta el
procedimiento de ejemplo de la siguiente forma:
Call CalcTot
De esta forma, es fcil saber que se trata de un procedimiento y no de una instruccin
implcita del lenguaje.
Tambin es posible que su procedimiento, al igual que algunas instrucciones de Visual
Basic, utilice argumentos; en ese caso deber saber si devolver algn valor o no, a fin
de saber cmo ejecutarlo. Si no devuelve algn valor, puede invocarlo como
procedimiento normal, con los argumentos separados por comas.
MsgBox " Bienvenido !", vbinformation
Por otro lado, si el procedimiento o instruccin, devuelve un valor, es necesario que los
argumentos estn encerrados entre parntesis despus del nombre de dicho pro-
cedimiento y ste debe ser utilizado en su carcter de expresin, ya sea como asig-
nacin de valor a una variable...
intVariable% = MsgBox("Desea continuar?", vbOKCancel)










222 Parte 2: Elementos de programacin
... o bien, como expresin utilizada por otra instruccin:

if MsgBox("Desea continuar?", vbOKCancel) = vbOK Then
End
End If
==============================================================
Nota: Si el valor devuelto por un procedimiento o funcin es asignado a una variable de
memoria, asegrese de que el tipo de datos del valor devuelto corresponda al tipo de
datos de la variable a la que se asigna. De otra forma, puede haber inexactitudes y
prdida de informacin, o bien, puede sobrevenir un error.
==============================================================

Cmo agregar procedimientos en Visual Basic
Para agregar un procedimiento en Visual Basic debe seguir los pasos que se describen a
continuacin:
1. Determine de manera precisa qu quiere hacer con el procedimiento.
2. Determine si el resultado del procedimiento depende de un valor desconocido en
tiempo de diseo.
3. En caso de que en tiempo de diseo dependa de valores desconocidos, determine
cuntos valores se ocuparn y de qu tipo de datos se trata.
4. Determine si el resultado esperado es determinar un valor o realizar una tarea. Si es
una tarea, es muy probable que no requiera devolver valores. Si es un valor, es muy
probable que requiera devolver un tipo de datos especfico.
5. Determine si el procedimiento es til para uno o varios mdulos, dentro del proyecto
(un proyecto en Visual Basic puede contener varios mdulos o formularios).
6. Determine un nombre descriptivo para su procedimiento; debe ser un nombre vlido
y que no cause conflicto con palabras reservadas y funciones ya existentes en Visual
Basic. El nombre debe comenzar con una letra, no debe contener espacios ni
caracteres reservados y no debe exceder los 255 caracteres.
7. Abra la ventana Cdigo.
8. Vaya al men Herramientas - Agregar procedimiento. Llene el cuadro de dilogo
Agregar procedimiento (vea la figura 9.1) ...









Captulo 9: Procedimientos y fundones definidas por el usuario 223


.. .de acuerdo a la informacin que se muestra en la siguiente tabla:



1. Defina, en caso de que aplique, el nmero y tipo de datos de los argumentos que se
requieren, as como el tipo de datos del valor de devolucin.
2. Codifique la tarea a realizar.







224 Parte 2: Elementos de programacin
Procedimientos que no utilizan argumentos
y no devuelven valores
Son la categora ms simple de los procedimientos; histricamente eran llamados
"subrutinas" y tenan por objeto separar el cdigo en porciones identificadas, con el fin
de no congestionar los programas, dndoles mayor modularidad. Este tipo de pro-
cedimientos es muy til, sobre todo para la reutilizacin de cdigo cuando una misma
cosa se hace repetidas veces; en esencia se utilizan para desarrollar una tarea especfica
y no proporcionan informacin que sea requerida en procesos futuros.
>> Creacin de un procedimiento. [09.01]
A continuacin aprender a definir procedimientos que realizan una tarea y no
devuelven valores.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
2. Abra la ventana Cdigo (F7).
3. Vaya al men Herramientas - Agregar procedimiento. En el cuadro Nombre
coloque NoRecibeNoDevuelve. En Tipo especifique Procedimiento y en Alcance,
Privado. Cuando haga clic en Aceptar, en el rea de declaraciones generales, se
agregar el inicio y fin del procedimiento (equivalente al paso 4 de esta prctica).
Editar cdigo: (General), Evento: NoRecibeNoDevuelve
==============================================================
Nota: Para una mejor comprensin de este captulo, se incluirn las lneas de inicio y
fin del procedimiento.
==============================================================
Private Sub NoRecibeNoDevuelve()
MsgBox "Funcin NoRecibeNoDevuelve", vbOKOnly, _
"NoRecibeNoDevuelve"
End Sub

Editar cdigo: Form, Evento: Activate

Private Sub Form_Activate()
Call NoRecibeNoDevuelve
End Sub







Captulo 9: Procedimientos y funciones definidas por el usuario 225

Procedimientos que no utilizan argumentos
y s devuelven valores
Es el tipo de procedimientos que, como parte de la tarea que realizan, generan un valor
de inters para los procesos que han de ser desarrollados posteriormente por la
aplicacin. Por el hecho de devolver valores, comnmente se les conoce como funcin.
En Visual Basic, para especificar que un procedimiento devuelve valores, se requieren
dos condiciones:
Que en la lnea de inicio del procedimiento se establezca qu tipo de datos es el que se
devolver (As <TipoDeDatos>).
Que se asigne el valor a devolver a una variable homnima al procedimiento.
Citemos un ejemplo hipottico: una tienda de venta a crdito vende con cargos diferi-
dos, es decir, usted compra hoy y la tienda no le comienza a cobrar sino transcurridos 90
das. Como en Visual Basic no existe una funcin implcita cuyo objeto sea devolver
qu fecha ser cuando transcurran 90 das a partir de hoy, hay que programar una
funcin que lo haga. El resultado de dicha funcin no depende de un valor desconocido,
ya que siempre podemos saber qu fecha es hoy, a partir de la instruccin Now de
Visual Basic, y conocemos el nmero de das que debemos agregarle para obtener la
fecha que deseamos.
Suponga que slo utilizar esta funcin para el mdulo en el que se agrega, es decir,
tiene un alcance privado (Private). En virtud de que devolver un valor, se trata de
una funcin (Function). Un nombre descriptivo para la funcin podra ser Ini-
cioCobro. El valor a devolver es de tipo Date/Time y por tal motivo hay que espe-
cificarlo as (As Date). La tarea a realizar es que la funcin InicioCobro sea igual a
agregar (dateadd) en das ("d") la cantidad de noventa (90) a la fecha de hoy (Now).
La codificacin sera la siguiente:
Private Function InicioCobro() As Date
InicioCobro = DateAdd("d", 90, Now)
End Function
Usted podra comprobar de la siguiente forma cmo opera esta funcin:
Print InicioCobro()

226 Parte 2: Elementos de programacin
>> Creacin de un procedimiento que no utilice argumentos y devuelva valores.
[09.02]
A continuacin aprender a definir procedimientos que realizan una tarea, no utilizan
argumentos pero s devuelven valores. Esta funcin...
Desplegar un cuadro de dilogo con el mensaje "Mensaje esttico".
Tiene un botn Aceptar y otro Cancelar.
En la barra de ttulo dir "Funcin SoloDevuelve".
Esta funcin devolver un valor de tipo Integer, correspondiente al botn en el que
se haya hecho clic; es de vital importancia para la prctica que especifique, en la
lnea de inicio de definicin de la funcin, que el valor devuelto es de tipo
Integer.
E ejemplo desplegar en pantalla el valor devuelto.
1. Utilice el mismo proyecto que utiliz para la prctica 09.01.
2. Abra la ventana Cdigo (F7).
3. Vaya al men Herramientas - Agregar procedimiento. En el cuadro Nombre
coloque SoloDevuelve. En Tipo especifique Funcin; y en Alcance, Privado.
Editar cdigo: (General), Evento: SoloDevuelve.
Private Function SoloDevuelve() As Integer
SoloDevuelve = MsgBox("Mensaje esttico", vbOKCancel,
"Funcin SoloDevuelve")
End Function
Modificar cdigo: Form, Evento: Activate.
Private Sub Form_Activate()
Call NoRecibeNoDevuelve()
Dim intRespuesta as Integer
intRespuesta%= SoloDevuelve()
Print IntRespuesta%
End Sub








Captulo 9: Procedimientos y funciones definidas por el usuario 227

Procedimientos que utilizan argumentos
Es el tipo de procedimientos que, como parte de la tarea que realizan, generan o no un
valor de inters para los procesos que han de ser desarrollados posteriormente por la
aplicacin , pero que la tarea que desempean depende de un valor desconocido,
cambiante, que vara segn se requiera y que es proporcionado en forma de argumento.
En Visual Basic, para especificar que un procedimiento acepta argumentos, se requieren
cinco condiciones:
Saber cuntos argumentos se necesitan.
Saber el tipo de datos de cada argumento.
Saber si los argumentos son opcionales.
Saber si los argumentos tienen un valor predeterminado.
Que en la lnea de inicio del procedimiento se establezcan, entre parntesis, separados
por comas, despus del nombre de la funcin y antes de la especificacin del tipo de
datos del valor de devolucin, los argumentos que utilizar la funcin.
Volvamos con el ejemplo de la fecha despus de 90 das. Qu pasara si el clculo no
fuera a partir del da de hoy, sino de cualquier fecha dada? Al momento de desarrollar
la aplicacin, obviamente no sabemos qu fechas sern proporcionadas para el clculo.
Tendramos que especificarle a Visual Basic que se requiere un argumento para pro-
porcionarle a la funcin una fecha dada (FechaDada), que ser un dato de tipo
Date/Time y que usaremos en lugar de Now, que anteriormente venamos utilizando.
La codificacin seria la siguiente:
Private Function InicioCobro(FechaDada as Date) As Date
InicioCobro = DateAdd("d", 90, FechaDada)
End Function
Usted podra comprobar de la siguiente forma cmo opera esta funcin:
Print InicioCobro(#0l/01/2000#)
Para cada argumento definido, deber especificar el nombre de dicho argumento y el
tipo de datos que le corresponde.










228 Parte 2: Elementos de programacin
====================================================
Lo inesperado: Cuando trabaja con funciones, los errores ms comunes son:
Se esperaba ")", "(" (error de compilacin). Sucede cuando se deja inconcluso el
llamado a una funcin, por ejemplo, no colocar parntesis para encerrar los
argumentos, abrir parntesis y no cerrarlos, cerrar parntesis que no se abrieron o
colocar ms argumentos de los que acepta la funcin. Soluciones: verifique que
todos los argumentos se encuentren entre parntesis, que los parntesis estn
debidamente abiertos y cerrados y que slo se coloquen como mximo el nmero de
argumentos que la funcin acepta.
Se esperaba fin de la funcin (error de compilacin). Se presenta cuando no separa
los argumentos con comas y la funcin desconoce el ltimo de los argumentos como
tal, exigiendo que se elimine. Soluciones: que todos los argumentos estn
debidamente separados por comas.
No coinciden los tipos (error 13 en tiempo de ejecucin). Por lo general, cada
argumento en una funcin espera un determinado tipo de datos. En el caso de que
proporcione como argumento un tipo de datos diferente al que la funcin espera (por
ejemplo, proporcionar "hola" a la funcin chr( ), que espera un dato de tipo
Byte), sta marcar error. Soluciones: revise la sintaxis de la funcin y conozca a
qu tipo de datos pertenecen los argumentos, de tal manera que le proporcione a la
funcin la materia prima adecuada para trabajar.
====================================================

>> Creacin de un procedimiento que utilice argumentos y devuelva valores.
[09.03]
A continuacin aprender a definir procedimientos que realizan una tarea, utilizan
argumentos y devuelven valores. Esta funcin...
Desplegar un cuadro de dilogo con un mensaje que usted le proporcione a travs de
un argumento llamado Mensaje, que es de tipo String.
Tendr un botn Aceptar y otro Cancelar.
La barra de ttulo deber decir "Funcin RecibeDevuelve".
Esta funcin devolver un valor de tipo Integer, correspondiente al botn en el que
se haya hecho clic; es de vital importancia para la prctica que especifique, en la lnea
de inicio de definicin de la funcin, que el valor devuelto es de tipo Integer.
Tambin es importante especificar el nombre del argumento y el tipo de k datos que
le corresponde.
El ejemplo desplegar en pantalla el valor devuelto.








Captulo 9: Procedimientos y funciones definidas por el usuario 229
1. Utilice el mismo proyecto que utiliz para la prctica 09.01.
2. Abra la ventana Cdigo (F7).
3. Vaya al men Herramientas - Agregar procedimiento. En el cuadro Nombre
coloque RecibeDevuelve. En Tipo especifique Funcin; y en Alcance, Privado.
Editar cdigo: (General), Evento: RecilbeDevuelve.
Private Function RecibeDevuelve(Mensaje As String) As Integer
RecibeDevuelve = MsgBox(Mensaje, vbOKCancel + _
vbQuestion, "Funcin RecibeDevuelve")
End Function
Modificar cdigo: Form, Evento: Activate.
Private Sub Form_Activate()
Call NoRecibeNoDevuelve
Dim intRespuesta as Integer
intRespuesta% = SoloDevuelve()
Print intRespuesta%
IntRespuesta% = RecibeDevuelve("Funcin con argumentos")
Print intRespuesta%
End Sub

Especificacin de argumentos opcionales
En ocasiones los argumentos que se les proporcionan una funcin son opcionales. Para
indicarle a Visual Basic que un argumento es opcional, es necesario colocar la palabra
Optional antes del nombre del argumento, al momento de declararlo. Aunque quiz
sobre decirlo, los argumentos opcionales debern ser preferentemente los que se
encuentren ms a la derecha o bien, todos.
Al momento de darle opcionalidad a un argumento, es necesario controlar lo que
suceder cuando dicho argumento no se proporcione, ya que puede sobrevenir un error
por la falta del valor.
Volviendo al ejemplo de la fecha despus de 90 das, qu pasara si el clculo no fuera
necesariamente a partir del da de hoy? En otras palabras, el clculo puede hacerse a
partir de cualquier fecha dada, pero en el caso de que no se proporcione una





230 Parte 2: Elementos de programacin
fecha determinada, se desea que la funcin tome para el clculo la fecha correspon-
diente al da de hoy (Now).
El primer problema que se presenta es saber si se proporcion valor o no al argumento.
Para ello Visual Basic cuenta con una funcin, denominada IsMissing.
Sintaxis:
IsMissing {NombreArgumento)
NombreArgumento es el argumento que desea evaluar. Si no se proporcion valor al
argumento NombreArgumento, la funcin devolver True; de lo contrario, devolver
False.
El segundo problema radica en que la funcin IsMissing trabaja sobre el bit
marcador de omisin, que los tipos de datos estndar, no poseen como Integer o
Double; si su argumento es de un tipo de datos que no posee bit de falta, IsMissing
no funciona. La ventaja es que los datos de tipo Variant s poseen dicho bit, y a
travs de conversiones de datos, puede darse la funcionalidad que se requiere.
La codificacin, considerando todos los problemas posibles, sera la siguiente:
Private Function InicioCobro(Optional FechaDada As Variant) As Date
Dim dtmFecha As Date
If IsMissing(FechaDada) Then
dtmFecha = Now
Else
dtmFecha = CDate(FechaDada)
End If
InicioCobro = DateAdd("d", 90, dtmFecha)
End Function
Observe que el argumento FechaDada como opcional (Optional), pero ya no de
tipo Date/Time, sino de tipo Variant. Se declara una variable de tipo
Date/Time, llamada dtmFecha, que tomar el papel del argumento,
Como FechaDada es de tipo Variant, puede evaluarse a travs de la funcin
IsMissing; si no se proporcion FechaDada, dtmFecha valdr la fecha del da de
hoy. Por el contrario, si se proporcion FechaDada, dtmFecha valdr la conversin
a Date/Time de lo que se haya proporcionado en el argumento.
Sea cual sea el caso, en este momento ya tendramos una fecha sobre la cual realizar el
clculo (dtmFecha). Se devolver la fecha que posea dtmFecha, ms 90 das.
Usted podra comprobar de la siguiente forma cmo opera esta funcin:










Captulo 9: Procedimientos y fundones definidas por el usuario 231
Print InicioCobro(#01/01/2000#)
Print InicioCobro()
Este ejemplo funcionar, independientemente de si proporciona el argumento o no.
>> Creacin de un procedimiento que utilice argumentos opcionales y devuelva va-
lores. [09.04]
A continuacin aprender a definir procedimientos que realizan una tarea, utilizan
argumentos opcionales y devuelven valores. Esta funcin ...
Desplegar un cuadro de dilogo con un mensaje que usted le proporcione a travs de
un argumento llamado Mensaje, que es de tipo Variant (para poder utilizar
isMissing) y que es opcional.
Tendr un botn Aceptar y otro Cancelar.
La barra de ttulo dir "Funcin DatoOpcional".
En caso de que usted omita el argumento Mensaje, se tomar de manera prede-
terminada el mensaje "Proceso realizado".
Esta funcin devolver un valor de tipo Integer, correspondiente al botn en el que
se haya hecho clic.
El ejemplo desplegar en pantalla el valor devuelto.
1. Utilice el mismo proyecto que utiliz para la prctica 09.01.
2. Abra la ventana Cdigo (F7).
3. Vaya al men Herramientas - Agregar procedimiento. En el cuadro Nombre coloque
DatoOpcional. En Tipo especifique Funcin; y en Alcance, Privado.
Editar cdigo: (General), Evento: DatoOpcional
Private Function DatoOpcional(Optional Mensaje As Variant) As Integer
Dim strMensaje As String
If IsMissing(Mensaje) Then
strMensaje$ = "Proceso realizado"
Else
strMensaje$ = Mensaje
End If







232 Parte 2: Elementos de programacin
DatoOpcional = MsgBox(strMensaje$, vbOKCancel,
"Funcin DatoOpcional")
End Function
Modificar cdigo: Form, Evento: Activate.
Private Sub Form_Activate()
Call NoRecibeNoDevuelve
Dim intRespuesta as Integer
IntRespuesta% = SoloDevuelve()
Print intRespuesta%
intRespuesta% = RecibeDevuelve("Funcin con argumentos")
Print intRespuesta%
IntRespuesta% = Dato0pcional("Mensaje opcional proporcionado")
Print intRespuesta%
IntRespuesta% = Dato0pcional()
Print intRespuesta%
End Sub

Valores predeterminados para argumentos opcionales
Como vio, puede resultar un poco laborioso manejar la validez de los argumentos
opcionales, garantizndoles un valor. Visual Basic proporciona una posibilidad que
puede ahorrarle el manejo de datos tipo Variant y la evaluacin de datos en las fun-
ciones a travs de IsMissing. Si desea que al momento en que se omita un argumen-
to, ste asuma un valor predeterminado, slo necesita igualar, despus del tipo de datos
del argumento, al valor deseado.
Simplificando el ejemplo de los 90 das con esta caracterstica, quedara de la siguiente
manera:
Private Function lnicioCobro(Optional FechaDada As Date = Now) As Date
InicioCobro = DateAdd("d", 90, FechaDada)
End Function
Con esto se elimina el uso de IsMissing. De paso tambin se elimina el uso de datos
tipo Variant, que entre otras bellezas, consumen ms memoria que ningn otro tipo
de datos.







Captulo 9: Procedimientos y funciones definidas por el usuario 233
>> Creacin de un procedimiento que utilice argumentos opcionales con valor pre-
determinado y devuelva valores. [09.05]
A continuacin aprender a definir procedimientos que realizan una tarea, utilizan
argumentos opcionales con valor predeterminado y devuelven valores. Esta funcin ...
Desplegar un cuadro de dilogo con un mensaje que usted le proporcione a travs de
un argumento llamado Mensaje, que es de tipo String y es opcional.
Tendr un botn Aceptar y otro Cancelar.
La barra de ttulo dir "Funcin DatoOpcional".
En caso de que usted omita el argumento Mensaje, se tomar de manera prede-
terminada el mensaje "Proceso realizado".
Esta funcin devolver un valor de tipo Integer, correspondiente al botn en el que
se haya hecho clic.
El ejemplo desplegar en pantalla el valor devuelto.
1. Utilice el mismo proyecto que utiliz para la prctica 09.01.
2. Abra la ventana Cdigo (F7).
Modificar cdigo: (General), Evento: DatoQpcional.
Private Function Dato0pcional(0ptional Mensaje _
As String = "Proceso realizado") As Integer
DatoOpcional = MsgBox(Mensaje, vbOKCancel, _
"Funcin DatoOpcional")
End Function

Funciones con nmero incierto de argumentos
Hasta el momento hemos trabajado con procedimientos y funciones que reciben un
nmero determinado y conocido de argumentos. Esto no siempre sucede. Qu pasara
si necesitramos una funcin que indicara cul es el nmero mayor de una serie?
Como puede ver, la redaccin no nos revela cuntos nmeros componen la serie, es
una serie de tres nmeros, de diez, de cien? Tal vez alguien piense que una funcin con
un nmero elevado de argumentos opcionales, que en caso de no ser utilizados no
figuren en el clculo, pudiera ser la solucin, sin embargo no es lo ptimo, ya que









234 Parte 2: Elementos de programacin
tarde o temprano podramos llegar a sobrepasar el nmero de argumentos definidos, y
por otro lado, en caso de no hacerlo, malgastaramos recursos.
Visual Basic permite manipular esa situacin a travs de una especificacin de argu-
mento de tipo ParamArray .
ParamArray permite definir un arreglo de argumentos de nmero no especfico. Al
utilizar esta especificacin, se genera una coleccin de valores de tipo Variant, iden-
tificados por un nombre determinado.
Si conociramos el nmero de elementos de la matriz, sera fcil examinar los
elementos a travs de un For Next; sin embargo, debido a que no conocemos el
nmero de los elementos que integran la coleccin, podemos recurrir a la instruccin
For Each, que permite revisar los elementos de una coleccin determinada.
Sintaxis:
For Each NombreDadoAlElemento in Coleccin
' Proceso que usa la ocurrencia de NombreDadoAlElemento
Next NombreDadoAlElemento
Por ejemplo, si tiene una coleccin llamada SerieDeLetras y desea examinar la
coleccin utilizando For Each con una variable de trabajo llamada Letra, Tendra
lo siguiente:
Suponga que SerieDeLetras es igual a "A", "B", "C", "F", "X".
For Each Letra In SerieDeLetras
Print "Elemento actual:" &Letra
Next Letra
Producira el siguiente resultado:

Elemento actual: A
Elemento actual: B
Elemento actual: C
Elemento actual: F
Elemento actual: X
====================================================
Nota: ParamArray es una forma simplificada de decir Parameters Array, o Array
of parameters. Recuerde que parmetros y argumentos son sinnimos, de tal forma que
ParamArray hace referencia a una matriz, de argumentos.
====================================================




Captulo 9: Procedimientos y fundones definidas por el usuario 235
Por ejemplo, para determinar cul es el nmero mayor de una serie proporcionada a una
funcin con un nmero de argumentos desconocido, podramos utilizar la siguiente
funcin, llamada NumeroMayor.
Private Function NumeroMayor(ParamArray SerieNumeros()) As Integer
Dim intResultado As Integer
Dim Numero As Variant
For Each Numero In SerieNumeros
If Numero > intResultado% Then
IntResultado% = Numero
End If
Next Numero
NumeroMayor = intResultado%
End Function
La especificacin ParamArray SerieNumeros() le dice a Visual Basic que habr
una matriz de argumentos llamada SerieNumeros, que constituye una coleccin.
Se declaran variables de trabajo, una para almacenar el resultado del proceso
(intResultado) y otra para poder manejar cada uno de los elementos de la
coleccin (Numero).
La instruccin For Each podra leerse de la siguiente forma: explora, uno por uno
(For Each), los elementos contenidos en la coleccin SerieNumeros (In
SerieNumeros) y asgnalos a la variable Numero. Si Numero es mayor a lo que con-
tiene intResultado, entonces intResultado toma el valor de Numero. Sigue
con el prximo elemento de la coleccin (Next Numero).
Usted podra comprobar de la siguiente forma cmo opera esta funcin:
Print NumeroMayor(1, 34, 29, 343, 74, 540)
Print NumeroMayor(1000, 300, 892)
La funcin opera tanto para 6 como para 3 argumentes.







236 Parte 2: Elementos de programacin
>> Creacin de un procedimiento que utilice un nmero de argumentos incierto.
[09.06]
A continuacin aprender a definir procedimientos que realizan una tarea, utilizan Una
cantidad de argumentos incierta y devuelven valores. Esta funcin ...
Desplegar un cuadro de dilogo con un mensaje de varias lneas; deber especificar
cada una de las lneas del mensaje como un dato String, separado por comas.
Los valores proporcionados como argumento pasarn a formar parte de una coleccin
llamada Lineas; se utilizar una variable de trabajo llamada Argumento, que
auxiliar la exploracin de cada elemento de la coleccin.
A medida que se exploren los elementos de la coleccin, se ir construyendo, en una
variable llamada Mensaje (de tipo String), un texto con los valores de los
argumentos, ms los caracteres 10 y 13, que permitirn el salto entre lneas al utilizar
finalmente la instruccin MsgBox.
Tendr un botn Aceptar y otro Cancelar,
La barra de ttulo dir "Multilnea".
Esta funcin devolver un valor de tipo Integer, correspondiente al botn en el que
se haya hecho clic.
El ejemplo desplegar en pantalla el valor devuelto.
1. Utilice el mismo proyecto que utiliz para la prctica 09.01,
2. Abra la ventana Cdigo (F7).
3. Vaya al men Herramientas - Agregar procedimiento. En el cuadro Nombre
coloque Multilinea. En Tipo especifique Funcin; y en Alcance, Privado.
Editar cdigo: (General), Evento: Multilinea.
Private Function MultiLinea(ParamArray Lineas()) As Integer
Dim Mensaje As String
Dim Argumento As Variant
For Each Argumento In Lineas
Mensaje$ = Mensaje$ & Argumento & Chr(10) & Chr(13)
Next Argumento









Captulo 9: Procedimientos y fundones definidas por el usuario 237
MultiLinea = MsgBox(Mensaje$, vbOKCancel, "Multilinea")
End Function
Modificar cdigo: Form, Evento: Activate.
Private Sub Form_Activate()
Call NoRecibeNoDevuelve
Dim intRespuesta as Integer
intRespuesta% = SoloDevuelve()
Print intRespuesta%
intRespuesta% = RecibeDevuelve("Funcin con argumentos")
Print intRespuesta%
IntRespuesta% = Dato0pcional("Mensaje opcional proporcionado")
Print intRespuesta%
IntRespuesta% = DatoOpcional()
Print intRespuesta%
Print MultiLinea("No olvide", "- Guardar su trabajo", "- Salir")
Print MultiLinea("A", "B", "C", "D", "E", "F")
End Sub

______________________________________________________________________
Resumen
En este captulo:
Vimos qu son los procedimientos y funciones, y cules son sus comportamientos ms
bsicos.
Vimos qu son los argumentos.
Vimos cmo ejecutar los procedimientos y funciones, con y sin argumentos.
Vimos cmo definir procedimientos y funciones en un mdulo de Visual Basic, que
tienen o no argumentos y que devuelven o no valores.
Vimos cmo especificar la existencia de procedimientos que tienen argumentos
opcionales.
Vimos cmo establecer valores predeterminados para argumentos opcionales.






238 Parte 2: Elementos de programacin
Vimos la forma de manejar procedimientos que tienen un nmero incierto de
argumentos .
Vimos la utilidad de la funcin IsMissing y For Each.

Es crucial que haya comprendido todos los puntos anteriormente referidos, ya que son
muy importantes para comprender el resto del libro.


































Parte 3


Controles grficos
y programacin orientada
a eventos
En la parte 1 aprendi que Visual Basic pone a su disposicin
muchas herramientas grficas de desarrollo. En la parte 2 aprendi
los elementos de la codificacin en Visual Basic;
ahora, le corresponde adquirir maestra en el uso de las carac-
tersticas visuales que le ofrece la plataforma de desarrollo.
Aprender a desarrollar en un enfoque orientado a eventos, trabajar
con propiedades, mtodos y objetos, y comenzar a explorar las
enormes posibilidades de Visual Basic. Prcticamente podr
desarrollar cualquier interfaz que se le ocurra, preparndose para la
parte 4, en donde manejar con eficiencia archivos y bases de datos.
Ver cmo recibir datos a travs de una interfaz y cmo validar que
esos datos sean correctos, podr manipular grficos, listas
desplegables, botones de opcin y botones de comando, leer
directorios y unidades de disco, manejar el Portapapeles, crear
mens estilo Windows, manipular eventos clsicos del entorno como
el de arrastrar y colocar, en fin, en esta parte se divertir "dibujando"
el trabajo y obteniendo resultados visibles, ms que visuales. I
Desarrollar aplicaciones basadas en Windows en toda la extensin
de la palabra nunca fue tan sencillo. Por supuesto: practicar mucho,
Captulos:
10,11, 12, 13, 14,15
16,17, 18, 19, 20, 21
Nmero de prcticas: 51





239


240










































Captulo
10

Controles bsicos
para la introduccin
de datos

Objetivo
Conocer el uso de los controles bsicos de Visual Basic para la introduccin de
datos, analizando sus particularidades y capacidades.
Al finalizar este captulo deber:
Dominar el uso del control CommandButton
Dominar el uso del control TextBox
Dominar el uso del control Label
Saber qu es el enfoque en el entorno de Visual Basic
En la parte 1 conoci los elementos de Visual Basic como entorno de desarrollo. En
la parte 2 aprendi los elementos bsicos de la codificacin en Visual Basic, es decir,
la parte BASIC de Visual Basic. Ahora le toca descubrir la parte Visual. Aqu es
donde muchos otros libros comienzan: usted comenzar con mucho ms camino
recorrido.
241







242 Parte 3: Controles grficos y programacin orientada a eventos
En este captulo ver los controles bsicos de Visual Basic para el desarrollo de
interfaces de introduccin de datos. Son tres: Label, TextBox y
CommandButton.

Controles bsicos para el acceso de datos
Label
Etiqueta. Sirve para insertar etiquetas en la interfaz. Se utiliza para colocar en la
interfaz el texto que no va a cambiar, aunque tambin se utiliza para enviar mensajes
contextuales y de apoyo a la captura.
La propiedad esencial de los objetos basados en este control es Caption, ya que re-
presenta lo que se desplegar en la etiqueta; dicha propiedad tiene un lmite de 1024
bytes.
Lo ms relevante de este control es:

==================================================
==
Nota: Como ya sabe, cuando hace doble clic en un objeto. Visual Basic abre la ven-
tana Cdigo en un procedimiento de evento que considera el ms comn para dicho
objeto. En la columna Eventos de la tabla de Propiedades - Mtodos - Eventos, se
colocar en negritas-itlicas el evento que sea considerado como ms frecuente.
==================================================











Captulo 10: Controles bsicos para la introduccin de datos 243
TextBox
Cuadro de texto. Se utiliza para obtener informacin del usuario o para desplegar
informacin proporcionada por la aplicacin.
Este tipo de control es el tpico fill in the blank (llenar los espacios); puede utilizarlo
para introducir cualquier tipo de informacin y posteriormente manipularla.
La propiedad esencial de los objetos basados en este control es Text, ya que re-
presenta lo que contiene el cuadro de texto; dicha propiedad tiene un lmite de 64
Kbytes.

==================================================
Nota: Los objetos basados en el control TextBox son los utilizados por excelencia
para la introduccin de datos; lo que se captura en ellos es un dato de tipo String, de
ah que existan funciones para convertir de String a prcticamente cualquier tipo de
datos. Esto sugiere una cosa: casi todo se captura siendo String y se convierte al tipo
de datos que realmente se requiere.

Lo ms relevante de este control es:










244 Parte 3: Controles grficos y programacin orientada a eventos
CommandButton
Botn de comando. Se utiliza para procesar una tarea cuando se hace clic en un
botn, llamado por tal motivo, de comando.
El evento ms importante para los objetos basados en este control es Click. La pro-
piedad ms significativa quiz sea Caption, que contiene el valor del mensaje que
aparecer en el botn de comando; la propiedad Caption de los botones de
comando tiene un lmite de 255 caracteres.
Por convencin de Windows, los botones de comando deben estar ubicados en la
parte inferior del formulario, en orientacin horizontal; deben estar al centro o a la
derecha del cuerpo principal de la interfaz. En caso de que desee colocarlos con
orientacin vertical, deber procurar su colocacin a la derecha.
Lo ms relevante de este control es:

Los objetos basados en el control CommandButton son especiales en el sentido de
que les puede proporcionar caractersticas inherentes a las aplicaciones de Windows.
Por ejemplo, puede especificar que un botn tenga una respuesta determinada cuando
se presione Intro (Default) o bien cuando se presione la tecla Escape (Cancel).
En tiempo de ejecucin, puede seleccionar un botn de comando mediante el ratn o
el teclado, como se indica a continuacin:
Utilice el ratn para hacer che en el botn.
Mediante el uso de la tecla TAB, ubiqese en el botn y despus elija el botn con
la tecla Barra espadadora o la tecla Intro.
Presione la tecla de mtodo abreviado (Alt+<letra subrayada>) del botn de
comando.
Si ste es el botn de comando predeterminado del formulario, el botn se elige
con Intro, incluso si usted est ubicado en otro objeto.







Captulo 10: Controles bsicos para la introduccin de datos 245
Si el botn de comando Cancelar es el botn predeterminado del formulario, se
puede elegir con la tecla Escape, incluso si usted est ubicado en otro objeto.
>> Uso de objetos basados en los controles Label, TextBox y CommandButton.
[10.01]
frmInfoGen.frm
A continuacin aprender a agregar objetos en un formulario y modificar
propiedades en modo de ejecucin.
Implementacin visual


==================================================
Tip: En la prctica se requieren 12 objetos: 1 Form, 4 Label, 4 TextBox y 3
CommandButton. Recuerde que Windows puede controlar el cursor a travs del
uso de la tecla Tab (ms adelante le daremos una explicacin desde otro enfoque). Le
recomendamos que primero agregue los objetos estticos (Label) y que agregue los
objetos en el orden en que desee que el control del programa transcurra (TextBox,
CommandButton).
==================================================




246 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmInfoGen















Captulo 10: Controles bsicos para la introduccin de datos 247
Propiedades nuevas en frmInfoGen

Codificacin de frmInfoGen
Editar cdigo: cmdLimpiar, Evento: Click.
txtNombre.Text = ""
txtDireccion.Text = ""
txtTelefono.Text = ""
txtOcupacion.Text = ""
Editar cdigo: cmdAceptar, Evento: Click.
MsgBox "Datos aceptados!", vbOKOnly, "Mensaje del sistema"
Editar cdigo: cmdSalir, Evento: Click.
End

==================================================
Lo inesperado: Cuando trabaja con funciones, los errores ms comunes son:
Se requiere un objeto (error 424 en tiempo de ejecucin). Sucede cuando hace
referencia a un objeto que no existe. Generalmente se debe a que no ha creado el
objeto al que est haciendo referencia, a que cometi un error al teclear el nombre
de un objeto ya definido, o bien a que asume que ya le asign un nombre a un
objeto, cuando realmente mantiene un nombre diferente (por lo general, el asig-
nado de manera predeterminada por Visual Basic). Soluciones: verifique los
nombres que tienen asignados los objetos; si utiliza un nombre de objeto, ase-
grese de que ste existe. Los problemas se pueden evitar de manera sencilla: si al
estar editando el cdigo, el editor no muestra el cuadro de lista combinado de su-
gerencias (vea la figura 4.8), el objeto no est siendo reconocido.








248 Parte 3: Controles grficos y programacin orientada a eventos
No se encontr el mtodo o el dato miembro (error de compilacin). Se presenta
cuando se invoca un mtodo o un dato miembro que no est disponible para un
determinado control. Por ejemplo, los objetos basados en Label no tienen
disponible el mtodo GotFocus, por lo cual si se invoca, marcar error. Solu-
ciones: verifique qu tipo de objetos se agregaron a la interfaz, es decir, en qu
controles estn basados. Dependiendo del tipo de control tomado como base, se
tendrn disponibles ciertos mtodos y propiedades reconocidos por la clase.
Revise que el mtodo o propiedad que est utilizando est disponible para su
objeto. Los problemas se pueden evitar de manera sencilla: si al estar editando el
cdigo el editor no muestra en el cuadro combinado de sugerencias (vea la figura
4.8) la propiedad o mtodo, es que no est disponible para el objeto.
Uso no vlido de una propiedad (error de compilacin). Las propiedades son
especificaciones de un objeto, no tareas. En el cdigo, una propiedad puede ser
invocada como una expresin, es decir, tiene que formar parte de una sentencia
de asignacin, ya sea como valor asignado o como receptora de un valor. Solu-
ciones: una propiedad siempre debe ser igual a algo o bien algo debe ser igual a
la propiedad o expresin que la utilice. Label1.Caption como lnea de
cdigo es incorrecto, Label1.Caption="Algo" es correcto (asignacin de
propiedad), strVariable$=Label1.Caption tambin es correcto (uso de
propiedad como valor).
==================================================

Ejecucin
Introduzca sus datos en el formulario.
Haga clic en el botn de comando Limpiar.
El procedimiento cmdLimpiar_Click asignar a la propiedad Text de todos
los cuadros de texto el valor de nada ("") representado con la apertura y el cierre de
comillas sin nada en medio. Dar la apariencia de que se borra lo que ya tena
escrito, cuando realmente lo que sucede es que lo que usted tenga en los cuadros
de texto se sustituye por una ausencia de valor "". Como dicen, para borrar una
hoja escrita puede eliminar el contenido o bien pintarla de blanco con corrector.
Esto ltimo es lo que ms se asemeja a lo que hicimos.
Haga clic en el botn de comando Aceptar.
El procedimiento cmdAceptar_Click enviar un mensaje de notificacin que dir
que los datos han sido aceptados.
Haga clic en el botn de comando Salir.








Captulo 10: Controles bsicos para la introduccin de datos 249
El procedimiento cmdSallr_Cllck slo contiene la instruccin End, que da
por terminada la sesin de trabajo.


Enfoque

Usted ha utilizado el entorno de Windows y seguramente sabe que la tecla Tab sirve
para pasar el control de un objeto a otro dentro de un cuadro de dilogo. Sabr que
un objeto determinado posee el control porque seguramente sobre l estar un indi-
cador de cursor, una pequea variante que lo distingue: en el caso de algunos objetos
como los cuadros de texto, sabr que poseen el control cuando tenga una lnea
delgada y vertical parpadeando en la zona de edicin del mismo; en el caso de los
botones, se encontrarn bordeados por una lnea obscura que los dems objetos no
tendrn.

==================================================
Nota: En la explicacin del enfoque, decimos que el "control" se traslada de un
objeto a otro. No caiga en contradiccin de trminos. Aqu nos referimos a control
como la facultad que tiene usted de utilizar un determinado objeto; usted controla lo
que sucede. Al decir control, al menos en esta parte, no nos referimos al control
como sustantivo (representaciones grficas que se encuentran en el Cuadro de
herramientas), sino a la facultad de disponer.
==================================================
A ese control que se traslada de un objeto a otro, en Visual Basic se le llama
enfoque. El enfoque puede definirse como el estado en el que un objeto dentro de la
interfaz puede responder de manera directa al teclado. Por supuesto, los objetos
pueden responder a otros dispositivos de entrada, tales como el ratn, lectores de
cdigo de barras, etctera, pero la caracterstica definitiva que indica si un objeto
posee o no el enfoque es que pueda responder al teclado.
Si usted escribe algo o presiona alguna tecla, lo que haga se manifestar en el objeto
que tenga el enfoque. Hay ciertos objetos, como los basados en el control Label o
en el control PictureBox, que no responden de ninguna manera al teclado. Esto
es importante porque determina que existen objetos que pueden obtener el enfoque y
otros que no.
En caso de que en un formulario exista al menos un objeto que sea capaz de obtener
el enfoque (es decir, que pueda responder al teclado), existir un objeto que tenga el
enfoque; al presionar la tecla Tab, el enfoque se trasladar al siguiente objeto capaz
de obtenerlo, siguiendo un orden o secuencia predeterminada. Al hecho de trasladar
el enfoque entre los objetos mediante el uso continuo de la tecla Tab se le llama
tabulacin y al orden predefinido en el que los objetos obtendrn el enfoque se le
llama






250 Parte 3: Controles grficos y programacin orientada a eventos
secuencia de tabulacin. Cuando en la secuencia de tabulacin se llega al ltimo
objeto que pueda obtener el enfoque, el enfoque se trasladar al primer objeto que lo
pueda tener, formando un ciclo ininterrumpido.
Todos los objetos que puedan tener el enfoque, tambin tendrn una propiedad lla-
mada Tabindex, que determina su posicin dentro de la secuencia de tabulacin;
la propiedad Tabindex siempre comienza su valor de cero y la poseen todos los
objetos, sin importar si pueden o no adquirir el enfoque. Si desea que algn objeto
no sea considerado en la secuencia de tabulacin, puede utilizar la propiedad
TabStop: si dicha propiedad tiene el valor False, el objeto no ser considerado en
la secuencia de tabulacin. No obstante, el objeto s puede obtener el enfoque, ya sea
haciendo clic en l o mediante programacin.
Nota: En caso de que no desee que el objeto obtenga el enfoque dentro de la
secuencia de tabulacin, puede utilizar la propiedad Enabled con un valor False.
Esta solucin es un poco extrema si lo que desea es simplemente que no sea
considerada en la secuencia de tabulacin, ya que no podr obtener el enfoque en el
uso de la interfaz.
Cuando un objeto no tiene el enfoque y luego lo obtiene, se dice que adquiere el
enfoque;
si un objeto tiene el enfoque y luego deja de tenerlo, se dice que pierde el enfoque.
En Visual Basic, todos los objetos que pueden tener el enfoque, por esa simple
capacidad, tendrn dos procedimientos de evento, llamados GotFocus para cuando
obtienen el enfoque y LostFocus para cuando lo pierden. Adicionalmente,
tendrn un mtodo llamado SetFocus, que le proporciona el enfoque al objeto
determinado.






Captulo 10: Controles bsicos para la introduccin de datos 251
El orden de la propiedad TabIndex se asigna al momento de la creacin de los obje-
tos, por lo cual es una buena idea que una vez que conoce los objetos que necesita su
interfaz, los agregue en el orden en que desea que se establezca la secuencia de
tabulacin. Si usted es de las personas que agrega los objetos de manera sistemtica
de acuerdo con el control en que estn basados (primero todos los Label, luego
todos los TextBox, luego los CommandButton, etctera) reconsidere si ello le es
til.
===================================================
Nota: En este libro, los ejemplos tienen su tabla de objetos; el orden en que se
refieren corresponde a la secuencia de tabulacin, que casualmente corresponde a un
esquema en donde todos los objetos basados en el mismo tipo de control se agregan
juntos. No es la intencin sugerir que as lo haga siempre; de hecho, en ejemplos
futuros esa aparente secuencia por tipo de control no se presentar.
===================================================
>> Uso de botones predefinidos de aceptacin y cancelacin y cuadros de texto mul-
tilneas, de capacidad limitada. [10.02]
frmNota.frm
A continuacin aprender a especificar botones de comando que se activen al presio-
nar Intro o la tecla Escape, a preparar un cuadro de texto para que soporte mltiples
lneas y un mximo de contenido determinado y manejar la seleccin del contenido de
los cuadros de texto.
===================================================
Nota: En la ejecucin de los ejercicios de este libro se seguir un proceso paulatino
de identificacin con respecto a los objetos. De inicio se sugerir "haga clic en el
botn de comando Aceptar", posteriormente se pondr "haga clic en el botn de
comando cmdAceptar" y finalmente se indicar "haga clic en cmdAceptar".
Como puede darse cuenta, el primer enfoque es ms apropiado para un usuario de la
aplicacin que para un desarrollador, el segundo enfoque ya es un poco ms identifi-
cado con el desarrollo, pero su orientacin sigue siendo de uso. El tercer enfoque se
adaptar de manera definitiva en el texto, en el momento en el que hablar de objetos
ya sea una prctica comn para usted, cuando la funcin de depuracin sea ms pre-
ponderante.
===================================================









252 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual


Tabla de objetos y propiedades de frmNota




Captulo 10: Controles bsicos para la introduccin de datos 253


Propiedades nuevas en frmNota









254 Parte 3: Controles grficos y programacin orientada a eventos

Eventos nuevos en frmNota


Codificacin de frmNota
Editar cdigo: cmdAceptar, Evento: Click.
MsgBox "Datos aceptados!"
Editar cdigo: txtAutor, Evento: GotFocus
txtAutor.SelStart = 0
txtAutor.SelLength = 50
Editar cdigo: txtComentario, Evento: GotFocus.
txtComentario.SelStart = 0
txtComentario.SelLength = 256
Editar cdigo: txtTitulo, Evento: GotFocus.
txtTitulo.SelStart = 0
txtTitulo. SelLength =100
Editar cdigo: cmdSalir, Evento: Click.
End




Captulo 10: Controles bsicos para la introduccin de datos 255
Ejecucin
Haga clic en el botn de comando Aceptar.
El procedimiento de evento cmdAceptar_Click se ejecutar y aparecer una
ventana de mensaje producida por la funcin MsgBox que se coloc en dicho
procedimiento. Haga clic en el botn Aceptar que aparece en dicha ventana. Con
eso usted ya vio lo que debe suceder cuando haga clic en el botn de comando
cmdAceptar.
Vaya al cuadro de texto donde se debe capturar el Autor; intente escribir ms de 50
caracteres.
Al introducir informacin en el objeto txtAutor nunca podr exceder el lmite
de 50 caracteres, ya que dicho cuadro de texto tiene establecida como longitud
mxima 50 caracteres. Escriba el nombre del autor de un libro que haya ledo.
Vaya al cuadro de texto donde se debe capturar la Resea (txtComentario);
capture una cantidad considerable de texto, de tal forma que se compruebe que
dicho cuadro de texto permite varias lneas. De preferencia describa el contenido o
tema del libro que est tomando como ejemplo.
Presione la tecla Tab hasta que el cuadro de texto donde debe capturar el ttulo del
libro (txtTitulo) adquiera el enfoque.
Vea la forma en que se traslada el enfoque entre los objetos.
Una vez estando en el cuadro de texto donde se debe capturar el Ttulo, intente
escribir ms de 100 caracteres.
Al introducir informacin en el objeto txtTitulo nunca podr exceder el lmite de
100 caracteres, ya que dicho cuadro de texto tiene establecida como longitud
mxima 100 caracteres. Escriba el nombre del ttulo del libro que est tomando
como ejemplo.
Presione una vez ms la tecla Tab, lo que provocar que el enfoque se traslade al
cuadro de texto en donde debe capturar el Autor (txtAutor).
Al trasladar el enfoque al objeto txtAutor, se dice que adquiere el enfoque.
Cuando un objeto adquiere el enfoque, se ejecuta el procedimiento GotFocus que le
pertenece. En este caso, el procedimiento txtAutor_GotFocus especifica que
dentro del contenido del cuadro de texto donde se captur el nombre del autor
(txtAutor.Text), el Character cero (primer Character) es el determinado como
posicin inicial de una seleccin de caracteres; asimismo, se determina que a partir de
dicha posicin inicial, se deben marcar 50 caracteres (que en este caso es la cantidad
mxima de caracteres que se pueden tener).
Para qu seleccionar texto?, muy probablemente ya lo ha hecho en muchas
ocasiones, ya que cuando copia (Copy) o corta (Cut) en el entorno de Windows









256 Parte 3: Controles grficos y programacin orientada a eventos
requiere seleccionar antes lo que quiere copiar o cortar. En un cuadro de texto, las
propiedades SelStart y SelLenght permiten hacerlo.
Todos los cuadros de texto del formulario tienen un procedimiento de evento
GotFocus que hace lo mismo que aqu se explica.
Presione la tecla Intro.
Suceder lo mismo que cuando hizo clic en el botn de comando Aceptar
(cmdAceptar). Esto se debe a que dicho botn est definido como Default.
Presione la tecla Escape.
Se ejecutar el procedimiento de evento cmdSalir_Click, ya que dicho botn
est definido como Cancel; presionar Escape equivale a hacer clic en el botn de
comando Salir (cmdSalir).
>>Uso de caracteres para escritura oculta y validacin inmediata de caracteres,
asegurando la captura de caracteres en mayscula. Habilitar e inhabilitar
botones. [10.03]
frmAcceso.frm
A continuacin aprender a especificar un determinado Character para proteger el
acceso secreto de informacin, as como manipular la entrada de datos de tal manera
que siempre se introduzcan maysculas, independientemente de que tenga activa o no
la tecla Bloq Mays. Se ver tambin cmo habilitar e inhabilitar un botn con base
en lo que se tenga capturado en el formulario.
Implementacin visual










Captulo 10: Controles bsicos para la introduccin de datos 257

===================================================
Nota: Al revisar su cdigo, probablemente detecte que Visual Basic asigna, en el
caso de los cuadros de texto con PasswordChar, una propiedad IMEMode. Esta pro-
piedad es reservada para sistemas de caracteres de Asia y Lejano Oriente; hace esto
previniendo que dentro de su cdigo de acceso (password o contrasea) incluya car-
acteres especiales que de otra forma no sera posible resolver.
===================================================
Tabla de objetos y propiedades de frmAcceso











258 Parte 3: Controles grficos y programacin orientada a eventos




Propiedades nuevas en frmAcceso



Eventos nuevos en frmAcceso

Codificacin de frmAcceso
Editar cdigo: txtUsuario, Evento: LostFocus.

KeyAscii = Asc(UCase(Chr(KeyAscii)))









Captulo 10: Controles bsicos para la introduccin de datos 259
La tecla presionada: evento KeyPress
El evento KeyPress detecta la tecla que se presion y determina qu nmero de
cdigo ASCII le corresponde, asignndoselo a una palabra reservada llamada
KeyASClI; KeyASCII es la tecla que usted presion, misma que est viendo
representada grficamente en su cuadro de texto. La funcin Chr( ), devuelve el
Character correspondiente a un nmero de cdigo ASCII, Ucase( ) transforma un
Character a su equivalente en mayscula y Asc ( ) devuelve el nmero del cdigo
ASCII correspondiente a un Character dado.
La secuencia de ejecucin y valores es la siguiente:
Suponga que presiona la tecla "a":
KeyAscii 97
Chr(KeyAscii) "a"
Ucase("a") "A"
Asc ("A") 65
Entonces:
Asc(Ucase(Chr(KeyAscii))) 65
Es por ello que si teclea la letra "a", el evento KeyPress procesar la informacin,
transformndola en "A".
Este procedimiento es muy til, sobre todo cuando desea que en un determinado
cuadro de texto slo se capturen maysculas.
Mediante la manipulacin de un dato a travs de KeyPress puede restringir el
acceso de datos, por ejemplo, el cdigo para permitir slo nmeros sera:
Sub txtUsuario_KeyPress(KeyAscii As Integer)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
Beep
KeyAscii = 8
End If
End Sub










260 Parte 3: Controles grficos y programacin orientada a eventos
Equivaldra a lo siguiente: si el cdigo ASCII de lo tecleado no est entre 48 y 57
(rango en el que se encuentran los nmeros), emite un Beep y borra lo tecleado (a la
tecla Retroceso le corresponde el nmero de cdigo ASCII 8)
Editar cdigo: txtUsuario, Evento: LostFocus.
If txtUsuario.Text = "" Then
MsgBox "No omita el nombre por favor"
cmdSalir.Enabled = False
txtUsuario.SetFocus
Else
cmdSalir.Enabled = True
End If
Editar cdigo: txtPassword, Evento: LostFocus.
If txtPassword.Text <> "" And txtCPassword.Text <> "" Then
cmdValidar.Enabled = True
cmdValidar.SetFocus
End If
Editar cdigo: txtCPassword, Evento: LostFocus.
TxtPassword_LostFocus
Editar cdigo: cmdValidar, Evento: Click.
If txtPassword.Text = txtCPassword.Text Then
MsgBox "Identificacin correcta"
End
Else
MsgBox "Los password no concuerdan" s
cmdValidar.Enabled = False
txtPassword.SetFocus
End If
Editar cdigo: cmdSalir, Evento: Click.
End









Captulo 10: Controles bsicos para la introduccin de datos 261
Ejecucin
Al ejecutar la aplicacin, el cuadro de texto correspondiente al Usuario tiene el
enfoque. Observe que los botones no estn habilitados. Sin introducir ningn
dato presione la tecla Tab.
El procedimiento de evento txtUsuario_LostFocus se ejecutar en virtud
de que el objeto txtUsuario pierde el enfoque. El procedimiento valida que si
el cuadro de texto (txtUsuario.Text) est vaco (es igual a ""), entonces
mediante la instruccin MsgBox desplegar un mensaje que diga "No omita el
nombre por favor". Despus de eso se inhabilita el botn de comando Salir
(cmdSalir) y se le proporciona el enfoque al cuadro de texto que no cumpli la
condicin (txtUsuario).
Por otro lado, si la condicin no se cumple (txtUsuario no es igual a ""), en-
tonces se habilita el botn Salir (cmdSalir)
Inhabilite la tecla Bloq Mays; intente escribir, por todos los medios posibles, una
letra minscula.
Cada vez que presione una tecla, se ejecutar el procedimiento de evento
txtUsuario_KeyPress, que como ya vio en la nota previa, convierte las mi-
nsculas a maysculas, por lo que no ser posible colocarlas.
Capture un Password en el cuadro de texto correspondiente. Cuando termine,
presione la tecla Tab para ir al siguiente cuadro de texto.
Cuando capture el password, no se ver lo que est escribiendo porque el cuadro
de texto est protegido; slo se ver el Character que usted haya definido como
PasswordChar.
En el momento en que salga del cuadro de texto en el que captur el Password,
dicho cuadro perder el enfoque y, por tanto, se ejecutar el procedimiento de
evento txtPassword_LostFocus. Dicho procedimiento verifica que el
cuadro de texto Password o el cuadro Confirmar Password ya tengan contenido
(es decir, que txtPassword.Text y txtCPassword.Text sean diferentes
a ""), en cuyo caso habilita el botn de comando Validar (cmdValidar) y le
proporciona el enfoque al mismo tiempo.
Proceda a confirmar el password.
Cuando salga del cuadro de texto Confirmar Password, se ejecutar el proce-
dimiento txtCPassword_LostFocus, en virtud de que est perdiendo el
enfoque. Aqu sucede algo: resulta que el cdigo a colocar en este procedimiento
es exactamente igual al contenido en el procedimiento
txtPassword_LostFocus, por lo que en lugar de escribir nuevamente todo,
le decimos a Visual Basic que ejecute el procedimiento
txtPassword_LostFocus.









262 Parte 3: Controles grficos y programacin orientada a eventos
Si captur el Password y la Confirmacin del password, se habilitar el botn de
comando Validar. Al hacer clic en dicho botn se procede a verificar si los
passwords son vlidos.
Al hacer clic en el botn de comando Validar (cmdValidar) se ejecutar el pro-
cedimiento de evento cmdValidar_Click. Lo que hace este procedimiento es
que si el contenido de los cuadros de texto Password y Confirmar Password es el
mismo (txtPassword.Text = txtCPassword.Text), entonces enva el
mensaje "Identificacin correcta" y cierra la aplicacin. En caso de que no
concuerden, se enva el mensaje "Los passwords no concuerdan", se inhabilitar
el botn Validar (cmdValidar) y se trasladar el enfoque al cuadro de texto en
donde se debe capturar el password correctamente.
Presione la tecla Escape.
Se ejecutar el procedimiento de evento cmdSalir_Click, ya que dicho botn est
definido como Cancel; teclear Escape equivale a hacer clic en el botn de
comando Salir (cmdSalir).

__________________________________________________________________________________
Resumen
En este captulo:
Vimos las particularidades del control Label.
Vimos las particularidades del control TextBox.
Vimos las particularidades del control CommandButton.
Vimos en qu consiste el enfoque y cules son algunos de los procedimientos y
mtodos relativos al manejo del enfoque.
Vimos cmo a travs del procedimiento KeyPress se pueden realizar modifica-
ciones a lo que se captura e incluso restringir la captura.
Es importante que domine el contenido del captulo para poder continuar, ya que en
el resto del libro se manejarn, de manera intensiva, objetos basados en estos
controles.

















Captulo
11
Programacin
orientada a eventos
Objetivos
Profundizar en el manejo de los eventos en Visual Basic, a fin de poder controlarlos y
utilizarlos para el propsito que persiguen las aplicaciones.
Al finalizar este captulo deber:
Conocer claramente la forma en que se manejan los eventos en Visual Basic
Conocer algunos eventos asociados a los objetos, con los que se puede controlar el
uso de dispositivos de entrada como el teclado o el ratn
Entender la forma en que los eventos manejan argumentos implcitos
Conocer las prioridades de ejecucin de los eventos, para evitar conflictos entre
ellos
Aprender a mejorar la interfaz utilizando trucos visuales realizados a travs de
eventos
263


264 Parte 3: Controles grficos y programacin orientada a eventos

Eventos y su clasificacin
Quiz uno de los aspectos ms importantes en Visual Basic es su orientacin a
eventos. Muchos sostienen que es una herramienta de programacin orientada a ob-
jetos; la verdad es que Visual Basic, como herramienta de desarrollo, es orientada a
objetos: puede darse cuenta con slo ver el entorno de desarrollo. Sin embargo, las
aplicaciones producidas en Visual Basic son otra cosa; si buscamos las especifica-
ciones de herencia, poliformismo y encapsulamiento como fundamento de las apli-
caciones que desarrollamos, nos daremos cuenta que no estn presentes a menos de
que usted se d a la tarea de codificar en ese sentido (cosa que no es fcil).
Ms bien, Visual Basic propone un desarrollo orientado a eventos. Usted crea la in-
terfaz agregando objetos a un formulario, cada objeto tendr sus caractersticas (pro-
piedades) y ser receptivo a las cosas que pueden sucederle (eventos). En cada evento
puede definirse una secuencia de instrucciones, a la que llamamos procedimiento de
evento. El punto inicial es incluir un objeto en una interfaz y el punto final es agregar
el cdigo a los procedimientos de eventos.
Los eventos que estn disponibles para un determinado objeto dependern de la na-
turaleza del control sobre el que est basado. Por ejemplo, los objetos basados en los
controles Line y Shape no poseen eventos, ya que son elementos estticos cuya na-
turaleza no es funcionar de cierta forma, sino slo mostrarse; los objetos basados en
el resto de los controles implcitos de Visual Basic, como lo son TextBox,
CommandButton. Label y dems, s poseen eventos especficos acordes a su
comportamiento.
Podemos dividir los eventos en diferentes categoras:
De tipo Clic: relacionados con la interaccin del usuario y los objetos a travs de
los botones del ratn.
De tipo Cambios: relacionado con las formas para modificar el valor que posee un
objeto.
De tipo Enfoque: relacionado con la adquisicin o prdida del enfoque.
De tipo Drag & Drop: relacionados con la facilidad del entorno grfico de arras-
trar y colocar (Drag & Drop).
De tipo Teclado: relacionados con la pulsacin de teclas mediante el teclado.
De tipo Ratn: relacionados con el uso del ratn como dispositivo apuntador.
De tipo Elementos: relacionado con objetos basados en el control ComboBox y los
estados de sus elementos.
De tipo Archivos: relacionados con la ubicacin de archivos para los objetos
basados en el control FileListBox.








Captulo 11: Programacin orientada a eventos 265
De tipo Datos: relacionados con el control Data.
De tipo Dibujo: relacionados con el control PictureBox.
De tipo Tiempo: relacionado con el objeto temporizador o Timer.
La figura 11.1 muestra un cuadro en donde se relaciona qu tipos de eventos son
viables con qu controles implcitos de Visual Basic. No se incluyen todos los even-
tos posibles para los objetos basados en los controles mencionados, pero s se rela-
cionan los ms importantes.


===================================================
Nota: No se incluy el control OLE ni los eventos relacionados con OLE; como
supondr, OLE depende mucho de la aplicacin con la que se establezca la liga, lo
que complica abarcar adecuadamente su comportamiento.
===================================================










266 Parte 3: Controles grficos y programacin orientada a eventos
Argumentos implcitos
Al igual que existen algunas funciones que reciben argumentos, hay algunos eventos
que los reciben tambin. Quiz se pregunte quin le proporciona los argumentos a los
eventos? Es el mismo sistema quien lo hace.
La secuencia que sigue Visual Basic para la ejecucin de eventos es la siguiente:
El usuario realiza algo sobre un objeto que es reconocido como un evento (el evento
ocurre).
Visual Basic revisa si para ese objeto hay algo codificado para el evento que le
sucedi (procedimiento de evento).
Si no hay nada codificado, no pasa nada; en caso de que s existan instrucciones,
Visual Basic revisa si existen argumentos implcitos, para el evento en cuyo caso,
toma los valores que el sistema le proporciona.
Procede a la ejecucin de las instrucciones del procedimiento de evento, en caso de
que aplique.


Resumen de las categoras de eventos, consideradas
de uso general
No todos los eventos se aplican para todos los objetos, sin embargo, de las categoras
que mencionamos, 5 de ellas son prcticamente utilizables para la mayora de los
objetos, sin importar en qu control estn basados.
Por tal motivo, les llamamos a dichas categoras de uso general. Se trata de las si-
guientes:
De tipo Clic
De tipo Cambios
De tipo Enfoque
De tipo Teclado
De tipo Ratn
Las categoras de eventos que no son consideradas de uso general frecuentemente
estn orientadas a los objetos basados en un control especfico; la totalidad de ellas se
vern en los captulos que traten de manera particular los controles a los que se
aplican.











Capitulo 11: Programacin orientada a eventos 267
Tipo Clic


Ocurre cuando el usuario presiona y suelta un botn del ratn en un objeto. Tambin
puede ocurrir cuando se cambia el valor de un objeto.
Para un objeto Form, este evento ocurre cuando el usuario hace clic en un rea en
blanco o en un control desactivado. Para otros objetos, este evento ocurre:
Cuando hace clic en un objeto con el botn primario o secundario del ratn. Con un
objeto basado en el control CheckBox, CommandButton. ListBox u
OptionButton, el evento Click slo ocurre cuando el usuario hace clic con el
botn primario del ratn.
Cuando selecciona un elemento de un objeto basado en el control ComboBox o
ListBox, ya sea presionando las teclas de direccin o haciendo clic con el botn
del ratn.
Cuando un objeto basado en el control CommandButton, OptionButton o
CheckBox tiene el enfoque y presiona la barra espaciadora.
Cuando un formulario tiene un objeto basado en el control CommandButton con
su propiedad Default establecida a True y presiona Intro.
Cuando un formulario tiene un objeto basado en el control CommandButton con
su propiedad Cancel establecida a True y presiona la tecla Escape.
Cuando presiona una tecla de mtodo abreviado para un objeto. Por ejemplo, si el
ttulo de un objeto basado en el control CommandButton es "&Ir", al presionar
Alt+I se desencadena este evento.
Tambin puede desencadenar el evento Click en tiempo de ejecucin:
Si establece la propiedad Value de un objeto basado en el control
CommandButton a True.
Si establece la propiedad Value de un objeto basado en el control
OptionButton a True.
Si cambia el valor de la propiedad Value de un objeto basado en el control
CheckBox.














268 Parte 3: Controles grficos y programacin orientada a eventos

Se produce cuando un usuario presiona y suelta un botn del ratn dos veces sobre un
objeto.
En un formulario, el evento DblClick se produce cuando el usuario hace doble che
en un control deshabilitado o en un rea en blanco del mismo. En un objeto, se
produce:
Cuando se hace doble clic en ste con el botn primario del ratn.
Cuando se hace doble clic en un elemento de un objeto basado en un control
ComboBox cuya propiedad Style es 1 (Simple) o en un control
FileListBox, ListBox. DataCombo o DataList.
Tipo Cambios

Indica que el contenido de un control ha cambiado. Cmo y cundo ha ocurrido este
evento vara segn el control:
ComboBox: cambia el contenido del cuadro de texto del control. Ocurre slo si la
propiedad Style est establecida a 0 (Dropdown Combo) o 1 (Simple
Combo) y el usuario cambia el texto o se cambia el valor de la propiedad Text en
tiempo de ejecucin.
DirListBox: cambia el directorio seleccionado. Ocurre cuando el usuario hace
doble clic en un nuevo directorio o cuando usted cambia el valor de la propiedad
Path en tiempo de ejecucin.
DriveListBox: cambia la unidad seleccionada. Ocurre cuando el usuario selec-
ciona una nueva unidad o cuando usted cambia el valor de la propiedad Drive en
tiempo de ejecucin.
HScrollBar y VScrollBar (barras de desplazamiento horizontal y vertical):
mueven el cuadro de desplazamiento de la barra de desplazamiento. Ocurre
cuando el usuario se desplaza o cuando usted cambia el valor de la propiedad
Value en tiempo de ejecucin.
Label: cambia el contenido del control Label. Ocurre cuando cambia el valor de
la propiedad Caption en tiempo de ejecucin.








Captulo 11: Programacin orientada a eventos 269
PictureBox: cambia el contenido del control PictureBox. Ocurre cuando
cambia el valor de la propiedad Picture en tiempo de ejecucin.
TextBox: cambia el contenido del cuadro de texto. Ocurre cuando un usuario
cambia el texto o cuando usted cambia el valor de la propiedad Text en tiempo de
ejecucin.

Ocurre cuando un objeto se muestra primero (de no existir, pasa a existir con un
tamao) o cuando cambia el estado de una ventana. (Por ejemplo, cuando se maxi-
miza, minimiza o restaura un formulario.)



Ocurre cuando el cuadro de desplazamiento de un ScrollBar o un objeto que con-
tenga una barra de desplazamiento, cambia de posicin o se desplaza horizontal o
verticalmente.


Ocurre cuando el enfoque pretende cambiar a otro objeto, siempre y cuando el objeto
tenga su propiedad CausesValidation establecida a True.

El argumento implcito Cancel puede especificarse como True para evitar que el
objeto pierda el enfoque si no ha cumplido con una condicin.
Suponga que hay un TextBox llamado txtNombre, que tiene su propiedad
CausesValidation establecida a True. Por ejemplo, si requiere que el usuario no
omita escribir su nombre en un cuadro de texto llamado txtNombre, es decir, que no
pase a otro objeto mientras no escriba algo; el cdigo sera como sigue:











270 Parte 3: Controles grficos y programacin orientada a eventos
Private Sub txtNombre_Validate(Cancel As Boolean)
If txtNombre.Text = "" then
MsgBox "No debe omitir el nombre"
Cancel = True
Else
Cancel = False
End If -
End Sub
Este mismo manejo puede realizarse a travs del evento LostFocus, en conjunto
con el mtodo SetFocus. Utilizar Validate es ms prctico y puede evitar que
cause un ciclo indefinido en su programa.

===================================================
Nota: Dependiendo de la versin de Visual Basic que disponga, as como el len-
guaje (espaol, francs, ingls, etctera), el nombre de los argumentos implcitos
puede variar. Por ejemplo, el argumento Cancel en ocasiones puede llamarse
KeepFocus. Independientemente del caso que se presente, haga referencia al argu-
mento bajo el nombre predeterminado que Visual Basic le asigne automticamente.
===================================================

Tipo Enfoque

Ocurre cuando un objeto recibe el enfoque, ya sea mediante una accin del usuario,
como utilizar la tecla Tab o hacer clic en el objeto o cambiando el enfoque en tiempo
de ejecucin mediante el mtodo SetFocus. Un formulario recibe el enfoque slo
cuando todos los controles visibles estn desactivados.

Ocurre cuando un objeto pierde el enfoque, ya sea por una accin del usuario, como
utilizar la tecla Tab o hacer clic en otro objeto, o bien mediante un cambio del
enfoque en tiempo de ejecucin con el mtodo SetFocus.










Captulo 11: Programacin orientada a eventos 271
>> Demostracin de algunos de los eventos de tipo Clic, Cambios y Enfoque.
[11.01]
frmEventos1.frm
A continuacin aprender programacin orientada a eventos, utilizando diferentes
eventos implcitos de los objetos basados en los controles Label, TextBox y
CommandButton.
Implementacin visual

Tabla de objetos y propiedades de frmEventos1







272 Parte 3; Controles grficos y programacin orientada a eventos

Propiedades nuevas en frmEventos1

Eventos nuevos en frmEventos1











Captulo 11: Programacin orientada a eventos 273
Codificacin de frmEventos1
Editar cdigo: txtCampo1, Evento: Validate
Private Sub txtCampo1_Validate(Cancel As Boolean)
If txtCampol.Text = "" Then
lblAccion.Caption = "No debe omitir el campo 1"
Cancel = True
Else
Cancel = False
End If
End Sub
Editar cdigo: txtCampo2, Evento: GotFocus
lblAccion.Caption = "El campo 2 adquiri el enfoque"
Editar cdigo: txtCampo2, Evento: Change.
lblAccion.Caption = "El campo 2 cambi a " & txtCampo2.Text
Editar cdigo: txtCampo2, Evento: LostFocus.
lblAccion.Caption = "El campo 2 perdi el enfoque"
Editar cdigo: txtCampo2, Evento: DblClick.
lblAccion.Caption = "Hizo doble clic en la instruccin"

Editar cdigo: lbllnstruccones. Evento: Click.
lblAccion.Caption = "Hizo clic en la instruccin"
Editar cdigo: cmdSalir, Evento: Click.
End






274 Parte 3: Controles grficos y programacin orientada a eventos
Ejecucin
El programa inicia asignndole el enfoque a txtCampol.
Presione la tecla Tab para trasladar el enfoque a txtCampo2.
Debido a que txtCampo1 tiene establecido el valor True en su propiedad
CausesValidation, Visual Basic buscar si existe un procedimiento de evento
Validate para dicho objeto. En nuestro ejemplo, ese objeto s posee un proce-
dimiento de evento para validar (txtCampo1_Validate), mismo que ocurre al
intentar que txtCampo1 pierda el enfoque.
El argumento implcito, llamado Cancel, permitir que el objeto txtCampo1 pierda o
no el enfoque (valores False o True, respectivamente). Si el objeto txtCampo1 no
contiene texto, es decir, si el cuadro de texto est vaco, se enviar el mensaje
correspondiente en el objeto Label agregado para tal efecto (lblAccion) y
establecer a True el argumento implcito Cancel, para que impida la prdida del
enfoque. Por el contrario, si ya se captur algo en el objeto, el argumento tomar el
valor False, con lo que la validacin se da por cumplida. Como el programa no le
dejar salir del cuadro de texto hasta que teclee algo en txtCampo1, escriba
"Prueba".
Presione la tecla Tab para trasladar el enfoque a txtCampo2.
Al hacerse efectivo el traslado del enfoque, txtCampo1 pierde el enfoque, pero
txtCampo2 lo adquiere. Puesto que txtCampo2 adquiere el enfoque, se ejecuta el
procedimiento de evento txtCampo2_GotFocus, desplegando en lblAccion el
mensaje correspondiente.
En txtCampo2 escriba la palabra "Piensa".
Cada vez que introduce una de las letras de la palabra "Piensa", el texto del objeto
txtCampo2 sufre un cambio, por lo que se ejecuta el procedimiento de evento
txtCampo2_Change en cada modificacin. Observe que lblAccion se actualiza
con cada letra que introduce.
















Captulo 11: Programacin orientada a eventos 275
Presione la tecla Tab para trasladar el enfoque a cmdSalir.
Al hacerse efectivo el traslado del enfoque, txtCampo2 lo pierde y cmdSalir lo
adquiere. Al momento que txtCampo2 pierde el enfoque, se ejecuta el procedimiento
de evento txtCampo2_LostFocus, desplegando en IblAccion el mensaje
correspondiente.
Haga clic en lblinstrucciones ("Haga clic o doble clic aqu") y luego haga
doble clic.
Cuando hace clic y doble clic se actualiza el mensaje de lblAccion. Esto se deriva
de las instrucciones que se especificaron en los procedimientos de evento
lblInstrucciones_Click y lblInstrucciones_DblClick, que se
ejecutan cuando usted causa en el objeto lblinstrucciones los eventos de clic y
doble clic.
Haga clic en el botn Salir (cmdSalir).
El procedimiento cmdSalir_Click slo contiene la instruccin End, que da por
terminada la sesin de trabajo.

Ocurren cuando el usuario presiona (KeyDown) o suelta (KeyUp) una tecla mientras
un objeto tiene el enfoque. Estos eventos son muy tiles para cuando desea capturar
combinaciones de teclas con la finalidad de provocar la ejecucin de una determinada
tarea, como pudiera ser presionar Fl para ayuda, F2 para modificar un dato, etctera.
Estos eventos tienen dos argumentos implcitos: KeyCode, que devuelve el cdigo
ANS de la tecla que se pulsa y Shift, que devuelve un cdigo que Visual Basic iden-
tifica con las teclas especiales Alt, Mays (Shift) y Ctrl.
Tanto con KeyDown como con KeyUp, el objeto que tiene el enfoque recibe todas las
pulsaciones de tecla. Un formulario slo puede tener el enfoque si no tiene controles
visibles y activados, por lo que si desea una pantalla de captura sensible a cierta com-
binacin de teclas sin importar el objeto que tenga el enfoque, tendra que definir el
mismo cdigo en los procedimientos KeyDown y KeyUp en todos los objetos.

276 Parte 3: Controles grficos y programacin orientada a eventos

==================================================
Nota: Si la propiedad KeyPreview est establecida a True en un formulario,
ste recibe la peticin de ejecucin de KeyDown, KeyUp y KeyPress antes que
los objetos contenidos en l. Utilice la propiedad KeyPreview para crear rutinas
globales de control del teclado, sin necesidad de especificar lo mismo en KeyDown,
KeyUp y KeyPress para cada objeto.
==================================================
Aunque los eventos KeyDown y KeyUp pueden aplicarse a la mayora de las teclas,
suelen usarse comnmente para:
Teclas de caracteres extendidos como las teclas de funcin (Fl, F2, F3, etctera.)
Teclas de desplazamiento
Combinaciones de teclas con modificadores de teclado estndares
Distinguir entre el teclado numrico y las teclas de nmero normales
Utilice los procedimientos de evento KeyDown y KeyUp si necesita responder a
presionar y soltar una tecla.
Los eventos KeyDown y KeyUp no se invocan para las siguientes teclas, en virtud
de que tienen significado preferencial en el entorno de Windows:
La tecla Intro, si el formulario tiene un control CommandButton con la
propiedad Default establecida a True.
La tecla Escape, si el formulario tiene un control CommandButton con la pro-
piedad Cancel establecida a True.
La tecla Tab.
KeyDown y KeyUp, no son sensibles a maysculas y minsculas, es decir todas las
letras tienen el mismo cdigo de identificacin (KeyCode).
El argumento implcito Shift, por su parte, corresponde a un valor numrico que
puede ser combinado. Para su mejor manejo. Visual Basic posee las siguientes cons-
tantes utilizables para Shift:

:

Por ejemplo, si usted presiona la combinacin Alt+Mays+A, KeyCode valdr 65
(cdigo ANSI de la letra "A") y Shift valdr vbAltMask + vbShiftMask, es
decir 5.





Captulo 11: Programacin orientada a eventos 277

Ocurre cuando el usuario presiona una tecla correspondiente a un carcter ANSI (que
tiene cdigo ASCII). El argumento implcito KeyASCII devuelve el cdigo ASCII
de la tecla que se presion.
KeyPress interpreta las pulsaciones con sensibilidad a maysculas y minsculas, es
decir, las maysculas y minsculas de cada carcter devolvern cdigos de tecla
distintos.

==================================================
Nota: El nmero ANSI para la combinacin de teclado Ctrl+@ es 0. Visual Basic
reconoce un valor KeyASCII de 0 como una cadena de longitud cero (""); evite usar
Ctrl+@ en sus aplicaciones, ya que puede obtener resultados impredecibles.
==================================================
El argumento implcito KeyASCII no solamente es informativo, ya que usted puede
manipular el texto a travs de l. El texto que permanece en su captura no es el re-
cibido a travs del teclado, sino el correspondiente al carcter ASCII del valor que
permanezca en KeyASCII despus de que KeyPress se ejecute. Si no modifica el
argumento KeyASCII, lo que haya tecleado se mantiene.
El siguiente es un ejemplo del uso de KeyPress. Suponga que tiene un cuadro de
texto llamado txtClave, en donde debe capturar solamente caracteres numricos.
Usted sabe que los caracteres numricos tienen los cdigos del 48 ("0") al 57 ("9") y
que el cdigo ASCII de la tecla BackSpace es 8. Utilizando KeyPress usted puede
validar que slo se capturen nmeros.

Private Sub txtClave_KeyPress(KeyAscii As Integer)
If (KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Then
KeyAscii = KeyAscii
Else
Beep
KeyAscii =0
End If
End Sub
Si teclea algo cuyo cdigo est entre 48 y 57 (nmero) o que sea 8 (BackSpace),
KeyASCII sigue valiendo KeyASCII, de lo contrario, se emite un sonido (Beep) y
KeyASCII vale 0, lo que acta como si no hubiera tecleado nada.



278 Parte 3: Controles grficos y programacin orientada a eventos
Si tiene dudas de qu es lo que hace KeyASCII en KeyPress, quiz modificando
el cdigo anterior de la siguiente forma comprenda mejor:
Priv txtClave_KeyPress(KeyAscii As Integer) ate Sub
KeyAscii = 64
End Sub
El cdigo 64 es el correspondiente a la arroba (@). En este caso, no importa lo que
teclee en el objeto txtClave, todo se traducir a cdigo 64.
Algunas teclas especiales, tales como Alt, Ctrl, Mays, las flechas de direccin y
Supr entre otras, no causan la ejecucin de KeyPress, por lo que siguen teniendo
la misma funcin que tengan predefinida.
Una de las aplicaciones ms tiles de KeyPress es para la captura secuencial de
datos de tipo numrico. Hay muchas aplicaciones cuya captura consiste en dos o ms
nmeros; por ejemplo, en el caso de transacciones con tarjeta de crdito, podra pre-
guntarse lo siguiente: nmero de cuenta, mes de expiracin, ao de expiracin,
monto de la transaccin.
Pensando en la facilidad que podemos brindarle al usuario, lo ideal es que la tecla
Intro (cdigo 13 o bien la constante vbCr) asuma que se da por aceptado un dato y
transfiera el enfoque al siguiente dato, de tal forma que toda la captura pueda rea-
lizarse de manera rpida a travs del bloque de teclas numricas que por lo general se
encuentra en la parte derecha de los teclados. Una cajera experimentada le agradecer
esa consideracin, en lugar de que la obligue a alternar en cada campo con la tecla
Tab o bien con el uso del ratn. Suponga que los datos son capturados en los siguien-
tes objetos: txtCuenta, txtMesExp, txtAnioExp y txtMonto, en ese
orden.
Puede codificar txtCuenta_KeyPress de la siguiente forma:
Private Sub txtCuenta_KeyPress(KeyAscii As Integer)
KeyAscii = 4 KeyAscii <= 57) Or KeyAscii = 8 Then If ( > 8 And
KeyAscii = KeyAscii
Else
If KeyAscii = vbCr Then
txtMesExp.SetFocus
Else
Beep
KeyAscii = 0
End If
End If
End Sub







Captulo 11: Programacin orientada a eventos 279
De esta forma, validara que todo lo escrito es nmero y en el caso de presionar
Intro, pasar al siguiente dato. Para el caso del evento KeyPress de txtMesExp,
txtAnioExp y txtMonto, solamente es necesario modificar el nombre del objeto
al que transferir el enfoque.
==================================================
Nota: El sentido comn nos dira que vbEnter es la constante correspondiente al
carcter 13, sin embargo. Visual Basic utiliza vbEnter en contraposicin a
vbLeave, para determinar la entrada y salida de objetos en operaciones de tipo Drag
& Drop.
==================================================
>> Demostracin de algunos de los eventos de tipo Teclado. [11.02]
frmTeclas.frm
A continuacin aprender programacin utilizando la captura de pulsaciones de
teclas normales, teclas especiales y combinaciones de teclas. Tambin aprender a
establecer tareas "manteniendo presionada la tecla...".
Implementacin visual








280 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmTeclas

Propiedades nuevas en frmTeclas



Captulo 11: Programacin orientada a eventos 281
Eventos nuevos en frmTeclas

Codificacin de frmTeclas
Editar cdigo: txtCaptura, Evento: KeyDown.
Private Sub txtCaptura_KeyDown(KeyCode As Integer, Shift As Integer)
lblKeyCode.Caption = Str(KeyCode)
lblShift.Caption = Str(Shift)
intEstadoAlt% = Shift
End Sub
Editar cdigo: txtCaptura, Evento: KeyPress.
Private Sub txtCaptura_KeyPress(KeyASCII As Integer)
lblKeyASCII.Caption = Str(KeyAscii) & " ( " & Chr(KeyAscii) & " )"
End Sub

Editar cdigo: txtCaptura, Evento: KeyUp
Private Sub txtCaptura_KeyUp(KeyCode As Integer, Shift As Integer)
lblKeyCode.Caption = Str(KeyCode)
lblShift.Caption = Str(Shift)
intEstadoAlt% = Shift
End Sub




282 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: (General), Evento: (Declarations).
Dim intEstadoAlt As Integer

Editar cdigo: lbl1, Evento: Click.
lbl1.Font.Bold = (intEstadoAlt% = vbAltMask)

Editar cdigo: lbl2, Evento: Click.
lbl2.Font.Bold = (intEstadoAlt% = vbAltMask)
Editar cdigo: lbl3, Evento: Click.
lbl3.Font.Bold = (intEstadoAlt% = vbAltMask)
Ejecucin
Antes de ejecutar la aplicacin, asegrese de que la tecla Bloq Mays
(CapsLock) no est activada. Presione la tecla "a".
Aunque usted no se d cuenta, ya se ejecutaron tres eventos: txtCaptura_
KeyDown, cuando presion la tecla "a", txtCaptura_KeyPress porque
presion una tecla reconocida por ANSI y txtCaptura_KeyUp,, cuando dej
de presionar la tecla "a". El proceso provoca que se actualicen los argumentos
implcitos de los eventos, mismos que se despliegan en los objetos Label
incluidos en la interfaz para tal efecto. KeyCode es igual a 65, correspondiente a
la letra "a", Shift es igual a cero, porque no est utilizando ninguna tecla especial y
KeyASCII es igual a 97, cdigo ASCII correspondiente a la letra "a" en minscula.
Active la tecla Bloq Mays (CapsLock).
Observe que KeyCode cambia a 20, correspondiente a la tecla Bloq Mays, pero
KeyASCII no cambia. Esto se debe a que KeyASCII realmente no se ha
actualizado, porque despus de la primera letra "a" que tecle, no ha presionado
ninguna tecla con valor ANSI.







Captulo 11: Programacin orientada a eventos 283
Una vez que la tecla Bloq Mays est activada, presione la tecla "a".
Observe que KeyCode cambia a 65; dicho cdigo fue igual, tanto para la "a"
como para la "A". El valor de KeyASCII, que es case sensitivo, muestra el
cdigo 65, correspondiente a la letra "A" mayscula, diferente al 97 presentado
cuando tecle la letra "a" minscula".
Presione la tecla Ctrl y no la suelte, vea el valor que asume Shift y posterior-
mente suelte la tecla Ctrl.
Cuando presiona la tecla Ctrl, el procedimiento txtCaptura_KeyDown
actualiza Shift con el valor 2 (correspondiente a vbCtrlMask). Mientras no
libere la tecla, Shift seguir siendo 2. Cuando libera la tecla,
txtCaptura_KeyUp actualiza Shift con el valor 0. Conocer el ltimo
estado de Shift le permitir realizar tareas de "mantener presionada la tecla...".
Almacenamiento permanente del valor de Shift, para controlar tareas del tipo
"mantenga presionada la tecla...".
En nuestra aplicacin queremos que al mantener presionada la tecla Alt y hacer
clic en cualquiera de los objetos de tipo Label con valor esttico (lbl1, lbl2
y lbl3), stos se pongan en negritas. Para lograrlo, es necesario que sepamos
en todo momento si se est manteniendo presionada la tecla Alt o no; para ello
definimos una variable a nivel de declaraciones generales llamada intEsta-
doAlt%, que almacena el ltimo valor conocido de Shift, mismo que se modifi-
ca en los eventos txtCaptura_KeyDown y en txtCaptura_KeyUp,
cuando se presiona o se deja de presionar una tecla.
Si el ltimo valor asumido por intEstadoAlt% es igual a vbAltMask (es
decir 4), suceder lo siguiente cuando haga clic en lbl1, lbl2 o lbl3: la
propiedad Font, en su especificacin Bod para el objeto sobre el que se haga
clic, ser igual al valor lgico resultante entre intEstadoAlt%, y
vbAltMask (4); como 4 es igual a 4, el valor resultante ser True y por tanto el
texto cambiar.
Presione la tecla Alt y no la suelte. Haga clic en los objetos lbl1 y lbl2.
Suelte la tecla Alt. Haga clic en lbl2.
Se pone en prctica lo explicado en el punto anterior. Ahora, usted puede desa-
rrollar aplicaciones que reconocen las teclas especiales.






284 Parte 3: Controles grficos y programacin orientada a eventos
Tipo Ratn

Ocurren cuando el usuario presiona (MouseDown) o suelta (MouseUp) un botn del
ratn. Tienen una utilidad adicional a los eventos Click y DblClick. en el sentido
de que reconocen los botones que se estn presionando, adems de que reconocen si
el trabajo con el ratn est acompaado del uso de teclas especiales (Alt, Ctrl y
Mays).
Sus argumentos implcitos son Button, que especifica qu botn del ratn se
presiona, State, que indica si se estn presionando teclas especiales en conjunto con
el ratn y X,Y que en conjunto hacen referencia las coordenadas de la ubicacin del
puntero del ratn.
Visual Basic posee constantes para simplificar la identificacin de los valores que
puede asumir Button...

... y los que puede asumir State:










Captulo 11: Programacin orientada a eventos 285

Ocurre cuando el usuario mueve el ratn. Los argumentos implcitos son los mismos
y actan igual que en los eventos MouseDown y MouseUp: la diferencia entre
MouseMove y aquellos, es que MouseMove es de ejecucin continua, mientras que
MouseDown y MouseUp slo ocurrirn al presionar los botones del ratn.
MouseMove se ejecuta en todo cambio de posicin X,Y del puntero sobre el objeto
que tiene definido el evento.
>>Demostracin de algunos de los eventos de tipo Ratn. [11.03]
frmRaton.frm
A continuacin aprender programacin utilizando la captura de pulsaciones de los
botones del ratn, as como el movimiento del puntero del mismo.
Implementacin visual





286 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmRaton

Eventos nuevos en frmRaton

Codificacin de frmRaton
Editar cdigo: Form, Evento: MouseMove.
Private Sub Form_MouseMove(Button As Integer,
Shift As Integer, X As Single, Y As Single)

lblAccion.Caption = "Button:" & Button & " Shift;" &
Shift & " X:" & X & " Y:" & Y
End Sub









Captulo 11: Programacin orientada a eventos 287
Ejecucin
Mueva el puntero del ratn sobre el formulario.
Se actualizar el objeto Label (lblAccion) con los datos que se estn utilizando
en los argumentos implcitos. Observe que Button y Shift no tienen valor, ya
que no ha presionado ningn botn, ni tiene presionada ninguna tecla especial.
Presione el botn derecho del ratn y no lo suelte; siga moviendo el puntero del
ratn.
Observe que ahora Button equivale a vbRightButton (2).
Ahora presione la tecla Ctrl y siga moviendo el puntero del ratn. Observe
que ahora Shift equivale a vbCtrlMask (2).
>> Cmo darle riqueza visual a un programa, mediante el evento MouseMove.
[11.04]
frmDestinos.frm
A continuacin aprender a agregar elementos grficos a sus aplicaciones, como fondo al
formulario o grficos a los botones de comando. Utilizar MouseMove para alterar visualmente la
interfaz y darle un poco ms de vida.
La aplicacin muestra los destinos tursticos que una agencia de viajes especializada ofrece; la
empresa tiene organizados los destinos en las siguientes categoras: en todo el mundo, Mxico,
Estados Unidos y Canad.











288 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual

Tabla de objetos y propiedades de frmDestinos





Captulo 11; Programacin orientada a eventos 289









290 Parte 3: Controles grficos y programacin orientada a eventos
Propiedades nuevas en frmDestinos

Eventos nuevos en frmDestinos
Mtodos nuevos en frmDestinos



Codificacin de frmDestinos

Editar cdigo: cmdMundo, Evento: MouseMove,

cmdMundo.Font.Bold = True
cmdMexico.Font.Bold = False
cmdEU.Font.Bold = False
cmdCanada.Font.Bold = False
cmdMundo.SetFocus


Captulo 11: Programacin orientada a eventos 291

Editar cdigo: cmdMundo, Evento: Click,
txtDestinos.Text = "Chicago" & vbNewLine & _
"Denver" & vbNewLine & _
"N.Y." & vbNewLine & _
"Mxico D.F." & vbNewLine & _
"Monterrey" & vbNewLine & _
"Guadalajara" & vbNewLine & _
"Cancn" & vbNewLine & _
"Ontario" & vbNewLine & _
"Montreal" & vbNewLine & _
"Vancouver"
Editar cdigo: cmdMexico, Evento: MouseMove,
cmdMundo.Font.Bold = False
cmdMexico.Font.Bold = True
cmdEU.Font.Bold = False
cmdCanada.Font.Bold = False
cmdMexico.SetFocus

Editar cdigo:cmdMexico, Evento: Click.
txtDestinos.Text = "Mxico D.F." & vbNewLine & _
"Monterrey" & vbNewLine & _
"Guadalajara" & vbNewLine & _
"Cancn"






292 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: cmdEU, Evento: MouseMove.
cmdMundo.Font.Bold = False
cmdMexico.Font.Bold = False
cmdEU.Font.Bold = True
cmdCanada.Font.Bold = False
cmdEU.SetFocus
Editar cdigo: cmdEU, Evento: Click.
txtDestinos.Text = "Chicago" & vbNewLine & _
"Denver" & vbNewLine & _
"N.Y." & vbNewLine
Editar cdigo: cmdCanada, Evento: MouseMove.
cmdMundo.Font.Bold = False
cmdMexico.Font.Bold = False
cmdEU.Font.Bold = False
cmdCanada.Font.Bold = True
cmdCanada.SetFocus
Editar cdigo: cmdCanada, Evento: Click.
txtDestinos.Text = "Ontario" & vbNewLine & _
"Montreal" & vbNewLine & _
"Vancouver"
Editar cdigo: txtDestino, Evento: Change.
Beep
Editar cdigo: cmdSalir, Evento: Click.
End




Captulo 11: Programacin orientada a eventos 293

Ejecucin
Mueva el puntero del ratn sobre el botn de comando El Mundo (cmdMundo).
Se ejecutar el procedimiento de evento cmdMundo_MouseMove. que provoca el
comportamiento que se repite en los objetos cmdMexico, cmdEU y cmdCanada:
(1) Se asigna el enfoque al objeto (SetFocus); como es CommandButton, se
percibe por el borde negro que se le coloca al objeto. (2) Se despliega el mensaje de
Informacin sobre herramientas, que dice "Destinos en el mundo". (3) Mediante
la manipulacin de la propiedad Font se establece en negritas el contenido del
botn; este efecto, en conjunto con el borde negro que da el enfoque, distingue
claramente al botn apuntado con el ratn, del resto de los dems. (4) Para hacer
ms patente la diferencia, se modifica la propiedad Font del resto de los botones,
para que se encuentren con letra normal, es decir, que no estn negritas.
Este comportamiento se repite para cmdMexico, cmdEU y cmdCanada; slo
cambiar la propiedad ToolTipText correspondiente a cada objeto.
Arrastre el puntero del ratn sobre los botones y vea el efecto que causa.
Presione el botn de comando Mxico (cmdMexico).
Se ejecuta el procedimiento cmdMexico_Click, que desplegar, en mltiples
lneas, los destinos tursticos de Mxico. Este mensaje no es otra cosa que una
expresin String que contiene chr(10) & chr(13),en su forma constante
Visual Basic vbNewLine. Como el contenido de txtDestino cambi, se
ejecuta el procedimiento txtDestino_Change, que produce una emisin
sonora por el altavoz de la computadora.
Este comportamiento se repite, y el contenido de la expresin String cambia para
cmdMexico, cmdEU y cmdCanada.
Sin importar qu objeto tenga el enfoque en este momento, presione la tecla Intro.
Como el botn de comando Salir (cmdSalir) tiene establecida la propiedad
Default a True, acta como botn predeterminado, que ejecuta el procedimiento
cmdSalir_Click.







294 Parte 3: Controles grficos y programacin orientada a eventos

Prioridad de los eventos
Cuando trabaja con eventos, debe ser muy cuidadoso de que stos no produzcan
comportamientos contrapuestos con otros. Es posible que usted provoque un ciclo
indefinido con eventos que actan uno contra otro.
El ejemplo clsico es el de la validacin contra vacos. Suponga que tiene en su inter-
faz dos cuadros de texto, uno llamado txtNombre y otro llamado txtDireccion,
los cuales se encuentran uno despus del otro. Suponga que tanto el Nombre
(capturado en txtNombre) como la Direccin (txtDireccion) son datos
imprescindibles, por lo cual el usuario no debe omitirlos.
Usted codifica de tal forma que al salir de cada uno de los dos objetos, se valide si se
omitieron los datos, en cuyo caso regresar el enfoque al cuadro de texto que debe ser
complementado.
Private Sub txtNombre_LostFocus()
If txtNombre.Text = "" Then
MsgBox "El nombre no se puede omitir"
txtNombre.SetFocus
End If
End Sub
Private Sub txtDireccion_LostFocus()
If txtDireccion.Text = "" Then
MsgBox "La direccin no se puede omitir"
txtDireccion.SetFocus
End If
End Sub
Usted omite el nombre (presiona Tab estando en el objeto txtNombre) y genera un
ciclo infinito que slo podr romper con Ctrl+Inter.
Dnde est el problema? Resulta que cuando se ejecuta txtNombre_LostFocus,
el objeto txtNombre ya no tiene el enfoque, es decir, el enfoque ya lo tiene otro
objeto, en este caso txtDireccion. El procedimiento txtNombre_LostFocus,
al detectar que se omiti la captura del nombre, enva un mensaje de error y utiliza la
instruccin txtNombre.SetFocus, para asignar el enfoque al objeto
txtNombre; esto provoca que txtDireccion, despus de tener el enfoque, lo
pierde estando vaco, lo cual tambin causa error y le asigna el enfoque a
txtDireccion, pero otra vez txtNombre est vaco, marca error y cambia el
enfoque! As sigue infinitamente.
La solucin: utilizar el evento adecuado. Como vimos en nuestro ejemplo, el evento
LostFocus no nos sirve porque cuando ocurre, el objeto ya no tiene el enfoque:



Captulo 11: Programacin orientada a eventos 295
qu evento se ejecuta cuando un objeto pretende perder el enfoque? Respuesta:
Validate.
Nuestro ejemplo quedara como se muestra a continuacin:
Private Sub txtNombre_Validate(Cancel As Boolean)
If txtNombre.Text = "" Then
MsgBox "El nombre no se puede omitir"
Cancel = True
Else
Cancel = False
End If
End Sub

Private Sub txtDireccion_Validate(Cancel As Boolean)
If txtDireccion.Text = "" Then
MsgBox "La direccin no se puede omitir"
Cancel = True
Else
Cancel = False
End If
End Sub
Es recomendable que identifique claramente en qu momento se ejecutan los eventos
y que defina claramente en qu momento desea que las instrucciones de su aplicacin
se ejecuten. Coloque sus instrucciones en el evento que con mayor precisin se
acerque al momento en que usted desea que las tareas sean realizadas y se ahorrar
muchos problemas. Explicado as se escucha fcil, pero cmo saber con exactitud
qu se ejecuta primero?.
El siguiente ejemplo nos servir para determinar la prioridad que tienen los eventos
en la ejecucin.
>> Elaboracin de un programa que le permita visualizar la prioridad en la
ejecucin de los eventos. [11.05]
frmOrden.frm
A continuacin aprender a actualizar un cuadro de texto multilnea con informa-
cin producida en tiempo de ejecucin y al mismo tiempo comprobar la prioridad
que tienen los eventos en su ejecucin.
La informacin derivada de la ejecucin de este programa le dar mucha claridad con
respecto a la forma en que Visual Basic desencadena los eventos; eso le permitir
evitar conflictos de ejecucin en los procedimientos de evento.









296 Parte 3: Controles grficos y programacin orientada a eventos
Para este programa requerir dos cuadros de texto para evaluar los eventos de tipo
Cambios, Enfoque y Teclado, mientras que utilizar un botn de comando para eva-
luar los eventos de tipo Ratn y Click.
Implementacin visual

Tabla de objetos y propiedades de frmOrden



Captulo 11: Programacin orientada a eventos 297
Codificacin de frmOrden
Editar cdigo: txtObjeto1, Evento: GotFocus.
txtMuestra.Text = txtMuestra.Text & "Obj-1: GotFocus" & vbNewLine
Editar cdigo: txtObjeto1, Evento: KeyDown.
txtMuestra.Text = txtMuestra.Text & "Obj-1; KeyDown" & vbNewLine
Editar cdigo: txtObjeto1, Evento: KeyPress.
txtMuestra.Text = txtMuestra.Text & "Obj-1; KeyPress" & vbNewLine
Editar cdigo: txtObjeto1, Evento: Change.
txtMuestra.Text = txtMuestra.Text & "Obj-1: Change" & vbNewLine
Editar cdigo: txtObjeto1, Evento: KeyUp.
txtMuestra.Text = txtMuestra.Text & "Obj-1: KeyUp" & vbNewLine
Editar cdigo: txtObjeto1, Evento: Validate.
txtMuestra.Text = txtMuestra.Text & "Obj-1: Validate" & vbNewLine
Editar cdigo: txtObjeto1, Evento: LostFocus.
txtMuestra.Text = txtMuestra.Text & "Obj-1: LostFocus" & vbNewLine
Editar cdigo: txtObjeto2, Evento: GotFocus.
txtMuestra.Text = txtMuestra.Text & "Obj-2: GotFocus" & vbNewLine





298 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: cmd0bjeto3, Evento: Click.
txtMuestra.Text = txtMuestra.Text & "Obj-3: Click" & vbNewLine
Editar cdigo: cmd0bjeto3, Evento: MouseMove.
txtMuestra.Text = txtMuestra.Text & "Obj-3: MouseMove" & vbNewLine
Editar cdigo: cmd0bjeto3, Evento: MouseDown.

txtMuestra.Text = txtMuestra.Text & "Obj-3: MouseDown" & vbNewLine
Editar cdigo: cmd0bjeto3. Evento: MouseUp.
txtMuestra.Text = txtMuestra.Text & "Obj-3: MouseUp" & vbNewLine
Editar cdigo: txtObjeto2, Evento; Click.
txtMuestra.Text = txtMuestra.Text & "Obj-2: Click" & vbNewLine
Editar cdigo: txtObjeto2, Evento:DblClick.
txtMuestra.Text = txtMuestra.Text & "Obj-2: DblClick" & vbNewLine
Ejecucin
Al ejecutar el programa, antes de que usted interacte con l, el primer objeto en la
secuencia de tabulacin adquiere el enfoque.
El objeto txtobjeto1 adquiere el enfoque por ser el primero en la secuencia de
tabulacin que puede hacerlo. Se produce el evento txtObjeto1_GotFocus.
El cuadro de texto multilnea (txtMuestra) se actualizar, mencionando que el evento
en cuestin se ha ejecutado. Como puede ver, la propiedad Text de txtMuestra
acumula los resultados obtenidos, separndolos con chr(13) + chr(10), en su
forma de constante Visual Basic vbNewLine, lo que da la apariencia de ir listando los
resultados. Esto suceder en todos los procedimientos de evento del programa, donde slo
cambiar la referencia del objeto (Obj -1, 2 o 3) y el nombre del evento que se ha
desencadenado.





Captulo 11: Programacin orientada a eventos 299
Presione la tecla "a".
Se ejecutan, para el objeto txtObjeto1, los eventos KeyDown, KeyPress,
Change y KeyUp en ese orden.
Pulse la tecla Tab para ir al siguiente objeto (txtObjeto2).
Se ejecutan, para el objeto txtObjeto1, los eventos Validate y LostFocus en ese
orden. Slo entonces, txtObjeto2 adquiere el enfoque (txtObjeto2_GotFocus).
Presione la tecla Intro.
Como el botn de comando Objeto 3 (cmd0bjeto3) tiene establecida la propiedad
Default a True, acta como botn predeterminado, que ejecuta el procedimiento
cmdSalir_Click.
Haga clic en el Objeto 3 (cmdObjeto3).
Al momento de arrastrar el puntero del ratn sobre el botn para hacer clic en l, se
ejecuta en mltiples ocasiones el procedimiento cmdObjeto3_MouseMove; una vez
que hace clic, se ejecutar primero el procedimiento cmdObjeto3_MouseDown
(recuerde que en Windows mientras no suelte el botn del ratn, no se interpreta como
clic), despus se ejecuta el procedimiento cmdObjeto3_Click y luego
cmdObjeto3_MouseUp.
Haga doble clic en el segundo cuadro de texto (txtObjeto2).
Puesto que un clic sucede antes que uno doble, se ejecuta primero el procedimiento
txtObjeto2_Click y posteriormente txtObjeto2_DblClick.
Tomado como base el ejemplo anterior, podemos sugerir la siguiente tabla:










300 Parte 3: Controles grficos y programacin orientada a eventos








Captulo 11: Programacin orientada a eventos 301
La cantidad de combinaciones que pueden resultar en relacin a las preferencias en
la ejecucin de eventos, depende de manera directa de los eventos que tenga
codificados para un determinado objeto, as como las condiciones que tenga esta-
blecidas en el objeto contenedor (propiedad KeyPreview).
En cualquier procedimiento de evento puede existir alguna instruccin End que
concluya la ejecucin de un ciclo o programa y por consiguiente, impide que un
evento, no obstante que se presentan las condiciones para su ejecucin, ya no se
ejecute.
Esto lo puede comprobar colocando la instruccin End en un procedimiento de tipo
KeyDown: no obstante que estn dadas las condiciones para que tambin se ejecute
KeyPress, el cdigo de dicho evento nunca se ejecutar.
>> Demostracin de la precedencia del evento MouseMove sobre el evento Click.
[11.06]
frmMueve.frm
A continuacin aprender que algunos eventos pueden ir en contra de otros y que debe
planear en tiempo de diseo el uso de los eventos que no causen conflictos.
Implementacin visual









302 Parte 3: Controles grficos y programacin orientada a eventos

Tabla de objetos y propiedades de frmMueve

Mtodos nuevos en frmMueve

Codificacin de frmMueve
Editar cdigo: cmdClic, Evento: MouseMove.
If cmdClic.Top = 2000 Then
cmdClic.Move 100, 100
Else
cmdClic.Move 2000, 2000
End If


Editar cdigo: cmdClic, Evento: Click.
End



Captulo 11: Programacin orientada a eventos 303
Ejecucin
El botn de comando Haga clic aqu (cmdClic), inicia con la propiedad Top
con valor de 2000 y la propiedad Left con valor de 2000, mismas que
determinan su posicin en el formulario. Intente hacer clic en el botn.
En el instante en que comience a mover el puntero del ratn sobre cmdClic
pretendiendo hacer clic en l, se ejecuta cmdClic_MouseMove, que
cambia de posicin al objeto, a la posicin 100, 100. Si trata de hacer clic
otra vez, cambiar la posicin nuevamente. Alternar la posicin de 2000,
2000 a 100, 100 tantas veces como mueva el ratn sobre el botn.
Como MouseMove siempre se ejecuta antes que el evento Click, ser
imposible desencadenar con el ratn el procedimiento cmdClic_Click.
Presione la barra espadadora (otra forma de desencadenar el evento Cllck de
los
botones de comando).
El programa terminar.
__________________________________________________________________________________
Resumen
En este captulo:
Vimos qu son los eventos y su clasificacin.
Vimos cules son las categoras de eventos consideradas de uso general.
Vimos a detalle los eventos principales de las categoras de evento de uso
general.
Vimos cmo a travs de Visual Basic se pueden realizar validaciones y
manipulacin de datos utilizando dispositivos de entrada como el teclado o el
ratn.
Vimos cmo enriquecer visualmente una aplicacin a travs de trucos
realizados por eventos.
Vimos la prioridad de ejecucin de los eventos, dependiendo de
determinados escenarios de ejecucin.
Vimos cmo la ejecucin de algunos eventos pueden perjudicar la
ejecucin de otros y la forma de cmo evitarlos.
Es importante que domine el contenido de este captulo para poder continuar,
ya que prcticamente el desarrollo en Visual Basic se fundamenta en el estilo
de trabajo orientado a eventos. Los eventos de uso general son indispensables
en cualquier aplicacin de Visual Basic.


304







Captulo
12
Controles
contenedores
y controles de seleccin
Objetivo
Conocer el uso de los controles contenedores y controles de seleccin, analizando sus
particularidades y capacidades.
Al finalizar este captulo deber:
Dominar el uso del control Frame
Dominar el uso del control CheckBox
Conocer la forma de definir matrices de controles y entender su utilidad
Conocer la forma de manipular el color a travs de RGB y QBColor
Dominar el uso del control OptionButton
Dominar el uso del control HScrollBar y VScrollBar
305




306 Parte 3: Controtes grficos y programacin orientada a eventos
Objetos contenedores
Los objetos contenedores son aquellos que a su vez pueden contener a otros objetos.
En cualquier entorno de desarrollo orientado a objetos es importante disponer de
ellos, ya que de otra forma no habra manera de aprovechar la capacidad de herencia
(inheritance), propia de la tecnologa OOP. En qu nos beneficia la capacidad de
herencia? La respuesta es sencilla: todos los objetos contenidos en un objeto con-
tenedor heredan las caractersticas de este ltimo, dicho de otra forma, heredan sus
propiedades.
Como ya lo hemos mencionado en captulos anteriores, el desarrollo en Visual Basic
no es orientado a objetos, sino orientado a eventos, y por tanto, la herencia no se da
de manera completa. Utilizaremos las capacidades del entorno de desarrollo y vere-
mos que al menos las capacidades de herencia limitadas pueden ser de gran ayuda.
Hasta el momento, ya hemos utilizado el objeto contenedor bsico, es decir, el for-
mulario (Form). Adems de dicho objeto, Visual Basic dispone del objeto Frame.
Frame
Marco. Sirve para contener otros objetos, siendo posible manejarlos como una uni-
dad dentro de un formulario.
La propiedad esencial de los objetos basados en este control es Caption, ya que
representa lo que se desplegar en la parte superior del objeto; dicha propiedad tiene
un lmite de 255 caracteres.
Lo ms relevante de este control es:















Captulo 12: Controles contenedores y controles de seleccin 307
===================================================
Nota: Es curioso que el evento predeterminado sea DragDrop. Esto es comprensible
debido a que Frame realmente no desarrolla tareas de interaccin con el usuario. Su
finalidad principal es contener otros objetos.
===================================================
>> Cmo utilizar un objeto contenedor para darle funcionalidad a una aplicacin.
[12.01]
frmDatos.frm
A continuacin aprender a utilizar un objeto contenedor, que ser activado o desactivado
en base a una condicin. Crear un formulario que altere su tamao con base en la
utilizacin de un campo, que utilice constantes para modificacin rpida de valores y que
manipule las diferentes acciones que el usuario realice, habilitando e inhabilitando
objetos.
Implementacin visual





308 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmDatos





Captulo 12: Controles contenedores y controles de seleccin 309

===================================================
Nota: Como puede ver, se sangraron los objetos que se encuentran dentro del objeto
Frame (fraComplemento); en otras palabras, lbl2, txtDireccion,
lbl3, txtEdad, lbl4 y txtFechaNac, estn contenidos en el objeto
fraComplemento.
Para que los objetos queden contenidos en el Frame, es necesario que los agregue en
modo de trazo, ya que si los agrega en modo de insercin, no estarn contenidos en el
Frame. Puede comprobar que todos los objetos quedaron contenidos en el Frame si al
mover el objeto fraComplemento, todos los objetos que se encuentran dentro de l
tambin se mueven. Si alguno de ellos no se mueve junto con el objeto contenedor,
quiere decir que est contenido en el formulario y, por tanto, deber eliminarlo y agre-
garlo al Frame en modo de trazo.
===================================================

Propiedades nuevas en frmDatos

Eventos nuevos en frmDatos



Codificacin de frmDatos
Editar cdigo: (General), Evento: (Declarations).
Const intAmpliado As Integer = 4215
Const intReducido As Integer = 1770





310 Parte 3: Controles grficos y programacin orientada a eventos

Editar cdigo: Form, Evento: Load.
frmDatos.Height = intReducido%
Editar cdigo: txtNombre, Evento: Change.
If txtNombre.Text <> "" Then
cmdMas.Enabled = True
fraComplemento.Enabled = True
Else
If frmDatos.Height = intReducido% Then
cmdMas.Enabled = False
End If
fraComplemento.Enabled = False
End If


Editar cdigo: cmdMas, Evento: Click.
If frmDatos.Height = intReducido% Then
frmDatos.Height = intAmpliado%
cmdMas.Caption = "<< &Menos"
Else
frmDatos.Height = intReducido%
cmdMas.Caption = "&Ms >>"
If txtNombre.Text = "" Then
cmdMas.Enabled = False
End If
End If
Ejecucin
Antes de que se active el formulario, se ejecuta el cdigo que se encuentra en el rea
de declaraciones generales, y que define dos constantes que sern utilizadas para
manipular la altura del formulario. El procedimiento de evento Form_Load altera el
tamao del formulario, de tal forma que el objeto Frame (fraComplemento) quede
oculto.
Al inicio, el botn de comando Ms >> (cmdMas) est inhabilitado. Teclee su
nombre, brrelo totalmente, vulvalo a escribir. Vea lo que sucede cada que el cuadro
de texto deja de tener contenido.








Captulo 12: Controles contenedores y controles de seleccin 311
Slo se activar cuando en el cuadro de texto Nombre (txtNombre) se haya
introducido algo. Para ello, cada que usted teclea algo en dicho cuadro de texto, sucede
el evento Change (txtNombre_Change), mismo que evala si la propiedad Text
del objeto txtNombre es diferente a vaco (""). En caso de que no est vaco, habilita
el objeto cmdMas y habilita el Frame fraComplemento (aunque de momento no se
vea).
Haga clic en el botn Ms>> (cmdMas).
Se ejecutar el procedimiento cmdMas_Click. El objeto cmdMas tiene dos papeles:
acta como botn Mas para extender el formulario y mostrar el objeto Frame, y
como botn <<Menos para reducir el formulario de tal forma que el objeto Frame no
est visible.
Si la altura del formulario es igual al valor de la constante intReducido%, entonces
se hizo clic en el botn cuando actuaba como Ms>> y por tanto cambia la altura del
formulario al valor de la constante intAmpliado%, lo que hace que el formulario se
expanda de tal manera que el objeto Frame est visible. Como el botn no puede
actuar como Ms>> si el formulario est expandido, coloca el botn como <<Menos .
Elimine el contenido del objeto txtNombre.
Cuando el Frame est visible (la altura del formulario es intAmpliado%), puede
eliminar usted el contenido del cuadro de texto. En ese caso, al haber eliminado el
ltimo carcter del cuadro de texto, el procedimiento txtNombre_Change detectar
que la propiedad Text del objeto txtNombre no es diferente a vaco (""), por lo tanto
inhabilita el uso del Frame.
Si no dispusiera del objeto Frame, para inhabilitar los datos relativos a la direccin
(txtDireccion), edad (txtEdad) y fecha de nacimiento (txtFechaNac), tendra
que inhabilitar a cada uno de los objetos por separado. La utilidad del Frame es que
tanto la propiedad Enabled como Visible, se aplican por herencia a los objetos
contenidos en l. Si el Frame est habilitado, todo lo que est dentro de l est
habilitado, si el Frame est visible, todo lo contenido en l est visible. No obstante,
usted puede manipular las propiedades Enabled y Visible para cada uno de los
objetos contenidos; si tiene conflictos de propiedades, por ejemplo que inhabilite el
Frame y de manera particular habilite uno de los objetos contenidos en dicho Frame,
tendr prioridad la especificacin hecha al Frame, es decir, podra disponer del objeto,
siempre y cuando pudiera disponer del Frame.
Escriba nuevamente su nombre. Haga clic en el botn Ms>> y escriba los datos de
complemento. Luego haga clic en el botn <<Menos.
Si la altura del formulario no es igual al valor de la constante intReducido%,
entonces tendr el valor de la constante intAmpliado%, y por lo tanto el formulario
estar extendido. Usted podr introducir los datos de complemento. Mien-





312 Parte 3: Controles grficos y programacin orientada a eventos
tras el formulario est ampliado, el botn acta en su calidad de <<Menos. Al hacer clic
en el botn, la altura del formulario tomar el valor de intReducido%, lo que deja
invisible el Frame. Como el botn no puede seguir actuando como <<Menos si el
formulario ya est reducido, coloca el botn como Ms>>. El manejo del botn es
dinmico.
Al hacer clic nuevamente en Ms>> ver que los datos permanecern en los cuadros de
texto, es decir, no se perdern.
CheckBox
Casilla de verificacin. Un control CheckBox muestra una "" cuando est activado;
la "" desaparece cuando el control CheckBox se desactiva. La utilidad bsica de este
control es determinar si algo est activo o no lo est. Utilice este control para ofrecer al
usuario una opcin de tipo Verdadero o Falso, o S o No. Puede usar controles
CheckBox en grupos para mostrar mltiples opciones de entre las cuales el usuario
puede seleccionar una o ms, de manera simultnea. Tambin puede establecer el valor
de CheckBox en tiempo de ejecucin estableciendo su propiedad Value a True.
Lo ms relevante de este control es:

>> Uso de un control CheckBox para seleccionar varias caractersticas de manera
simultnea. [12.02]
frmEstilo.frm
Este ejemplo permite establecer uno o varios atributos a un texto, relativos a las pro-
piedades Font: negritas, itlicas y subrayadas; tambin se har juego con el tamao, a
travs de botones de comando.







Captulo 12: Controles contenedores y controles de seleccin 313
Implementadn visual


Tabla de objetos y propiedades de frmEstilo






314 Parte 3: Controles grficos y programacin orientada a eventos


Propiedades nuevas en frmEstilo

Codificacin de frmEstilo
Editar cdigo: chkNegritas, Evento: Click.
If chkNegritas.Value = vbChecked Then
lblMuestra.Font.Bold = True
Else
lblMuestra.Font.Bold = False
End If
Editar cdigo: chkItalicas. Evento: Click.
If chkItalicas.Value = vbChecked Then
lblMuestra.Font.Italic = True
Else
lblMuestra.Font.Italic = False
End If






Captulo 12: Controles contenedores y controles de seleccin 315
Editar cdigo: chkSubrayadas. Evento: Click.
If chkSubrayadas.Value = vbChecked Then
lblMuestra.Font.Underline = True
Else
lblMuestra.Font.Underline = False
End If
Editar cdigo: chkAumentar. Evento: Click.
If lblMuestra.Font.Size >= 38 Then
Beep
Else
lblMuestra.Font.Size = lblMuestra.Font.Size + 2
End If
Editar cdigo: cmdReducir, Evento: Click.
If lblMuestra.Font.Size <= 8 Then
Beep
Else
lblMuestra.Font.Size = lblMuestra.Font.Size - 2
End If

Editar cdigo: cmdSalir, Evento: Click,
End
Ejecucin
Al iniciar la ejecucin, el texto de muestra (txtMuestra) no tiene ninguno de los
atributos de Font posibles en el ejemplo. Su tamao es el que tenga de manera
predeterminada su sistema.
Haga clic en la casilla de verificacin Negritas (chkNegritas), para marcarla.
El procedimiento chkNegritas_Click se ejecutar. Al momento de que se ejecuta
el procedimiento Click, el objeto ya tiene la propiedad Value actualizada, acorde a
lo que manifiesta la interfaz.




316 Parte 3: Controles grficos y programacin orientada a eventos
Como el evento Click no proporciona informacin en relacin a si la casilla de
verificacin est activada, desactivada o parcialmente activada (vbChecked,
vbUnchecked o vbGrayed), usted tiene que hacer la evaluacin para
determinarlo. Si el control tiene su propiedad Value establecida a vbChecked,
entonces la especificacin Bold de la propiedad Font se establece a True, con lo que
el texto de muestra cambia su apariencia a negritas.
Haga clic en la casilla de verificacin Negritas (chkNegritas) para desmarcarla.
Si por el contrario, el valor es vbUnchecked, la especificacin Bold de la propiedad
Font se establece a False, con lo que el texto utilizado como muestra cambia en su
apariencia a modo normal.
Este comportamiento sucede para los procedimientos chkItalicas_Click y
chkSubrayadas_Click, con su respectiva variante de especificacin.
Haga clic en el botn de comando que muestra la A ms grande (botn de incremento
de tamao).
El tamao mximo para el texto de muestra es de 38 puntos. Si pretende incrementar el
tamao de Font por encima de los 38 puntos, la aplicacin emitir un sonido por el
altavoz. Si desea aumentar el tamao y an no llega al lmite mximo, la aplicacin
incrementar en 2 puntos el tamao que actualmente tenga el texto de muestra.
Haga clic en el botn de comando que muestra la A ms pequea (botn de reduccin
de tamao).
El tamao mnimo para el texto muestra es de 8 puntos. Si pretende reducir el tamao
de Font por abajo de los 8 puntos, la aplicacin emitir un sonido por el altavoz. Si
desea reducir el tamao y aun no llega al lmite mnimo, la aplicacin reducir en 2
puntos el tamao que actualmente tenga el texto de muestra.
Haga clic en el botn de comando Salir.
El procedimiento cmdSalir_click slo contiene la instruccin End, que da por
terminada la sesin de trabajo.

Matriz de controles
Como ya se vio en este libro en Visual Basic, la cantidad de nombres de elementos en
una interfaz est limitada. Es cierto que difcilmente agotar el nmero de nombres de
elementos, pero por simple sentido comn, el hecho de que exista un lmite






Captulo 12: Controles contenedores y controles de seleccin 317
mximo nos habla de recursos limitados y ello nos habla a su vez de cierto consumo de
recursos por cada elemento definido (si no, qu caso tendra limitarlos?).
En el caso de las variables, para hacer referencia a un conjunto de valores bajo un
mismo nombre, recurramos a las matrices de una y dos dimensiones. Una vez definida
la matriz, los valores agrupados en sta pueden ser referidos de manera particular a
travs de un subndice.
En el caso de los objetos en Visual Basic, es posible crear una matriz de ellos, deno-
minada matriz de controles. La forma de definirla es realmente muy sencilla: en el
momento en que intente nombrar dos objetos con el mismo nombre, Visual Basic le
dir que ya existe un objeto con ese nombre, que si desea crear una matriz, de controles.
Suponga que ya agreg en su aplicacin un cuadro de texto llamado txtNumero; al
momento de intentar agregar otro objeto con el mismo nombre. Visual Basic notificar
lo que se muestra en la figura 12.3.

Si usted contesta afirmativamente. Visual Basic crear una matriz de controles de-
nominada "txtNumero"; el primer objeto que agreg con dicho nombre, pasa a ser el
primer elemento de la matriz, es decir txtNumero con subndice cero o txtNu-
mero(0). El segundo objeto ser el segundo elemento de la matriz, es decir,
txtNumero(1). Una vez que define una matriz de controles, debe especificar un
subndice.
El nmero de subndice siempre inicia en cero y se incrementa en uno por cada objeto
que se agregue. A partir del segundo elemento. Visual Basic ya no preguntar si desea
agregar un objeto a la matriz de controles: basta con poner el mismo nombre a un objeto
que el de la matriz de controles creada, para que se agregue a dicha coleccin.
La existencia de subndices simplifican el manejo de los objetos. Si tuviera 8 cuadros de
texto en su interfaz, implicara la existencia de 8 objetos con nombre nico; definirles
valor cero a todas seria como se muestra a continuacin:








318 Parte 3: Controles grficos y programacin orientada a eventos

txtNumero1.Text = 0
txtNumero2.Text = 0
txtNumero3.Text = 0
txtNumero4.Text = 0
txtNumero5.Text = 0
txtNumero6.Text = 0
txtNumero7.Text = 0
txtNumero8.Text = 0
Si tiene una matriz de controles, puede hacerlo de la siguiente manera:
Dim intcontador As Integer
For intContador% = 0 to txtNumero.Ubound
txtNurnero(intContador%).Text = 0
Next intContador%
Qu pasara si nos viramos en la necesidad de agregar 20 objetos ms a la interfaz?
Utilizando nombres de objetos diferentes para cada uno, necesitaramos 20 lneas ms
de cdigo; utilizando una matriz de controles, no necesitaramos modificar nada!
La sintaxis de una matriz de controles es la siguiente:
Objeto (Subndice) .{Propiedad | Mtodo}
De tal forma que para conocer el texto contenido en la matriz de controles
txtNumero, en la posicin 6, tendramos que especificar lo siguiente:

txtNumero(6).Text
Y para transferir el enfoque a ese mismo elemento:
txtNumero(6).SetFocus
Para conocer el nmero de subndice ms pequeo de una matriz de controles, podemos
utilizar el nombre de la matriz de controles sin subndice, ya que no necesitamos
conocer nada de un elemento en especial, sino de la matriz entera y la funcin
LBound...
Objeto.Lbound







Captulo 12: Controles contenedores y controles de seleccin 319
... y para conocer el nmero del subndice ms alto, requerimos utilizar la funcin
UBound:
Objeto.UBound
Para leer una matriz de controles, tambin podemos hacer uso de la instruccin For
Each, que permite barrer una coleccin de objetos.
===================================================
Nota: La instruccin For Each siempre se apoya en una variable de trabajo; como
Visual Basic no sabe qu tipo de datos piensa manejar en una coleccin, slo permite
que la variable de trabajo sea de upo Variant u Object.
Las variables de tipo Variant no ofrecen ninguna dificultad, pero las variables
Object debern ser declaradas e inicializadas creando instancias de la clase en la cual
se basan, ya sea por asignacin mediante la orden Set o a travs de la instruccin New,
cuando no se desea realizar la asignacin. El beneficio es que las variables Object
disponen de propiedades y mtodos, determinados por la clase que las origina.
===================================================
>> Uso de una matriz de controles y su uso a travs de For Next y For Each.
[12.03]
frmMatrizC.frm
A continuacin aprender a definir una matriz de controles y a utilizarla a travs de
estructuras de control.
Para ello definir un formulario con 8 cuadros de texto, que tendrn el mismo nombre
(txtNumero) y que formarn una matriz de controles. Tendr un botn que inicialice
los valores a cero, otro que valide que todos los valores capturados sean nmeros y un
ltimo evento que permite sumar todos los nmeros capturados.










320 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual

Tabla de objetos y propiedades de frmMatrizC




Captulo 12: Controles contenedores y controles de seleccin 321


Codificacin de frmMatrizC
Editar cdigo: cmdIniciar, Evento: Click.
Dim intContador As Integer
For intContador% =0 To txtNumero.UBound
txtNumero(intContador%).Text = 0
Next intContador%
cmdValidar.Enabled = True
txtNumero(0).SetFocus
Editar cdigo: cmdValidar, Evento: Click.
Dim intContador As Integer
For intContador% = 0 To txtNumero.UBound
If Not IsNumeric(txtNumero(intContador%).Text) Then
MsgBox "Elemento " & intContador% + 1 & _
" equivocado", vbCritical, "Error"
txtNumero(intContador%).SetFocus
txtNumero(intContador%).SelStart = 0




322 Parte 3: Controles grficos y programacin orientada a eventos
txtNumero(intContador%).SelLength = _
Len(txtNumero(intContador%))
Exit Sub
End If
txtNumero(intContador%).Enabled = False
Next intContador%
cmdSumar.Enabled = True
cmdiniciar.Enabled = False
cmdValidar.Enabled = False
Editar cdigo: cmdSumar, Evento: Click
Dim Numero As Variant
Dim intSuma As Integer
For Each Numero In txtNumero
intSuma% = intSuma% + CInt(Numero)
Next Numero
lblSuma.Caption = Format(intSuma%, "Currency")
Ejecucin
Al ejecutar la aplicacin, los cuadros de texto no tienen valores. Haga clic en
Inicializar (cmdiniciar).
El procedimiento cmdlniciar_click declarar una variable de tipo contador
(intContador%), para poder desarrollar una estructura For Next. Se
establecer un ciclo, del cero al nmero de elementos de la matriz de controles
txtNumero (txtNumero. Ubound). El ciclo For Next incrementar en uno
el valor de intContador%, y permitir asignar a cada elemento de
txtNumero, subndice intContador%, el valor de cero en la propiedad Text.
Una vez que se inicializan todos los cuadros de texto, se habilita el botn Validar
(cmdValidar) y traslada el enfoque al primer elemento de la matriz de controles.
Escriba nmeros enteros, de preferencia menores a 1000. En uno de ellos incluya,
deliberadamente, una letra. Haga clic en el botn Validar (cmdValidar).
El procedimiento cmdValidar_Click analizar, a travs de un For Next,
cada uno de los objetos de la matriz de controles en la bsqueda de valores que no
sean numricos. Si uno de los elementos no es numrico, enviar un mensaje que







Captulo 12: Controles contenedores y controles de seleccin 323
indicar el nmero de ese elemento, trasladar el enfoque al objeto que tiene el error, lo
marcar para su substitucin y terminar el procedimiento.
En caso de que el elemento evaluado sea numrico, se inhabilitar a efecto de que ya no
pueda ser cambiado. Si todos los elementos de la coleccin contienen nmeros, el ciclo
For Next no se interrumpir (instruccin Exit Sub), habilitar el botn Sumar
(cmdSumar) e inhabilitar el resto de los botones.
Haga clic en el botn de comando Sumar (cmdSumar).
Ahora se analizar el contenido de la matriz de controles a travs de For Each. El
procedimiento cmdSumar_Click declarar una variable de tipo Variant, a efecto
de almacenar los valores extrados de la matriz de controles, y declarar una variable
llamada intSuma%, donde sumar los nmeros que se encuentran en los objetos. Por
cada nmero (For Each Numero) que se encuentre en la coleccin txtNumero
(In txtNumero), se acumular a intSuma% lo que valga la variable misma, ms
la conversin a nmero de la propiedad Text del objeto que se est evaluando en ese
momento. El ciclo continuar hasta que se hayan explorado todos los objetos de la
matriz de controles (coleccin).
El procedimiento tambin actualiza la propiedad Caption del objeto lblSuma, con
el valor que tenga intSuma% al concluir el proceso, con formato "Currency".
Colores en Visual Basic utilizando RGB y QBColor
Para los sistemas de cmputo todo es simblico, es decir, las cosas poseen claves o
secuencias que significan algo. Los colores no son la excepcin y Visual Basic los
identifica a travs de un cdigo de color, representado por un nmero de tipo Long.
Aprenderse los nmeros de los colores puede ser una tarea ardua y es por ello que es
necesaria una manera sistemtica de determinar dichos nmeros. Visual Basic pro-
porciona las funciones RGB y QBColor para tal efecto.
RGB
RGB es el acrnimo de Red, Green, Blue (Rojo, Verde, Azul), que son los colores
bsicos; a travs de la combinacin de dichos colores se pueden obtener una infinidad
de colores.
En el caso de Visual Basic, muchos objetos y funciones permiten que se les determine
un color; si usted as lo desea, puede especificar colores utilizando un cdigo hexa-
decimal correspondiente al nmero de color que desea, o bien utilizar la funcin
RGB(), que devuelve un nmero de color.






324 Parte 3: Controles grficos y programacin orientada a eventos Sintaxis:
RGB (Red, Green, Blue)
Los argumentos Red, Green y Blue indican la cantidad de componente de un deter-
minado color dentro de una combinacin de colores, en otras palabras, un valor de color
RGB especifica la intensidad relativa de rojo, verde y azul que hacen que se muestre un
color determinado. El intervalo de componente de color es de 0 a 255; el valor de
cualquier argumento para la funcin RGB que sea superior a 255 se considerar como
255. Por ejemplo, RGB(0,0,255) corresponde al color azul, ya que define el mximo
de componente azul, y nada del componente rojo ni del verde.
La siguiente tabla muestra algunos colores estndar y sus valores de rojo, verde y azul:

QBColor
QBColor es un convencionalismo heredado de Quick Basic, la antigua plataforma de
desarrollo BASIC de Microsoft. La funcin QBColor devuelve un nmero de color; es
ms limitado que RGB, en virtud de que posee slo 15 colores predefinidos (combina-
ciones bsicas).
Sintaxis:
QBColor (Color)
El argumento Color es un nmero entero entre 0-15.







Captulo 12: Controles contenedores y controles de seleccin 325
Los colores posibles para QBColor son los siguientes:

>> Uso de funciones RGB y QBColor para la manipulacin de colores. [12.04]
A continuacin aprender a utilizar las funciones de fecha y hora.
1. Genere un nuevo proyecto EXE estndar (Ctrl+N).
2. Establezca en la propiedad Name del formulario el valor "frmColor".
Editar cdigo: form. Evento: Activate.

MsgBox "Color base"
frmColor.BackColor = QBColor(10)
MsgBox "QBColor 10"
frmColor.BackColor = RGB(100, 200, 200)
MsgBox "RGB 100,200,200"
End


OptionButton
Botn de opcin. Un control que permite seleccionar una opcin; similar a las casillas
de verificacin, con la diferencia de que OptionButton permite seleccionar slo una
opcin de entre varias.
OptionButton, por su misma naturaleza, debe ser manejado como matriz de controles, en
donde slo uno de los elementos de la coleccin est seleccionado. Una cosa interesante es la
forma en que se manejan las propiedades y los eventos en una matriz de controles: cada uno de
los objetos, elementos que forman parte de la colec-


326 Parte 3: Controles grficos y programacin orientada a eventos
cin, tiene sus propiedades particulares, sin embargo, los eventos aplican a la matriz
de controles entera, por lo que existe la necesidad de identificar, en caso de ser nece-
sario, qu objeto de la coleccin provoc el evento. :
Lo ms relevante de este control es:

>> Uso de objetos tipo OptionButton y Shape, y de una matriz de controles. [12.05]
frmSemaforo.frm
A continuacin aprender a utilizar objetos de tipo OptionButton, en forma de
matriz de controles. Tambin manejar los objetos de tipo Shape y las propiedades
de colores.
Implementacin visual




Captulo 12: Controles contenedores y controles de seleccin 327
Tabla de objetos y propiedades de frmSemaforo












328 Parte 3: Controles grficos y programacin orientada a eventos
Propiedades nuevas en frmSemaforo

Codificacin de frmSemaforo
Editar cdigo: (General), Evento; (Declarations).
Dim intContador As Integer

Editar cdigo: Form, Evento; Load.

Call Apagar
OptOpcion(0).Value = True
ShpLuz(0).FillColor = RGB(255, 0, 0)

Editar cdigo: optOpcion, Evento: Click.
Call Apagar
If optOpcion(0).Value = True Then
shpLuz(0).FillColor = RGB(255, 0, 0)
Elself optOpcion(1).Value = True Then
shpLuz(1).FillColor = RGB(255, 255, 0)
Elself optOpcion(2).Value = True Then
shpLuz(2).FillColor = RGB(0, 255, 0)
End If

Editar cdigo: (General), Evento: Apagar.
For intContador% = 0 To 2
shpLuz(intContador%).FillColor = RGB(0, 0, 0)
Next intContador%

Captulo 12: Controles contenedores y controles de seleccin 329
Editar cdigo: cmdSalir, Evento: Click.
End
==================================================
Nota: Los eventos del ejemplo, como Click, se ejecutan cada vez que usted los
solicita en cualquiera de los elementos de la matriz de controles. De ah que tenga
que discriminar dentro del procedimiento, a fin de determinar qu objeto fue el que
caus el evento. En resumen, en una matriz de controles, las propiedades se aplican a
cada objeto, elemento de la coleccin, mientras que los eventos suceden a la matriz
de controles, sin importar en cul de sus elementos haya sido causado.
==================================================


Ejecucin
Al cargar el formulario, se ejecuta el procedimiento Form_Load.
La aplicacin posee dos matrices de controles: optOpcion, que con tres elementos
controla los OptionButton. y shpLuz. que con tres elementos controla los
objetos de tipo Shape. El procedimiento Form_Load ejecutar el procedimiento de
usuario llamado Apagar; dicho procedimiento utiliza un ciclo For Next, que se
encarga de cambiar el color de llenado para cada uno de los tres elementos de la
matriz de controles shpLuz, modificndole a cada elemento su propiedad
FillColor.
Una vez que se concluye la ejecucin del procedimiento Apagar, todos los elementos
de la matriz de controles shpLuz estn en color negro (RGB 0,0,0). Form_Load
se encarga de establecer el valor True al primer elemento de la matriz de controles
optOpcion y de cambiar a rojo (RGB 255,0,0) el color del primer elemento de
la matriz de controles shpLuz.

Haga clic en el botn de radio Precaucin.
Como hizo clic en alguno de los elementos de la matriz de controles, se solicita la
ejecucin del procedimiento de evento ligado a dicha matriz de controles:
optOpcion_Click.
Cual sea la seleccin, se manda a ejecutar el procedimiento Apagar, que establece el
negro (RGB 0,0,0) como color de relleno para todos los elementos de la matriz de
controles shpLuz. Posteriormente, el procedimiento evaluar si la propiedad Value
del elemento de la matriz de controles optOpcion que posea el subndice 0 tiene un
valor True; en ese caso, quiere decir que la seal seleccionada es la de Alto, y por
tanto asigna el color rojo (RGB 255,0,0) al elemento de la matriz de controles
shpLuz que posea el subndice 0. Si eso no sucede, revisar la propiedad Value de
los elementos de la matriz de controles optOpcion con subndice 1 y 2, y
dependiendo de cul tenga el valor True, asignar el color





330 Parte 3: Controles grficos y programacin orientada a eventos
amarillo (RGB 255,255,0) o verde (RGB 0,255,0) a los elementos
correspondientes de la matriz de controles shpLuz.
Este procedimiento se ejecutar cada vez que seleccione una de las diferentes
opciones que constituyen sus botones de radio. Preste atencin de que en el
momento que usted cambia el valor de un OptionButton. toda la matriz de
controles se actualiza, de tal forma que slo uno de los elementos de la matriz de
controles tiene su propiedad Value establecida a True.
Haga clic en el botn de comando Salir.
El procedimiento cmdSalir_Click slo contiene la instruccin End, que da
por terminada la sesin de trabajo.

HScrollBar y VScrollBar
Barras de desplazamiento horizontal y vertical. Estos dos controles guardan el
mismo funcionamiento. Consisten en un elemento que permite seleccionar de manera
grfica un valor, a travs de una barra de desplazamiento que delimita el valor mni-
mo y mximo.
Lo ms relevante de este control es:

Cada objeto de tipo HScrollBar o VScrollBar se componen de lo siguiente:
Contiene una barra de desplazamiento que indica un rango de valores de 0 a
32,767. El lmite mnimo puede modificarse a travs de la propiedad Min, mien-
tras que el mximo puede hacerse a travs de la propiedad Max.
La barra de desplazamiento tiene dos flechas en los extremos; dichas flechas son
de incremento/decremento. Son de incremento las que apunten a la derecha o
hacia arriba, son de decremento las que apunten a la izquierda o hacia abajo.
Hay un indicador grfico de valor, que es un apuntador que se encuentra en la
barra de desplazamiento, entre las flechas de incremento y decremento.
Hacer clic en cualquiera de las flechas de incremento/decremento, provoca un
cambio en la propiedad Value del objeto y la ejecucin del evento Change. El
cambio se realizar segn se haya especificado en la propiedad SmallChange.





Captulo 12: Controles contenedores y controles de seleccin 331
Hacer clic en el espacio que existe entre el indicador grfico de valor y cualquiera
de las flechas de incremento/decremento, provoca un cambio en la propiedad
Value del objeto y la ejecucin del evento Change. El cambio se realizar
segn se haya especificado en la propiedad LargeChange.
Arrastrar el indicador grfico de movimiento hace que la propiedad Value
cambie (una vez que deja de arrastrar el indicador), provocando el evento
Change. Mientras arrastra el indicador grfico de valor, se ejecuta el evento
Scroll.

==================================================
Nota: Hacer clic en las flechas de incremento/decremento no siempre produce el
evento Change; un ejemplo sera cuando llega al lmite inferior o superior del rango
de valor: no es posible que la propiedad Value vaya ms all, nunca se da un cam-
bio de valor, y por tanto el evento Change.
Al arrastrar el indicador grfico de valor es posible que no se provoque el evento
Change, si al finalizar el arrastre, el indicador se coloca en la posicin inicial que
tena; por tanto, el valor es el mismo, no cambia. El evento Scroll, sin embargo,
suceder sin importar que el valor final de la labor de arrastre sea el mismo que tena
al principio.
==================================================
Grficamente, la figura 12.6 muestra las particularidades de los objetos ScrollBar.














332 Parte 3: Controles grficos y programacin orientada a eventos
>> Uso de barras de desplazamiento y nmeros aleatorios. [12.06]
frmColorido.frm
A continuacin aprender a utilizar los objetos HScrollBar, as como procesos
aleatorios y funciones de manipulacin de colores.
Implementacin visual













Captulo 12: Controles contenedores y controles de seleccin 333
Tabla de objetos y propiedades de frmColorido





334 Parte 3: Controles grficos y programacin orientada a eventos
Propiedades nuevas en frmColorido

Eventos nuevos en frmColorido

Codificacin de frmColorido
Editar cdigo: (General), Evento: Colorear.
lblColor.BackColor = RGB(hsbRojo.Value, _
hsbVerde.Value, _
hsbAzul.Value)
lblColor.ForeColor = RGB(255 - hsbRojo.Value, _
255 - hsbVerde.Value, _
255 - hsbAzul.Value)
lblColor.Caption = "RGB(" & _
Str(hsbRojo.Value) & "," & _
Str(hsbVerde.Value) & "," & _
Str(hsbAzul.Value) & ")"




Captulo 12: Controjes contenedores y controles de seleccin 335
Editar Cdigo; Form, Evento:Load
Call Colorear
Editar cdigo: hsbAzul, Evento: Change.
Call Colorear

Editar cdigo: hsbRojo, Evento: Change.
Call Colorear
Editar cdigo: hsbVerde, Evento: Change.
Call Colorear

Editar cdigo: cmdAleatorio, Evento: Click.
hsbRojo.Value = Int(Rnd * 255)
hsbVerde.Value = Int(Rnd * 255)
hsbAzul.Value = Int(Rnd * 255)

Editar cdigo: cmdSalir, Evento: Click.
End
Ejecucin
Al iniciar la ejecucin, Form_Load ejecuta el procedimiento definido por el
usuario Colorear.
La aplicacin tiene una etiqueta que desplegar los resultados (lblcolor).
Este objeto ver modificada su propiedad BackColor, que establecer el
color de fondo, y su propiedad ForeColor, que modificar el color del texto
que se encuentre en el objeto. La lgica del programa nos indica que
mediante la manipulacin de las barras de desplazamiento se alterar el
valor relativo de rojo, verde





336 Parte 3: Controles grficos y programacin orientada a eventos
y azul que le ser asignado al fondo del objeto lblColor. Como comprender, el
texto contenido en el objeto no puede ser del mismo color que el fondo de ste, ya
que se perdera, no sera visible.
El procedimiento definido por el usuario Colorear es el ms importante de esta
aplicacin; asigna un color de fondo al objeto lblColor, (propiedad
BackColor), con base en los valores que tengan las barras de desplazamiento
hsbRojo, hsbVerde y hsbAzul. Como el contenido de dicho objeto no puede
ser igual al del fondo, determinamos que restndole el valor propuesto de cada color
a 255, obtenemos un nmero de color contrastante con el fondo. El procedimiento
Colorear tambin se encarga de determinar el nmero de color para la propiedad
ForeColor, que es el contraste del color del fondo, y de modificar la propiedad
Caption del objeto lblColor, de tal forma que despliegue el cdigo RGB que ha
sido asignado al fondo.
Como actualmente los objetos de tipo HScrollBar estn establecidos a cero, el
color del fondo ser negro, correspondiente a RGB 0,0,0.
Utilizando las flechas de incremento/decremento de las barras de desplazamiento,
modifique el color.
El procedimiento Colorear actualizar tanto el color del fondo de lblColor,
como del contenido y el texto desplegado.
Arrastre el indicador grfico de valor hasta el 255 de la gama de rojo.
Mientras arrastra el indicador grfico de valor a la posicin indicada, no sucede nada.
Mientras no deje de arrastrarlo, el evento Change no sucede. Lo ideal es que cuando
est arrastrando el indicador grfico de valor, el color y el mensaje informativo vare,
a fin de darle mayor dinamismo.
Agregue el siguiente cdigo.
Editar cdigo: hsbAzul, Evento: Scroll.
Call Colorear
Editar cdigo: hsbRojo, Evento: Scroll.
Call Colorear
Editar cdigo: hsbVerde, Evento: Scroll.
Call Colorear




Captulo 12: Controles contenedores y controles de seleccin 337
Arrastre el indicador grfico de valor hasta el 0 de la gama de rojo.
Como ya se incluy la ejecucin de colorear en el evento Scroll de las barras de
desplazamiento, el funcionamiento del programa es transparente y dinmico.
Haga clic en el botn Aleatorio.
Se ejecutar el procedimiento cmdAleatorio_Click, que asignar nuevos va-
lores para cada una de las barras de desplazamiento de color; para ello utiliza la
funcin Rnd, que devuelve un nmero decimal del 0 al 1; determinando el valor
entero del resultado de multiplicar Rnd por 255, obtenemos un nmero de color
vlido.
Haga clic en las flechas de incremento/decremento, y en la barra de desplazamiento
entre una de las flechas de incremento/decremento y el indicador grfico de valor.
Podr darse cuenta que al hacer clic en la flecha de incremento/decremento, el
cambio de valor se da slo en la cantidad especificada en la propiedad
SmallChange, mientras que hacer clic en la barra de desplazamiento entre una de
las flechas de incremento/decremento y el indicador grfico de valor, causar un
cambio en la cantidad especificada en la propiedad LargeChange.
Haga clic en el botn Salir.
Se ejecutar el procedimiento cmdSalir_Clic. La instruccin End concluye con
la ejecucin del programa.
________________________________________________
Resumen
En este captulo:
Vimos qu son los objetos contenedores
Vimos las particularidades del control Frame
Vimos las particularidades del control CheckBox
Vimos la forma de manipular propiedades Font de un texto
Vimos qu son las matrices de controles y cmo pueden ser utilizadas
Vimos cmo manejar colores en Visual Basic a travs de las funciones RGB y
QBColor















338 Parte 3: Controles grficos y programacin orientada a eventos
Vimos las particularidades del control OptionButton
Vimos las particularidades de los controles HScrollBar y VScrollBar
Vimos el uso de la funcin Rnd para generar nmeros aleatorios
Es importante que domine el contenido del captulo para poder continuar, ya que en
el resto del libro se manejarn de manera intensiva objetos basados en estos
controles.






















































Captulo
13
Controles de listas
desplegables
Objetivo
Conocer el uso de los controles que generan listas desplegables, analizando sus par-
ticularidades y capacidades.
Al finalizar este captulo deber:
Entender el concepto de Coleccin
Dominar el uso del control ListBox
Conocer cmo agregar y eliminar elementos de un control de lista desplegable
Saber manejar objetos ListBox que permitan seleccionar mltiples opciones
Saber cmo definir objetos ListBox de estilo Check
Dominar el uso del control ComboBox
Saber cmo desarrollar un ComboBox sensible al teclado
339


340 Parte 3: Controles grficos y programacin orientada a eventos

Concepto de coleccin
En este captulo utilizaremos un gnero de objetos que proporcionan mucha versati-
lidad a Visual Basic: las colecciones.
Una coleccin es un grupo de elementos con nombre, constituido por componentes de
una misma naturaleza que se encuentran relacionados.
Imagine un equipo de ftbol: el equipo tiene un nombre, tiene sus estadsticas de jue-
gos ganados, empatados y perdidos, tiene un desempeo general por equipo, tiene una
plaza a la que pertenece, as como colores que lo distinguen: como equipo es
claramente identificable; sin embargo, posee elementos, jugadores, identificados con
un nmero, cada uno con sus propias capacidades particulares, sus virtudes y defectos
que los distinguen. As, podramos decir que el equipo es una coleccin de jugadores.
El equipo sin jugadores no es nada, el jugador sin equipo no es nadie. Hacemos esta
analoga porque las colecciones son de una manera muy similar.
Algunas de las caractersticas de las colecciones son:
La coleccin tiene un nombre de objeto que identifica a un grupo de elementos
(elementos de la coleccin).
Los elementos que constituyen la coleccin siempre se identifican a travs de un
nmero entero, nico, que acta como subndice y al que se le llama ndice. Al-
gunas colecciones tambin permiten una identificacin de tipo String (general-
mente llamada Tag o Key) adicional a ndice, que en ningn caso lo sustituye.
La coleccin posee propiedades inherentes a la coleccin en s.
La coleccin tiene sus eventos y mtodos que afectan a toda la coleccin.
Los elementos de la coleccin poseen propiedades particulares.
Los elementos de una coleccin tienen sus eventos, pero es necesario determinar
qu elemento de la coleccin caus dichos eventos; en algunos casos, el evento
proporciona el nmero de ndice que lo caus, a manera de argumento implcito.
Los elementos de la coleccin por lo general son referenciados a travs de alguna
de sus especificaciones, es decir, slo se pueden llamar a travs de alguna de sus
propiedades. .
Los objetos de lista desplegable ListBox y ComboBox son ejemplos de
colecciones.






Capitulo 13: Controles de listas desplegables 341
Suponga que tiene un objeto ListBox llamado lstOpciones. que tiene los
siguientes elementos definidos: "Primero", "Segundo" y "Tercero"; la figura 13.1
ilustra cmo sera la coleccin:

Si quisiera saber cuntos elementos tiene la coleccin e imprimir el resultado en pan-
talla, utilizara una propiedad a nivel coleccin:
Print lstOpciones.ListCount
Como ve, no es necesario hacer alusin alguna a los elementos contenidos, ni a
especificacin alguna; slo basta el nombre del objeto y el de la propiedad. En cam-
bio, si quisiera saber la propiedad List de alguno de los elementos, tiene que
sealar a qu coleccin pertenece, qu propiedad desea conocer (especificacin) y
qu nmero de Index tiene. Si quiere imprimir en pantalla la especificacin List
del elemento que posee el Index 1, en la coleccin lstOpciones. requiere lo
siguiente:
Print lstOpciones.List( 1 )








342 Parte 3: Controles grficos y programacin orientada a eventos

Listas desplegables: ListBox y ComboBox
Los objetos de lista desplegable en Visual Basic son 2: ListBox y ComboBox. Son
elementos caractersticos en el entorno de Windows, a travs de los cuales es posible
seleccionar de una lista uno o ms objetos.
Se recomienda el uso de los objetos de lista desplegable para economizar espacio en
la interfaz; stos poseen barras de desplazamiento implcitas, lo que permite visua-
lizar muchas opciones en un espacio reducido. Suponga que a travs de la interfaz el
usuario debe elegir una opcin de entre 30; utilizar botones de opcin sera poco prc-
tico, ya que ocuparan mucho espacio, por lo que un objeto ComboBox sera lo ms
recomendable. En caso de que deba escoger ms de una opcin de entre 30 opciones
disponibles, el uso de objetos de tipo CheckBox sera tambin poco prctico por
cuestiones de espacio, siendo recomendable usar uno de tipo ListBox.

En resumen, podemos decir que:
La diferencia entre ListBox y ComboBox es que ListBox permite seleccionar
ms de una opcin, mientras que ComboBox slo permite la seleccin de una. Otra
diferencia es que ComboBox posee un cuadro de texto, donde se puede escribir
informacin, mientras que ListBox no tiene cuadro de texto.
Ambos objetos, en caso de que no dispongan de espacio en la interfaz para mostrar
las opciones que tienen definidas, dispondrn de una barra de desplazamiento que
aparece automticamente.
En el caso del objeto ListBox, el evento Click sucede cuando hace clic en el
objeto, seleccionando una opcin. En el caso de ComboBox, el evento Click su-
cede cuando selecciona una opcin de las que aparecen en la lista desplegable que
se muestra una vez que hace clic en la flecha de expansin, que aparece a la
derecha del objeto.
En el caso de ComboBox, el evento Change sucede cuando modifica el contenido
del cuadro de texto del cuadro combinado. Puesto que ListBox no dispone de
cuadro de texto, no posee evento Change.




Captulo 13: Controles de listas desplegables 343
La figura 13.2 muestra la forma en que lucen en una interfaz los objetos de
lista desplegable.


Cmo agregar y eliminar opciones de las listas
desplegables
Los objetos de lista desplegable permiten la seleccin de opciones, eso est muy
claro, pero dnde se definen las opciones? En el caso de este tipo de objetos, las
opciones no pueden ser definidas en tiempo de diseo, por lo cual su adicin debe
ser mediante cdigo; debido a eso, su actualizacin se realiza en tiempo de
ejecucin, de forma dinmica.
Mtodo Additem
Para agregar opciones a un objeto d lista desplegable, debe utilizar el mtodo
AddItem.
Sintaxis:
ObjetoListaDesplegable . AddItem Elemento [ , ndice ]











344 Parte 3: Controles grficos y programacin orientada a eventos
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox. El
argumento Elemento solicita una expresin de tipo String que aparecer como
opcin en el objeto; el argumento ndice, que es opcional, ser el nmero que le
asigne a la opcin dentro del conjunto de opciones. El ndice debe ser nico, por lo
que dentro de un objeto no puede haber dos opciones con el mismo ndice. El ndice
comienza, de manera predeterminada, en el nmero cero.
Suponga que tiene definida una lista desplegable llamada lstOpciones; para
agregarle las opciones "Primera", "Segunda", "Tercera", "Cuarta" y
"Quinta", debera utilizar el mtodo Additem de la siguiente forma:
lstOpciones.Additem "Primera"
lstOpciones.Additem "Segunda"
lstOpciones.Additem "Tercera"
lstOpciones.Additem "Cuarta"
lstOpciones.Additem "Quinta"
debido a que se omiti el argumento ndice, a "Primera" le correspondi de
manera predeterminada el ndice 0, a "Segunda" le correspondi el ndice 1, y as
sucesivamente hasta "Quinta", que le correspondi el ndice 4.

Propiedad ListCount
Para conocer cuntos elementos tiene un objeto de lista desplegable, es necesario que
utilice la propiedad ListCount, que contiene dicho valor.
Sintaxis:
ObjetoListaDesplegable. ListCount
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox del
que se quiere conocer el nmero de elementos.
Si se utilizaron los valores ndice predeterminados, ListCount valdr uno ms que
el ltimo ndice asignado; en nuestro ejemplo la opcin "Quinta" es la ltima op-
cin agregada al objeto lstOpciones, y le correspondi el ndice 4. Sin embargo,
ListCount, valdr 5, ya que realmente lstOpciones posee 5 elementos.
Esto es importante porque al trabajar con objetos de lista desplegable, ser muy
comn explorar todas las opciones para ejecutar diversas tareas.









Captulo 13: Controles de listas desplegables 345
Si quiere desplegar en pantalla el numero de elementos del objeto ListBox
utilizado de ejemplo, tendra lo siguiente:
Print lstObjetos.ListCount
Propiedad List
Los objetos de lista desplegable actan como una pequea coleccin, es decir, estn
compuestos por un conjunto de elementos, los cuales tienen sus propiedades particu-
lares. Existen propiedades, tales como ListCount, que se aplican a la coleccin
entera, sin embargo, existen otras que les son particulares de los elementos con-
tenidos en el objeto; tal es el caso de la propiedad List.
La propiedad List devuelve o establece el argumento Elemento, utilizado al
agregar una opcin a un objeto de lista desplegable, a travs del mtodo Additem.
Sintaxis:

ObjetoListaDesplegable.List( ndice )
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox donde
est definido el elemento. ndice es el nmero de ndice del elemento del que desea
conocer la especificacin Elemento.
Por ejemplo, para conocer la especificacin Elemento del elemento del objeto lstOp-
ciones que tenga el ndice 3, sera:
lstOpciones.List(3)
Por ejemplo, el siguiente cdigo servira para imprimir la especificacin Elemento de
todos los elementos del objeto lstOpciones:
Dim intContador As Integer
For intContador% = 0 to lstOpciones.ListCount - 1
Print "Index; " & intContador% & " Item; " & _
lstOpciones.List(intContador%)
Next intContador%














346 Parte 3: Controles grficos y programacin orientada a eventos
Lo que proporcionara el siguiente resultado:
Index: 0 Item; Primera
Index: 1 Item: Segunda
Index: 2 Item: Tercera
Index: 3 Item: Cuarta
Index: 4 Item: Quinta

Propiedades Selected y ListIndex
Otra propiedad particular de los elementos que componen un objeto de lista des-
plegable es si han sido seleccionados o no. En el caso de los objetos ListBox, nin-
guna, una o ms de una de las opciones pueden estar seleccionadas, mientras que en
los objetos ComboBox. ninguna o una puede estar seleccionada.
Para determinar si un elemento est o no seleccionado, puede utilizar la propiedad
Selected.
Sintaxis:
ObjetoListaDesplegable. Selected ( ndice )
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox donde
est definido el elemento, ndice es el nmero de ndice del elemento del que desea
saber si est o no seleccionado. Selected tendr el valor de True si el elemento
est seleccionado, y False si no lo est.
Por ejemplo, si quisiera que un programa le informara el estado de seleccin en que
se encuentra el elemento con ndice 3 del objeto lstOpciones, el cdigo sera el
siguiente:
If lstOpciones.Selected(3) = True Then
MsgBox "El elemento 3 est seleccionado"
Else
MsgBox "El elemento 3 no est seleccionado"
End If
El siguiente cdigo servira para informar qu elementos del objeto lstOpciones
estn seleccionados:






Captulo 13: Controles de listas desplegables 347

Dim intContador As Integer
For intContador% = 0 to lstOpciones.ListCount - 1
If lstOpciones.Selected(intContador%) = True Then
Print "El elemento " & intContador% " est seleccionado"
End If
Next intContador% '
Por ejemplo, si al ejecutar el cdigo estuvieran seleccionados los elementos 1, 2 y 4,
el resultado sera:
El elemento 1 est seleccionado
El elemento 2 est seleccionado
El elemento 4 est seleccionado
En caso de que usted slo seleccione una opcin, puede conocer cul fue selecciona-
da sin necesidad de explorar todos los elementos para conocer cul tiene la propiedad
Selected establecida a True. La propiedad Listindex proporciona ese valor.
En nuestro ejemplo, para conocer cul ha sido seleccionada, puede escribir el si-
guiente cdigo para el evento Click del objeto lstOpciones:
Private Sub lstOpciones_Click()
MsgBox "Seleccionado el elemento: " & _
lstOpciones.ListIndex
MsgBox "Su especificacin Elemento:" & _
lstOpciones.List(List1.ListIndex)
End Sub
Mtodo RemoveItem
Si desea eliminar un elemento de un objeto de lista desplegable, debe utilizar el
mtodo Removeltem.











348 Parte 3: Controles grficos y programacin orientada a eventos
Sintaxis:
ObjetoListaDesplegable .RemoveItem ndice
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox. El
argumento ndice es el nmero de ndice del elemento a eliminar; para eliminarlo, es
necesario determinar primero qu ndice tiene.
Por ejemplo, para eliminar el elemento del objeto lstOpciones que tenga el
ndice 3, sera:
lstOpciones.RemoveItem 3
Al eliminar un elemento, los valores ndice restantes se actualizan, de tal forma que
no quedan espacios intermedios.
Mtodo Clear
Es posible eliminar todos los elementos de un objeto de lista desplegable. Puede
eliminarlos uno por uno; sin embargo, el hecho de que ajusten su ndice, hace nece-
sario que se valga de ciertos trucos para eliminarlos de atrs para adelante. Por ejem-
plo, si desea eliminar los elementos del objeto lstOpciones, el cdigo podra ser
el siguiente:
Dim intContador As Integer
For intContador% = lstOpciones.ListCount - 1 To 0 Step 1
lstOpciones.Removeltem intContador%
Next intContador%
Una forma ms fcil es utilizar el mtodo Clear, pues hace lo mismo.
Sintaxis:
ObjetoListaDesplegable . Clear
En ObjetoListaDesplegable puede utilizar un objeto ListBox o ComboBox al que
desea eliminarle los elementos.
El mtodo Clear tendr aplicacin prctica cuando el contenido de una lista de-
penda de otro valor en la interfaz; si por alguna razn ste es eliminado, Clear lo
apoyar en la congruencia de su interfaz, ya que si el dato que da lugar a las op-







Captulo 13: Controles de listas desplegables 349
ciones de la lista no existe, los elementos de dicha lista no deben existir, en conse-
cuencia. Suponga que tiene dos datos: pas y estados, estos ltimos a travs de un
ComboBox; si no conoce el pas del que estamos hablando qu estados mostrar en
el ComboBox?
>> Utilizacin de un objeto ListBox, agregndole y eliminndole elementos de
forma dinmica. [13.01]
frmVisita.frm
Aprender a utilizar un objeto de tipo ListBox, agregando y eliminando elementos,
mismos que sern capturados en un cuadro de texto. La aplicacin no permitir que
se repitan elementos, calcular siempre cuntos componen la coleccin, y a travs de
doble clic, seleccionar como favonio alguno de la lista.
Implementacin visual



















350 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmvisita


Captulo 13: Controles de listas desplegables 351
Propiedades nuevas en frmvisita

Mtodos nuevos en frmvisita

Codificacin de frmvisita
Editar cdigo: cmdAgregar, Evento: Click.
If txtRespuesta.Text = "" Then
MsgBox "Nada qu agregar", vbinformation, "Visitante"
Exit Sub
End If
If lstCiudades.ListCount > 0 Then
Dim intContador As Integer
For intContador% = 0 To lstCiudades.ListCount - 1
If txtRespuesta.Text = lstCiudades.List(intContador%) Then
MsgBox "Esa ciudad ya existe", vbinformation, "Visitante"








352 Parte 3: Controles grficos y programacin orientada a eventos
Exit Sub
End If
Next intContador%
End If
lstCiudades.AddItem txtRespuesta.Text
lstCiudades.Refresh
lblElementos.Caption = Str(lstCiudades.ListCount)
txtRespuesta.Text = ""
Editar cdigo: lstCiudades, Evento: DblClick.
If lstCiudades.ListCount >= 0 Then
lblFavorita.Caption = lstCiudades.List(lstCiudades.Listindex)
End If
Editar cdigo: cmdEliminar, Evento: Click.
If lstCiudades.ListCount >= 0 Then
Dim intContador As Integer
For intContador% = 0 To lstCiudades.ListCount - 1
If lstCiudades.Selected(intContador%) = True Then
If lblFavorita.Caption = lstCiudades.List(intContador%) Then
lblFavorita.Caption = ""
End If
lstCiudades. RemoveItem intContador%
lstCiudades.Refresh
lblElementos.Caption = Str(lstCiudades.ListCount)
Exit Sub
End If
Next intContador%
End If

Editar cdigo: cmdSalir, Evento: Click.
End
Ejecucin
No escriba nada en el cuadro de texto. Presione Intro.








Captulo 13: Controles de lista s desplegables 353
En vlsta de que el botn Agregar (cmdAgregar) est definido como predetermi-
nado, al presionar Intro se ejecuta el procedimiento cmdAgregar_Click. ste
realiza una validacin: si la propiedad Text del cuadro de texto (txtRespuesta)
est vaco (""), entonces reportar un mensaje de error y terminar con la ejecucin
del procedimiento.
Escriba en el cuadro de texto el nombre de una ciudad que haya visitado en su vida.
Presione Intro. Vuelva a escrlblr el mismo nombre de ciudad y presione Intro.
El procedimiento cmdAgregar_Click, despus de validar que el cuadro de texto
no est vaco, procede a validar si lo que se escrlbl en el cuadro de texto es un
elemento del objeto de lista desplegable.
Ejecuta un ciclo a travs de la instruccin For Next, por el numero exacto de
elementos de la lista desplegable; en caso de encontrar algn elemento cuya es-
pecificacin Elemento sea igual a lo que se intenta agregar, enviar un mensaje de
error y terminar la ejecucin del procedimiento.
En caso de que el cuadro de texto no est vaco y que la ciudad que desea agregar no
se encuentre en el objeto de lista desplegable, el programa procede a agregar un
elemento (AddItem), actualiza visualmente el objeto de lista desplegable
(Refresh), actualiza la etiqueta que muestra el total de elementos que tiene el
objeto de lista desplegable (lblElementos) e inicializa el cuadro de texto para
una nueva captura.
Agregue 10 ciudades ms. Esperamos que sean suficientes para que vea la aparicin
automtica de la barra de desplazamiento.
Haga doble clic en la ciudad que ms le haya gustado, para seleccionarla como su
favorita.
El procedimiento lstCiudades_DblClick se ejecutar. Dicho procedimiento
slo har algo si el nmero de elementos del objeto de lista desplegable es mayor a
cero (tiene elementos). Establecer el valor de la propiedad Caption del objeto
lblFavorita con la especificacin Elemento (lstCiudades.List) del
elemento seleccionado (lstCiudades.ListIndex).
Haga clic para seleccionar la ciudad que eligi como favorita. Haga clic en el botn
Eliminar (cmdEliminar).
El procedimiento cmdEliminar_Cllck se ejecutar. Dicho procedimiento slo
har algo si el nmero de elementos del objeto de lista desplegable es mayor a cero
(tiene elementos).
Ejecuta un ciclo a travs de la instruccin For Next, el nmero exacto de ele-
mentos de la lista desplegable; en caso de encontrar algn elemento cuya especi-
ficacin de seleccin (Selected) sea verdadera (True), revisar si la espe-
cificacin Elemento es igual a la propiedad Caption del objeto lblFavorita;
en












354 Parte 3: Controles grficos y programacin orientada a eventos

caso de ser as, cambiar la propiedad Caption a vaco (""). Procede entonces a
eliminar el elemento (RemoveItem), actualiza visualmente el objeto de lista des-
plegable (Refresh) y actualiza la etiqueta que muestra el total de elementos que tiene
el objeto de lista desplegable (lblElementos). Estar de acuerdo en que si la ciudad
que eligi como favorita no es la que desea borrar, la propiedad Caption de
lblFavorita no se modifica; si una ciudad est definida como la favorita y usted la
borra, sera incongruente no cambiar a vaco la propiedad Caption de lblFavorita,
ya que estara como favorita una ciudad que no aparece en la lista .
Haga clic en el botn de comando Salir.
El procedimiento cmdSalir_Click slo contiene la instruccin End, que da por
terminada la sesin de trabajo.
>> Uso de objetos ListBox de seleccin mltiple, que pasan elementos de una
lista a otra. [13.02]
frmDeporte.frm
A continuacin aprender a utilizar los objetos ListBox para pasar opciones "de un
lado a otro". En esta aplicacin se ver tambin la capacidad de seleccin mltiple de
los objetos ListBox.
Implementacin visual









Captulo 13: Controles de listas desplegables 355
Tabla de objetos y propiedades de frmDeporte

Propiedades nuevas en frmDeporte



Codificacin de frmDeporte
Editar cdigo: Form, Evento: Activate.

lstIzquierda.AddItem "Aerobics"
lstIzquierda.Additem "Karate"
lstIzquierda.AddItem "Ftbol soccer"
lstIzquierda.AddItem "Ftbol americano"





356 Parte 3: Controles grficos y programacin orientada a eventos
lstIzquierda.AddItem "Gimnasia"
lstIzquierda.AddItem "Baloncesto"
lstIzquierda.AddItem "Golf"
Editar cdigo: (General), Evento: Botones.
If lstIzquierda.ListCount = 0 Then
cmdAgregar.Enabled = False
Else
cmdAgregar.Enabled = True
End If
If lstDerecha.ListCount = 0 Then
cmdEliminar.Enabled = False
Else
cmdEliminar.Enabled = True
End If
Editar cdigo: cmdAgregar, Evento: Click.
Dim intContador As Integer
For intContador% = lstIzquierda.ListCount - 1 To 0 Step -1
If lstIzquierda.Selected(intContador%) Then
lstDerecha.AddItem lstIzquierda.List(intContador%)
lstIzquierda.RemoveItem intContador%
End If
Next intContador%
Call Botones
Editar cdigo: cmdEliminar, Evento: Click.
Dim intContador As Integer
For intContador% = lstDerecha.ListCount - 1 To 0 Step -1
If lstDerecha.Selected(intContador%) Then
lstIzquierda.AddItem lstDerecha.List(intContador%)
lstDerecha.RemoveItem intContador%
End If
Next intContador%
Call Botones




Captulo 13: Controles de lista s desplegables 357

Ejecucin
Al activarse el formulario, se ejecuta el procedimiento Form_Activate, que se
encarga de definir los elementos del objeto de lista desplegable que se encuentra
a la izquierda (lstIzquierda).
Se defini un procedimiento de evento denominado Botones, que se encarga de
evaluar el nmero de elementos que tiene cada uno de los dos objetos de lista
desplegable (lstIzquierda y lstDerecha). En caso de que
lstIzquierda no tenga elementos, el botn para pasarlos a la derecha
(cmdAgregar) se inhabilita;
si lstDerecha no tiene elementos, el botn para pasarlos a la izquierda
(cmdEliminar) se inhabilita.
Seleccione la opcin "Golf. Haga clic en el botn para pasar elementos a la
derecha (">>").
Se ejecutar el evento cmdAgregar_Click, el cual a travs de la instruccin
For Next de conteo decreciente evala los elementos de la lista lstizquierda,
desde el elemento de mayor ndice (lstIzquierda.ListCount - 1), hasta
cero. Si en la evaluacin detecta que uno de los elementos se encuentra
seleccionado, agrega el elemento a la lista lstDerecha, para posteriormente
eliminarlo de lstizquierda. Al eliminar elementos, el numero de ellos
(ListCount) se recalcula lo que puede crear conflictos; si la instruccin For
Next fuera de conteo creciente (de cero hasta el elemento de mayor ndice, en
nuestro ejemplo, de 0 a 6), al eliminar uno, el elemento de mayor ndice sera 5 (6-
1), pero For Next no se podra dar cuenta. Al requerir alguna tarea en el
elemento de ndice 6, ste ya no existir, lo que generar error.
El procedimiento cmdEliminar_Click hace exactamente lo mismo, a reserva
de que en lugar de explorar en lstizquierda lo hace en lstDerecha, y en
lugar de agregar elementos en lstDerecha, agrega en lstizquierda.
Ambos procedimientos ejecutan, al final, el procedimiento Botones, mismo que se
encarga de habilitar o inhabilitar los botones de la aplicacin.
Seleccione la opcin "Aerobios", "Gimnasia" y "Karate" al mismo tiempo. Para ello
puede hacer clic en cada uno de los elementos mientras mantiene presionada la tecla
Ctrl. Haga clic en el botn para pasar elementos a la derecha (">>").
Se ejecutar el evento cmdAgregar_Click, funciona igual para un elemento
seleccionado que para varios. Aqu comprob la capacidad de remover la seleccin
mltiple del objeto ListBox.












358 Parte 3: Controles grficos y programacin orientada a eventos
>> Uso de un objeto ListBox con estilo CheckBox. [13.03]
frminstala.frm

A continuacin aprender a utilizar un objeto ListBox con estilo CheckBox.
Calcular la cantidad de bytes consumidos en una instalacin, apoyndose en una
matriz.
Implementacin visual


Tabla de objetos y propiedades de frmInstala








Captulo 13: Controles de listas desplegables 359

Eventos nuevos en frminstala

==================================================
Nota: Para guardar coherencia con la terminologa manejada hasta ahora, lo ideal
es que el argumento implcito se llamara ndice y no Elemento, ya que Visual Basic
describe como Elemento a la especificacin String del elemento, e ndice est aso-
ciado al nmero de elemento. Hacemos la anotacin para evitar confusiones.
==================================================

Codificacin de frmInstala
Editar cdigo: (General), Evento: (Declarations).

Dim dblConsumo(0 To 5) As Double
Dim dblRequerido As Double
Editar cdigo: Forrn, Evento: Load.

lstComponentes.Additem "Contabilidad"
lstComponentes.Additem "Cuentas por pagar
1
"
lstComponentes.Additem "Cuentas por cobrar"
lstComponentes.Additem "Chequera"
lstComponentes.Additem "Facturacin"
lstComponentes.Additem "Inventarios"









360 Parte 3: Controles grficos y programacin orientada a eventos
dblConsumo#(0) = 2356382
dblConsumo#(1) = 763782
dblConsumo#(2) = 956384
dblConsumo#(3) = 529920
dblConsumo#(4) = 1353383
dblConsumo#(5) = 1500382
lblRequerido.Caption = "0 Bytes"
Editar cdigo: lstComponentes, Evento: ItemCheck.
Private Sub lstComponentes_ItemCheck(Item As Integer)
If lstComponentes.Selected(Item) = True Then
dblRequerido# = dblRequerido# + dblConsumo#(Item)
Else
dblRequerido# = dblRequerido# - dblConsumo#(Item)
End If
lblRequerido.Caption = Format(dblRequerido#, "##,###,##0") & " Bytes"
End Sub
Editar cdigo: cmdinstala. Evento: Click.
MsgBox "Procede a instalar", vbinformation, "Instala"
End :
Ejecucin
En el apartado de declaraciones generales se define una matriz (dblConsumo).
con el mismo nmero de elementos que el objeto de lista desplegable (lstCom-
ponentes), que por cierto es de estilo CheckBox: en cada elemento de la matriz
se almacenar el consumo en bytes del elemento de la lista desplegable con quien
comparte el subndice, es decir, el elemento 0 de la lista tendr almacenado su
consumo en bytes en el elemento 0 del arreglo, el elemento 1 de la lista tendr
almacenado su consumo en bytes en el elemento 1 del arreglo, y as sucesivamente.
Tambin se define una variable de tipo Double que se encargar de almacenar la
cantidad de bytes acumulados, derivado de las mltiples selecciones que se
realicen; de inicio, dicha variable tiene valor cero.
Al cargarse el formulario, se ejecuta el procedimiento Form_Load.
Este procedimiento se encarga de agregar elementos al objeto de lista desplegable
(lstComponentes), y almacena en los elementos de la matriz (dblConsumo)





Captulo 13: Controles de listas desplegables 361
el consumo en bytes de cada uno de los elementos de la lista . Finalmente asigna a la
propiedad Caption del objeto LblRequerido. el valor "0 Bytes", en virtud
de que al arrancar el programa, ninguno de los elementos de la lista desplegable est
seleccionado.
Active cualquiera de los elementos de la lista desplegable.
Al momento en que activa o desactiva cualquier elemento de la lista , se ejecuta el
procedimiento lstComponentes_ItemCheck; dicho procedimiento de evento
posee un argumento implcito, llamado Elemento, que devuelve el nmero ndice del
elemento seleccionado. Como las cantidades almacenadas en la matriz guardan
correspondencia con el nmero de elementos de la lista desplegable, se puede hacer
lo siguiente: si est seleccionado (Selected) el elemento cuyo ndice es igual al
valor devuelto en el argumento implcito (Elemento), entonces dblRequerido ser
igual al valor que ya tiene, ms la cantidad de bytes correspondiente al elemento,
almacenado en el elemento de la matriz cuyo subndice es igual al argumento
implcito Elemento. En caso contrario, en lugar de sumar la cantidad, deber restarla.
Finalmente, asigna a la propiedad Caption del objeto lblRequerido el valor de
dblRequerido (con formato "##,###,##0 Bytes").
Active y desactive elementos y compruebe que el clculo se realice de manera
adecuada.
Haga clic en el botn Instalar (cmdInstala).
La aplicacin enva un mensaje de notificacin y procede a dar por concluida la
ejecucin del programa.
>> Uso de los objetos ComboBox y ListBox para crear un explorador de fuentes.
[13.04]
frmFuente.frm
A continuacin aprender a utilizar un objeto ComboBox, en conjunto con uno
ListBox que ser alimentado en tiempo de ejecucin con las fuentes de pantalla
que tenga instalado su sistema (coleccin Screen, especificacin Fonts).
















362 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual


Tabla de objetos y propiedades de frmFuente











Captulo 13: Controles de lista s desplegables 363

Eventos nuevos en frmFuente

Codificacin de frmFuente
Editar cdigo: Form, Evento: Load.
Dim intContador As Integer
For intContador% = 0 To Screen.FontCount - 1
lstFuentes.Additem Screen.Fonts(intContador%)
Next intContador%
lstFuentes.Selected(0)= True
cboTamanio.AddItem 8
cboTamanio.AddItem 10
cboTamanio.AddItem 12
cboTamanio.AddItem 18
cboTamanio.AddItem 24
cboTamanio.Text = cboTamanio.List(0)
lblMuestra.Font.Name = lstFuentes.List(0)
lblMuestra.Font.Size = cboTamanio.List(0)



364 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: lstFuentes, Evento: Click.
lblMuestra.Font.Name = lstFuentes.List(lstFuentes.ListIndex)
Editar cdigo: cboTamanio. Evento: Click.
lblMuestra.Font.Size = _
CInt(cboTamanio.List(cboTamanio.ListIndex))
Editar cdigo: cboTamanio. , Evento: Change.
Dim intTamanio As Integer
If IsNumeric(cboTamanio.Text) Then
intTamanio% = CInt(cboTamanio.Text)
Else
intTamanio% = CInt(cboTamanio.List(0))
End If
If intTamanio% > 32 Or intTamanio% < 8 Then
IntTamanio% = CInt(cboTamanio.List(0))
End If
lblMuestra.Font.Size = intTamanio%

Ejecucin
Al momento de cargar el formulario, se ejecuta el procedimiento Form_Load
que se ocupa de cargar todas las fuentes disponibles en el sistema (coleccin
Screen, especificacin Fonts) al objeto de lista desplegable que los contendr
para su seleccin: lstFuentes. Esto se hace a travs de un ciclo For Next,
desde cero hasta el nmero de fuentes disponlbles menos uno
(Screen. ListCount -1), obteniendo el nombre de cada una de las fuentes
de la coleccin (Fonts).
Despus de hacer esto, selecciona de manera automtica el elemento de la lista
desplegable que tenga el ndice 0.










Captulo 13: Controles de listas desplegables 365
Posteriormente agrega las opciones de tamao que estarn disponlbles en el
ComboBox (cboTamanio), coloca en el cuadro de texto del ComboBox el
contenido del elemento que tenga el ndice O y ejecuta la funcin definida por el
usuario, con los valores iniciales que se acaban de establecer.
Haga clic en una fuente diferente a la que tiene seleccionada en este momento.
Se ejecuta el procedimiento lstFuentes_Click. Se asignar a la especificacin
Name de la propiedad Font del objeto lblMuestra, lo que contenga como
Elemento el elemento seleccionado, que invariablemente ser un nombre de
fuente vlido.
Seleccione uno de los tamaos disponlbles en el ComboBox de tamao (cboTa-
manio).
Se ejecutar el procedimiento cboTamanio_Click. Se asignar a la
especificacin Size de la propiedad Font del objeto lblMuestra, lo que
contenga como Elemento el elemento seleccionado, que invariablemente ser un
tamao de fuente vlido.
En el cuadro de texto del ComboBox escriba "14". ste es un tamao que no se
encuentra como opcin en el objeto, pero indudablemente es un tamao vlido.
Se ejecutar el procedimiento cboTamanio_Change. Se utilizar una variable
para almacenar el tamao deseado (intTamanio); el programa valida que lo
escrito sea numrico, si es numrico, la variable asume el valor proporcionado, si
no lo es, asume el valor del primer elemento del ComboBox. Posteriormente se
valida si el valor de la variable no excede los lmites fijados (8-32); en caso de
que los exceda, se asignar a la variable el valor del primer elemento del cuadro
combinado.
La especificacin Size de la propiedad Font del objeto LblMuestra se
establecer al valor que tenga la variable de trabajo al final del proceso.
>> Uso de un objeto ComboBox sensible a la escritura. [13.05]
frmAutos.frm
A continuacin aprender a utilizar un objeto ComboBox, sensible a la escritura, que
se coloca en la primera ocurrencia de un elemento que empiece con una determinada
letra.












366 Parte 3: Controles grficos y programacin orientada a eventos

Implementacin visual


Tabla de objetos y propiedades de frmAutos

Codificacin de frmAutos
Editar cdigo: Form, Evento: Load.
cboMarca.Additem "Ford"
cboMarca.Additem "General Motors"




Captulo 13: Controles de lista s desplegables 367

cboMarca.AddItem "Chrysier"
cboMarca.AddItem "Audi"
cboMarca.AddItem "Nissan"
cboMarca.AddItem "Mercedez Benz"
Editar cdigo: cboMarca, Evento: Change.
Dim strLetras As String
Dim intContador As Integer
strLetras$ = Trim(cboMarca.Text)
If cboMarca.Text <> "" Then
For intContador% = 0 To cboMarca.ListCount - 1
If Len(strLetras$) <= _
Len(Trim(cboMarca.List(intContador%)))Then
If Mid(cboMarca.List(intContador%), 1, _
Len(strLetras$)) = strLetras$ Then
cboMarca.Text = cboMarca.List(intContador%)
cboMarca.SelStart = 0
cboMarca.SelLength = Len(cboMarca.Text)
Exit For
End If
End If
Next intContador%
End If

Ejecucin
Al momento de cargar el formulario, se ejecuta el procedimiento Form_Load,
que se ocupa de cargar todos los elementos al objeto ComboBox (cboMarca).
Escriba en el cuadro de texto del ComboBox (empezando con mayscula) una
letra "M".
Se ejecutar el procedimiento cboMarca_Change. El procedimiento definir
una variable de trabajo de tipo String (strLetras$) y una de tipo contador
(intContador%). La variable de trabajo String toma el valor de lo que
haya tecleado en el cuadro de texto; si sta tiene un valor diferente a vaco (""),
inicia un ciclo



368 Parte 3: Controles grficos y programacin orientada a eventos
For Next que examina todos los elementos del ComboBox, buscando si
alguno comienza con lo tecleado en el cuadro de texto. De ser as, el cuadro de
texto adopta el Elemento de la opcin que corresponda y procede a marcarlo para
sustitucin.
En el proceso, tambin se selecciona el elemento que corresponda a lo tecleado.
Una vez que aparezca el elemento en el cuadro de texto, extienda la lista desple-
gable y compruebe que est seleccionada la opcin que apareci marcada en el
cuadro de texto.
==================================================
LO inesperado: Cuando trabaja con colecciones u objetos de tipo ListBox o
ComboBox, los errores ms comunes son:
Llamada a procedimientos argumentos no vlidos (error 5 en tiempo de ejecu-
cin). Sucede cuando invoca a un procedimiento de manera errnea, o bien si un
argumento proporcionado no sigue alguna convencin de Visual Basic. Por ejem-
plo, en ListBox se puede especificar el orden de los elementos del objeto, con el
conocimiento de que el primero siempre tendr el ndice cero ("0"). Si no respeta
el orden del ndice (0,1,2,3,4,..., n), el error se producir. Soluciones: verifique
que la especificacin ndice comience en cero y de que se siga un consecutivo
hasta el ltimo elemento. La forma de comprobar lo que se hizo es que el ndice
del ltimo elemento de la lista deber ser n-\, donde n es el nmero total de
elementos (ListCount).
==================================================


_____________________________________________________________
Resumen
En este captulo:
Vimos qu es una coleccin.
Vimos las diferencias entre los objetos ComboBox y ListBox.
Vimos la forma de agregar y eliminar elementos a los objetos de lista des-
plegable.














Captulo 13: Controles de listas desplegables 369
Vimos algunas propiedades a nivel coleccin y a nivel elemento, tiles en el uso
de los objetos de lista desplegable.
Vimos la capacidad de seleccin mltiple de los objetos basados en ListBox.
Vimos el uso de ListBox con estilo Check.
Vimos el uso de eventos con el objeto ComboBox.
Vimos la forma de definir cuadros de lista combinados senslbles a lo que se
teclea l.
Es importante que domine el contenido del captulo para poder continuar, ya que en
el resto del libro se manejarn objetos basados en estos controles.
















































370





















































Captulo
14
Editor de mens
y manejo del
Portapapeles
Objetivos
Conocer la herramienta que Visual Basic proporciona para elaborar los mens al
estilo Windows y aprender a manejar el rea de memoria temporal disponible para
el usuario, llamada Portapapeles.
Al finalizar este captulo deber:
Dominar el uso del Editor de mens
Saber manejar los objetos y propiedades que permiten manipular el Portapapeles
Una de las diferencias entre las aplicaciones desarrolladas para el entorno de
Windows y las de otros entornos es la de lucir de manera similar y tener una forma
estndar de manejo en todos sus programas; as, si el usuario aprende a manejar una
aplicacin, sabr manejar las dems sin instruccin ni capacitacin intensiva
adicional.
Los conceptos que aprender en este captulo no son de uso indispensable en sus
programas, pero sin duda alguna le pueden proporcionar capacidades y un aspecto
profesional impecable, dentro del estndar de Windows.
371





372 Parte 3: Controles grficos y programacin orientada a eventos

El Editor de mens
El Editor de mens es la herramienta que Visual Basic proporciona para elaborar
los sistemas de men clsicos del entorno, en donde se define una barra de mens
que contiene opciones generales (opciones de primer nivel), de las cuales dependern
otras (opciones de ejecucin) de las que tambin pueden depender otras (tambin de
ejecucin), y as sucesivamente.
La barra de mens que se genera a travs del Editor de mens forma un sistema,
compuesto por opciones que ejecutan tareas al ser seleccionadas. Por tal motivo,
cada una constituye un objeto, mismo que puede ser utilizado a travs de un
procedimiento de evento denominado Click.
Las reglas que es conveniente observar al crear un sistema de mens son las si-
guientes:
Deben existir opciones de primer nivel: identifican una funcin, tienen como
propsito concentrar opciones dependientes relativas a dicha funcin. Por ejemplo,
en todas las aplicaciones de Windows hay una opcin de primer nivel llamada
Archivo (funcin de manipular archivos), de la cual dependen opciones que le son
relativas: Nuevo, Abrir, Cerrar, Guardar, Guardar como, etctera (tambin
llamadas de ejecucin).
Deben exlstir opciones de ejecucin: tienen como objetivo ordenar la ejecucin
de una tarea; tambin pueden servir para concentrar otras opciones ms particu-
lares. En el ejemplo anterior, seran de ejecucin las opciones Nuevo, Abrir,
Cerrar, etctera.
Las opciones de primer nivel no dependen de ninguna otra opcin; las de ejecucin
siempre dependen de una de primer nivel, o bien, de otra de ejecucin.
Las opciones de ejecucin pueden tener definidas teclas de atajo mtodo
abreviado, de tal forma que presionarlas sea equivalente a utilizar el men y
seleccionar la opcin deseada. No confundir con el acceso rpido que brinda la
definicin "&" en la propiedad Caption de los objetos.
Si una opcin de ejecucin slo sirve para mostrar otras iguales, no se recomienda
la colocacin de teclas de mtodo abreviado.
Revise cules son las convenciones de Windows al momento de definir teclas de
mtodo abreviado; por ejemplo, al manejar el Portapapeles en Windows, la opcin
Copiar tiene como estndar la tecla de mtodo abreviado Ctrl+C, Cortar tiene
Ctrl+X y Pegar tiene Ctrl+V. Para qu modificar el estndar generalmente
aceptado de Windows? Es poslble que usted piense que para la opcin Pegar es
ms conveniente Ctrl+P que Ctrl+V; estamos de acuerdo, pero cmo establecer
su convencin de Ctrl+P si millones de personas ya utilizan Ctrl+V y dan por
entendido que es la convencin utilizada en su aplicacin?




Captulo 14: Editor de mens y manejo del Portapapeles 373
Todas las opciones, sean de primer nivel o de ejecucin, debern tener un nombre de objeto
vlido de Visual Basic. Si la opcin es de primer nivel, debern tener el prefijo "mnu", y si es
de ejecucin, debern tener como prefijo el nombre de objeto del cual dependen, separando los
niveles con guin bajo (_). Ejemplo: Archivo (mnuArchivo), Guardar
(mnuArchivo_Guardar).
Se deber agregar tres puntos a la propiedad Caption para aquellas opciones de ejecucin que
no ordenen una tarea, es decir, que invoquen un cuadro de dilogo.
Las opciones de men se manifestarn como opciones, idnticas a lo que se especifique en su
propiedad Caption; es posible colocar el valor de "-" (guin), lo que implica que aparezca la
lnea de divisin estndar de Windows.
Cmo invocar el Editor de mens
No existe un control en el Cuadro de herramientas para agregar objetos de tipo
men, sin embargo stos existen y para definirlos se utiliza el Editor de mens.
Para invocar este editor requiere tener seleccionado el formulario donde desea
agregar el men.
Las alternativas que tiene para invocar el Editor de mens son las siguientes:
Haciendo clic en el icono Editor de mens de la barra de herramientas.
Utilizando el men Herramientas - Editor de mens.
Presionando Ctrl+E.
Lo ms relevante del control Men es:

Una vez agregados al formulario los objetos que componen el men, podr modifi-
carlos sin utilizar el Editor de mens, a travs de la ventana Propiedades, seleccio-
nando el objeto que desea modificar en la lista desplegable de objetos.
Al ejecutar la aplicacin, el men se comportar tal y como lo hacen los mens en
Windows, respondiendo a las teclas de mtodo abreviado, al ratn o al teclado, a las
flechas de direccin, etctera.






374 Parte 3: Controles grficos y programacin orientada a eventos
El Editor de mens luce como se muestra en la figura 14.1:

Las partes importantes de este cuadro de dilogo son:
Caption. Texto que se desplegar como opcin en el men.
Name. Nombre del objeto.
Shortcut. Lista desplegable donde puede seleccionar la tecla de mtodo abreviado
para la opcin.
Checked. Indica si aparecer una opcin visiblemente marcada o no; til para cuando
alguna sea de seleccin alterna.
Enabled. Indica si la opcin est disponible o no para su seleccin.
Visible. Indica si la opcin es visible o no.














Captulo 14: Editor de mens y manejo del Portapapeles 375
>> Cmo se agrega un objeto de tipo men. [14.01]
frmFormato.frm
A continuacin aprender a agregar objetos tipo men utilizando el Editor de mens, a
modificar sus propiedades mediante la ventana Propiedades, a asignar cdigo asociado
a las opciones de men y a controlar sus variantes en la ejecucin.

Implementacin visual

1. Genere un nuevo proyecto EXE estndar.
2. Invoque el Editor de mens presionando Ctrl+E o mediante cualquier otra forma ya
vista en este captulo.
3. En Caption: teclee &Formato; en Name:, mnuFormato, y marque las propiedades
Enabled y Vislble.

376 Parte 3: Controles grficos y programacin orientada a eventos


4. Haga clic en el botn Siguiente. En Caption: teclee &NormaI; en Name:,
mnuFormato_Normal, y marque las propiedades Enabled y Visible. Se supone que
Formato es una opcin de primer nivel y Normal es de ejecucin; para especificar ese
hecho, teniendo seleccionado el objeto mnuFormato_Normal en la lista de objetos de
men, haga clic en el botn de flecha hacia la derecha..












Captulo 14: Editor de mens y manejo del Portapapeles 377
5. Si ya agreg las dos opciones anteriores, podr agregar las que quiera. Es cuestin
de hacer clic en el botn Siguiente cada que requiera una nueva opcin; si desea
eliminar alguna de las opciones del men, que a fin de cuentas son objetos, slo
seleccinelos de la lista de objetos de men y haga clic en el botn Eliminar.
6. Haga clic en el botn Aceptar.
Al aceptar las modificaciones en el Editor de mens, queda en modo de diseo. Slo se
agregaron dos objetos en el formulario (mnuFormato y mnuFormato_Normal);
agregue los dems que aparecen en la tabla de objetos y propiedades de frmFormato.
==================================================
Nota: La dependencia entre una opcin de primer nivel y las de ejecucin (y tam-
bin entre las opciones de ejecucin con respecto a otra de ejecucin de mayor
nivel), se hace valer mediante la sangra que se especifica con las flechas hacia la
derecha (reduce el nivel) o a la izquierda (aumenta el nivel). Si una opcin est total-
mente hacia la izquierda en la lista de objetos de men, ser de primer nivel; las que
estn con sangra bajo ese objeto, dependern de dicha opcin. En nuestro ejemplo,
mnuFormato_Normal depende de mnuFormato.
Cada opcin de primer nivel debe tener al menos una de ejecucin que le sea depen-
diente; de estas opciones de ejecucin, pueden depender otras iguales, y de estas
otras. Esta dependencia se puede hacer hasta en cuatro niveles.
==================================================

Tabla de objetos y propiedades de frmFormato


















378 Parte 3: Controles grficos y programacin orientada a eventos



Captulo 14: Editor de mens y manejo del Portapapeles 379



Propiedades nuevas en frmFormato














380 Parte 3: Controles grficos y programacin orientada a eventos
Despus de insertar todos los objetos de men, el Editor de mens debe lucir de la
siguiente forma:

>> Cmo introducir cdigo a una opcin de men y utilizar un men. [14.02]
A continuacin aprender cmo se agrega el cdigo en un men y cmo utilizar dicho
men.
1. Utilice el formulario frmFormato del ejemplo 14.01.
2. En tiempo de diseo, seleccione Salir - Salir de la aplicacin.
3. Se abrir la ventana Cdigo en el evento mnuSalir_Salir_Click.







Captulo 14: Editor de mens y manejo del Portapapeles 381
Codificacin de frmFormato
Editar cdigo: mnuSalir_Salir, Evento: Click.
End
Ejecucin
Al ejecutar el formulario, el men tiene todas las capacidades de funcionamiento que
los mens de cualquier aplicacin basada en el entorno de Windows.
Presione Alt+F.
Se comprueba la tecla de mtodo abreviado en las opciones de primer nivel. Vea cmo
se activa el men, del cual dependen todas las opciones de ejecucin asociadas al de
primer nivel invocado.
Seleccione la opcin de primer nivel Salir, y la de ejecucin Salir de la aplicacin.
El procedimiento mnuSalir_Salir_Click se ejecuta. En vista de que la instruccin
End se encuentra en dicho procedimiento de evento, la aplicacin culmina su ejecucin.
>> Activacin dinmica de opciones. [14.03]
A continuacin aprender cmo se modifican las propiedades de los objetos que
componen un sistema de mens, con la finalidad de dar la apariencia de aparecer y
desaparecer las opciones. Se demostrar la utilidad de la propiedad Checked.
1. Edite el siguiente cdigo y ejecute la aplicacin.
Editar cdigo: mnuFormato_Mas, Evento: Click.
If mnuFormato_Mas.Checked Then
mnuFormato_Mas.Checked = False
mnuFormato_Guion.Visible = False
mnuFormato_Negritas.Visible = False
mnuFormato_Italicas.Visible = False











382 Parte 3: Controles grficos y programacin orientada a eventos
mnuFormato_Subrayado.Visible = False
mnuFormato_Tamano.Visible = False
Else
mnuFormato_Mas. Checked = True
mnuFormato_Guion.Visible = True
mnuFormato_Negritas.Visible = True
mnuFormato_Italicas.Visible = True
mnuFormato_Subrayado.Visible = True
mnuFormato_Tamano.Visible = True
End If
Ejecucin
Haga clic en el men de la aplicacin Formato.
Observe que la opcin Ms opciones... est marcada (Checked = True), por lo que
aparecen todas las opciones de formato en el men.
Haga clic en el men de la aplicacin Formato Ms opciones... .
Como la opcin Ms opciones... est marcada (Checked = True) y se ha selec-
cionado, se le da a entender al sistema de mens que se quiere desmarcar dicha opcin
(Checked = False), con lo que obtendramos el funcionamiento de tipo
apuntador de dicha opcin. De manera conjunta y puesto que se desmarc la opcin,
todas las opciones de formato no deben estar disponibles. Para ello se establece a
False la propiedad Visible de cada una de las opciones, con lo que dejan de estar
visibles.
Haga clic en el men de la aplicacin Formato.
Observe que la opcin Ms opciones... est desmarcada (Checked = False), por
lo que no aparecen todas las opciones de formato en el men.
Haga clic en el men de la aplicacin Formato -Ms opciones... .
Como la opcin Ms opciones... est desmarcada (Checked = False) y se ha
seleccionado, se le da a entender al sistema de mens que se quiere marcar dicha
opcin (Checked = True). De manera conjunta y puesto que se marc la opcin,
todas las opciones de formato deben estar disponibles. Para ello se establece a True la
propiedad Visible de cada una de las opciones, con lo que estarn visibles.
Vea el cdigo del procedimiento de evento mnuFormato_Mas_Click, y compruebe
que cuando se hace uso de una opcin con manejo de Checked, el cdigo consiste en
una disyuntiva (If) que determina lo que suceder cuando se tenga la





Capitulo 14: Editor de mens y manejo del Portapapeles 383
opcin marcada o desmarcada (Checked en True o False, respectivamente), que
curiosamente, casi siempre hacen exactamente lo contrario.
>> Modificacin del tipo de letra utilizando el men. [14.04]
A continuacin aprender a modificar las propiedades de tipo d letra utilizando el
men. Complemento del ejercicio.
1. Edite el siguiente cdigo y ejecute la aplicacin.
Editar cdigo: mnuFormato_Normal, Evento: Click.
lblEjemplo.Font.Size = 10
lblEjemplo.Font.Bold = False
lblEjemplo.Font.Italic = False
lblEjemplo.Font.Underline = False

Editar cdigo: mnuFormato_Negritas, Evento: Click.
lblEjemplo.Font.Bold = True
Editar cdigo: mnuFormato_Italicas, Evento: Click.
lblEjemplo.Font.Italic = True
Editar cdigo: mnuFormato_Subrayado, Evento: Click.
lblEjemplo.Font.Underline = True
Ejecucin
Haga clic en el men de la aplicacin Formato - Negritas, Formato - Itlicas,
Formato - Subrayado y Formato - Normal.
Compruebe que las modificaciones en el texto de ejemplo se realizan. Las opciones
Negritas, Itlicas y Subrayado afectan lblEjemplo, mientras que Normal revierte
todos los cambios realizados.








384 Parte 3: Controles grficos y programacin orientada a eventos
>> Opciones de men mutuamente excluyentes. [14.05]
A continuacin aprender a codificar el uso de opciones de men mutuamente ex-
cluyentes, es decir, seleccionar slo una de entre varias. Se apoyar con la propiedad
Checked. Ver cmo se comportan las opciones de 3er. nivel.
1. Edite el siguiente cdigo y ejecute la aplicacin.
Editar cdigo: mnuFormato_Tamanio_T10, Evento: Click.
mnuFormato_Tamanio_T10.Checked = True
mnuFormato_Tamanio_T14.Checked = False
mnuFormato_Tamanio_T24.Checked = False
lblEjemplo.Font.Size = 10
Editar cdigo: mnuFormato_Tamanio_T14, Evento: Click.

mnuFormato_Tamanio_T10. Checked = False
mnuFormato_Tamanio_T14. Checked = True
mnuFormato_Tamanio_T24. Checked = False
lblEjemplo.Font.Size = 14
Editar cdigo: mnuFormato_Tamanio_T24, Evento: Click.

mnuFormato_Tamanio_T10.Checked = False
mnuFormato_Tamanio_T14.Checked = False
mnuFormato_Tamanio_T24.Checked = True
lblEjemplo.Font.Size = 24
Ejecucin
Haga clic en el men de la aplicacin Formato - Tamao -14 puntos, Formato -
Tamao - 24 puntos y Formato - Tamao -10 puntos, Formato - Tamao -14
puntos.
Compruebe que las modificaciones en el texto de ejemplo se realizan en cuanto al
tamao. La forma en que opera cada una de las opciones seleccionadas es la siguiente:
establecen a False a la propiedad Checked de aquellas opciones








Captulo 14: Editor de mens y manejo del Portapapeles 385
dentro del mismo submen que no han sido seleccionadas, establecen a True la
propiedad Checked de la opcin seleccionada, lo que da la apariencia de que slo
una de las opciones del submen puede estar activa (cosa que es cierta). Despus se
altera el tamao de lblEjemplo a travs de la propiedad Size, al tamao
seleccionado. El ejercicio hasta ahora tiene establecido el texto en tamao 14 puntos.
Haga clic en el men de la aplicacin Formato - Normal, Formato - Tamao.
Observe que al aplicar la opcin Normal, el texto vuelve a su dimensin original. Sin
embargo, el submen de Tamao es inexacto: el tamao del texto es actualmente de
10 puntos, mientras que el submen muestra como seleccionada la opcin 14 puntos,
lo cual no es cierto.
Qu modificaciones en el cdigo realizara para que se actualizara tambin la
apariencia del submen?



Manejo del Portapapeles
Otro de los elementos ms caractersticos del entorno de Windows es el Portapapeles,
que podra definirse como la parte de la memoria RAM que se encuentra reservada para
el alojamiento de datos para fines de intercambio entre elementos de interfaz o
programas. Junto con el Portapapeles, se tienen tres funciones bsicas de su manejo, que
seguramente usted ya conoce: Copiar, Cortar y Pegar.
Visual Basic maneja ciertos objetos implcitos, tales como Screen, Clipboard,
etctera. El usuario no necesita definirlos: estn disponibles en todo momento porque
forman parte del entorno de Windows. En otras palabras, lo que queremos decirle es que
no requiere el uso de ningn control para poder disponer del Portapapeles.
Para que entienda un poco mejor los conceptos relacionados al uso del Portapapeles,
debe estar consciente de lo siguiente:
El uso del Portapapeles siempre se hace sobre un objeto determinado. A este objeto
podemos llamarlo objeto fuente.










386 Parte 3: Controles grficos y programacin orientada a eventos
Copiar es la tarea de cargar datos en el Portapapeles, manteniendo el objeto fuente sin
modificacin. Para poder copiar datos, es necesario tener seleccionada o marcada
una porcin del objeto fuente.
Cortar es la tarea de cargar datos en el Portapapeles, eliminando la porcin cargada en el
Portapapeles del objeto fuente. Para poder cortar datos, es necesario tener seleccionada o
marcada una porcin del objeto fuente.
Pegar es la tarea de leer el contenido del Portapapeles e insertarlo en el objeto fuente (que en
este caso acta como destino).
Las operaciones de Copiar, Cortar y Pegar son tan ampliamente difundidas que seguro las
conoce. Lo que quiz no sepa es la manera en que Visual Basic realiza el manejo de los datos
entre el Portapapeles y el objeto fuente.
Para ejemplificar el manejo del Portapapeles, supondremos la existencia de un objeto que
usaremos como fuente, llamado txtTexto, que contiene en su propiedad Text la expresin
"ste es un ejemplo".
Len: longitud del texto
La longitud de una expresin String se puede conocer fcilmente a travs de la funcin Len.
Para conocer la longitud de nuestro objeto fuente sera:
Len(txtTexto.Text)

Propiedades del objeto fuente: SelStart, SelLength
y SelText
Cuando marca o selecciona algn objeto o texto en el entorno de Windows, esto es claramente
Visible; esto se logra haciendo clic, doble clic, Mays y las teclas de direccin, Usted ya sabe
cmo! Por ejemplo, qu vera si marcamos una porcin de txtTexto.Text?


Internamente tendramos lo siguiente:
El dato inicia en una posicin cero.
El nmero de posicin que le corresponde al primer carcter-seleccionado es el 8.
La propiedad que almacena esta informacin es SelStart.





Captulo 14: Editor de mens y manejo del Portapapeles 387
La cantidad de caracteres que se seleccionaron son 3. La propiedad que almacena esta
informacin es SelLenght.
El texto seleccionado es "un". La propiedad que almacena esta informacin es SelText.
Codificado, tendramos las siguientes expresiones:

txtTexto.SelStart = 8
txtTexto.SelLenght = 3
txtTexto.SelText = "un "
Qu pasa si no tiene nada seleccionado? SelStart tendr un valor igual a la longitud de su
objeto fuente, y SelLenght tendr un valor de cero.
Mtodos del objeto Clipboard: Clear, SetText y GetText
Por parte del objeto fuente, todo lo que hay que manipular son las propiedades SelStart,
SelLenght y SelText; por parte del Clipboard, ste no tiene propiedades, ya que es
manejado exclusivamente a travs de mtodos.
El mtodo Clear, por ejemplo, se encarga de eliminar el contenido del Portapapeles. El mtodo
SetText se encarga de cargar datos al Portapapeles, mientras que GetText se encarga de
recuperar los datos que se encuentren en el Portapapeles.
>> Cmo se maneja el Portapapeles en Visual Basic. [14.06]
FrmEditar.frm
A continuacin aprender a manejar el Portapapeles a travs de una aplicacin de Visual Basic.
Se conjugar el uso del Editor de mens para disponer con las propiedades SelStart,
SelLenght y SelText de un objeto definido como fuente, y los mtodos Clear, SetText
y GetText del objeto Clipboard.
La aplicacin tendr las siguientes opciones de men y el siguiente comportamiento:
Marcar todo Siempre disponible
Desmarcar todo Siempre disponible
Copiar Siempre disponible
Cortar Siempre disponible
Pegar Slo cuando haya algo en el Portapapeles






388 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual

1. Genere un nuevo proyecto EXE estndar.
Tabla de objetos y propiedades de frmEditar


Captulo 14: Editor de mens y manejo del Portapapeles 389



Propiedades nuevas en frmEditar









390 Parte 3: Controjes grficos y programacin orientada a eventos
Mtodos nuevos en frmEditar

Codificacin de frmFormato
Editar cdigo: Form, Evento: Activate.
Clipboard.Clear
Editar cdigo: mnuEditar, Evento: Click.
Dim strTemporal As String
strTemporal$ = Clipboard.GetText
If Len(strTemporal$) > 0 Then
mnuEditar_Pegar.Enabled = True
Else
mnuEditar_Pegar.Enabled = False
End If
Crear procedimiento: Informar, Alcance privado.

lblLongitud.Caption = Len(txtOrigen.Text)
lblInicio.Caption = txtOrigen.SelStart
lblMarcado.Caption = txtOrigen.SelLength
Editar cdigo: mnuEditar_Todo, Evento: Click.
If Len(txtOrigen.Text) > 0 Then
txtOrigen.SelStart = 0
txtOrigen.SelLength = Len(txtOrigen.Text)
Else
MsgBox "No hay nada que marcar", _
vbinformation, "Editar"
End If
Editar cdigo: mnuEditar_Nada, Evento: Click.
txtOrigen.SelLength = 0
Call Informar




Captulo 14: Editor de mens y manejo del Portapapeles 391
Editar cdigo: mnuEditar_Copiar, Evento: Click.
Clipboard.Clear
Clipboard.SetText txtOrigen.SelText
Call Informar
Editar cdigo: mnuEditar_Cortar, Evento: Click.
Clipboard.Clear
Clipboard.SetText txtOrigen.SelText
txtOrigen.SelText = ""
Call Informar
Editar cdigo: mnuEditar_Pegar, Evento: Click.
txtOrigen.SelText = Clipboard.GetText
Call Informar
Editar cdigo: mnuEditar_Salir, Evento: Click.
End
Editar cdigo: txtOrigen, Evento: Change.

Call Informar
Ejecucin
Ejecute la aplicacin.
Al activarse el formulario, el procedimiento Form_Activate se encarga de eliminar
cualquier contenido que tenga el Portapapeles. Adicionalmente se ejecuta el procedimiento
Informar; ste se encarga de utilizar las tres etiquetas de la interfaz (lblLongitud.
lblInicio y lblMarcado), para desplegar el ancho de lo marcado en el objeto
TextBox, la posicin inicial de marcado (que es igual a la posicin del cursor mientras se
escribe), y la cantidad de caracteres seleccionados, respectivamente.







392 Parte 3: Controles grficos y programacin orientada a eventos
Haga clic en el men Edicin.
Observe que la opcin Pegar no est disponible. El procedimiento mnuEditar_Click
genera una variable temporal para comprobar si el Portapapeles contiene algo. Se asigna el
contenido del Portapapeles a una variable: si la longitud de dicha variable es mayor a cero,
entonces el Portapapeles tiene algo. Hacemos uso de la variable en virtud de que el
Portapapeles no tiene propiedades, y por tanto es imposible evaluar la longitud del
Portapapeles.
En caso de que el Portapapeles contenga algo, se habilita la opcin Pegar del men
(mnuEditar_Pegar), y de lo contrario, se inhabilita. En nuestro caso, no disponemos de
nada en el Portapapeles, por lo que la opcin referida no est disponible.
Siempre que se desee ejecutar una opcin del men, sea de primero o segundo nivel, se
ejecutar el procedimiento mnuEditar_Click, incluso cuando se utilicen las teclas de
mtodo abreviado que tienen algunas de las opciones de ejecucin.
Escriba la siguiente frase: "Esta aplicacin demuestra el uso del Portapapeles".
El procedimiento txtOrigen_change se encarga de ejecutar el procedimiento
Informar cada vez que el contenido del cuadro de texto se modifica, por lo que usted ver la
actualizacin dinmica de valores en las etiquetas de la interfaz. Deber tener lo siguiente al
terminar de teclear la frase que se indic: 46, 46, 0.
Seleccione la palabra "uso" de la frase. Haga clic en el men Edicin - Copiar.
Al marcar el texto, se prepara internamente al sistema para considerar una operacin que
involucre al Portapapeles. Al hacer clic en el men Edicin -Copiar, se ejecuta el
procedimiento mnuEditar_Copiar_Click, el cual se encarga de eliminar cualquier
contenido que tenga el Portapapeles, para posteriormente cargar en el Portapapeles
(Clipboard.SetText) el texto que se tenga seleccionado (txtOrigen.SelText). A
continuacin se ejecuta el procedimiento Informar, que deber manifestar 46, 29, 3, que
corresponde a la longitud de la frase, posicin inicial de lo marcado y longitud de lo
seleccionado.
Coloque el cursor al final de la frase de ejemplo. Haga clic en el men Edicin. Haga clic en el
men Edicin - Pegar.
Observe que la opcin Pegar ya est disponible, en virtud de que el procedimiento
mnuEditar_Click determina que el Portapapeles ya contiene algo. Al hacer clic en
Edicin - Pegar se ejecuta el procedimiento mnuEditar_Pegar_Click; hay que
mencionar que cuando usted se movi al final de la frase, txtOrigen.SelStart tuvo el
valor de la nueva posicin del cursor (47) y txtOrigen.SelText no tuvo valor ("") ya que
no hubo nada seleccionado. Consideramos importante mencionar estos pormenores, ya que las
etiquetas de la interfaz slo se actualizan al utilizar las opciones del men y no cuando Visual
Basic realiza las actualizaciones internamente, lo que sera lo ideal.








Captulo 14: Editor de mens y manejo del Portapapeles 393
mnuEditar_Pegar_Click se encarga de asignar a txtOrigen.SelText el valor
extrado del Portapapeles (Clipboard.GetText), comenzando en la posicin inicial de lo
marcado (txtOrigen.SelStart). Se procede a ejecutar tambin el procedimiento
Informar.
Seleccione la palabra "demuestra" de la frase. Haga clic en el men Edicin -Cortar.
Se ejecuta el procedimiento mnuEditar_Cortar_Click, el cual se encarga de eliminar
cualquier contenido que tenga el Portapapeles, para posteriormente cargar en el Portapapeles
(Clipboard.SetText) el texto que se tenga seleccionado (txtOrigen.SelText).
Hasta aqu es lo mismo que mnuEditar_Copiar_Click; la diferencia que tienen, es que
al "cortar", lo seleccionado (txtOrigen.SelText) ya no tiene valor ("").
Haga clic en el men Edicin - Salir.
Se ejecutar el procedimiento mnuEditar_Sallr_Click, con lo que el programa
termina su ejecucin.

=========================================================
Nota: El Portapapeles puede almacenar otros datos, diferentes a texto.
Estos datos, generalmente de tipo grfico (bmp, wmf y dib), deben ser manejados de diferente
manera, a travs de los mtodos GetData y SetData del objeto Clipboard, haciendo
referencia del tipo de datos que se trate (vbCFBitmap, vbCFMetafile y vbCFDIB,
respectivamente). Puede ser que se apoye tambin en la funcin LoadPicture, que veremos
en su momento, para poder asignar grficos a variables y elementos que producen alojamiento
en memoria.
En el caso de datos grficos, las propiedades de posicin (SelStart, SelLenght y
SelText) pierden su relevancia.
=========================================================

__________________________________________________________
Resumen
En este captulo:
Vimos cmo crear sistemas de mens a travs del Editor de mens.
Vimos cmo manejar el uso de opciones apuntadores a travs de la propiedad Checked.









394 Parte 3: Controles grficos y programacin orientada a eventos
Vimos las particularidades del manejo del Portapapeles.
Vimos la tcnica para habilitar e inhabilitar opciones del men de acuerdo a la existencia de
informacin en el Portapapeles.
Manejar lo expuesto en este captulo resulta indispensable para darle a sus aplicaciones la
uniformidad del entorno de Windows.























































Captulo
15
Manejo
de imgenes
Objetivo
Conocer el uso de los controles de imagen de Visual Basic a travs de los controles bsicos de
Visual Basic y de componentes ActiveX.
Al finalizar este captulo deber:
Saber utilizar el control Image
Saber utilizar la funcin LoadPicture
Saber utilizar el control PictureBox
Saber cmo agregar componentes a un proyecto
Saber utilizar el control ImageList
Las capacidades de manejo de imgenes son fundamentales para las plataformas GUI, ya que sin
ellas sera lo mismo tener una interfaz de slo texto. En este captulo se vern los pormenores
que Visual Basic tiene para el manejo de imgenes; se introducir en el manejo de controles
ActiveX y las pginas de propiedades.
395















396 Parte 3: Controles grficos y programacin orientada a eventos
Controles bsicos para mostrar imgenes
Image
Imagen. Es un control que permite mostrar grficos a partir de mapas de bits, iconos,
metarchivos, metarchivos mejorados, y otros formatos comprimidos como gif y jpeg.
La propiedad esencial de este tipo de controles es Picture. En ella se especifica qu grfico
deber ser mostrado en el objeto.
Lo ms relevante de este control es:

LoadPicture
Cmo asignar un grfico a un objeto basado en Image a travs de la propiedad Picture?
La cosa parece sencilla. En tiempo de diseo, a travs de la ventana Propiedades, basta
encontrar la propiedad Picture, hacer clic en el botn de seleccin (...), seleccionar un
archivo de imagen vlido y eso es todo: la imagen aparecer automticamente en la interfaz.
En tiempo de ejecucin es ms complicado. Suponga que desea cargar en un objeto basado en el
control Image (de nombre imgGrafico) la imagen contenida en el archivo tierra.jpg.
En cdigo no podramos asignarla de la siguiente forma:
imgGrafico.Picturef = "tierra.jpg"
Ya que estaramos cargando un dato de tipo String, es decir, una cadena de caracteres.







Captulo 15: Manejo de imgenes 397
Por otro lado, no podramos cargarla de la siguiente forma:
imgGrafico.Picture = tierra.jpg
Ya que el validador sintctico del lenguaje asumira que tierra es un objeto y jpg
una propiedad asociada a dicho objeto.
La propiedad Picture almacena una imagen y es necesario asignarle algunas. Una
forma prctica de poder hacerlo es mediante el uso de la funcin LoadPicture, que
se encarga de pasar un valor de tipo imagen a partir del nombre del archivo que la
contiene.
Sintaxis:

LoadPicture("Archivo.ext" )
Donde Archivo es el nombre del archivo que contiene la imagen a mostrar en el objeto.
Archivo puede incluir la ruta del archivo, as como nombres relativos reconocidos por el
sistema operativo Windows.
====================================================
Lo inesperado: Cuando trabaja con la propiedad Picture y la funcin
LoadPicture, los errores ms comunes son:
No coinciden los tipos (error de compilacin). Est tratando de asignarle a la
propiedad Picture un valor que no es una imagen. Soluciones: utilice la funcin
LoadPicture para asegurarse de que lo que est asignando a la propiedad es una
imagen.
No se ha encontrado el archivo (error 53 en tiempo de ejecucin). Se presenta cuando
en la funcin LoadPicture hace referencia a un archivo que no existe o la ruta est
equivocada. Soluciones: revise que el nombre del archivo est bien definido, que la
ruta sea correcta y que el archivo exista realmente .
La imagen no es vlida (error 481 en tiempo de ejecucin). La imagen que pretendi
cargar al objeto no es vlida, ya que el formato es desconocido o no soportado por
Visual Basic. Soluciones: incluya en sus aplicaciones imgenes en formatos estndar,
como mapas de bits, gif, jpeg o metarchivos.
====================================================
====================================================
Nota: Si utiliza formatos comprimidos (gif/jpeg), el consumo de memoria ser menor.
Utilizar mapas de bits (bmp) puede degradar el desempeo de sus aplicaciones.
====================================================











398 Parte 3: Controles grficos y programacin orientada a eventos
>>- Uso de objetos basados en el control Image y carga de imgenes con LoadPicture.
[15.01]
frmGrafico.frm
A continuacin aprender a cargar una imagen en un objeto basado en Image a travs
de la funcin LoadPicture.
Implementacin visual



Tabla de objetos y propiedades de frmGrafico.frm













Captulo 15: Manejo de imgenes 399



Propiedades nuevas en frmGrafico


Codificacin de frmGrafico
Editar cdigo: cmdVerGrafico, Evento: Click.

imgGrafico.Picture = LoadPicture("c:\avbp\capT5\Tierra.jpg")

====================================================
Nota: Asumimos que tiene instalados los archivos de apoyo para este libro en la
unidad C. Deber cambiar la unidad y la ruta en caso de que haya realizado una insta-
lacin diferente a la sugerida. Esta nota es vlida para todas las referencias a la ruta
C:\AVBP\.
====================================================
Ejecucin
Haga clic en el botn de comando Ver el grfico.
El procedimiento cmdVerGrafico_Click se ejecutar cargando el archivo
Tierra.jpg que se encuentra en la ruta c:\avbp\capl5, y asignar la imagen al objeto
Image.
Observe que la imagen es ms pequea que el objeto, pero gracias a la propiedad
Stretch, sta se ajusta automticamente al tamao del objeto; en caso de que hubiera
sido ms grande que ste, tambin lo hubiera ajustado.





400 Parte 3: Controles grficos y programacin orientada a eventos
Esta capacidad de Image es muy importante, ya que permite mostrar en un mismo
espacio en la interfaz, imgenes de las cuales desconocemos realmente su dimensin.
PictureBox
Es un control que muestra grficos a partir de mapas de bits, iconos, metarchivos,
metarchivos mejorados, y otros formatos comprimidos como gif y jpeg. Hasta este
punto parecera que Image y PictureBox se parecen en su funcin, es ms, hasta el
icono del control se parece.
sta es una verdad muy relativa. PictureBox puede, adems, actuar como objeto
contenedor de objetos tipo OptionButton. as como mostrar el resultado de mtodos
grficos y texto escrito para ser manipulados a travs del mtodo Print. Estas capa-
cidades de PictureBox permiten ir creando una imagen, y no slo mostrarla, por lo
que este control es muy completo y til para aquellos que desarrollan aplicaciones de
dibujo.

====================================================
Nota: Si lo que desea es mostrar una imagen en formato estndar, le recomendamos
utilizar objetos basados en Image. Si adems requiere modificar el contenido o insertar
objetos en la imagen, utilice mejor PictureBox. En el primer caso, usar Image es
mejor porque demanda mucho menos recursos del sistema que PictureBox; para el
segundo caso, slo con PictureBox podr ser realizado.
====================================================
La propiedad esencial de los objetos basados en este control es Picture, en la cual se
especifica qu imagen se desea cargar; esto generalmente representa seleccionar un
archivo vlido de imagen, asociado al objeto.
Lo ms relevante de este control es:



Captulo 15: Manejo de imgenes 401
============================================================
Nota: La propiedad Stretch de los objetos basados en Image permite que las
imgenes a cargar se ajusten al tamao del objeto que las contiene. La propiedad
Autosize de los objetos basados en PictureBox permite que el objeto se adapte
al tamao de la imagen que va a contener. Utilice objetos basados en Image cuando
no conoce el tamao de las imgenes y slo pretende mostrarlas.
============================================================
>> Uso de objetos basados en el control PictureBox y modificacin dinmica de
imgenes. [15.02]
frmDibujo.frm
A continuacin aprender a trabajar con objetos basados en el control PictureBox, y
un poco en relacin con los mtodos disponibles para dichos objetos.
Implementacin visual





402 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmDibujo

Propiedades nuevas en frmDibujo



Captulo 15: Manejo de imgenes 403


Codificacin de frmDibujo
Editar cdigo: cmdDibujar, Evento: Clic.


Dim sngX As Single
Dim sngY As Single
Dim sngRadio As Single

sngX! = picAreaDibujo.ScaleHeight / 2
sngY! = picAreaDibujo.ScaleWidth / 2
sngRadio! = sngX! / 2

' Crculo

picAreaDibujo.Circle (sngX!, sngY!), sngRadio!

' Agrega los ejes

picAreaDibujo.Line (sngX!, sngY!)-(sngX! sngRadio!, sngY!)
picAreaDibujo.Line (sngX!, sngY!)-(sngX!, sngY! - sngRadio!)
picAreaDibujo.Line (sngX!, sngY!)-(sngX! + sngRadio!, sngY!)
picAreaDibujo.Line (sngX!, sngY!)-(sngX!, sngY! + sngRadio!)
Editar cdigo: picAreaDibujo, Evento: MouseMove.
If chkModoDraw.Value = vbChecked Then
picAreaDibujo.PSet (X, Y)
End If

Editar cdigo: cmdLimpiar, Evento: Click.
picAreaDibujo.Cls






404 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: cmdSalir, Evento: Click.
End

Ejecucin
La casilla de verificacin Activar modo Draw est desactivada. Mueva el puntero del
ratn sobre el objeto picAreaDibujo y compruebe que no pasa nada.
Haga clic en el botn de comando Dibujar.
El procedimiento cmdDibujar_Click se ejecutar. Se crean variables para calcular
posiciones dentro del objeto; se determina el centro de ste (mitad del alto, X, y del
ancho. Y). Se generan las coordenadas X, Y, de la base del dibujo. El radio ser igual al
valor de X, entre 2, por decir un valor.
Se traza un crculo, a partir del punto X, Y, considerando el radio que se determin.
Esto se hace a travs del mtodo Circle del objeto PictureBox.
Sintaxis:
Objeto.Circle (x,y), Radio
Posteriormente, se trazan lneas desde el punto X, Y hacia los 4 puntos cardinales,
sumando y restando al punto de origen, el valor del radio para X y para Y. Esto se hace
a travs del mtodo Line del objeto PictureBox, proporcionando
Sintaxis:
Objeto.Line (x,y) - (xl,yl)
Haga clic en la casilla de verificacin Activar modo Draw, para activarla. Poste-
riormente mueva el puntero del ratn sobre el objeto picAreaDibujo.
El procedimiento picAreaDibujo_MouseMove se ejecutar a cada variacin de
posicin dentro del objeto picAreaDibujo. Si la casilla de verificacin est acti-
vada, el procedimiento de evento trazar un punto del tamao especificado por
ScaleDraw, en el punto X, Y en donde se encuentre el puntero del ratn. Las
coordenadas X, Y son proporcionadas de manera implcita por el evento
MouseMove. El punto es trazado por el mtodo Pset, del objeto PictureBox






.
Captulo 15: Manejo de imgenes 405
Sintaxis:
Objeto.Pset {x,y)
Haga clic en el botn de comando Limpiar.
El procedimiento cmdLimpiar_Click eliminar el contenido del objeto PictureBox.
Haga clic en el botn de comando Salir.
El procedimiento cmdSalir_Click slo contiene la instruccin End, que da por
terminada la sesin de trabajo.
Adicin de componentes al proyecto
Ya hemos comentado que una de las mximas capacidades de Visual Basic es su posi-
bilidad de extenderse como herramienta de desarrollo. Sera utpico pensar que Visual
Basic fuera la herramienta de desarrollo lder que es, si slo dispusiera de las
posibilidades que encierran los controles que aparecen en el Cuadro de herramientas.
En Visual Basic usted puede agregar componentes, es decir, nuevos elementos de
interfaz que se comportan de acuerdo a las caractersticas de la clase que los define. Los
componentes se alejan de ser una simple subrutina o subprograma, ya que tienen un
comportamiento ms dinmico. La explicacin de los componentes ActiveX se
explicar a detalle en otra parte del libro.
La forma de trabajo con los componentes es muy sencilla:
Evale si los controles que se encuentran en el Cuadro de herramientas de manera
bsica son suficientes para desarrollar fcilmente la aplicacin sobre la que desea
trabajar.
Si no es as, busque entre los componentes que su edicin de Visual Basic incluye
pero que no muestra en el Cuadro de herramientas, por comodidad. Si un
componente agrega un control que satisface su necesidad, actvelo y trabaje con l; su
problema estar resuelto.
Si su edicin de Visual Basic no incluye un componente que proporcione un control
que satisfaga su necesidad, deber buscar alguna casa de desarrollo de software que le
proporcione o venda uno adecuado. Por supuesto, tiene la posibilidad de desarrollarlo
usted mismo.






406 Parte 3: Controles grficos y programacin orientada a eventos
Un componente agrega uno o ms controles al Cuadro de herramientas. Son tan
variados los propsitos que persiguen los componentes, que sera inadecuado disponer
de todos los controles de los componentes en el Cuadro de herramientas; no
mentimos al decirle que si hiciera eso, su pantalla no sera suficiente para mostrar el
Cuadro de herramientas. Es por ello que los componentes slo estn disponibles a
peticin.
Los controles agregados pueden ser ms complejos y dinmicos que los que conoce
hasta el momento. Algunos son tan poderosos y complejos, que la ventana Propiedades
resulta insuficiente; en ese caso, el control mismo dispone de su ayuda y su propio
cuadro de dilogo que facilita su uso.
==================================================
Nota: Los cuadros de dilogo adicionales que permiten actualizar de manera orga-
nizada las propiedades de un control ActiveX, son conocidos como pginas de
propiedades. Sugerimos su uso en tiempo de diseo, ya que brindan mucha claridad en
el manejo de los objetos y su preparacin para el trabajo en la interfaz, adems que hay
cosas que slo pueden ser establecidas a travs de dichas pginas de propiedades.
==================================================

>> Cmo agregar componentes a un proyecto de Visual Basic. [15.03]
A continuacin aprender a agregar componentes a un proyecto de Visual Basic y ver
cmo se agregan controles en el Cuadro de herramientas.
1. Genere un nuevo proyecto EXE estndar.
2. Vaya al men Proyecto - Componentes (o presione la tecla Ctrl+T).
3. Aparecer el cuadro de dilogo Componentes (vea la figura 15.3). Se desplegarn
todos los componentes disponibles en su sistema hasta el momento, en forma de
una lista desplegable de tipo CheckBox.
4. Visa el contenido del Cuadro de herramientas. Cuntos controles tiene?
______________.










Captulo 15: Manejo de imgenes 407


5. Busque Microsoft Windows Common Controls 6.0. Active la casilla de verifi-
cacin y haga clic en el botn de comando Aplicar. En este momento, usted
acaba de agregar un componente a su proyecto.
Qu aparece en la parte inferior del cuadro de dilogo, a manera de Frame,
con encabezado Microsoft Windows Common Controls 6.01
6.

7 Cuntos controles tiene el Cuadro de herramientas en estos momentos?
_________. El Cuadro de herramientas debe lucir ms o menos como se
muestra en la figura 15.4:






408 Parte 3: Controles grficos y programacin orientada a eventos

8. Se colocaron nuevos controles, por ejemplo ImageList, que utilizaremos en este
mismo captulo.
9. Haga clic en el botn Cerrar, del cuadro de dilogo componentes.

============================================================
Nota: En la respuesta del punto 6 de la prctica anterior, pudimos ver que se
mostraba un archivo con su ruta. Estos archivos, de extensin ocx, debern ser dis-
tribuidos junto con la aplicacin, ya que de lo contrario, todos los controles asocia-
dos al componente no funcionarn. Es recomendable que los coloque en el directorio
de archivos del sistema de Windows (C:\Windows\System, por lo general), para que
estn disponibles para todas las aplicaciones que los requieran.
Una vez instalados, no es necesario volverlos a instalar, aunque no recomendamos
que se confe, dando por cierta su existencia. Adjntelos al conjunto de archivos a
distribuir; en caso de que ya existan, eso no tendr repercusiones en sus aplicaciones
ni en su espacio en disco.







Captulo 15: Manejo de imgenes 409
En caso de que un componente OCX sea distribuido con su aplicacin, verifique que
su uso es autorizado y que no cometer delito por la violacin a derechos de autor o
propiedad intelectual. De manera inocente puede convertirse en un pirata
informtico.
============================================================
Almacenamiento de imgenes
En este captulo ya hemos manipulado imgenes utilizando los controles Image y
PictureBox. Para mostrar las que estn contenidas en archivos de imgenes
estndar, utilizamos la propiedad Picture, de la siguiente forma:
Sintaxis:
Objeto.Picture = LoadPicture(RutaNombreArchivo")
Ejemplo:
imgGrafico.Picture = LoadPicture("c:\avbp\cap15\Tierra.jpg")
La referencia que se hace en el ejemplo es una referencia explcita de archivo, es
decir, para que el programa funcione, es necesario que el archivo se llame
Tierra.jpg, y que se encuentre en c:\avbp\capl5. Cualquier otro nombre o ruta
causar error.
No nos sorprendera que en su programa de instalacin desee darle la oportunidad al
instalador de que decida dnde se deposita su aplicacin. Sera muy problemtico
entonces tener que decirle que debe cuidar que un conjunto de archivos (que puede
ser muy numeroso) debe estar en un directorio determinado, con un nombre deter-
minado.
Ciertamente, manejar de esa forma las imgenes resulta muy inadecuado, ya que el
nmero de archivos que compongan su sistema ser muy grande, cualquiera podra
modificar las imgenes, borrarlas o cambiarlas de lugar, lo que sera sinnimo de
problemas.
Lo ideal sera que las imgenes quedaran almacenadas en el formulario que las uti-
liza, estando siempre disponibles y libres de modificaciones o eliminaciones. Para
ello existe un control llamado ImageList, perteneciente al componente Microsoft
Windows Common Controls 6.0






410 Parte 3: Controles grficos y programacin orientada a eventos
ImageList ( Microsoft Windows Common Controls 6.0)
El control ImageList almacena imgenes en un tamao estndar y los subordina a
un mdulo determinado. Si usted define un objeto de tipo ImageList, Visual
Basic genera un archivo de extensin frx que forma parte de su formulario y se
distribuye con l. A partir de ese momento no necesitar referenciar las imgenes al
archivo que fsicamente las contiene, sino al objeto que las contiene, a travs de un
identificador nico de imgenes.
Los objetos basados en ImageList son invisibles en modo de ejecucin. Una vez
que usted agrega las imgenes, stas conforman una coleccin de imgenes.
>> Almacenamiento de imgenes en un objeto ImageList. [15.04]
A continuacin aprender a generar una coleccin de imgenes dependiente de un
formulario, a travs del uso de ImageList.
1. Utilizar el formulario que comenz a crear en la prctica anterior.
2. Agregue un objeto de tipo ImageList, haciendo doble clic en el control que ya
debe encontrarse en el Cuadro de herramientas. Acomode el control de tal
forma que no estorbe (vea la figura 15.5).

============================================================
Nota: Visual Basic tiene una gran cantidad de objetos que son invisibles en tiempo
de ejecucin. Donde los coloque en tiempo de diseo no importa, ya que no se vern
al ejecutar la aplicacin.
Puede hacerse un favor si los coloca donde no le estorben en el diseo de su interfaz.
Es muy incmodo estarlos moviendo a cada momento.
============================================================
















Captulo 15: Manejo de imgenes 411



3. Una vez que el objeto ImageList est selecionado, observe que la ventana Pro-
piedades tiene un nmero muy pequeo de ellas. En este caso, slo se utilizan
para asignar las propiedades de la coleccin, pero no de los elementos de la
misma, que vendrn a ser las imgenes que sean agregadas.
4. Establezca la propiedad Name del objeto basado en ImageList a
imlImagenes
5. Coloque el puntero del ratn sobre el objeto imlImagenes, haga clic con el
botn derecho del ratn para que aparezca el men contextual que se muestra en
la figura 15.6. Seleccione la opcin Propiedades.









412 Parte 3: Controles grficos y programacin orientada a eventos
6. Aparecer el cuadro de dilogo de propiedades del objeto (vea la figura 15.7).

============================================================
Nota: Al cuadro de dilogo para modificar las propiedades de los controles
ActiveX, por lo general se conoce como pgina de propiedades.
Cuando se haga referencia en este libro a una pgina de propiedades, deber entender
que es el cuadro de dilogo en donde se pueden modificar las propiedades de un
objeto basado en controles ActiveX.
Ningn control bsico de Visual Basic, como TextBox, CommandButton o
CheckBox, tiene pgina de propiedades. Por otro lado, no todos los controles
ActiveX tienen pgina de propiedades.
============================================================


7. Este cuadro de dilogo tiene tres fichas: General, Imgenes y Color. La primera
se encarga de definir la medida estndar de las imgenes (en pxeles); si las im-
genes son de diferente medida, debe seleccionar la opcin Custom. Primero
seleccione Custom y despus la ficha Imgenes (vea la figura 15.8).








Captulo 15: Manejo de imgenes 413


8. En la ficha Imgenes se asigna automticamente un nmero de elemento
(Index). Tambin se especifica una clave (Key) que identifica como nico a un
elemento dentro de la coleccin. Para agregar una imagen, haga clic en el botn
Insertar imagen... Aparecer la ventana de apertura de archivos del sistema
operativo Windows. Seleccione la imagen Tierra.jpg que se encuentra en la ruta
c:\avbp\capl5\. Al agregarla, el cuadro de dilogo le permitir asignar la clave
(Key); en el caso de esta imagen, coloque como clave la palabra Tierra (vea la
figura 15.9). Casualmente se llam como el archivo, pero esto no es una regla.





414 Parte 3: Controles grficos y programacin orientada a eventos
9. Agregue las siguientes imgenes (todas se encuentran en la ruta c:\avbp\capl5\):

10. Para aceptar los cambios, le recomendamos hacer clic en el botn Aplicar, y
posteriormente en el botn Aceptar. Puede ingresar en cualquier momento a la
pgina de propiedades y modificar lo ya definido,
Mediante el control ImageList almacen imgenes para su uso dedicado en su
aplicacin. Seguramente se generar un archivo de extensin frx, homnimo al de
mdulo (extensin frm), en donde quedarn almacenadas las imgenes.
Al momento de compilar a exe, las imgenes se agregarn al archivo ejecutable.
El control ImageList genera objetos de tipo coleccin; hay un objeto general que
cuenta con elementos que le son dependientes. Tanto el objeto general como los ele
mentos tienen sus propiedades.
En resumen, tendramos lo siguiente:

Se puede hacer un amplio manejo de la coleccin, identificada por Visual Basic
como ListImages, a travs de las diversas propiedades que posee el objeto :
Para contar (Count) la cantidad de imgenes contenidas en la lista de imgenes
(ListImages) que constituye el objeto (imiImagenes):

imlImagenes.ListImages.Count









Captulo 15: Manejo de imgenes 415
Para referenciar la imagen (Picture) del primer elemento de la lista de imgenes
(ListImages) que constituye el objeto (imlImagenes). es necesario hacer refe-
rencia al elemento por su ndice (Index), por su clave (Key), si se conoce, o por su
nmero de elemento (Item) )
imlImagenes.ListImages(1).Picture
imlImagenes.ListImages("Tierra").Picture
imlImagenes.ListImages.Item(l).Picture


============================================================
Nota: La propiedad Picture de un objeto de tipo ImageList contiene un
nmero interno, aleatorio, que se asigna a cada una de las imgenes almacenadas en
tiempo de ejecucin. Al referenciar dicho nmero. Visual Basic extrae la imagen
dentro de las convenciones de imagen (Picture), por lo que el uso de la funcin
LoadPicture ya no es necesario.
============================================================
Para referenciar la clave (Key) de una imagen contenida en la lista de imgenes
(ListImages) que constituye el objeto (imlImagenes), de la cual slo
conocemos el ndice (Index), o viceversa:
imiImagenes.ListImages("Tierra").Index
imiImagenes.ListImages.Item(1).Key
============================================================
Lo inesperado: Cuando trabaja con la coleccin ImageList, los errores ms
comunes son:
No se encontr el elemento (error 35601 en tiempo de ejecucin). Se presenta
cuando la clave a la que se hace referencia no existe. Una cosa muy importante
que debe considerar es que la referencia a la clave es sensible a maysculas y
minsculas, de tal forma que Tierra y tierra no son la misma cosa. Soluciones:
revise que todas las claves existan en la coleccin, y que no existan discrepancias
de maysculas y minsculas entre su definicin y su codificacin. Una buena idea
es formar su propio estndar de slo minsculas, slo maysculas o slo
maysculas la letra inicial.
El ndice est fuera de los lmites (error 35600 en tiempo de ejecucin). Se pre-
senta cuando hace referencia a un ndice que no se encuentra en la coleccin.
Soluciones: los ndices sern a partir de 1, hasta llegar al nmero de imgenes
almacenadas. Est consciente de los ndices que puede referenciar, particular-
mente cuando elimina imgenes. Acostmbrese a utilizar la referencia a travs de
Key, es ms efectivo.
============================================================


416 Parte 3; Controles grficos y programacin orientada a eventos
>>Uso de una coleccin de imgenes ImageList. [15.05]
frmCGrafico.frm
A continuacin aprender a utilizar una coleccin de imgenes. Es necesario que
haya realizado el ejercicio anterior.
Implementacin visual

Tabla de objetos y propiedades de frmCGrafico







Captulo 15: Manejo de imgenes 417

Codificacin de frmCGrafico

Editar cdigo: (General), Evento: (Declarations).
Dim intCuenta As Integer
Dim intImagenes As Integer
Editar cdigo: Form, Evento: Load.
picGrafico.Picture = imlImagenes.ListImages( "Tierra").Picture
intCuenta% = 1

Editar cdigo: cmdAdelante, Evento: Clck.

intImagenes% = imlImagenes.ListImages.Count
If intCuenta% = intImagenes% Then
intCuenta% = 1
Else
intCuenta% = intCuenta% + 1
End If
picGrafico.Picture = imlImagenes.ListImages(intCuenta%).Picture
Editar cdigo: cmdAtras, Evento: Clck.
intImagenes% = imlImagenes.ListImages.Count
If intCuenta% = 1 Then
intCuenta% = intImagenes%
Else
IntCuenta% = intCuenta% - 1
End If
picGrafico.Picture = imlImagenes.ListImages(intCuenta%).Picture




418 Parte 3: Controles grficos y programacin orientada a eventos
Ejecucin
Antes de que se active el formulario, se ejecuta el cdigo que se encuentra en el
rea de declaraciones generales, declarando dos variables de trabajo: una que
actuar como contador apuntador, y la otra para almacenar el nmero de imge-
nes contenidas en la coleccin ImageList. Esta ltima variable permitir que
el programa funcione aun cuando se le agreguen o eliminen imgenes.
Al cargarse el formulario, se ejecuta el evento Form_Load.
Se asignar a la propiedad Picture del objeto picGrafico la imagen
almacenada que se identifique mediante la clave Tierra, que es la primera imagen
de la coleccin. El valor de la variable apuntador se establece en 1.
Haga clic en el botn >> (cmdAdelante). Despus hgalo las veces que quiera.
Se ejecutar el procedimiento cmdAdelante_Click. Se determina el nmero
de imgenes almacenadas en la coleccin y el valor se asigna a la variable de
trabajo intCuenta%. Esta variable es muy importante, ya que el rango de
navegacin entre imgenes ser de 1 a intCuenta%.
La lgica del programa es la siguiente: al hacer clic en el botn >>, le indica al
programa que desea ver la imagen siguiente, es decir, la que tiene el ndice con-
secutivo siguiente (intCuenta% + 1) al que tiene actualmente
(intCuenta%). En caso de que el ndice que tenga actualmente (intCuenta%)
sea igual al total de imgenes almacenadas (intImagenes%), ya no podra
avanzar hacia un siguiente elemento porque no lo hay; en ese caso, la cuenta se
iniciar.
Una vez que se determina el ndice del elemento que se debe mostrar, se asigna a
la propiedad Picture del objeto PictureBox, el contenido en imagen del
elemento seleccionado.
Haga clic en el botn << (cmdAtras). Despus hgalo las veces que quiera.
Se ejecutar el procedimiento cmdAtras_Click. Se determina el nmero de
imgenes almacenadas en la coleccin y el valor se asigna a la variable de trabajo
intCuenta%. Esta variable es muy importante, ya que el rango de navegacin
entre imgenes ser de 1 a intCuenta%.
La lgica del programa es la siguiente: al hacer clic en el botn <<, le indica al
programa que desea ver la imagen anterior, es decir, la que tiene el ndice con-
secutivo anterior (intCuenta% - 1) al que tiene actualmente
(intCuenta%). En caso de que el ndice que tenga actualmente
(intCuenta%) sea igual a 1, ya no podra retroceder hacia un elemento anterior
porque no lo hay; en ese caso, la cuenta se igualar al ltimo elemento
(intImagenes%).



Captulo 15: Manejo de imgenes 419
Una vez que se determina el ndice del elemento que se debe mostrar, se asigna a la
propiedad Picture del objeto PictureBox, el contenido en imagen del elemento
seleccionado.
_____________________________________________________
Resumen
En este captulo:
Vimos las particularidades de los controles bsicos de manejo de imgenes:
Image y PictureBox.
Vimos las particularidades de la funcin LoadPicture.
Vimos las diferencias significativas entre Image y PictureBox, a travs de la
capacidad de dibujo ampliado de PictureBox.
Vimos cmo agregar componentes al Cuadro de herramientas de Visual Basic,
ampliando las capacidades de diseo de interfaz.
Vimos cmo los componentes ActiveX poseen pginas de propiedades que brindan
una mayor funcionalidad en el desarrollo.
Vimos cmo crear y manejar un almacn de imgenes a travs del control
ImageList.
Es importante que domine el contenido del captulo si desea que sus aplicaciones ten-
gan una verdadera orientacin hacia entornos grficos.
Algunas respuestas a los ejercidos
[15.03] Cmo agregar componentes a un proyecto de Visual Basic.
4. 21
6. C:WINDOWS\SYSTEM\MSCOMCTRL.OCX
7. 30







420























Captulo
16
Arrastrar y colocar

Objetivo
Dominar el uso de la tcnica de arrastrar y colocar a travs de sus eventos, as como
la manipulacin grfica de iconos para darle un toque profesional a las aplicaciones.
Al finalizar este captulo deber:
Saber cmo habilitar un objeto para operaciones de arrastrar y colocar
Saber utilizar los eventos involucrados en operaciones de arrastrar y colocar
Saber utilizar argumentos implcitos en funciones de arrastrar y colocar
La tcnica de arrastrar y colocar es uno de los rasgos ms distintivos de los entornos
grficos; a travs de este captulo podr dominar los pormenores de este tipo de ope-
raciones que agregan vistosidad a su interfaz.
421



422 Parte 3: Controles grficos y programacin orientada a eventos

Arrastrar y colocar
Una de las caractersticas ms sobresalientes del entorno de Windows es la de poder
arrastrar y colocar.
Un objeto que puede arrastrarse se conoce como fuente, origen o source. Para arras-
trar un objeto, coloque el puntero del ratn sobre l, presione el botn del ratn y sin
soltarlo, mueva el puntero del ratn (con todo y el objeto fuente) hacia la nueva
posicin en donde desee colocar el objeto arrastrado, con el simple hecho de dejar de
presionar el botn del ratn que mantena presionado.
En el proceso, es probable que arrastre el objeto fuente sobre otros objetos (DragOver);
por lo menos arrastrar sobre el objeto Form el objeto fuente. La figura 16.1 ilustra
un poco lo que pasa en una operacin de arrastrar y colocar.


1. El objeto Command1 acta como objeto fuente. Se coloca el puntero del ratn
sobre el objeto, se presiona el botn del ratn y se mantiene presionado; estando en la
posicin inicial (1) se arrastra a la posicin destino (3).
Todo el peso de las operaciones de arrastrar y colocar recae sobre los objetos de
destino, es decir, los que no son el objeto fuente; dichos objetos de destino son los
que harn algo al detectar que un objeto es arrastrado sobre ellos (DragOver) o
colocado sobre ellos (DragDrop). El objeto fuente slo participa en su caracterstica
de poder ser arrastrado, cosa que ocurre al establecer su propiedad DragMode a
lAutomatic



.
Captulo 16: Arrastrar y colocar 423
Al arrastrar un objeto fuente, se ejecuta un procedimiento de evento denominado
DragOver asociado al objeto sobre el cual el objeto fuente es arrastrado; dicho
procedimiento cuenta con argumentos implcitos importantes: Source, que
contiene la referencia o identificacin interna del objeto fuente, y X, Y (Left,
Top) que contienen la nueva posicin del objeto a medida que se arrastra.
2. En el proceso de ser arrastrado, una representacin visual indicar que se est
ejecutando una operacin de arrastrar y colocar, a la que se le llama icono de
arrastre; por lo general es un borde punteado o gris, de las mismas dimensiones
que el objeto fuente. Dicho icono es propiedad del objeto fuente.
Dicha representacin grfica se establece a travs de la propiedad DragIcon del
objeto de destino.
3. Al llegar a la posicin final se libera el botn del ratn que se mantena presionado,
y en ese momento ocurre el evento DragDrop del objeto de destino.
>> Programa que comprueba las operaciones de arrastrar y colocar. [16.01]
frmArrastra.frm
A continuacin aprender a utilizar los eventos asociados a las operaciones de arras-
trar y colocar.
Implementadn visual






424 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmArrastra

Propiedades nuevas en frmArrastra

Eventos nuevos en frmArrastra



Captulo 16: Arrastrar y colocar 425
Codificacin de frmArrastra
Editar cdigo: Form, Evento: DragOver.
lblMensaje.Caption = " X: " & X & " Y: " & Y
Editar cdigo: form. Evento: DragDrop.

lblMensaje.Caption = "Solt el objeto fuente. Nueva ubicacin"
cmdFuente.Left = X
cmdFuente.Top = Y
Ejecucin
Arrastre el botn Arrstreme (cmdFuente), pero no lo coloque (operacin de
arrastre).
Visual Basic detectar que est arrastrando el objeto cmdFuente sobre el
objeto frmArrastra. Debido a eso, en cada variacin de posicin del puntero
del ratn se ejecutar el evento Form_DragOver, que se encargar de
modificar la propiedad Caption del objeto lblMensaje. y mostrar el valor
de los atributos implcitos del procedimiento de evento. En todo momento, el
procedimiento DragOver sabe qu objeto es el que se est moviendo sobre el
objeto de destino, y en qu posicin se encuentra el objeto fuente (X, Y).
Coloque el objeto.
Al colocar el objeto que estaba arrastrando, el objeto frmArrastra detecta
que un objeto fuente se ha colocado sobre l, causando el evento
Form_DragDrop, que se encarga de modificar la propiedad Caption del
objeto lblMensaje, y muestra un mensaje de que el objeto se ha colocado.
Para comprobar la variabilidad de los argumentos implcitos, el valor de las
propiedades Left y Top toman el valor de la posicin del puntero del ratn al
momento de colocar el objeto fuente (X, Y). Como podr comprobar,
efectivamente los argumentos implcitos cambian de acuerdo a las acciones que
usted realice en su interfaz.

426 Parte 3: Controles grficos y programacin orientada a eventos
>>Programa que comprueba las operaciones de arrastrar y colocar cuando el
objeto de destino no es de tipo Form. [16.02]
frmDrag1.frm
A continuacin aprender a utilizar los eventos asociados a las operaciones de arras-
trar y colocar, cuando el objeto de destino no es un objeto de tipo Form. Para este
ejemplo utilizar un objeto basado en ImageList, por lo que deber habilitar el
componente Microsoft Windows Common Controls 6.0, como se vio en el captulo
anterior.
Implementacin visual


Tabla de objetos y propiedades de frmDrag1













Captulo 16: Arrastrar y colocar 427

Codificacin de frmDrag1
Editar cdigo: Form, Evento: Load.
picObjeto1.Picture = imlImagenes.ListImages("Tierra").Picture
Editar cdigo: picObjrto2, Evento: DragDrop.

picObjeto2.Picture = Source.Picture
Source.Picture = LoadPicture("")
Ejecucin
Al cargarse el formulario, se ejecuta el procedimiento Form_Load.
Este procedimiento se encarga de asignar a la propiedad Picture del objeto
pic0bjeto1, la imagen identificada como Tierra en la coleccin de imgenes
llamada imlImagenes. A continuacin aparecer en el primer objeto
PictureBox la imagen Tierra.
Arrastre la imagen y colquela en el objeto de imagen que est vaco.
El objeto pic0bjeto1 acta como objeto fuente y puede ser arrastrado porque
tiene su propiedad DragMode establecida a 1.













428 Parte 3: Controles grficos y programacin orientada a eventos
Cuando el objeto fuente es arrastrado y colocado en el objeto pic0bjeto2. este
ltimo detecta que algo est siendo colocado sobre l, lo que ocasiona la ejecucin del
procedimiento de evento picObjeto2_DragDrop; la forma en que el objeto de
destino (pic0bjeto2) determina qu objeto es el que est siendo colocado sobre l
es consultando el valor del argumento implcito Source.
En este caso Source slo puede ser picObjeto1. ya que es el nico objeto que se
puede arrastrar y colocar en nuestra interfaz; seguramente se topar con otras
aplicaciones en las que el objeto que se puede arrastrar y colocar es indeterminado. La
nica forma de tener siempre la certeza de hacer referencia a un objeto fuente, sea
cual sea su nombre, es mediante Source.
picObjeto2_DragDrop se encarga de asignar a la propiedad Picture del obje-
to picObjeto2, la imagen contenida en la propiedad Picture del objeto fuente,
que en este caso es pic0bjeto1. Posteriormente, a travs de la funcin
LoadPicture, se elimina la imagen de picObjeto1. y da la apariencia de que la
imagen dej de estar en un objeto para pasarse a otro.
>> Programa que comprueba las operaciones de arrastrar y colocar, y que utiliza un
objeto de destino que no es de tipo Form. [16.03]
frmDrag2.frm
A continuacin aprender a utilizar los eventos asociados a las operaciones de arras-
trar y colocar, cuando el objeto de destino no es un objeto de tipo Form, ya darle ma-
yor riqueza visual utilizando iconos de transferencia. Para este ejemplo utilizar un
objeto basado en ImageList, por lo que deber habilitar el componente Microsoft
Windows Common Controls 6.0, como se vio en el captulo anterior.
El siguiente es el comportamiento que se desea para el programa:
Mientras arrastra el objeto fuente, el icono de transferencia deber
indicar que el objeto est siendo arrastrado.
El objeto fuente no podr ser colocado en el rea libre del formula-
rio, por lo que mientras sea arrastrado sobre el formulario, el icono
de transferencia indicar que est prohibido colocar el objeto.




Captulo 16: Arrastrar y colocar 429

El nico objeto de destino vlido es el segundo PictureBox; cuando
el objeto arrastrado est sobre dicho objeto, el icono deber cambiar de
tal forma que sugiera colocar el objeto ah.
Una vez que el objeto se ha colocado en el objeto de destino vlido,
deber inhabilitarse toda posibilidad de arrastrar nuevamente el objeto
fuente.
Implementacin visual


Tabla de objetos y propiedades de frmDrag2











430 Parte 3: Controles grficos y programacin orientada a eventos




Codificacin de frmDrag2

Editar cdigo: Form, Evento: Load.
picObjeto1.Picture = imlImagenes.ListImages("Tierra").Picture
picObjeto1.DragIcon = imlImagenes.ListImages("Drag").Picture
Editar cdigo: Form, Evento: DragOver.
picObjeto1.DragIcon = imlImagenes.ListImages("No").Picture
: Editar cdigo: picObjetol, Evento: DragOver.
picObjeto1.DragIcon = imlImagenes.ListImages("Drop").Picture


















Capitulo 16: Arrastrar y colocar 431

: Editar cdigo: picObjeto2, Evento: DragDrop.

picObjeto2.Picture = Source.Picture
Source.Picture = LoadPicture("")
picObjeto1.DragIcon = LoadPicture("")
picObjeto1.DragMode = 0


Ejecucin
: Al cargarse el formulario, se ejecuta el procedimiento Form_Load.
El procedimiento se encargar de asignar a la propiedad Picture del objeto
Pic0bjeto1, la imagen identificada como Tierra de la coleccin
imlImagenes. A continuacin aparecer la imagen Tierra en el primer objeto
PictureBox .
Adems, la imagen Drag de la coleccin imlImagenes se establecer como
icono de arrastre. Esta imagen slo estar visible cuando se arrastre el objeto
fuente.
: Arrastre la imagen Tierra y mantngase en cualquier parte del formulario, sin
entrar al objeto de destino.
Puesto que el objeto Form no es un objeto de destino vlido (cosa que se puede
comprobar fcilmente, ya que no tiene codificado su evento DragDrop), el
icono de arrastre debe indicar una prohibicin. Mientras arrastre el objeto fuente
sobre el objeto Form, se ejecutar el procedimiento de evento
Form_DragOver, que establecer como icono de arrastre la imagen
identificada como No de la coleccin imlImagenes.
: Arrastre la imagen Tierra, entre al objeto de destino, pero todava no coloque el
objeto.
Puesto que el objeto pic0bjeto2 es un destino vlido (cosa que se puede com-
probar fcilmente, ya que tiene codificado su evento DragDrop), el icono de
arrastre debe sugerir que coloque el objeto arrastrado. Mientras arrastre el objeto
fuente sobre el objeto pic0bjeto2, se ejecutar el procedimiento de evento
picObjeto2_DragOver, que establecer como icono de arrastre la imagen
identificada como Drop de la coleccin imlImagenes.
: Coloque el objeto fuente en el objeto de destino.
Se ejecutar el procedimiento de evento picObjeto2_DragDrop, que se
encarga de asignar a la propiedad Picture del objeto de destino, el contenido
de la propiedad Picture del objeto fuente. Posteriormente, y para dar la
apariencia de haber movido el contenido de un lado a otro, a la propiedad
Picture del obje-









432 Parte 3: Controles grficos y programacin orientada a eventos
to fuente se le asigna una imagen nula utilizando LoadPicture, con lo que su
contenido desaparece. Se hace lo mismo con el icono de arrastre. Para evitar que
se intente arrastrar otra vez el objeto fuente, la propiedad DragMode se
establece a 0, que equivale a modo manual, con lo que ya no son posibles las
operaciones realizadas por el programa, ms que mediante el uso de mtodos y
otra forma de programacin.

Estados de transicin y punteros predefinidos
Dentro de las operaciones de arrastrar y colocar. Visual Basic siempre sabe en qu
estado de la operacin nos encontramos: sabe si estamos arrastrando el objeto o no,
sabe si estamos arrastrndolo sobre un espacio sobre el que no se puede colocar el
objeto, o bien si el espacio sobre el que lo arrastramos es un espacio vlido. Todos
estos momentos en la operacin de arrastrar y colocar no llegan a ser relevantes como
para constituir eventos nuevos; sin embargo, es posible utilizarlos.
Mediante el evento DragOver, y a travs del argumento implcito State, se puede
obtener la informacin que Visual Basic procesa internamente del proceso de arrastrar
y colocar, al momento en que un objeto es arrastrado.
State puede tener los siguientes valores:



Los estados que acabamos de ilustrar ocurren internamente cuando se desarrolla una
operacin de arrastrar y colocar; la forma ms prctica y comn de poner de mani-
fiesto los cambios de estado es a travs de los punteros del ratn que Windows adop-
ta. Por ejemplo, es muy comn que cuando se arrastra un objeto sobre un lugar en el
que no se puede colocar, aparezca un puntero de prohibicin. En este captulo ya
vimos la manera en que se puede alterar el icono de arrastre a travs de la propiedad
DragIcon.










Captulo 16: Arrastrar y colocar 433
Punteros predefinidos del entorno de Windows
El entorno de Windows cuenta con un conjunto de punteros de ratn estndar que son
utilizados en todas las operaciones. Por ejemplo, si un proceso se est ejecutando de
modo interno, es usual ver un pequeo reloj de arena. Es tan intensivo y tan comn su
uso, que forman parte del entorno mismo.
Visual Basic le permite disponer de dichos punteros, a travs de la propiedad
Mouse-Pointer. Los cdigos asignados para los punteros predefinidos son los
siguientes:















434 Parte 3: Controles grficos y programacin orientada a eventos
>> Programa que comprueba los estados de las operaciones de arrastrar y colocar,
as como los punteros predefinidos del entorno de Windows. [16.04]
frmEstados.frm
A continuacin aprender a utilizar los estados implcitos en las operaciones de arras-
trar y colocar, y el uso de los punteros predefinidos del entorno de Windows.
Cuando el estado de la operacin sea Entrar (0), se deber colocar el puntero prede-
terminado del objeto, que por lo general es un contorno grisceo de las dimensiones
del objeto que es arrastrado. Cuando el estado de la operacin sea Salir (1), se deber
colocar el puntero de prohibicin de la operacin colocar. Si el estado de la operacin
es Sobre, el puntero deber ser el reloj de arena de Windows. Todo esto sucede mien-
tras el objeto es arrastrado.
Implementacin visual

Tabla de objetos y propiedades de frmEstados














Captulo 16: Arrastrar y colocar 435
Codificacin de frmEstados
Editar cdigo: Form, Evento: DragOver,
If State = 0 Then
Source.MousePointer = vbNoDrop
End If
If State = 1 Then
Source.MousePointer = vbDefault
End If
If State = 2 Then
Source.MousePointer = vbHourglass
End If
Ejecucin
Arrastre el objeto lblMensaje por todas partes, incluso fuera del formulario.
Al comenzar a arrastrar el objeto lblMensaje sobre el formulario, se ejecutar
el procedimiento Form_DragOver. Dicho procedimiento de evento proporcio-
nar en todo momento el valor del estado de la operacin de arrastrar y colocar.
A partir de ah y a travs de las estructuras condicionales, se asigna a la propie-
dad MousePointer la constante correspondiente al puntero que se desee
mostrar en cada uno de los estados. El resultado es inmediato y grficamente
visible.

Manejo en modo manual de arrastrar y colocar
Por lo general, el manejo en modo automtico de las operaciones de arrastrar y
colocar es sencillo y recomendable; sin embargo, dicho esquema no es til en todos
los casos.
El origen de esta restriccin tiene que ver con el evento Click. Al tratar de arrastrar
un objeto, es inevitable que usted coloque el puntero del ratn sobre un objeto y
presione el botn del ratn: eso forma parte del concepto de arrastrar y colocar. Pero,
cmo le hara para arrastrar un botn de comando, que al hacer clic en l
desencadenara una tarea? Como puede ver, algunos objetos asumen un
comportamiento fundamental de su operacin cuando se hace clic en ellos, tal es el
caso de los CommandButton, ListBox y ComboBox, entre otros.













436 Parte 3: Controles grficos y programacin orientada a eventos
Cuando requerimos manejo de tipo arrastrar y colocar, pero no podemos damos el
lujo de sacrificar la funcionalidad de hacer clic en un objeto, es necesario operar de
modo manual aquellas tareas de arrastrar y colocar.
El modo manual de arrastrar y colocar se basa en lo siguiente:
La propiedad DragMode del objeto fuente deber estar establecida a 0-Manual,
que de hecho es el valor predeterminado de esa propiedad.
Se debe buscar un evento sustituto con el cual activar la funcin de arrastrar y
colocar.
Se debe activar manualmente el modo de arrastre a travs del mtodo Drag.
El proceso que ocurre al momento de colocar permanece igual.
El mtodo Drag tiene la siguiente Sintaxis:
ObjetoFuente.Drag Accin
Donde Accin es uno de los siguientes valores:



Utilizar el mtodo Drag con la accin vbBeginDrag es equivalente a colocar el puntero
del ratn en el objeto fuente, presionar el botn del ratn y sin soltarlo, mover el puntero del
ratn (con todo y el objeto fuente) hacia una nueva posicin en donde se desea colocar el
objeto arrastrado.
>> Programa que comprueba las operaciones de arrastrar y colocar utilizando el modo
manual. [16.05]
frmPermiso.frm

A continuacin aprender a utilizar los eventos asociados a las operaciones de arrastrar y
colocar, en su modo manual. Para este ejemplo se utilizar un objeto basado en








Captulo 16: Arrastrar y colocar 437
ImageList. por lo que deber habilitar el componente Microsoft Windows Common
Controls 6.0, como se vio en el captulo anterior.
El siguiente es el comportamiento que se desea para el programa:
El programa simula la asignacin de permisos para el manejo de archivos.
Hay dos listas habilitadas de tipo ListBox para seleccin mltiple (MultiSelect);
una contiene los permisos disponibles para su asignacin, y la otra contiene la lista de
los permisos asignados.
Debido a que los objetos basados en ListBox son sensibles al clic, ya que mediante l
asumen la seleccin o liberacin de los elementos contenidos en la lista, se deber
presionar el botn derecho del ratn para activar el proceso de arrastrar y colocar.
El icono de arrastre deber denotar la transferencia de opciones de una lista a otra.
La funcionalidad de arrastrar y colocar deber estar habilitada para ambas listas, por lo
que ambas pueden ser fuente y destino.

Implementacin visual

























438 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmPermiso

Codificacin de frmPermiso

Editar cdigo: Form, Evento: Load.

lstDisponibles.Additem "Leer"
lstDisponibles.Additem "Escribir"
lstDisponibles.Additem "Crear archivos"
lstDisponibles.Additem "Eliminar archivos"







Captulo 16: Arrastrar y colocar 439
lstDisponibles.DragIcon = imlImagenes.ListImages("Mover").Picture
lstAsignados.DragIcon = imlImagenes.ListImages("Mover").Picture

Editar cdigo: lstDisponibles, Evento: MouseDown.
If Button = 2 Then
If lstDisponibles.ListCount = 0 Then
Beep
Else
lstDisponibles.Drag vbBeginDrag
End If
End If

Editar cdigo: lstAsignados, Evento: MouseDown.
If Button = 2 Then
If lstAsignados.ListCount = 0 Then
Beep
Else
lstAsignados.Drag vbBeginDrag
End If
End If

Editar cdigo: IstDisponibles, Evento: DragDrop.
Dim intContador As Integer
For intContador% = 0 To Source.ListCount - 1
If Source.Selected(intContador%) Then
lstDisponibles.Additem Source.List(intContador%)
End If
Next intContador%
For intContador% = Source.ListCount - 1 To 0 Step -1
If Source.Selected(intContador%) Then
Source.RemoveItem intContador%
End If
Next intContador%

Editar cdigo: lstAsignados, Evento: DragDrop.
Dim intContador As Integer
For intContador% = 0 To Source.ListCount - 1
If Source.Selected(intContador%) Then
lstAsignados.AddItem Source.List(intContador%)
End If
Next intContador%





440 Parte 3: Controles grficos y programacin orientada a eventos
For intContador% = Source.ListCount - 1 To 0 Step -1
If Source.Selected(intContador%) Then
Source.RemoveItem intContador%
End If
Next intContador%

Editar cdigo: cmdAceptar, Evento: Click.

End
Ejecucin
Al cargarse el formulario, se ejecuta el procedimiento Form_Load.
El procedimiento se encargar de cargar las opciones de permisos en la lista desplegable
lstDisponibles. Al inicio, slo dicha lista desplegable tendr elementos, mismos
que podrn ser intercambiados de una lista a otra.
Adems, la imagen Mover de la coleccin imlImagenes se establecer como icono de
arrastre para ambas listas desplegables.
Intente arrastrar cualquier elemento de la lista desplegable lstDisponibles hacia la
lista desplegable lstAsignados, utilizando el procedimiento convencional.
Podr darse cuenta que el clic en los objetos de tipo lista desplegable tiene una funcin
de seleccionar y remover la seleccin de los elementos, por lo que sera prcticamente
imposible desarrollar la operacin de arrastrar y colocar como es normal.
Seleccione uno o ms elementos de la lista desplegable lstDisponibles; haga clic
en los elementos, y en casos de seleccin mltiple, puede utilizar las teclas Mays o
Ctrl. Presione el botn derecho del ratn y mantngalo presionado.
Se desencadenar el procedimiento de evento lstDisponibles_MouseDown.
Hasta este momento usted no sabe qu botn del ratn fue presionado, ya que el evento
MouseDown se ejecuta para cualquier botn; afortunadamente. Visual Basic tiene en
este evento un argumento implcito llamado Button, que permite determinar cul de
los botones fue presionado.
El procedimiento lstDisponibles_MouseDown se encargar de analizar el valor
del argumento implcito Button. Si ste es 2, entonces el botn que se presion es el
botn derecho (que es el que nos interesa); por lo que se evala si en la lista desplegable
hay elementos por arrastrar. Si no hay elementos por arrastrar, se emitir un Beep; de
lo contrario, se iniciar una operacin de arrastrar y colocar.










Captulo 16: Arrastrar y colocar 441
Si la operacin de arrastrar y colocar se inicia, el icono de arrastre se cambiar por la
imagen contenida en imilmagenes.
Este mismo comportamiento se repite al hacer lo mismo sobre la lista desplegable
lstAsignados.
Arrastre los elementos que haya seleccionado y colquelos en la lista desplegable
lstAsignados.
Se ejecutar el procedimiento de evento lstAslgnados_DragDrop, que se encarga
de definir una variable de trabajo para la manipulacin de los elementos de las listas
desplegables. Primeramente evaluar todos los elementos de la lista desplegable que sea
el objeto fuente; si alguno de los elementos est seleccionado, agregar una opcin
idntica en el objeto de destino.
Como se supone que los elementos fueron movidos, se evalan nuevamente los
elementos del objeto fuente, de forma regresiva, a partir del nmero de elementos de la
lista desplegable, hasta cero; si alguno de los elementos est seleccionado, lo eliminar.
Esto da la apariencia de agregarlos en un lado y eliminarlos en otro, cosa que realmente
sucede. En la segunda evaluacin a los elementos de la lista desplegable que acta
como fuente, es importante que la cuenta sea regresiva, ya que de otra forma, el proceso
iterativo se iniciara con el total de los elementos, y al eliminar uno de ellos, haramos
una referencia invlida al final, ya que al eliminar un elemento, automticamente todos
se ajustan de tal forma que el ndice sea continuo y consecutivo. De forma regresiva lo
peor que puede suceder es que eliminemos el ltimo elemento, que de hecho nunca ms
volveremos a invocar.
El mismo comportamiento se repetir si la operacin se realiza tomando como objeto
fuente lstAsignados.
Haga clic en el botn Aceptar.
Se ejecutar el procedimiento de evento cmdAceptar_Click, que concluir la eje-
cucin de la aplicacin.
________________________________________________________
Resumen
En este captulo:
Vimos las particularidades del proceso de arrastrar y colocar.
Vimos cmo habilitar a los objetos para operaciones de arrastrar y colocar en modo
automtico.












442 Parte 3: Controles grficos y programacin orientada a eventos
Vimos la utilidad de los argumentos implcitos del evento DragDrop.
Vimos la forma en que se le puede agregar dinamismo a las operaciones de arrastrar y
colocar a travs de la manipulacin de iconos de arrastre.
Vimos los estados de operacin de arrastrar y colocar, as como los punteros predefinidos
del entorno de Windows y la forma de utilizarlos en aplicaciones de Visual Basic.
Vimos la forma de trabajar con operaciones de arrastrar y colocar de modo manual.

Es importante que conozca el contenido del captulo para poder proporcionar caractersticas
del entorno de Windows a sus aplicaciones. Lo visto en este captulo y en el pasado, es
suficiente para que sus aplicaciones no parezcan herramientas de trabajo viejas basadas en
modo de texto.
Asuma el futuro proporcionando caractersticas estndar de Windows a sus programas.
























Captulo
17
Control del tiempo

Objetivo
Conocer el uso del control de tiempo de Visual Basic.
Al finalizar este captulo deber:
Conocer el uso del control Timer
Algunos filsofos dicen que el tiempo es de creacin humana, que en realidad no existe, tan
slo transcurre. Se le da un valor absoluto y relativo al mismo tiempo; mientras los filsofos
se ponen de acuerdo, nosotros veremos el control de Visual Basic que nos permite manejar
el tiempo.
Slo hay dos cosas para las que nos puede importar el tiempo al momento de estar
desarrollando aplicaciones: saber la hora (valor absoluto) y determinar intervalos (valor
relativo), generalmente para establecer lmites.
Este captulo es pequeo, pero le dar un panorama bastante ilustrativo de lo que pude hacer
en Visual Basic si controla el tiempo.
443
















444 Parte 3: Controles grficos y programacin orientada a eventos

Control bsico para controlar el tiempo
Timer
Este objeto le permite controlar acciones en intervalos de tiempo calculados en mili-
segundos.
El evento ms importante de los objetos basados en este control es Timer, mismo que se
ejecuta de manera peridica con base en un intervalo de tiempo determinado. La propiedad
esencial de este tipo de controles es la propiedad Interval. En ella se especifica el
intervalo, expresado en milisegundos, de cada cundo se ejecutar el procedimiento de
evento Timer.
Lo ms relevante de este control es:


El control Timer es invisible en tiempo de ejecucin.
>>Uso del control Timer como valor absoluto. Un reloj. [17.01]
frmReloj.frm
A continuacin aprender a crear una aplicacin que muestre un reloj digital, utili-
zando el control Timer.
Implementacin visual







Captulo 17: Control del tiempo 445
Tabla de objetos y propiedades de frmReloj

Propiedades nuevas en frmReloj


Eventos nuevos en frmReloj

Codificacin de frmReloj

Editar cdigo: Form, Evento: Load.

lblHora.Font = "Arial"
lblHora.FontSize = 18
lblHora.Caption = Time


446 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: tmrControl, Evento: Timer.

lblHora.Caption = Time
Ejecucin
Al iniciar la ejecucin, se ejecuta el procedimiento Form_Load.
El procedimiento se encarga de hacer las definiciones iniciales del tipo y tamao
de letra que tendr el objeto lblHora. Se muestra la hora actual, definida por el
sistema, estableciendo la propiedad Caption del objeto lblHora al valor de la
funcin Time.
Cada 1000 milisegundos, es decir, cada segundo, se ejecutar el procedimiento
temporizado.
El procedimiento tmrControl_Timer se ejecutar regularmente cada 1000
milisegundos (intervalo definido a travs de la propiedad Interval); su funcin
es actualizar el mensaje del objeto lblHora con el valor de la hora del sistema.
Al cambiar, dar la apariencia de reloj digital.
>> Uso del control Timer como valor relativo. Cuenta regresiva en captura. [17.02]
frmEntrada.frm
A continuacin aprender a trabajar con objetos basados en Timer, para crear cro-
nmetros. En nuestro ejemplo, si transcurren 15 segundos y el objeto TextBox que
requiere un cdigo de acceso sigue vaco, se da por terminada la espera.
Esta utilidad es importante en aplicaciones de alta seguridad, en donde las pantallas
de captura no pueden permanecer inactivas, ya que se pueden realizar accesos no
autorizados a la informacin. Por ejemplo, un caso comn es una pantalla de consul-
ta de saldos en un banco.

















Captulo 17: Control del tiempo 447
Implementacin visual

Tabla de objetos y propiedades de frmEntrada


===================================================
Nota: La propiedad Interval de los objetos basados en Timer, se hace efectiva
cuando se asigna a la propiedad Enabled el valor True (valor predeterminado). El
valor mximo que se puede asignar es 65,535 milisegundos, lo que equivale a un poco
ms de un minuto. Considere estos lmites cuando utilice objetos basados en Timer.
Si requiere controlar periodos ms largos, necesita utilizar su ingenio de programador,
anidando dos controles Timer, en donde uno inicializa a otro, proporcionando un
control de hasta 65,535 x 65,535 milisegundos de tiempo.
===================================================



448 Parte 3: Controles grficos y programacin orientada a eventos
Codificacin de frmEntrada
Editar cdigo: (General), Evento: (Declarations).
Dim intSegundo As Integer
Editar cdigo: Form, Evento: Load.
lblRegresivo.Caption = "00:00:15"
intSegundo% =15
Editar cdigo: tmrControl, Evento: Timer.
intSegundo% = intSegundo% - 1
lblRegresivo.Caption = "00:00:" & Format(intSegundo%, "00")
If intSegundo% = 0 And txtCodigo.Text = "" Then
MsgBox "Tiempo excedido"
End
End If

Editar cdigo: txtCodigo, Evento; Change.
intSegundo% = 15
Ejecucin
Antes que cualquier cosa, se ejecutan las definiciones establecidas en las decla-
raciones generales.
Se define una variable que actuar como contador en la regresin. Se define aqu
para que est disponible en toda la aplicacin.
















Captulo 17: Control del tiempo 449
Al cargarse el formulario, se ejecuta el procedimiento Form_Load.
Este procedimiento se encarga de colocar en lblRegresivo el texto que indica el
conteo inicial. Adems, la variable de trabajo intSegundo% asume el valor de
segundos que se ir reduciendo hasta cero.
Cada 1,000 milisegundos, es decir, cada segundo, se ejecutar el procedimiento
tmrControl_Timer. No escriba nada en el cuadro de texto, deje que se
consuman los segundos.
El procedimiento se encargar de reducir en uno el valor de la variable de trabajo,
prcticamente cada segundo que transcurra desde que se comenz a ejecutar la
aplicacin.
En lblRegresivo se desplegar en segundos la cuenta regresiva.
Si la variable de trabajo es igual a cero y no se ha escrito nada en txtCodigo, se
enviar un mensaje de que el tiempo se ha excedido, y terminar la aplicacin.
Ejecute nuevamente; espere a que la cuenta regresiva llegue a los 10 segundos y
pulse una letra en txtCodigo.
Al modificar el contenido del cuadro de texto, se ejecuta el procedimiento de evento
txtCodigo_Change, el cual inicia nuevamente la cuenta regresiva. Inicia en 16,
para que la cuenta se inicie la prxima vez que ocurra el intervalo con 16-1, es decir,
los 15 segundos originales.


_____________________________________________________
Resumen
En este captulo:
Vimos el uso del control Timer.
Vimos cmo a travs de Timer se puede utilizar el tiempo en modo absoluto, para
conocer la hora.
Vimos cmo a travs de Timer se puede utilizar el tiempo, para temporizar pro-
cesos.
Es importante que domine el contenido del captulo, si desea que sus aplicaciones
cuenten con reloj digital, o bien, que controlen su disponibilidad con base al tiempo
de actividad o inactividad.

















450


























































Captulo
18
Manejo del sistema
de archivos
Objetivo
Conocer el uso de los controles bsicos para el sistema de archivos, as como del objeto
FileSystem, que permite manipular archivos y directorios del sistema.
Al finalizar este captulo deber:
Saber utilizar el control DriveListBox
Saber utilizar el control DirListBox
Saber utilizar el control FileListBox
Conocer los mtodos del objeto FileSystem que permiten manipular directorios
Conocer los mtodos del objeto FileSystem que permiten manipular archivos
El manejo del sistema de archivos es un trabajo de bajo nivel, que permite la interaccin
ms pura con el sistema operativo. A travs de lo visto en este captulo, podr hacer del
manejo de archivos y directorios una experiencia visual ilimitada.
Si en su organizacin deben realizarse las tareas de mantenimiento de archivos, debe
decidir si desea que dichas tareas se desarrollen a travs del sistema operativo (en cuyo
caso deber capacitar a los usuarios) o bien, incluir las caractersticas para que los
usuarios hagan la tarea desde la aplicacin.
451





452 Parte 3: Controles grficos y programacin orientada a eventos
El sistema de archivos
Uno de los elementos ms importantes de todo sistema operativo es el sistema de
archivos; dicho elemento es el ordenamiento lgico, sistemtico, por medio del cual los
archivos son organizados, identificados, almacenados y recuperados, dentro de un medio
de almacenamiento.
La eficiencia de un sistema de archivos radica en la velocidad de entrada y salida que
permite, el aprovechamiento del medio de almacenamiento (todo sistema de archivos
desperdicia espacio), y la seguridad en la informacin que proporciona. Algunos incluso
dan algunas ventajas adicionales como la compresin implcita de datos, entre otras
cosas.
En este captulo veremos la forma en que Visual Basic permite manejar el sistema de
archivos de la computadora. La herramienta puede hacerlo a travs de los controles
bsicos de manejo del sistema de archivos, o bien, a travs del objeto FileSystem.
Controles bsicos para el manejo del sistema de archivos
DriveListBox
Es un control que explora el sistema de archivos y determina cuntas unidades de
almacenamiento se tienen, para despus desplegarlas en una interfaz tipo ComboBox y
permitir su seleccin.
El evento ms importante de los objetos basados en este control es Change, que se eje-
cuta cuando usted selecciona una de las unidades de almacenamiento reconocidas por el
sistema.

====================================================
Nota: Las unidades de almacenamiento reconocidas por el control DriveListBox
pueden ser fsicas y lgicas.
Cualquier unidad lgica (referencia, a manera de Drive, a un recurso compartido dentro
de la red), es manejada de la misma forma que las unidades de almacenamiento fsico
que se encuentran en su computadora.
El sistema operativo se encargar de los permisos y accesos las mismas.
====================================================



Captulo 18: Manejo del sistema de archivos 453
Lo ms relevante de este control es:

DirListBox

Es un control que explora el sistema de archivos y determina cuntos directorios hay en
una determinada ruta (path), para despus desplegarlos y permitir su seleccin en una
interfaz de modo de rbol de directorio.
El evento ms importante de los objetos basados en este control es Change. que se
ejecuta cuando usted selecciona uno de los directorios reconocidos por el sistema.

====================================================
Nota: En Visual Basic una ruta es entendida, incluyendo el nombre de un archivo, en
algunos casos. Podr ver esto en algunas de las descripciones de la documentacin del
lenguaje; posteriormente haremos mencin de dicho manejo sinnimo de trminos. La
referencia App.Path, por otro lado, devuelve la ruta activa de la aplicacin, lo que
puede ser til.
====================================================

Lo ms relevante de este control es:

FileListBox

Es un control que explora el sistema de archivos y determina cuntos archivos hay en
un directorio determinado, para despus desplegarlos y permitir su seleccin en una
interfaz de modo ListBox.



454 Parte 3: Controles grficos y programacin orientada a eventos
El evento ms importante de los objetos basados en este control es Change, que se
ejecuta cuando usted selecciona uno de los archivos reconocidos por el sistema.
Adems, este control tiene la capacidad de discriminar los archivos que se habilitan en
el FileListBox, de acuerdo a sus atributos de archivo, tales como Archive,
Hidden, ReadOnly, etctera.
Lo ms relevante de este control es:

>> Uso de los controles bsicos para el manejo del sistema de archivos. [18.01]
frmVerImagen.frm
A continuacin aprender a utilizar los controles para el manejo del sistema de archi-
vos. Este ejemplo le permite visualizar las imgenes .gif, jpeg e .ico a travs de un
objeto Image.
El programa tambin se encargar de discriminar los archivos de posible visualiza-
cin dependiendo de sus atributos de archivo.
Tambin utilizar otros elementos de interfaz de Visual Basic, como el contenedor de
objetos Frame, as como las matrices de controles. Si no tiene bien afianzados dichos
conceptos, sera conveniente que los revisara en el captulo 12.











Captulo 18: Manejo del sistema de archivos 455
Implementacin visual
Tabla de objetos y propiedades de frmVerImagen







456 Parte 3: Controles grficos y programacin orientada a eventos









Captulo 18: Manejo del sistema de archivos 457
Propiedades nuevas en frmVerImagen

Eventos nuevos en frmVerImagen

Mtodos nuevos en frmVerImagen

Codificacin de frmVerImagen
Editar cdigo: (General), Evento: ActualizaResumen.
dirDirectorio.Path = drvDisco.Drive
filArchivo.Path = dirDirectorio.Path
lblUnidades.Caption = "Unidades:" & _
Format(drvDisco.ListCount, "00")



458 Parte 3: Controles grficos y programacin orientada a eventos
lblDirectorios.Caption = "Directorios:" & _
Format(dirDirectorio.ListCount, "000")
lblArchivos.Caption = "Archivos:" & _
Format(filArchivo.ListCount, "000")
Editar cdigo: General, Evento: VerificaAtributos,
filArchivo.Archive = (chkAtributo(0).Value = vbChecked)
filArchivo.Hidden = (chkAtributo(1).Value = vbChecked)
filArchivo.Normal = (chkAtributo(2).Value = vbChecked)
filArchivo.System = (chkAtributo(3).Value = vbChecked)
filArchivo.ReadOnly = (chkAtributo(4).Value = vbChecked)
filArchivo.Refresh
Call ActualizaResumen
Editar cdigo: Form, Evento: Load,
filArchivo.Pattern = "*.gif;*.jpg;*.ico"
Call ActualizaResumen
Call VerificaAtributos
Editar cdigo: drvDisco, Evento: Change.
Call ActualizaResumen
Editar cdigo: dirDirectorio, Evento: Change.
Call ActualizaResumen
Editar cdigo: chkAtributos, Evento: Click.
Call VerificaAtributos
Editar cdigo: filArchivos, Evento: Click.
Dim strRuta As String
strRuta$ = dirDirectorio.Path & "\" & filArchivo.FileName
imgVer.Picture = LoadPicture(strRuta$)











Captulo 18: Manejo del sistema de archivos 459
Ejecucin
Tareas repetitivas que se ejecutarn en la aplicacin. ActualizaResumen y
VerIficaAtributos.
La aplicacin muestra un resumen de unidades de almacenamiento disponibles en el
sistema, as como el nmero de directorios disponibles en dichas unidades de
almacenamiento, adems del nmero de archivos disponibles en un determinado
directorio que se encuentre seleccionado. Asimismo, puede variar el nmero de
archivos que estn disponibles para su seleccin, dependiendo de sus atributos de
archivo (modificado, slo lectura, sistema, oculto, etctera).
Atender todas estas variantes generara una repeticin innecesaria de cdigo para
poder mantener un resumen actualizado y verdadero. Para automatizar el proceso
informativo de la aplicacin, se generaron dos procedimientos definidos por el
usuario.
El procedimiento ActualizaResumen se encarga de establecer la propiedad
Path del objeto dirDirectorio a la unidad de disco seleccionada en el objeto
drvDisco; tambin establece la propiedad Path del objeto filArchivo al
valor de la propiedad Path del objeto dirDirectorio. De esa manera, el objeto
drvDisco determina el contenido de dirDirectorio, y la seleccin en
dirDirectorio determina el contenido de filArchivo. Esto genera una
coherencia en el contenido de los objetos. Una vez mantenida la coherencia, se
actualiza la informacin de resumen, misma que se actualiza con la informacin de
la propiedad ListCount de cada uno de los objetos bsicos de control del sistema
de archivos; dicha propiedad siempre almacena la cantidad de elementos que hay en
cada uno de ellos. Para guardar un aspecto agradable, se proporciona una vista a
travs de la funcin Format.
Por otro lado, el procedimiento VerificaAtributos se encarga de revisar los
valores de cada uno de los elementos de la matriz de controles chkAtributo;
cada uno representa la visualizacin (vbChecked) o no visualizacin
(vbUnchecked) de los determinados atributos de archivo. Las propiedades
Archive, Hidden, Normal, System y ReadOnly aceptan un valor lgico
(True o False); recuerde que los objetos CheckBox tienen tres valores posibles
(vbChecked, vbUnchecked y vbGrayed), y por tanto su valor es numrico, no
lgico. Por tal motivo, y considerando que nos interesa saber si est marcado o no el
CheckBox, el procedimiento se encarga de un sencillo manejo, de asignar a las
propiedades de atributo de archivo el valor lgico resultante de saber si est marcado
el CheckBox. A cada uno de los atributos de archivo le corresponde un elemento
de la matriz de controles chkAtributo.
Una vez hecho esto, se procede a actualizar el contenido del objeto filArchivo a
travs del mtodo Refresh. Se procede a actualizar el resumen, ya que el cambio
de atributos de archivo puede repercutir en la aparicin de ms o menos archivos en
el objeto filArchivo.






460 Parte 3: Controles grficos y programacin orientada a eventos
Al cargarse el formulario se ejecuta el procedimiento Form_Load.
El procedimiento se encarga de especificar que el patrn de archivos a desplegar en
el objeto filArchivo son todos aquellos cuyas extensiones sean gif, jpeg o ico;
se utiliza la notacin del sistema operativo DOS para referenciarlos. Si se define ms
de una extensin para su despliegue, stas deben estar separadas por punto y coma
(;). Despus de esto, se ejecutan los procedimientos ActualizaResumen y
VerificaAtributos.
Observe que al ejecutar el programa, el resumen indica qu Archivos son cero. Esto
se debe a que todas las propiedades de archivo se encuentran desmarcadas, y por
tanto VerificaAtributos establece a False los valores de las propiedades
Archive, Hidden, Normal, System y ReadOnly del objeto
filArchivo. Ciertamente, ningn archivo est ausente de al menos una de estas
caractersticas.
Cambie de unidad de almacenamiento y de directorio, hasta irse a uno que usted
sepa que posee archivos gif, jpeg o ico. Seguramente, C:\Windows tendr algunos.
Al estar, cambiando de ruta, si modific la unidad de almacenamiento, se ejecut el
procedimiento de evento drvDisco_Change, mismo que se encarg de ejecutar
el procedimiento ActualizaResumen. Si cambi de directorio, se ejecut el pro-
cedimiento dirDirectorio_Change, que tambin ejecuta
ActualizaResumen. Recuerde que ActualizaResumen se encarga de
mantener la coherencia de las propiedades Path entre los objetos drvDisco,
dirDirectorio y filArchivo.
En el recuadro Atributos, marque el CheckBox asociado al atributo Normal.
Se ejecutar el procedimiento chkAtributos_Click; para cuando se ejecuta,
chkAtributo. Valu del elemento 2 (asociado al atributo Normal) ya tiene el
valor de vbChecked, lo que provoca que la propiedad Normal del objeto
filArchivo se establezca a True. Con este cambio, el objeto filArchivo
entiende que todos los archivos que tengan dicho atributo de archivo sern
mostrados. El mtodo Refresh se encargar de que se actualice visualmente el
archivo filArchivo.
Puede utilizar este mismo procedimiento para seleccionar cualquiera de los atributos
de archivo que desee.
Finalmente se actualiza el resumen a travs del procedimiento
ActualizaResumen.
Seleccione alguno de los archivos que aparecen en el objeto filArchivo.
Se ejecutar el procedimiento filArchivo_Click, el cual se encarga de formar
el nombre completo del archivo seleccionado, concatenando la ruta que se encuentra
seleccionada en el objeto dirDirectorio, ms una diagonal invertida intermedia
(\) y el nombre del archivo seleccionado. Podramos haber utilizado la propiedad
Path del objeto filArchivo, pero consideramos que era mejor utilizar la
asociada a dirDirectorio, para ilustrar lo determinante que es un objeto de
otro.

Captulo 18: Manejo del sistema de archivos 461
Cuando ya tiene el nombre completo del archivo, incluyendo la ruta, se procede a
mostrar la imagen a travs de la propiedad Picture del objeto imgVer, con
apoyo de la funcin LaodPicture.
Manejo del objeto FileSystem
Manejar el sistema de archivos a travs de los controles bsicos es sencillo, aunque
limitado a funciones exclusivamente de lectura. Hay aplicaciones en las que desea-
mos poder agregar un archivo, eliminarlo, copiarlo, entre otras cosas; ciertamente, el
DriveListBox, DirListBox y FileListBox no ayudan en dichas tareas.
Visual Basic posee varios objetos que permiten manejar diferentes recursos de su
computadora, tales como la pantalla (Screen), el Portapapeles (Clipboard), la
impresora (Printer) y el que nos interesa: el sistema de archivos (FileSystem).
==================================================
Nota: Los objetos Screen, Clipboard, Printer y FileSystem estn
definidos en todo momento en Visual Basic, usted no tiene que definirlos. Para
revisar lo que hay, puede invocar el Examinador de objetos de Visual Basic,
presionando F2. Tal vez encuentre en dicha ventana algo que est buscando para
alguna aplicacin especfica.
==================================================
Manipulacin de subdirectorios
El objeto FileSystem utiliza los siguiente mtodos para el manejo de directorios:



















462 Parte 3: Controles grficos y programacin orientada a eventos
Podemos citar los siguientes ejemplos de manejo del objeto FlleSystem, que
manipula directorios:
Asigna a la variable strRuta$, la ruta que mantiene el control del sistema.
strRuta$ = FileSystem.CurDir ("D")
Transfiere el control del sistema al directorio C:\Windows.
FileSystem.ChDir "C:\Windows"
Crea un directorio nuevo, con el nombre C:\NuevoDir.
FileSystem.MkDir "C:\NuevoDir"
Elimina el directorio C:\NuevoDir.
FileSystem.RmDir "C:\NuevoDir"
Si el directorio C;\Nuevo no se existe, reporta que no existe, utilizando la funcin
MsgBox.
If FileSystem.Dir("C:\Nuevo\") = "" Then
MsgBox "No existe"
End If

==================================================
LO inesperado: Cuando trabaja con el objeto FileSystem, los errores ms co-
munes son:
No se ha encontrado la ruta de archivo (error 76 en tiempo de ejecucin). Se pre-
senta cuando desea realizar una operacin que tiene como destino un archivo o
directorio que no existe. Este error tambin se utiliza para una generalidad de errores
de difcil clasificacin, por ejemplo, el uso de nombres inapropiados de archivos o
directorios. Soluciones: revise, antes de intentar la operacin que requiere un
archivo o directorio, que ste exista. Utilice el mtodo Dir. Verifique que los
nombres de archivo sean vlidos para el sistema operativo.









Captulo 18: Manejo del sistema de archivos 463
Error de acceso a ruta o archivo (error 75 en tiempo de ejecucin). Sucede cuando
la operacin que desea realizar no es posible, en virtud de que pone en conflicto al
sistema operativo con la situacin de su sistema. Algunos ejemplos son: el uso
inadecuado de recursos que se encuentran como de slo lectura, el uso de unidades
de almacenamiento no disponibles, la creacin de elementos que ya se encuentran
creados, etctera. Soluciones: verifique que el acceso a los recursos que desea est
disponible sin restricciones de lectura, y que no se est tratando de crear lo ya
creado.
El dispositivo no est disponible (error 68 en tiempo de ejecucin). Sucede cuando
trata de realizar una operacin con un dispositivo que no se encuentra disponible en
su sistema, como puede ser una unidad de almacenamiento que no tiene, o una
unidad lgica de almacenamiento a la cual por el momento no puede acceder.
Soluciones: verifique que los dispositivos que pretenda utilizar siempre estn
disponibles. Para saber si un dispositivo de almacenamiento est disponible
(suponga que desea generar un directorio en F:), puede recurrir a la idea que pro-
ponemos en el siguiente cdigo:
Dim bolDisponible As Boolean
bolDisponible = (FileSystem.CurDir ( "F:\") <> "")
Puede realizar la tarea con el dispositivo, si bolDisponible tiene un valor True.
==================================================

>> Uso del objeto FileSystem para manipulacin de directorios. [18.02]
frmDirs.frm
A continuacin aprender a trabajar con el objeto FileSystem, para el manejo de
directorios.
La aplicacin deber utilizar un objeto basado en DirListBox, con el cual tendr
interaccin. El programa deber permitir lo siguiente:
Ir hacia un directorio anterior. Crear un directorio nuevo. Remover un directorio
existente.
Mostrar en todo momento el directorio que tiene el control del sistema, tanto
interna como visualmente.










464 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual

Tabla de objetos y propiedades de frmDirs



Captulo 18: Manejo del sistema de archivos 465
Mtodos nuevos en frmDirs

==================================================
Nota: Los mtodos del objeto FileSystem pueden utilizarse sin la referencia del
objeto, a manera de funciones, de tal forma que:
strRuta$ = FileSystem.CurDir("D")
es lo mismo que:
strRuta$ = CurDir("D")
Nosotros, por didctica, preferimos que los entendiera asociados al objeto; sin em-
bargo, es decisin suya el manejo que desee. Se sobreentiende que el manejo de las
funciones para el manejo del sistema de archivos aplican como mtodos del objeto
FileSystem.
==================================================
Codificacin de frmDirs
Editar cdigo: Form,Evento: Activate.
lblInfo.Caption = FileSystem.CurDir
Editar cdigo: dirDirectorios, Evento: Change.
FileSystem.ChDir dirDirectorios.Path
lblInfo.Caption = FileSystem.CurDir






466 Parte 3: Controles grficos y programacin orientada a eventos
Editar cdigo: cmdAnterior, Evento: Click.
FileSystem.ChDir (FileSystem.CurDir & "\..")
dirDirectorios.Path = FileSystem.CurDir
dirDirectorios.Refresh
lblInfo.Caption = FileSystem.CurDir
Editar cdigo: cmdCrearDirectorio, Evento: Click.
Dim strNombreDir As String
strNombreDir$ = InputBox("Nombre del nuevo directorio:")
If strNombreDir$ <> "" Then
If Dir(FileSystem.CurDir & "\" & strNombreDir$) <> "" Then
', vbDirectory) <> "" Then 'agregarlo , vbDirectory
MsgBox "Ese directorio ya existe"
Else
FileSystem.MkDir FileSystem.CurDir & "\" & _
strNombreDir$
dirDirectorios.Path = FileSystem.CurDir & "\" & _
strNombreDir$
End If
End If
dirDirectorios.Refresh
lblInfo.Caption = FileSystem.CurDir

Editar cdigo; cmdRemoverDirectorio: Click.

Dim strRuta As String
strRuta$ = FileSystem.CurDir
If MsgBox("Est seguro de querer eliminar " & vbCrLf & _
strRuta$, vbOKCancel + vbExclamation) = vbOK Then
FileSystem.ChDir strRuta$ & "\.."
dirDirectorios.Path = FileSystem.CurDir
dirDirectorios.Refresh
FileSystem.RmDir strRuta$
dirDirectorios.Refresh
End If
lblInfo.Caption = FileSystem.CurDir




Captulo 18: Manejo del sistema de archivos 467
Editar cdigo; cmdSalir: Evento: Click.

End
Ejecucin
En el momento en que se active el formulario, se ejecutar el procedimiento de
evento Form_Activate.
En este caso, dicho procedimiento slo tiene un objetivo cosmtico: establece la
propiedad Caption del objeto lblInfo a la ruta que tiene el control del
sistema; no se especifica unidad de almacenamiento alguna, por lo que se asume la
unidad que el sistema considera como predeterminada en el momento.
lblInfo siempre muestra el directorio que tiene el control del sistema.
Seleccione un directorio que est dentro de otro, utilizando el objeto dirDirec-
torios.
Al cambiarse de directorio suceden dos cosas. La primera es que se cambiar el
directorio de control del sistema por aquel que usted haya seleccionado. El hecho
de operar el objeto de tipo DirListBox no actualiza las referencias del objeto
FileSystem, por lo que hay que utilizar cdigo para cambiar de directorio de
manera que podamos guardar la coherencia entre lo que se ve y lo que interna-
mente se reconoce.
La segunda cosa que hace este procedimiento es establecer la propiedad Caption
del objeto lblInfo a la ruta que tiene el control del sistema.
Haga clic en el botn Ir al anterior.
Se ejecutar el procedimiento de evento cmdAnterior_Click, mismo que
cambiar el control al directorio anterior, considerando la convencin del sistema
operativo "\.." que indica al directorio anterior. Realmente cambia el control del
sistema (ChDir) del directorio actual (FileSystem.CurDir) al anterior (\..)
Adems, se actualiza la ruta del objeto dirDirectorios con la nueva ruta que
posee el control, y el objeto se actualiza visualmente. Por ltimo, se actualiza el
objeto lblInfo con la ruta nueva.
Haga clic en el botn Crear directorio.
Se ejecutar el procedimiento de evento cmdCrearDirectorio_Click, el
cual declarar una variable de trabajo para verificar la existencia del directorio a
crear. Mediante la funcin InputBox se pregunta el nombre del directorio a
crear; una vez capturado, se verifica que no se haya omitido el nombre del
directorio, en




468 Parte 3: Controles grficos y programacin orientada a eventos
cuyo caso no se hace nada. Si no omiti el nombre, indica que desea la creacin
del directorio; se comprueba que no exista un directorio o archivo con ese nombre
en el directorio que tiene el control del sistema (que por cierto fue incluido en el
nombre del directorio a crear). En caso de que ya exista, se enva un mensaje de
que ya existe; en caso contrario, el procedimiento se encarga de generar el nuevo
directorio, asignar como ruta nueva del objeto dirDirectorios la ruta creada,
actualizar visualmente dicho objeto, y actualizar el objeto lblInfo, para que
muestre la nueva ruta, misma que tiene el control.
Una vez que est en el nuevo directorio que ha creado, haga clic en el botn
Remover directorio.
Se ejecutar el procedimiento de evento cmdRemoverDirectorio_Click, el
cual declarar una variable de trabajo para almacenar el nombre del directorio a
remover, ya que no se puede eliminar un directorio que estemos utilizando, por lo
que ser necesario ir a otro directorio diferente, sin perder de vista el que queremos
eliminar.
Mediante la funcin MsgBox, se pregunta si desea eliminar realmente el directorio
seleccionado. En caso de contestar de manera afirmativa, se transferir el control
del sistema al directorio anterior (recuerde que tiene almacenado en una variable
de trabajo el nombre del directorio a eliminar), se actualizar la ruta del objeto
dirDirectorios y se actualizar visualmente. A continuacin se proceder a
remover el directorio que seale la variable de trabajo, y se actualiza nuevamente
el objeto dirDirectorios.
Por ltimo, se actualiza el objeto lblInfo, con el dato del directorio que tiene el
control.
Haga clic en Salir.
El procedimiento de evento cmdSalir_Click se encarga de dar por terminada
la ejecucin de la aplicacin.
Manipulacin de archivos
El objeto FileSystem nos permite el manejo de archivos de manera muy similar
a como manejamos los directorios, a travs de los siguientes mtodos:















Captulo 18: Manejo del sistema de archivos 469


El manejo de los atributos de archivo se hacen a travs de constantes de Visual Basic:
vbNormal,vbReadOnly,vbHidden, vbArchive, vbSystem.
Podemos citar los siguientes ejemplos de manejo del objeto FileSystem, que
manipula directorios:
Elimina el archivo C:\Borrame.txt
FileSystem.Kill "C:\Borrame.txt"
Genera una copia del archivo C:\Archivo1.txt, de nombre C:\Archivo2.txt.
FileSystem.FileCopy "C:\Archivo1.txt", "C:\Archivo2.txt"
Verifica si el archivo C:\Archivo.txt tiene el atributo de slo lectura, en cuyo caso
notifica dicha condicin a travs de la instruccin MsgBox.
If FileSystem.GetAttr("C:\Archivo.txt") = vbReadOnly Then
MsgBox "El archivo es de slo lectura"
End If
Establece el atributo System al archivo llamado C:\Archivo.txt.
FileSystem.SetAttr "C:\Archivo.txt", vbSystem
>> Uso del objeto FileSystem para manipulacin de archivos. [18.03]
frmArchs.frm
A continuacin aprender a trabajar con el objeto FileSystem para el manejo de
archivos.
La aplicacin deber utilizar un objeto basado en FileListBox, con el cual tendr
interaccin. El programa deber permitir lo siguiente:






470 Parte 3: Controles grficos y programacin orientada a eventos
Ir hacia un directorio anterior. Crear un directorio nuevo. Remover un directorio
existente.
Mostrar en todo momento el directorio que tiene el control del sistema, tanto
interna como visualmente.
Implementacin visual

Tabla de objetos y propiedades de frmArchs







Captulo 18: Manejo del sistema de archivos 471

Mtodos nuevos en frmArchs


Codificacin de frmArchs

Editar cdigo: dirDirectorios, Evento: Change.
filArchivos.Path = dirDirectorios.Path
Editar cdigo: filArchivos, Evento: Click.
FileSystem.ChDir dirDirectorios.Path
Dim strArchivo As String
strArchivo$ = dirDirectorios.Path & "\" & filArchivos.FileName





472 Parte 3: Controles grficos y programacin orientada a eventos
txtNombreArch.Text = strArchivo$ & vbCrLf & _
FileSystem.FileDateTime(strArchivo$) & vbCrLf & _
FileSystem.FileLen(strArchivo$) & " Bytes"
If FileSystem.GetAttr(strArchivo$) = vbReadOnly Then
chkSoloLectura.Value = vbChecked
Else
chkSoloLectura.Value = vbUnchecked
End If
Editar cdigo: chkSoloLectura, Evento: Click.
Dim strArchivo As String
strArchivo$ = dirDirectorios.Path & "\" & filArchivos.FileName
If FileSystem.Dir(strArchivo$) <> "" Then
If chkSoloLectura.Value = vbChecked Then
FileSystem.SetAttr strArchivo$, vbReadOnly
Else
FileSystem.SetAttr strArchivo$, vbNormal
End If
End If
Editar cdigo: cmdGenerarCopia, Evento: Click.
Dim strArchivo As String
strArchivo$ = InputBox("Cul es el nombre de la copia:")
If strArchivo$ <> "" Then
If FileSystem.Dir(strArchivo$) = "" Then
FileSystem.FileCopy filArchivos.FileName, strArchivo$
Else
MsgBox "Ese archivo ya existe"
End If
End If
filArchivos.Refresh
Editar cdigo: cmdEliminar, Evento: Click.
Dim strArchivo As String
strArchivo$ = dirDirectorios.Path & "\" & filArchivos.FileName
If FileSystem.Dir(strArchivo$) <> "" Then




Captulo 18: Manejo del sistema de archivos 473

If MsgBox("Realmente quiere borrar " & vbCrLf & _
strArchivo$, vbOKCancel + vbExclamation) = vbOK Then
If chkSoloLectura.Value = vbChecked Then
MsgBox "El archivo es de slo lectura"
Else
FileSystem.Kill strArchivo$
End If
filArchivos.Refresh
End If
End If
Editar cdigo: cmdSalir, Evento: Click.
End
Ejecucin
Seleccione un directorio del objeto dirDirectorios.
Al cambiar de directorio se ejecuta el procedimiento de evento dirDirecto-
rios_Change. Dicho procedimiento de encarga de asignar como ruta del objeto
dirDirectorios, la ruta seleccionada en el objeto dirDirectorios (manejo
de la propiedad Path).
Haga clic en cualquier archivo de los que aparecen en la lista de archivos, de
preferencia en uno que no sea muy grande.
Se ejecutar el procedimiento de evento dirDirectorios_Click, que se
encarga de establecer el control del sistema a la ruta que est seleccionada en el
objeto dirDirectorios. Posteriormente genera una variable de trabajo y
almacena el nombre del archivo seleccionado con todo y su ruta.
A travs del objeto txtNombreArch se despliega el nombre del archivo con su
ruta, su fecha y hora, y su longitud en bytes; se utiliza la constante vbCrLf, para
dar la apariencia en varias lneas. Posterior a eso, se procede a modificar el objeto
chkSoloLectura, asignndole el valor resultante de la comprobacin con
relacin a si el archivo es o no de slo lectura.
El cambio operado ser visible a travs de la marca en el objeto
chkSoloLectura, ya que su valor (Value) ser vbChecked o
vbUnchecked.
Haga clic en la casilla de verificacin Slo lectura.
Se ejecutar el procedimiento de evento chkSoloLectura_Click, se generar una
variable de trabajo para desplegar el nombre del archivo con todo y su ruta; si se comprueba
que el archivo existe (si el mtodo Dir es diferente a ""), entonces


474 Parte 3: Controles grficos y programacin orientada a eventos
se procede a modificar el atributo de slo lectura del archivo: si es archivo normal,
pasar a ser de slo lectura (vbReadOnly), y por el contrario, si es slo lectura, pa-
sar a ser normal (vbNormal).
Haga clic en el botn de comando Generar copia. Escriba un nombre de archivo
vlido y no existente cuando sea requerido.
Se ejecutar el procedimiento de evento cmdGenerarCopla_Click, el cual
declarar una variable de trabajo para preguntar el nombre que se le desea dar a la
copia. Mediante la funcin InputBox se pregunta el nombre que se desea dar a la
copia; si dicho nombre no se omite, el sistema valida que el nombre proporcionado
no exista ya: si no existe, la copia se realiza dentro del mismo directorio (que es el
que tiene el control del sistema), o de lo contrario, informa que ese archivo ya existe
y no generar copia alguna.
Seleccione el archivo que acaba de generar a travs de una copia. Haga clic en el
botn de comando Eliminar.
Se ejecutar el procedimiento de evento cmdEliininar_Click, el cual declarar
una variable de trabajo para almacenar el nombre del archivo con todo y su ruta. Si
el archivo existe, entonces se le preguntar si realmente desea eliminar el archivo
seleccionado; en caso de que conteste de manera afirmativa, se verifica si el archivo
es de slo lectura, en cuyo caso se desplegar un mensaje que informa la
imposibilidad de eliminar el archivo. Si no se cumple ningn impedimento, el
archivo es eliminado y la lista de archivos es actualizada, para que ya no se muestre
el archivo que se acaba de eliminar.
Haga clic en Salir.
El procedimiento de evento cmdSalir_Click se encarga de dar por terminada la
ejecucin de la aplicacin
_________________________________________________
Resumen
En este captulo:
Vimos el uso del control DriveListBox.
Vimos el uso del control DirListBox.
Vimos el uso del control FileListBox.
Vimos los mtodos del objeto FileSystem que permiten manipular directorios,
tales como ChDir, MkDir, RmDir, CurDir.











Captulo 18: Manejo del sistema de archivos 475

Conocimos los mtodos del objeto FileSystem que permiten manipular archivos,
tales como Dir, Kill, FileCopy, GetAttr, SetAttr, etctera.
Aprendi cmo se pueden realizar a travs de codificacin las operaciones que usted
realiza de manera ordinaria en el sistema operativo, utilizando los objetos que usted
decida.
Es importante que domine el contenido del captulo si desea que sus aplicaciones
manipulen archivos a nivel operativo, o si pretende que su aplicacin permita la gene-
racin y disposicin de ellos. La capacidad de copiar archivos es muy importante si
desea opciones de respaldo sencillas.

476



































































Cuadros de
dilogo comunes
Objetivo
Conocer el uso del control CommonDialog. que permite disponer de cuadros de
dilogo estndar de Windows.
Al finalizar este captulo deber:
Saber utilizar el control CommonDialog
Conocer la definicin de CommonDialog para el uso del cuadro de dilogo
Color
Conocer la definicin de CommonDialog para el uso del cuadro de dilogo
Fuente
Conocer la definicin de CommonDialog para el uso del cuadro de dilogo
Imprimir
Conocer la definicin de CommonDialog para el uso del cuadro de dilogo
Abrir/Guardar como
Saber utilizar indicadores
El manejo de los cuadros que todo mundo sabe utilizar puede ser un aliado
poderoso para la implementacin efectiva de sus aplicaciones. No desarrolle
nuevos cuadros de
477




478 Parte 3; Controles grficos y programacin orientada a eventos
dilogo si estn a su disposicin aquellos que Windows utiliza; no pierda tiempo
construyendo lo ya construido. Este captulo le dice cmo.

Cuadros de dilogo comunes
Sera paradjico que Windows, en su estructura bsica, no correspondiera al
modelo de desarrollo en Visual Basic. Ciertamente, Visual Basic maneja un
esquema de uso de objetos y recursos muy similar al que el sistema operativo
utiliza: de ah su integracin tan completa.

La forma de trabajo basada en mdulos o bibliotecas de vnculos dinmicos
(DLLs) permite realizar llamadas a dichos mdulos, como programas a nuestra
disposicin, siempre y cuando sepamos los elementos que condenen y la sintaxis
para su uso.
En el entorno de Windows hay un mdulo de vnculo dinmico llamado
commdig.dll, el cual permite disponer de ciertos elementos de la interfaz de
Windows, que son de uso comn en todas las aplicaciones, y que permiten la
gestin de recursos de la computadora y su configuracin. Veremos cmo podemos
disponer, sin necesidad de programar toda una interfaz, de aquellos cuadros de
dilogo que nos son familiares, como los de:
Seleccin de color y definicin de color personalizado
Seleccin de fuente o upo de letra
Seleccin y configuracin de la impresora
Apertura y guardado de archivos
CommonDialog ( Microsoft Common Dialog Control 6.0)
Este control proporciona un conjunto de cuadros de dilogo estndar del sistema
operativo de Windows, para realizar operaciones tan diversas como abrir y guardar
archivos, establecer las opciones de impresin y seleccionar colores y fuentes.
Este control no tiene una propiedad principal, como casi todos los controles, ya que
ste sirve para varias funciones. Dependiendo de la funcionalidad que se le quiera
dar, ser el uso de propiedades y mtodos que se recomienden.








Captulo 19: Cuadros de dilogo comunes 479
El control CommonDialog proporciona una interfaz entre Visual Basic y las
rutinas de la biblioteca de vnculos dinmicos Commdig.dll de Microsoft
Windows. Para crear un cuadro de dilogo utilizando este control, el archivo
Commdig.dll debe encontrarse en el directorio C:\WINDOWS\SYSTEM.
Para poder disponer de un objeto basado en el control CommonDialog, es
necesario que agregue el control al formulario, ya que no forma parte de los
controles bsicos que aparecen en el Cuadro de herramientas de Visual Basic.
>>Cmo agregar el control CommonDialog al Cuadro de herramientas.
[19.01]
1. Inicie un nuevo proyecto EXE estndar.
2. Vaya al men Proyecto - Componentes (o presione Ctrl+T).
3. Aparecer el cuadro de dilogo Componentes.
4. En la ficha Controles, busque el componente Microsoft Common Dialog
Control. Marque dicho control.
5. Haga clic en Aplicar y luego en Cerrar.
Al agregar un objeto basado en CommonDialog, se agregar al formulario un
objeto que ser invisible en tiempo de ejecucin; por tal motivo, puede colocarlo
donde no le estorbe.
En tiempo de ejecucin puede invocar un determinado cuadro de dilogo a travs
de su mtodo de llamada correspondiente. En la siguiente tabla se muestran los
mtodos que activan los diferentes cuadros de dilogo de CommonDialog:

==============================================
Nota: La posicin donde aparecer el cuadro de dilogo es aleatoria y no puede
especificarse.
==============================================





480 Parte 3: Controles grficos y programacin orientada a eventos
Indicadores
Para utilizar adecuadamente los objetos basados en CommonDialog. debe
cumplir con tres requisitos:
1. Agregar el objeto basado en CommonDialog al formulario y establecer los
valores de las propiedades bsicas, de acuerdo con la funcionalidad que desea
obtener.
2. Especificar los indicadores (flags).
3. Utilizar el mtodo adecuado para activar el cuadro de dilogo correspondiente.
Por ejemplo:
1. Incluya el control CommonDialog al proyecto, y agregue un objeto que se
llame dlgBase (con esto, habr establecido la propiedad Name [bsica]).
2. Requiere un cuadro de dilogo del tipo Abrir archivo, que oculte los archivos
de slo lectura (indicador cdlOFNHideReadOnly).
Para ello debe establecer el indicador correspondiente:
dlgBase.Flags = cdlOFNHideReadOnly
3. Ponga en ejecucin el cuadro de dilogo a travs del mtodo indicado, que en
este caso es ShowOpen.
Los indicadores son calificadores que determinan la operacin de los cuadros de
dilogo comunes de Windows; stos son proporcionados a travs de la propiedad
Flags en los objetos basados en CommonDialog, y determinan la funcionalidad
del objeto.
Para un objeto, pueden operar uno o ms indicadores, mismos que pueden definirse
en una misma lnea, separados por la instruccin Or.
Ejemplo:
dlgBase.Flags = cdlOFNHideReadOnly Or cdlOFNExplorer
Para cada una de las diversas funciones de los objetos basados en
CommonDialog, proporcionaremos una tabla de los indicadores que apliquen.






Captulo 19: Cuadros de dilogo comunes 481
Manejo de errores
Los cuadros de dilogo sirven para diferentes propsitos, y siempre ofrecen al
usuario la posibilidad de que no realice modificacin alguna. El botn Cancelar
est disponible en todo momento, y al hacer clic en l, el cuadro de dilogo asume
un valor predeterminado.
Para indicar la ejecucin de una determinada operacin cuando se hace clic en el
botn Cancelar, los cuadros de dilogo comunes ofrecen poca flexibilidad: usted
no puede determinar, mediante un valor nico ofrecido por el objeto, la indicacin
de que dicho botn fue utilizado.
Hay una forma de poder controlar ese inconveniente. La propiedad
CancelError de los objetos basados en CommonDialog. cuando est
establecida a True, obliga a Visual Basic a asumir que ha ocurrido un error cuando
se hizo clic en el botn Cancelar. De esa forma, con una sencilla rutina de captura
de errores es posible indicar una accin determinada.
Suponga que en una aplicacin tiene un botn llamado cmdCambiaColor, el
cual activa el cuadro de dilogo Color a travs de un objeto basado en
CommonDialog llamado dlgBase. Para manejar el uso del botn Cancelar, el
cdigo sera el siguiente.
Private Sub cmdCambioColor_Click()

' Si se hace clic en Cancelar, se origina un
error dlgBase.CancelError = True
' Cuando surja un error, se dirige a
ManejoError
On Error GoTo ManejoError
' Se prepara al objeto para que muestre la
ventana Color
dlgBase.Flags = cdlCCRGBInit
' Se activa la ventana Color
dlgBase.ShowColor
' Concluye el procedimiento antes de llegar a '
la rutina de manejo de errores
Exit Sub
' Inicio de rutina de manejo de errores
ManejoError:
MsgBox "Se hizo clic en Cancelar"

End Sub
Se resaltaron aquellas lneas que son fundamentales para el manejo que se propone.


482 Parte 3: Controles grficos y programacin orientada a eventos
Cuadro de dilogo Color
El cuadro de dilogo Color se presenta mediante el mtodo ShowColor del
control CommonDialog. Dicho cuadro de dilogo permite que el usuario
seleccione un color de una paleta o que cree y seleccione un color personalizado.
Para usar el cuadro de dilogo Color, establezca las propiedades pertinentes del
control CommonDialog. Despus utilice el mtodo ShowColor, para activar el
cuadro de dilogo, y la propiedad Color, para obtener el color seleccionado.
Las definiciones Flags para el cuadro de dilogo Color son:

De todas las definiciones Flags, cdlCCRGBInit es la ms importante, ya que
es la que se encarga de preparar el entorno para la activacin del cuadro de dilogo
Color.
==============================================
Nota: El valor de las constantes Flags es numrico. Asignar a la propiedad
Flags el valor resultante de la suma del valor correspondiente de dos o ms
constantes, es lo mismo que colocar las constantes separadas por Or.
==============================================
>>Uso del control CommonDialog para manipular el color en el formato
estndar de Windows. [19.02]
frmColor.frm
A continuacin aprender a utilizar el control CommonDialog, del componente
Microsoft Common Dialog Control, con la finalidad de poder seleccionar colores
en la interfaz estndar de Windows.


Captulo 19: Cuadros de dilogo comunes 483
Implementacin visual


Tabla de objetos y propiedades de frmColor










484 Parte 3: Controles grficos y programacin orientada a eventos
Propiedades nuevas en frmcolor

Mtodos nuevos en frmColor
Codificacin de frmColor
Editar cdigo: cmdMostrar, Evento: Click
dlgBase.CancelError = True
On Error GoTo ManejoError
dlgBase.Flags = cdlCCRGBInit
If chkPersonalizados.Value = vbChecked Then
dlgBase.Flags = cdlCCFullOpen
Else
dlgBase.Flags = cdlCCPreventFullOpen
End If
dlgBase.ShowColor
shpCuadro.FillColor = dlgBase.Color
Exit Sub
ManejoError:
MsgBox "Color no seleccionado"













Capitulo 19: Cuadros de dilogo comunes 485
Ejecucin
Haga clic en el botn Elegir. En este momento no se permite personalizar.
Al hacer clic en dicho botn. Se ejecuta el procedimiento de evento cmdMos -
trar_ciick. Dicho procedimiento se encarga de establecer que si se hace clic en
el botn Cancelar, se genere un error. Dicho error ser manejado por el pro-
cedimiento ManejoError. Cuando se genere un error (es decir, cuando se haga
clic en Cancelar), el control de la ejecucin se trasladar al segmento
ManejoError, dentro del mismo procedimiento, el cual muestra un mensaje
explicativo y a continuacin se encuentra el fin del procedimiento.
Se prepara el objeto para que maneje el cuadro de dilogo Color, a travs de la
propiedad Flags. Posteriormente, se evala si chkPersonalizados est
marcado, en cuyo caso establece la visualizacin completa, utilizando la propiedad
Flags; de lo contrario, impide la visualizacin completa, tambin a travs de la
propiedad Flags. Se procede a activar el cuadro de dilogo a travs del mtodo
ShowColor.
Se asigna el color seleccionado en el cuadro de dilogo Color, como color de
llenado del objeto shpCuadro.
La instruccin Exit Sub nos indica que queremos que el procedimiento se d por
terminado antes de su final, por lo que ManejoError: ya no se ejecuta. Si no
especifica Exit Sub, el programa se seguira ejecutando, haciendo caso omiso a la
etiqueta de referencia (ManejoError:), que slo sirve para indicar dnde co-
mienza el segmento del procedimiento llamado a travs de GoTo.
Haga clic en el CheckBox Permitir personalizar.
Al hacer clic en el botn, se ejecuta el procedimiento de evento cmdMos-
trar_ciick. La nica variante con el ejercicio anterior, es que ahora s muestra la
visualizacin completa del cuadro de dilogo, ya que la especificacin dada a travs
de la propiedad Flags as lo indic.
Cuadro de dilogo Fuente
El cuadro de dilogo Fuente se presenta mediante el mtodo ShowFont del control
CommonDialog. Este cuadro de dilogo permite que el usuario seleccione una
fuente, un tamao, un color y un estilo para esa fuente.
Para usar el cuadro de dilogo Fuente, establezca las propiedades del control
CommonDialog relativas al cuadro de dilogo Fuente. Posteriormente, utilice el
mtodo ShowFont para activar el cuadro.
Una vez que el usuario realice sus selecciones en el cuadro de dilogo Fuente, las
siguientes propiedades contienen informacin acerca de la seleccin del usuario:





486 Parte 3: Controles grficos y programacin orientada a eventos


Las definiciones Flags para el cuadro de dilogo Fuente son:






Captulo 19: Cuadros de dilogo comunes 487




488 Parte 3: Controles grficos y programacin orientada a eventos

=================================================
LO inesperado: Tiene que establecer la propiedad Flags a
cdlCFScreenFonts, cdlCFPrinterFonts o cdlCFBoth antes de presentar el
cuadro de dilogo Fuente. De lo contrario, se produce el error No hay ninguna fuente.
=================================================
De todas las definiciones Flags, cdlCFBoth y cdlCFEffects son las ms
importantes, ya que proporcionan las opciones disponibles (fuentes), as como los
atributos especiales para la modificacin del tipo de letra (atributos),
respectivamente.
>> Uso del control CommonDialog para manipular las fuentes (tipos de letra)
en el formato estndar de Windows. [19.03]
frmFuente.frm
A continuacin aprender a utilizar el control CommonDialog. del componente
Microsoft Common Dialog Control, con la finalidad de poder seleccionar las fuentes
en la interfaz estndar de Windows.
Implementacin visual











Captulo 19; Cuadros de dilogo comunes 489
Tabla de objetos y propiedades de frmFuente

Propiedades nuevas en frmFuente

Mtodos nuevos en frmFuente





490 Parte 3: Controles grficos y programacin orientada a eventos
Codificacin de frmFuente
Editar cdigo: cmdModificar, Evento: Click
dlgBase.CancelError = True
On Error GoTo ManejoError:
dlgBase.Flags = cdlCFEffects Or cdlCFBoth
dlgBase.ShowFont
lblMuestra.Font.Name = dlgBase.FontName
lblMuestra.Font.Size = dlgBase.FontSize
lblMuestra.Font.Bold = dlgBase.FontBold
lblMuestra.Font.Italic = dlgBase.FontItalic
lblMuestra.Font.Underline = dlgBase.FontUnderline
lblMuestra.Font.Strikethrough = dlgBase.FontStrikethru
lblMuestra.ForeColor = dlgBase.Color
Exit Sub
ManejoError:
MsgBox "No se cambi fuente"

Ejecucin
1. Haga clic en el botn Modificar.
Al hacer clic en dicho botn, se ejecuta el procedimiento de evento cmdModifi-
car_Cllck. Dicho procedimiento se encarga de establecer que si se hace clic en el
botn Cancelar, se genere un error. Dicho error ser manejado por el procedimiento
ManejoError. Cuando se genere un error (es decir, cuando se haga clic en
Cancelar), el control de la ejecucin se trasladar al segmento ManejoError,
dentro del mismo procedimiento, el cual muestra un mensaje explicativo y a con-
tinuacin se encuentra el fin del procedimiento.
Se prepara el objeto para que maneje el cuadro de dilogo Fuente, a travs de la
propiedad Flags. Mediante la propiedad Flags se establece que el cuadro de
dilogo permitir modificar los atributos de texto (cdlCFEffects) y mostrar las
fuentes disponibles en impresora y pantalla (cdlCFBoth). A travs de la instruccin
Or se ve cmo se pueden asignar ambos valores. Se utiliza el mtodo ShowFont
para activar el cuadro de dilogo.





Capitulo 19: Cuadros de dilogo comunes 491
A todas las propiedades del texto asociadas a Font (Name, Size, Bold, etctera) se
les asigna su valor correspondiente en el objeto basado en CommonDialog
(FontName, FontSize, FontBold), que estn disponibles a travs de las
propiedades de este ltimo.
La instruccin Exit Sub nos indica que queremos que el procedimiento se d por
terminado antes de su final, por lo que ManejoError: ya no se ejecuta. Si no se
especificara Exit Sub, el programa se seguira ejecutando, haciendo caso omiso a
la etiqueta de referencia (ManejoError:), que slo sirve para indicar dnde
comienza el segmento del procedimiento llamado a travs de GoTo.

Cuadro de dilogo Imprimir
El cuadro de dilogo Imprimir se presenta mediante el mtodo ShowPrinter del
control CommonDialog. El cuadro de dilogo Imprimir permite que el usuario
especifique cmo se va a imprimir el resultado.
El usuario puede especificar la impresin de un intervalo de pginas, la calidad de la
impresin, el nmero de copias, etctera. Este cuadro de dilogo tambin contiene
informacin acerca de la impresora instalada actualmente y permite que el usuario
configure o vuelva a instalar una nueva impresora predeterminada.
Este cuadro de dilogo no enva los datos a la impresora, sino que permite que el
usuario especifique cmo quiere imprimir sus datos. Si la propiedad
PrinterDefault es True, puede usar el objeto Printer para imprimir datos en
el formato que se seleccione. Para ver ms de lo que permite hacer el objeto
Printer, es conveniente que revise el Examinador de objetos (F2).
En tiempo de ejecucin, cuando el usuario hace selecciones en el cuadro de dilogo
Imprimir, la informacin determinada puede conocerse a travs de las siguientes
propiedades:













492 Parte 3; Controles grficos y programacin orientada a eventos
Las definiciones Flags para el cuadro de dilogo Imprimir son:






Captulo 19: Cuadros de dilogo comunes 493

>> Uso del control CommonDialog para manipular las especificaciones de
impresora en el formato estndar de Windows. [19.04]
frmImpresora.frm
A continuacin aprender a utilizar el control CommonDialog. del componente Mi-
crosoft Common Dialog Control, con la finalidad de poder seleccionar las especifi-
caciones de la impresora en la interfaz estndar de Windows.







494 Parte 3: Controles grficos y programacin orientada a eventos
Implementacin visual

Tabla de objetos y propiedades de frmImpresora










Captulo 19: Cuadros de dilogo comunes 495
Propiedades nuevas en frmimpresora

Mtodos nuevos en frmimpresora

Codificacin de frmimpresora
Ediltar cdigo: cmdConftgura, Evento: Click.
dlgBase.CancelError = True
On Error GoTo ManejoError:
dlgBase.Flags = cdlPDPrintSetup
dlgBase.ShowPrinter
Exit Sub
ManejoError:
MsgBox "No se imprimi o defini nada en la impresora"
Editar cdigo: cmdImprime. Evento: Click.
dlgBase.CancelError = True
On Error GoTo ManejoError:
dlgBase.ShowPrinter

Dim intPaginaInicial As Integer
Dim intPaginaFinal As Integer
Dim intNumeroCopias As Integer
Dim intContador As Integer

496 - Parte 3: Controles grficos y programacin orientada a eventos

intPaginaInicial% = dlgBase.FromPage
intPaginaFinal% = dlgBase.ToPage
intNumeroCopias% = dlgBase.Copies

Print "Inicio:"; intPaginaInicial%
Print "Fin:"; intPaginaFinal%
Print "Copias:"; intNumeroCopias%
For intContador% = 1 To intNumeroCopias%
frmImpresora.PrintForm
Next intContador%
Exit Sub
ManejoError:
MsgBox "No se defini nada en la impresora"
Ejecucin
Haga clic en el botn Configurar.
Al hacer clic en el botn, se ejecuta el procedimiento de evento cmdConfigu-
ra_Click. Dicho procedimiento se encarga de establecer que cuando se haga clic
en el botn Cancelar, se genere un error. Dicho error ser manejado por el pro-
cedimiento ManejoError. Cuando se genere un error (es decir, cuando se haga
clic en Cancelar), el control de la ejecucin se trasladar al segmento
ManejoError, dentro del mismo procedimiento, el cual muestra un mensaje ex-
plicativo y a continuacin se encuentra el fin del procedimiento.
A travs de la propiedad Flags se determina que cuando se active el cuadro de
dilogo Imprimir, ste tenga la modalidad de configuracin. Se procede a activar el
cuadro de dilogo a travs del mtodo ShowPrinter.
Realice las modificaciones a la configuracin, segn desee.
La instruccin Exit Sub indica que el procedimiento se dar por terminado antes
de su final, por lo que ManejoError: ya no se ejecuta. Si no se especificar Exit
Sub, el programa se seguira ejecutando, haciendo caso omiso de la etiqueta de
referencia (ManejoError:), que slo sirve para indicar dnde comienza el seg-
mento del procedimiento llamado a travs de GoTo.
Haga clic en el botn Imprimir.
Al hacer clic en dicho botn, se ejecuta el procedimiento de eventos cmdimpri-
me_Click. Dicho procedimiento se encarga de establecer que cuando se haga clic
en el botn Cancelar, se genere un error. Dicho error ser manejado por el pro-
cedimiento ManejoError. Cuando se genere un error (es decir, cuando se haga




Captulo 19: Cuadros de dilogo comunes 497
clic en Cancelar), el control de la ejecucin se trasladar al segmento
ManejoError, dentro del mismo procedimiento, que muestra un mensaje
explicativo y se encuentra el fin del procedimiento.
Se procede a activar el cuadro de dilogo a travs del mtodo ShowPrinter.
Realice las modificaciones a la configuracin, segn desee. Al aceptar los cambios
que realice, se declararn variables de trabajo para almacenar los valores que se
hayan especificado en el cuadro de dilogo; una vez que se asignan los valores
seleccionados a las variables, stos se imprimen en el formulario.
En el caso del nmero de copias, se hace un pequeo ejercicio, utilizando el mtodo
PrintForm del objeto frmimpresora, a fin de comprobar el funcionamiento
de dicho valor.
La instruccin Exit Sub nos indica que queremos que el procedimiento se d por
terminado antes de su final, por lo que ManejoError: ya no se ejecuta. Si no se
especificar Exit Sub, el programa se seguira ejecutando, haciendo caso omiso
de la etiqueta de referencia (ManejoError:), que slo sirve para indicar dnde
comienza el segmento del procedimiento llamado a travs de GoTo.

Cuadro de dilogo Abrir/Guardar como
Los cuadros de dilogo Abrir y Guardar como se presentan mediante los mtodos
ShowOpen y ShowSave del control CommonDialog. La diferencia entre un cuadro
y otro se presenta slo en el ttulo del mismo, as como en el mtodo que se debe
utilizar para invocarlos. Ambos cuadros de dilogo permiten que el usuario
especifique una unidad, un directorio, una extensin de nombre de archivo y un
nombre de archivo.
En tiempo de ejecucin, cuando el usuario elige un archivo y cierra el cuadro de
dilogo, la propiedad FileName contendr el nombre de archivo seleccionado o
introducido.
Puede establecer la propiedad Filter de forma que el cuadro de dilogo presente
slo ciertos tipos de archivos, como archivos de texto, bases de datos, documentos y
otros claramente diferenciados por su extensin. La propiedad Filter requiere las
sspecificaciones separadas por canalizaciones ( | ) y distribuidas en pares; por ejem-
plo, para determinar dos tipos de archivo, tendra que hacer lo siguiente:
Todos I *.* I Documentos I *.doc
El primer elemento de cada par indicara lo que aparece en el ComboBox de
seleccin de tipo de archivo, mientras que el segundo elemento de cada par indica el
patrn de filtro de los archivos. Hay otra propiedad, llamada IndexFilter, que
permite definir



498 Parte 3: Controles grficos y programacin orientada a eventos
cul de las definiciones es la que aparecer de manera predeterminada; el nmero de
ndice inicia en 1.
La propiedad Flags se puede usar para cambiar varios elementos del cuadro de di-
logo, as como para avisar al usuario cundo pueden producirse ciertas situaciones,
como por ejemplo sobrescribir un archivo.
Las definiciones Flags para el cuadro de dilogo Abrir/Guardar como son:


Captulo 19: Cuadros de dilogo comunes 499










500 Parte 3: Controles grficos y programacin orientada a eventos


Es muy importante hacer notar que hay ciertas caractersticas que slo estn dis-
ponibles en ciertos entornos operativos. El nico entorno operativo que an tiene
base instalada y que puede verse perjudicado es Windows NT 3.51, que no basa su
interfaz en el estilo implementado a partir de la salida al mercado de Windows 95
(tiene una interfaz semejante a Windows 3.11).
Por ejemplo, los indicadores cdlOFNExplorer (cuadro de dilogo estilo Windows
95, Windows 2000 y Windows NT 4.0) y cdlOFNNoDereferenceLinks
(relacionado con los accesos directos) slo funcionan en Windows 95, Windows
2000 y en Windows


Captulo 19: Cuadros de dilogo comunes 501
NT 4.0. Esto es lgico, ya que slo los entornos antes mencionados basan de manera
nativa su comportamiento en los cuadros de dilogo comunes proporcionados por
CommonDialog.
Otra diferencia que podemos encontrar es el manejo de nombres largos de archivos.
Cuando se habilita la capacidad multiselect para el cuadro de dilogo, la
propiedad FileName devolver una lista delimitada, con los nombres de los
mltiples archivos seleccionados. La versin 3.51 de Windows NT, que no tiene la
interfaz de Windows 95, en caso de seleccin mltiple usa espacios en blanco como
delimitadores (sin aceptar nombres largos de archivo). Los cuadros de dilogo de
seleccin mltiple de Windows 95, Windows 2000 y Windows NT 4.0 que utilizan
cdlOFNExplorer, usan caracteres nulos como delimitadores. Esto se debe a que
en un nombre largo de archivo es muy comn la presencia de espacios en blanco, lo
que seria inapropiado si se consideran delimitadores.
>> Uso del control CommonDialog para manejar el cuadro de dilogo Abrir/
Guardar como, en el formato estndar de Windows. [19.05]
frmApertura.frm
A continuacin aprender a utilizar el control CommonDialog, del componente
Microsoft Common Dialog Control, con la finalidad de poder manejar el cuadro de
dilogo Abrir/Guardar como....
Implementacin visual






502 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmApertura

Propiedades nuevas en frmApertura

Mtodos nuevos en frmApertura

Codificacin de frmApertura
Editar Cdigo: cmdAbrir, Evento: Click
dlgBase.CancelError = True
On Error GoTo ManejoError:
dlgBase.Flags = cdlOFNHideReadOnly




Captulo 19: Cuadros de dilogo comunes 503
dlgBase.Filter = _
"Todos los archivos (*.*) |*.*|Documentos (*.doc)|*.doc"
dlgBase.FilterIndex = 2
dlgBase.ShowOpen
Print "Se seleccion:" & dlgBase.FileName
Exit Sub
ManejoError:
MsgBox "Se eligi cancelar"
Ejecucin
Haga Clic en el botn Abrir.
Al hacer clic en dicho botn, se ejecuta el procedimiento de evento
cmdAbrir_Click. Dicho procedimiento se encarga de establecer que si se hace
clic en el botn Cancelar, se genere un error. Dicho error ser manejado por el
procedimiento ManejoError. Cuando se genere un error (es decir, cuando se haga
clic en Cancelar), el control de la ejecucin se trasladar al segmento
ManejoError, dentro del mismo procedimiento, que muestra un mensaje
explicativo y se encuentra el fin del procedimiento.
A travs de la propiedad Flags se determina que los archivos con atributos de slo
lectura sern excluidos de la lista de archivos. Tambin se establece, a travs de la
propiedad Filter, los tipos de archivo que se desplegarn. Asimismo, se especifica
que el segundo par de elementos definido a travs de Filter se establecer como
predeterminado. Se utiliza el mtodo ShowOpen para activar el cuadro de dilogo.
Una vez que selecciona un archivo, el formulario simplemente devuelve un resultado,
mismo que se encuentra en la propiedad FileName.
La instruccin Exit Sub nos indica que queremos que el procedimiento se d por
terminado antes de su final, por lo que ManejoError: ya no se ejecuta. Si no se
especifica Exit Sub, el programa se seguira ejecutando, haciendo caso omiso de
la etiqueta de referencia (ManejoError:), que slo sirve para indicar dnde
comienza el segmento del procedimiento llamado a travs de GoTo.










504 Parte 3: Controles grficos y programacin orientada a eventos
___________________________________________________________
Resumen
En este captulo:
Vimos la forma de agregar el componente Microsoft Common Dialog Control a un
proyecto.
Vimos el uso del control CommonDialog. en sus modalidades Color, Fuente, Imprimir
y Abrir/Guardar como.
Vimos la forma en que se puede controlar, a travs de una rutina de manejo de errores, la
seleccin Cancelar de los cuadros de dilogo.
Vimos la importancia de los indicadores al utilizar objetos basados en CommonDialog.
Es importante que incluya cuadros de dilogo comunes en sus aplicaciones; esto tiene
mltiples beneficios, entre los que se encuentran la reduccin de la curva de aprendizaje
requerida para aprender lo que usted desarrolla, el aspecto profesional de sus aplicaciones,
y la reduccin en el tiempo de desarrollo (aproveche lo ya desarrollado).







Captulo
20
Cmo trabajar
en una interfaz de
mltiples documentos
Objetivo
Conocer el enfoque de trabajo orientado a mltiples documentos, llamado Interfaz, de
Documentos Mltiples (MDI).
Al finalizar este captulo deber:
Saber qu es un formulario MDI
Saber cmo agregar varios formularios, nuevos o ya existentes, a un proyecto
Saber cmo establecer un formulario como objeto inicial del proyecto
Saber cmo invocar formularios en una aplicacin basada en MDI
Saber cmo se negocian los mens en un esquema MDI
Este captulo es innecesario si piensa dedicarse a realizar programas sencillos de un
solo formulario. Como sabemos que eso no va a suceder, aqu se encuentra informa-
cin para organizar aplicaciones robustas que incluyan muchos formularios.
505








506 Parte 3: Controles grficos y programacin orientada a eventos
Fundamentos del entorno MDI
Difcilmente se encontrar en Windows una aplicacin que tenga un solo formulario,
ya que lo normal es que una aplicacin tenga varios, todos ellos concentrados en una
ventana general.
En entorno MDI es precisamente eso: la existencia de un formulario maestro, por lla-
marlo de alguna manera, que acta como objeto inicial de toda una aplicacin que
concentra dos o ms formularios.
En este captulo veremos la forma de controlar varios formularios a travs de uno
maestro. La secuencia de tareas que debemos realizar para llegar a ello es la siguiente:
Agregar al proyecto un formulario MDI (Proyecto - Agregar formulario MDI),
mismo que actuar como formulario maestro.
Establecer el formulario MDI como objeto de inicio de la aplicacin (Proyecto
Propiedades de <Proyecto> - Objeto inicial - <Seleccone el formulario MDI>).
Agregar formularios nuevos o ya existentes al proyecto (Proyecto -Agregar for-
mulario), mismos que dependern del formulario MDI.
Establecer la dependencia de los formularios agregados con respecto al formulario
maestro, estableciendo a True la propiedad MDIChild de cada uno de los
formularios agregados.
>> Cmo agregar un formulario maestro para trabajo en MDI y los formularios
hijos. [20.01]
1. Inicie un nuevo proyecto EXE estndar.
2. Se iniciar un formulario nuevo. La propiedad Name de ese nuevo formulario es
Form1. Cambie el valor de dicha propiedad de tal forma que sea frmPrimero.
3. Vaya al men Proyecto - Agregar formulario para agregar un nuevo formulario.
Cambie el valor de la propiedad Name de ese nuevo formulario a frmSegundo.
4. Vaya al men Proyecto - Agregar formulario MDI. Se agregar un formulario de
tipo MDI, que ser grficamente distinto a los otros dos.









Captulo 20: Cmo trabajar en una interfaz de mltiples documentos 507
5. Establezca la propiedad Name del formulario MDI a MDIPrincipal.
6. Vaya al men Proyecto - Propiedades de Proyecto 1...
7. En la lista desplegable Objeto inicial, seleccione MDIPrincipal.
8. En el cuadro de texto Nombre de proyecto, escriba MDIDemo.
9. Acepte los valores.
Complemente los objetos que tiene, a fin de que en modo de diseo disponga de lo
siguiente:


Propiedades nuevas










508 Parte 3: Controles grficos y programacin orientada a eventos
Codificacin de frmPrimero
Editar Cdigo: Form, Evento: Load.
frmPrimero.Width = 4000
frmPrimero.Height = 2000
Codificacin de frmSegundo
Editar Cdigo: Form, Evento: Load.

frmPrimero.Width = 5000
frmPrimero.Height = 3000
Limitaciones que implica el uso de un formulario MDI
Cuando trabaja en un entorno MDI, se enfrentar a las siguientes limitaciones:
Slo puede establecer un formulario MDI por proyecto; de hecho, la opcin de
men Proyecto -Agregar formulario MDI se inhabilita una vez que agrega uno
de estos formularios.
Una vez que se establece una dependencia entre un formulario y uno MDI (a
travs de la propiedad MDIChild), el formulario dependiente no podr exceder
en tamao al MDI.
Cualquier variacin en el tamao del formulario MDI afectar a los dependientes.
Algunas propiedades de posicin, como StartUpPosition ya no son
operables por un formulario dependiente.
Cerrar el formulario MDI involucra cerrar todos los dependientes.
En trminos generales, un formulario MDI es un objeto contenedor de objetos
Form. En un formulario MDI no es posible agregar objetos de interfaz, como
CommandButton o TextBox
La mayora de los formularios MDI basan su operacin a travs de mens.
Si no recuerda bien la definicin de mens, consulte el captulo 14 del libro.





Captulo 20: Cmo trabajar en una interfaz de mltiples documentos 509
>> Cmo trabajar con varios formularios. [20.02]
1. Agregue un men a MDIPrincipal.

2. Agregue un men a frmSegundo.

3. Establezca la propiedad NegotiateMenus de frmSegundo a True.



510 Parte 3: Controles grficos y programacin orientada a eventos
Mtodos nuevos

Codificacin de MDIPrincipal
Editar cdigo: mnuFormularios_Primero, Evento: Click.

frmPrimero.Show
Editar cdigo: mnuFormularios_Segundo, Evento: Click.
frmSegundo.Show
Editar cdigo: mnuFormularios_Salir, Evento: Click.
End
Ejecucin
Ejecute la aplicacin.
Se estableci como objeto inicial del proyecto el formulario MDI, de nombre
MDIPrincipal. Este es el que inicia la aplicacin.
La ventana aparece maximizada, ya que se estableci esa caracterstica al for-
mulario MDI.
Seleccione la opcin de men Formularios - Primero.
Se ejecutar el procedimiento mnuFormularios_Primero_Click, que
mostrar el formulario frmPrimero.







Captulo 20: Cmo trabajar en una interfaz de mltiples documentos 511
Seleccione la opcin de men Formularios - Segundo.
Se ejecutar el procedimiento mnuFormularios_Segundo_Click, que
mostrar el formulario frmSegundo.
Puesto que frmSegundo posee un men definido, el formulario MDI y ste
negocian el men principal de la aplicacin. Observe que ya no est el men del
formulario MDI disponible, sino que ahora est el men del formulario
frmSegundo. Esta situacin se mantendr hasta que cierre la ventana
frmSegundo.
Cierre la ventana frmSegundo. Despus seleccione la opcin de men Formu-
larios - Salir.
Se ejecutar el procedimiento mnuFormularios_Salir_Click, que
terminar la ejecucin de la aplicacin.
El formulario frmPrimero nunca fue cerrado, pero por depender de
MDIPrincipal, se cierra con ste.
Cmo preparar su aplicacin para compilacin y distribucin
Le recomendamos que al crear sus aplicaciones desarrolle por separado cada uno de
los formularios, de tal forma que no tenga tan congestionada su pantalla; esto claro,
si no utiliza o comparte cdigo similar entre los mltiples formularios que integran
su aplicacin; en ese caso tal vez prefiera tenerlos disponibles a todos.
Si opta por tener todos los formularios cargados en su proyecto, conforme los va
creando, no olvide que cada uno le resta desempeo a su computadora, ya que
Visual Basic tendr que ver todos los formularios y sus componentes pblicos todo
el tiempo.
Es recomendable que elabore los formularios por separado. Una vez que concluya,
defina el men que desea e integre la aplicacin en un formulario MDI. Modifique
las propiedades de su proyecto en aquellos aspectos que le sean relevantes (ttulo
definitivo en Caption, icono, etctera).
Le resta un solo paso:
Compilar su proyecto para generar el programa EXE que va a distribuir.
Si as lo desea, incluso puede crear los discos de instalacin a travs del Asistente
para empaquetado y distribucin.

















512 Parte 3: Controles grficos y programacin orientada a eventos
____________________________________________________
Resumen
En este captulo:

Vimos qu es un formulario MDI y cules son sus limitaciones.
Vimos cmo agregar varios formularios, nuevos o ya existentes, a un proyecto de
Visual Basic.
Vimos cmo establecer un formulario como objeto inicial del proyecto.
Vimos cmo invocar formularios en una aplicacin basada en MDI, a travs del
mtodo Show.
Vimos cmo se negocian los mens en un esquema MDI.

Este captulo le servir para integrar aplicaciones que se componen de varios formu-
larios. De esa forma, un solo programa ejecutable contendr toda una aplicacin.
































Captulo
21
Controles ActiveX
para mejorar la interfaz

Objetivo
Conocer el uso de los controles comunes de Windows, que permiten enriquecer la
interfaz con elementos de apariencia profesional.
Al finalizar est captulo deber:
Saber colocar el componente Microsoft Windows Common Controls en un
proyecto de Visual Basic
Saber utilizar el control ProgressBar
Saber utilizar el control TreeView
Saber utilizar el control StatusBar
Saber utilizar el control ToolBar
Despus de ver estos controles tan prcticos como vistosos, sus programas tendrn
una presentacin profesional, necesaria para destacar sus proyectos.
513




514 Parte 3: Controles grficos y programacin orientada a eventos
Controles comunes de Windows
A estas alturas del libro ya puede desarrollar una interfaz eficiente y funcional. Muy
a pesar de ello, quiz no ha quedado satisfecho con la muy buena tarea realizada:
siente que ha "visto ms", en lo que al diseo de interfaz se refiere.
Una interfaz siempre cumple con la funcin de introducir, mostrar o sealar elemen-
tos, sean stos de datos o de procesos; la diferencia entre un control y otro es cmo
lo hace y cmo se ve.
En este captulo le mostraremos algunos controles que seguramente ya ha visto al
trabajar en programas del entorno de Windows. A partir de este captulo no slo
ser un espectador de tales controles, sino que podr integrarlos en sus propios
desarrollos.
Para hacer ms sencilla la explicacin, improvisamos prcticas que no tienen otro
propsito que demostrar el uso de los controles, as que no se cuestione qu hace
este programa? Mejor pregntese cmo defino este control y cmo lo utilizo?
En el captulo 15 aprendi a integrar componentes en un proyecto de Visual Basic
(prctica 15.03), pues agreg el componente llamado Microsoft Windows Common
Controls para poder disponer del almacn de imgenes ImageList. En las
prcticas desarrolladas en este captulo utilizar el almacn de imgenes
ImageList, pues est profundamente relacionado con todo el manejo grfico de
los cuatro controles que exploraremos: ProgressBar, TreeView, ToolBar
y StatusBar.
ProgressBar ( Microsoft Windows Common Controls 6.0)
Es un control que permite mostrar grficamente el avance de un proceso. Value
es la propiedad esencial de este tipo de controles, ya que a travs de ella se hace
referencia a una posicin relativa entre un lmite mnimo (Min) y uno mximo
(Max).
Lo ms relevante de este control es:







Captulo 21: Controles ActiveX para mejorar la interfaz 515
=================================================
Lo inesperado: Cuando trabaja con el control ProgressBar, los errores
ms comunes son:
El valor de la propiedad no es vlido (error 380 en tiempo de ejecucin). Se pre-
senta cuando la propiedad Value del objeto ProgressBar est fuera de los
lmites determinados por las propiedades Min y Max. Soluciones: revise que en
ningn caso la propiedad Value se encuentre abajo del lmite establecido por la
propiedad Min, o por encima del lmite establecido por la propiedad Max. Value
es un nmero entero, por lo que no podr asignar valores que excedan el lmite mar-
cado por el tipo de datos.
=================================================

>>Uso de objetos basados en el control ProgressBar. [21.01]
frmProgreso.frm
A continuacin aprender a definir un objeto ProgressBar, que grficamente
muestre
la variacin de un nmero dentro de un intervalo.
Para no tener que simular un proceso iterativo, recurriremos al uso de un objeto
basado en el control Timer, el cual permitir incrementar de manera paulatina el
valor de la propiedad Value, que causar la modificacin grfica de avance.
Implementacin visual





516 Parte 3: Controles grficos y programacin orientada a eventos
Tabla de objetos y propiedades de frmprogreso

Propiedades nuevas en frmprogreso

Codificacin de frmprogreso

Editar cdigo: (General), Evento: (Declarations)
Dim intCuentaAvance As Integer












Captulo 21: Controles ActiveX para mejorar la interfaz 517
Editar cdigo: tmrBase, Evento:Timer.
intCuentaAvance% = intCuentaAvance% + 1
If intCuentaAvance% > pbrAvance.Max Then
MsgBox "El proceso ya concluy"
End
End If
pbrAvance.Value = intCuentaAvance%
Ejecucin
Ejecute el programa.
Al cargarse el programa, en el rea de declaraciones generales se declara una
variable que servir para manejar el incremento que se provocar en la propiedad
Value.
El control basado en Timer provocar la ejecucin del procedimiento de evento
Timer, cada 50 milisegundos.
Al ejecutarse el procedimiento tmrBase_Timer, se incrementar el valor de la
variable que servir para manejar el incremento que se provocar en la propiedad
Value, en cantidad de uno. Posteriormente, el procedimiento evaluar que el
nmero que se ha generado no exceda el mximo asignado al objeto, ya que se
provocara un error; en caso de que as sea, aparecer el mensaje de notificacin
que informar que el proceso ya concluy, procediendo despus a dar por termi-
nada la ejecucin del programa.
Si el nmero no excede el lmite mximo establecido al objeto, la propiedad
Value asumir el valor que tenga la variable que servir para manejar el incre-
mento. Esto provocar las variaciones visuales que usted ver en su programa.
El objeto basado en el control Frame slo fue colocado por cuestiones estticas.
Un detalle muy importante que debe considerar es que la propiedad Value es de
tipo Integer, y por tal motivo, su lmite mximo de valor es de 32,767. Qu pasa
si desea mostrar la carga de datos a un archivo que contiene 50,000 registros o
datos?
Una solucin sera que, en caso de que el nmero que modificar el valor del objeto
exceda el lmite del tipo de datos utilizando, haga la siguiente equivalencia:











518 Parte 3: Controles grficos y programacin orientada a eventos

32767 / 50000 = 0.65534
Donde cada registro de los 50000 representara un incremento en el valor de Value
de 0.65534; como el valor debe ser entero, basta con hacer la conversin:
pbrAvance.Value = int(NumRegistro * 0.65534)
Lo que nos cuidara de un probable desfase.
TreeView ( Microsoft Windows Common Controls 6.0)
El control TreeView permite integrar un objeto similar al rbol de directorios que
utiliza el Explorador de Windows.

Cuando maneje dicha herramienta, deber considerar que:
Las opciones deben ser entendidas como nodos. Un conjunto de nodos Inter.-
relacionados constituye el sistema de opciones TreeView.
Siempre hay una opcin que contiene otras opciones, lo que forma una jerarqua.
El nodo principal, que no depende de ningn otro nodo, es el nodo raz.
El nodo que contiene a otros nodos se le llama nodo padre; a los nodos que son
contenidos y que pueden ser accesibles slo a travs del nodo padre, se les llama
nodos hijos. Existe una relacin directa entre ellos; la imposibilidad de utilizar el
nodo padre impide el uso de los nodos hijos.
Los nodos padre pueden expandirse (Expand) o contraerse (Collapse).
Los nodos pueden tener asociado un grfico que sugiera el estado en que se
encuentran (Image). Cuando un nodo padre est expandido, puede tener un








Captulo 21: Controles ActiveX mejorar la interfaz 519
grfico asociado diferente que cuando se encuentra contrado. Esto genera una
identidad visual a las opciones.
Los nodos padre pueden anidarse, es decir, un nodo hijo puede actuar a su vez
como nodo padre.
Es altamente recomendable que los grficos a utilizar en el sistema de opciones
TreeView estn almacenados en un control ImageList. La propiedad
ImageList permite definir qu objeto de tipo ImageList actuar como
proveedor de imgenes.
Todos los nodos son identificados de manera nica dentro del sistema de
opciones TreeView, a travs de una clave (key).
Todas las opciones del sistema TreeView se encuentran contenidas en una
coleccin llamada Nodes.
Las opciones del sistema de opciones de tipo rbol slo pueden ser agregadas en
tiempo de ejecucin.
Cmo agregar opciones a un sistema TreeView
Como vimos en el texto anterior, TreeView no permite agregar las opciones del
sistema en tiempo de diseo, por lo que stas debern ser agregadas en tiempo de
ejecucin, preferentemente en el evento Form_Load o Form_Activate.
Ya hablamos de que todas las opciones estn contenidas en una coleccin de nombre
Nodes. En otros objetos de tipo coleccin ya vimos cmo se aaden elementos a
travs del mtodo Add. En el caso de TreeView puede ser un poco diferente, en
virtud de que la sintaxis del mtodo es un poco ms compleja. Veamos la sintaxis
del mtodo Add.
Sintaxis:

ObjetoTreeView.Nodes.Add Relatividad, Relacin, Clave, TextoAMostrar, Imagen
Donde ObjetoTreeView es el objeto basado en el control TreeView. Relatividad
indica el nombre (Key) de la opcin que acta como padre del nodo que se est
agregando; en el caso de que la opcin sea un nodo raz, el valor simplemente se
omite. Relacin indica el tipo de relacin que guarda el nodo que se est agregando,
con respecto al nodo indicado en la Relatividad. Clave indica el nombre que se le
dar a la opcin que se est agregando. TextoAMostrar es el texto que aparecer en
la opcin. Imagen es la clave que identifica a una imagen almacenada en un objeto
basado en el control ImageList.





520 Parte 3: Controles grficos y programacin orientada a eventos
Suponga que tiene un objeto ImageList de nombre imlBase. donde tiene
almacenados 2 grficos, identificados como abrir y cerrar, en su propiedad Key.
Tambin define un objeto basado en TreeView, al que llama tvwBase.
Cmo definira un sistema TreeView?

Set tvwBase.ImageList = imlBase
vwBase.Nodes.Add , , "NodoRaiz", "Raiz", "abrir"
tvwBase.Nodes.Add "NodoRaiz", tvwChild, "Opcion_1", _
"1", "cerrar"
tvwOpciones.Nodes.Add "NodoRaiz", tvwChild, "Opcion_2", _
"2", "cerrar"
La primera lnea especifica que las imgenes sern tomadas del objeto imlBase.
La siguiente lnea establecera como nodo raz el elemento identificado como
NodoRaiz; como podr ver no hay relatividad con ninguna opcin de nivel
superior, y por tanto, ninguna relacin.
Las siguientes dos lneas sirven para definir los nodos hijos de NodoRaiz; para
ello, se especifica relatividad con respecto a dicha opcin, despus se determina que
la relacin que se guarda es de tipo tvwChild (la ms comn de las relaciones),
despus, cada una de las lneas especifica el nombre que tendrn cada una de las
opciones, lo que mostrarn de manera textual, as como la imagen que se desplegar
con ellas. La especificacin de imagen no es requerida.
Los diferentes tipos de relacin que se pueden especificar son los siguientes.









Captulo 21: Controles ActiveX para mejorar la interfaz 521
>> Uso de TreeView. [21.02]
frmArbol.frm
A continuacin aprender a generar un objeto basado en el control TreeView para
la seleccin de opciones; asimismo, aprender el manejo dinmico de imgenes para
las opciones, dependiendo de su estado.
1. Genere un nuevo proyecto EXE estndar.
2. Agregue el componente Microsoft Windows Common Controls 6.0 a su proyecto.
Proyecto - Componentes - Microsoft Windows Common Controls 6.0 -Aplicar -
Cerrar.
Implementacin visual




3. Agregue un objeto de tipo ImageList. haciendo doble clic en el control que ya
debe encontrarse en el Cuadro de herramientas. Acomode el control de tal
forma que no estorbe. El nombre del objeto ser imlBase.
4. Agregue un objeto de tipo TreeView, haciendo clic en el control que ya debe
encontrarse en el Cuadro de herramientas. Acomode el control de tal forma
que ocupe el espacio tal como lo muestra la figura 21.2. El nombre del objeto
ser tvwOpciones.
5. Agregue las siguientes imgenes, con un tamao de 16 x 16 (todas se encuentran
en la ruta c:\avbp\cap21\), utilizando la pgina de propiedades del objeto:

522 Parte 3: Controles grficos y programacin orientada a eventos


6. Para aceptar los cambios al agregar imgenes, le recomendamos hacer clic en el
botn Aplicar, y posteriormente en el botn Aceptar. Usted puede ingresar en
cualquier momento a la pgina de propiedades y modificar lo ya definido.

Tabla de objetos y propiedades de frmArbol


























Captulo 21: Controles ActiveX para mejorar la Interfaz 523
Propiedades nuevas en frmArbol

Codificacin de frmArbol
Editar cdigo: (General), Evento: (Declarations).
Set tvwOpciones.ImageList = imlBase
' Nivel 1 del rbol
tvwOpciones.Nodes.Add , , "Raiz", "Opciones", "cerrado"
' Nivel 2 del rbol
tvwOpciones.Nodes.Add "Raiz", tvwChild, "Disquete", _
"Usar disquete", "disquete"
tvwOpciones.Nodes.Add "Raiz", tvwChild, "HardDisk", _
"Usar Disco Duro", "hd"
tvwOpciones.Nodes.Add "Raiz", tvwChild, "CDROM", _
"Usar CD-ROM", "cd"
' Nivel 3 del rbol
tvwOpciones.Nodes.Add "Disquete", tvwChild, _
"DisqueteLectura", "Lectura", "lee"
tvwOpciones.Nodes.Add "Disquete", tvwChild, _
"DisqueteEscritura", "Escritura", "escribe"
tvwOpciones.Nodes.Add "HardDisk", tvwChild, "HDLectura", _
"Lectura", "lee"
tvwOpciones.Nodes.Add "HardDisk", tvwChild, _
"HDEscritura", "Escritura", "escribe"
tvwOpciones.Nodes.Add "CDROM", tvwChild, "CDLectura", _
"Lectura", "lee"




524 Parte 3: Controles grficos y programacin orientada a eventos

Editar cdigo: tvwOpciones, Evento: Expand.
Select Case Node.Key
Case "Raiz"
tvwOpciones.Nodes("Raiz").Image = "abierto"
End Select

Editar cdigo: tvwOpciones, Evento: Collapse.
Select Case Node.Key
Case "Raiz"
tvwOpciones.Nodes("Raiz").Image = "cerrado"
End Select

Editar cdigo: tvwOpciones, Evento: NodeClick.
Select Case Node.Key
Case "DisqueteLectura"
lblSeleccion.Caption = "Lectura de Disquete"
Case "DisqueteEscritura"
lblSeleccion.Caption = "Escritura de Disquete"
Case "HDLectura"
lblSeleccion.Caption = "Lectura de Disco Duro"
Case "HDEscritura"
lblSeleccion.Caption = "Escritura de Disco Duro"
Case "CDLectura"
lblSeleccion.Caption = "Lectura de CD-ROM"
End Select

Editar cdigo: cmdSalir, Evento: Click.
End
Ejecucin
Al cargarse el formulario, se ejecuta el evento Form_Load.
Primeramente, se establecer el objeto basado en ImageList (imlBase)
como fuente de imgenes para el objeto basado en TreeView
(tvwOpciones). Puesto que las opciones no se pueden agregar en tiempo de
diseo, es necesario agregarlas en tiempo de ejecucin y la carga del formato es
un buen momento para ello.

Captulo 21: Controles ActiveX para mejorar la interfaz 525
Primero se define el nivel 1 del rbol, que se compone del nodo raz; como sabe,
el nodo raz no depende en ningn sentido de ningn otro nodo, por lo cual no
guarda relatividad con ningn nodo, de ningn tipo: esto hace que se omitan los
argumentos primero y segundo del mtodo Add. Se asigna al nodo raz el
nombre Raz, con el texto Opciones, y con la imagen identificada como
cerrado en el objeto imlBase asociado, para que aparezca a la izquierda del
texto.
El nivel 2 del rbol agrega ms opciones al sistema; observe que a estas opciones
se les especifica que guarden una relatividad con respecto a la opcin identifi-
cada como Raiz, de tipo tvwChild. A cada una de las opciones se les da un
nombre nico (Disquete, HardDisk y CDROM), un texto a desplegar
(Usar disquete, Usar Disco Duro, Usar CD-ROM) y el
identificador de la imagen contenida en ImIBase que se asociar a cada una de
las opciones (disquete, hd y cd).
El nivel 3 del rbol agrega ms opciones al sistema, creando opciones con
relacin a las opciones de segundo nivel, siguiendo la misma mecnica que las
opciones de nivel 2. Son de igual manejo; slo el nodo raz tiene diferencia con
respecto a su definicin.
Haga clic en el nodo raz.
Se ejecutar el procedimiento tvwOpciones_Expand. Se determina qu nodo
fue el que se expandi. En caso de que fuera aqul identificado como Raiz, se
cambia la imagen asociada a dicho nodo, y se establece la imagen contenida en
imlBase, que se identifica como abierto.
Haga clic en el nodo raz nuevamente.
Cuando un nodo se encuentra expandido, al hacer clic en l, ste se contrae. Se
ejecutar el procedimiento de evento tvwOpciones_Collapse. Se
determina qu nodo fue el que se expandi. En caso de que fuera aqul
identificado como Raiz, se cambia la imagen asociada a dicho nodo, y se
establece la imagen contenida en imlBase, que se identifica como cerrado.
Utilice el sistema de opciones TreeView hasta que tenga acceso a una de las
opciones de nivel 3.
Cada vez que hace clic en alguna de las opciones, sea el nivel que sea, se ejecuta
el evento tvwOpciones_Click. Siempre que eso sucede, se determina qu
nodo fue expandido. Dependiendo de la opcin que haya sealado, se actualizar
el valor de la propiedad Caption del objeto lblSeleccion.
Haga clic en Salir.
Se ejecutar el procedimiento de evento cmdSalir_Click, a travs del cual
se da por terminada la aplicacin.
526 Parte 3: Controles grficos y programacin orientada a eventos
Status Bar ( Microsoft Windows Common Controls 6.0)
Si entendi la forma de trabajar con el control TreeView, en el cual los elementos
se definen en modo de ejecucin y se almacenan en una coleccin que puede ser
manipulada de forma sencilla, aprender otros controles no se le dificultar. Tal es el
caso de StatusBar, que permite integrar un objeto similar a la barra de estado de
cualquier programa basado en el entorno de Windows; en dicho objeto, que es una
especie de subventana, se distribuye un conjunto de paneles en donde puede
mostrarse informacin.
Lo relevante de StatusBar es el uso de la propiedad Text a nivel panel, ya que
su funcin es eminentemente esttica. Podramos resumir lo importante de los objetos
basados en este control:

Cmo agregar opciones a un objeto basado en StatusBar
StatusBar permite definir paneles, que no son otra cosa que espacios definidos
dentro de la barra de estado, en la cual puede asignar un contenido determinado. En un
objeto StatusBar se pueden tener hasta 16 paneles definidos. Para que los paneles
puedan ser referenciados, deben tener un nombre (Key).
Todos los elementos de un objeto StatusBar estn contenidos en una coleccin lla-
mada Panels. Para efectos prcticos de nuestro captulo, panel y elemento es lo mis-
mo. Como en otros objetos de tipo coleccin, sabemos que para aadir elementos se
requiere del mtodo Add. Veamos la sintaxis del mtodo Add.
Sintaxis:
ObjetoStatusBar.Panels.Add ndice, Clave, TextoAMostrar, TipoPanel, Imagen





Captulo 21: Controles ActiveX para mejorar la interfaz 527
Donde ObjetoStatusBar es el objeto basado en el control StatusBar. ndice es el
nmero progresivo que identifica a cada uno de los elementos. Clave es el nombre por
medio del cual se podr hacer referencia a cada uno de los elementos. Texto-AMostrar
es el texto que aparecer de manera predeterminada en el panel. TipoPanel especifica
la naturaleza del panel. Imagen es la clave que identifica a una imagen almacenada en
un objeto basado en el control imageList.
Suponga que tiene definido un objeto basado en StatusBar, al que llama stbBase.
Cmo definira 2 elementos en dicho objeto, si desea colocar texto en ellos, aunque
no de manera predeterminada?
stbBase.Panels.Add 1, "Primero", , sbrText
stbBase. Panels.Add 2, "Segundo", , sbrText
Cmo agregara los textos Opcin 1 y Opcin 2 a los paneles?
stbBase.Panels("Primero").Text = "Opcin 1'
stbBase.Panels("Primero").Text = "Opcin 1'
Los objetos basados en StatusBar pueden asumir diferentes propiedades que afec-
tan su comportamiento y apariencia; para cada una de estas propiedades a las que
hacemos mencin, existe un conjunto de constantes de Visual Basic que nos pueden
simplificar la tarea al definir los objetos. A continuacin mostramos algunas de las
propiedades asociadas a los objetos basados en StatusBar, as como las constantes
que las determinan:
Constantes de la propiedad Style, a nivel objeto StatusBar:
















528 Parte 3: Controles grficos y programacin orientada a eventos
Constantes de la propiedad Alignment, a nivel Panel:

Constantes de la propiedad AutoSize, a nivel Panel:

Constantes de la propiedad Bevel, a nivel Panel:

Constantes de la propiedad Style, a nivel Panel:


Siguiendo con nuestro ejemplo, si queremos agregar un panel que muestre el estado
de Insert y otro que muestre la fecha, sera:
stbBase.Panels.Add 3, "PanelIns", , sbrIns
stbBase.Panels.Add 4, "PanelDate", , sbrDate



Captulo 21: Controles ActiveX para mejorar la interfaz 529
ToolBar ( Microsoft Windows Common Controls 6.0)
El control ToolBar permite definir barras de herramientas o botones para una apli-
cacin. Su manejo es similar a TreeView y a StatusBar: en este objeto se
agregan botones, los cuales se almacenan en una coleccin Buttons. Algunos
botones, dependiendo del estilo que tengan definido, pueden contener opciones,
mismas que se almacenan en una coleccin ButtonMenus.

ToolBar permite definir botones, que no son otra cosa que representaciones grficas
sensibles al ratn, para seleccionar opciones. Cada botn puede tener un estilo pre-
determinado (Style), mismo que puede especificarse a travs de constantes de
Visual Basic, las determinan el comportamiento y las capacidades del botn. stos
son los diferentes estilos de botn que se pueden establecer:






530 Parte 3: Controles grficos y programacin orientada a eventos
Tanto los botones como las opciones de men deben tener un nombre nico dentro
de la barra de herramientas, a travs del cual se realizar la verificacin de su
manejo.
Los botones de tipo Check, pueden asumir dos valores:
Constantes de la propiedad Value, a nivel Button, cuando es de tipo Check.

Al igual que los objetos de tipo TreeView, ToolBar puede tomar las imgenes que
aparecern en los botones de un objeto basado en ImageList. invocando el nombre
que se le haya asignado a la imagen en dicho objeto; adems de grficos, un botn
puede contener texto si se utiliza la propiedad Caption, aunque no son mutuamente
excluy entes: se puede asignar un grfico y un texto a un botn de manera simultnea.

Cmo agregar opciones a un objeto basado en StatusBar
Como en otros objetos de tipo coleccin, sabemos que para aadir elementos (en este
caso botones), se requiere del mtodo Add. La sintaxis del mtodo Add es la
siguiente:
Sintaxis:
ObjetoToolBar.Buttons.Add ndice, Clave, TextoAMostrar, EstiloBotn, Imagen
Donde ObjetoToolBar es el objeto basado en el control ToolBar. ndice es el
nmero progresivo que identifica a cada uno de los elementos o botones. Clave es el
nombre (Key) por medio del cual se podr hacer referencia a cada uno de los
elementos. TextoAMostrar es el texto que aparecer en el botn. EstiloBotn
especifica la naturaleza del botn. Imagen es la clave que identifica a una imagen
almacenada en un objeto basado en el control ImageList.
Suponga que tiene definido un objeto tbrBase basado en ToolBar en una
aplicacin para editar un texto con formato. Suponga que tambin tiene un objeto
basado en ImageList llamado imlBase, que contiene las imgenes que se
utilizarn en la barra






Captulo 21: Controles ActiveX para mejorar la interfaz 531
de herramientas (medida 16 x 16, de preferencia archivos con extensin .ico). Su-
ponga que las imgenes en el objeto imlBase se llaman page, folder y disquete,
que son similares a las que se muestran siempre en las barras de herramientas de las
aplicaciones basadas en Windows.
Cmo asociara el objeto basado en ImageList con el objeto basado en ToolBar?
Set tbrBase. ImageList = imlBase
Cmo definira 3 botones en el objeto tbrBase, para simular los primeros tres
botones de la barra de herramientas de la mayora de las aplicaciones de Windows?
tbrBase.Buttons.Add 1, "Nuevo", , tbrDefault, "page"
tbrBase.Buttons.Add 2, "Abrir", , tbrDefault, "folder"
tbrBase.Buttons.Add 3, "Guardar", , tbrDefault, "disquete"
Cmo agregara un cuarto botn, que slo representara un espacio entre botones,
dentro de la barra de herramientas?
tbrBase.Buttons.Add 4, "Espacio1", , tbrSeparator

Cmo agregara un quinto botn, de tipo Check. que indique el modo de edicin
Negritas, con una Informacin sobre herramientas que diga Activar/Desactivar
Negritas?
tbrBase.Buttons.Add 5, "ActNegritas", "Negritas" , tbrCheck
tbrBase.Buttons. Item(5) .ToolTipText = _
"Activar/Desactivar Negritas"

Cmo agregara un sexto botn, de tipo Dropdown que permita seleccionar el
tamao de la fuente predeterminada?
tbrBase.Buttons.Add 6, "ActNegritas", "Negritas" , tbrCheck
tbrBase.Buttons.Item(6).ButtonMenus.Add 1, "T10", "10 Pts"
tbrBase.Buttons.Item(6).ButtonMenus.Add 2, "T12", "12 Pts"






532 Parte 3: Controles grficos y programacin orientada a eventos
>> Uso de StatusBar y ToolBar. [21.03]
frmBarraH.frm
A continuacin aprender a generar un objeto basado en el control ToolBar para la
seleccin de opciones; se coordinar el uso de la barra de herramientas con una barra
de estado. El ejercicio demostrar los diferentes estilos de botones que puede tener
una barra de herramientas y la forma en que se puede capturar la seleccin realizada.
La aplicacin permite enlazarse a una base de datos. Dicha base puede ser tomada de
diferentes fuentes (disquete, red o disco duro); una vez que se establece el enlace, se
tienen dos opciones, leer o escribir. Para mejorar el desempeo de la aplicacin, puede
especificar o no el uso de ndices.
1. Genere un nuevo proyecto EXE estndar.
2. Agregue el componente Microsoft Windows Common Controls 6.0 a su proyecto.
Proyecto - Componentes - Microsoft Windows Common Controls 6.0 -Aplicar
- Cerrar.

Implementadn visual


3. Agregue un objeto de tipo ImageList, haciendo doble clic en el control que ya debe
encontrarse en el Cuadro de herramientas. Acomode el control de tal forma que no
estorbe. El nombre del objeto ser imlBase .
4. Agregue un objeto de tipo ToolBar, haciendo clic en el control que ya debe encontrarse
en el Cuadro de herramientas. Acomode el control de tal forma que ocupe el borde
superior de la ventana, que es la posicin normal de las barras de herramientas. El nombre
del objeto ser tbrBase.



Captulo 21: Controles ActiveX para mejorar la Interfaz 533
5. Agregue un objeto de tipo StatusBar, haciendo clic en el control que ya debe
encontrarse en el Cuadro de herramientas. Acomode el control de tal forma
que ocupe el borde inferior de la ventana, que es la posicin normal de las barras
de estado. El nombre del objeto ser stbBase.
6. Agregue las siguientes imgenes con un tamao de 16 x 16 (todas se encuentran
en la ruta c:\avbp\cap21\) en el objeto imlBase , utilizando la pgina de
propiedades del objeto:

7. Para aceptar los cambios al agregar imgenes, le recomendamos hacer clic en el
botn Aplicar, y posteriormente en el botn Aceptar. Usted puede ingresar en
cualquier momento a la pgina de propiedades, y modificar lo ya definido.

Tabla de objetos y propiedades de frmBarraH






534 Parte 3: Controles grficos y programacin orientada a eventos
Codificacin de frmBarraH
Editar cdigo: Form, Evento: Activate.
Set tbrBase.ImageList = imlBase
' Define elementos de la barra de estado
With stbBase
.Panels.Add 1, "Panel1", , sbrText
.Panels.Add 2, "Panel2", , sbrText
.Panels.Add 3, "Panel3", , sbrText
.Panels.Add 4, "PanelCaps", , sbrCaps
.Panels.Add 5, "PanelFecha", , sbrDate
End With
' Define elementos de la barra de herramientas
With tbrBase.Buttons
.Add 1, "disquete", , tbrDefault, "disquete"
.Add 2, "red", , tbrDefault, "red"
.Add 3, "hd", , tbrDefault, "hd"
.Add 4, "separador1", , tbrSeparator
.Add 5, "operacin", , tbrDropdown, "libro"
.Item(5).ButtonMenus.Add 1, "Escritura", "Escritura"
.Item(5).ButtonMenus.Add 2, "Lectura", "Lectura"
.Add 6, "separador2", , tbrSeparator
.Add 7, "acceso", , tbrCheck, "acceso"
.Item(1).ToolTipText = "Utilizar el disquete"
.Item(2).ToolTipText = "Utilizar la red"
.Item(3).ToolTipText = "Utilizar el disco duro"
.Item(5).ToolTipText = "Operacin a realizar"
.Item(7).ToolTipText = "Acceso a travs de ndices"
End With
stbBase.Panels("Panel1").Text = "Disquete"
stbBase.Panels("Panel2").Text = "Lectura"
stbBase.Panels("Panel3").Text = "Sin ndice"
Editar cdigo: tbrBase, Evento: ButtonClick.
Select Case Button.Key
Case "disquete"
stbBase.Panels("Panel1").Text = "Disquete"
MsgBox "Seleccion el Disquete"





Captulo 21: Controles ActiveX para mejorar la Interfaz 535
Case "red"
stbBase.Panels("Panel1").Text = "Red"
MsgBox "Seleccion la Red"
Case "hd"
stbBase.Panels("Panel1").Text = "Disco Duro"
MsgBox "Seleccion el Disco Duro"
Case "operacion"
MsgBox "Procede con el trabajo:" & vbCrLf & _
"Fuente/Destino:" & stbBase.Panels("Panel1").Text & vbCrLf & _
"Operacin:" & stbBase.Panels("Panel2").Text & vbCrLf & _
"Indexacin:" & stbBase.Panels("Panel3").Text
End
Case "acceso"
If tbrBase.Buttons("acceso").Value = tbrPressed Then
stbBase.Panels("Panel3").Text = "Utiliza ndice"
Else
stbBase.Panels("Panel3").Text = "Sin ndice"
End If
End Select
Editar cdigo: tbrBase, Evento: ButtonMenuClick.
Select Case ButtonMenu.Key
Case "Lectura"
stbBase.Panels("Panel2").Text = "Lectura"
Case "Escritura"
stbBase.Panels("Panel2").Text = "Escritura"
End Select
Ejecucin
Al activarse el formulario, se ejecuta el evento Form_Activate.
Primeramente, se establecer el objeto basado en imageList (imlBase ) como
fuente de imgenes para el objeto basado en ToolBar (tbrBase).
Posteriormente se procede a la definicin de paneles para el objeto stbBase;
para ello se agrega elementos a la coleccin Panels del objeto, a travs del
mtodo Add, empleando una estructura With.
Los tres primeros paneles que se definen estn preparados para mostrar, en forma
de texto, el ltimo estado de seleccin que se haya realizado a travs de la barra de
herramientas. Los siguientes dos paneles mostrarn informacin que el mismo
sistema proporciona (como el uso de BloqMays y la fecha).


536 Parte 3: Controles grficos y programacin orientada a eventos
Posteriormente se procede a la definicin de botones para el objeto tbrBase; para
ello se agrega elementos a la coleccin Buttons del objeto, a travs del mtodo
Add, empleando una estructura With.
Los primeros tres botones son de tipo Default, y se les asigna una de las imgenes
que se encuentran contenidas en imlBase .
El cuarto y sexto botones son de tipo Separator, por lo que slo cumplen con esa
funcin.
El quinto botn es especial, ya que su estilo es Dropdown. Debido al estilo que
posee, se entiende que tendr una lista desplegable asociada. Las opciones de la lista
desplegable se encontrarn en la coleccin ButtonMenus. Primero se define el
botn, y luego se definen para ese mismo botn (Item(5)) las opciones de su lista
desplegable, mediante el mtodo Add.
El sptimo botn se definir como de tipo Check, y tendr asociada una imagen
contenida en el objeto imlBase .
Ya han sido definidos todos los botones. El procedimiento culmina cuando se le
asignan los valores que se mostrarn de inicio en los primeros tres paneles de la
barra de estado.
Haga clic en cualquiera de los primeros tres botones de la barra de herramientas.
Al hacer clic se ejecutar el procedimiento tbrBase_ButtonClick. Este
procedimiento tiene un argumento implcito de tipo objeto, con lo cual todas las
propiedades de dicho objeto tambin constituyen un argumento implcito; dentro de
estas propiedades que actan como argumentos implcitos, est la propiedad Key del
botn, misma que se utiliza en una estructura Select Case. Todo lo anterior
puede decirse de manera ms sencilla: al ejecutarse el evento, ya se sabe en qu
botn se hizo clic, a travs de Button. Key.
Dependiendo del botn en que se haya hecho clic, se desencadenar una opcin,
consistente en actualizar el primer panel de la barra de estado y mostrar un mensaje
que indique que la seleccin ha sido reconocida.
Haga clic en el sptimo botn (acceso).
Al hacer clic, se ejecutar el procedimiento tbrBase_ButtonClick. A travs
del argumento implcito Button.Key, el procedimiento de evento sabe que se hizo
clic en el sptimo botn, que se llama acceso, y ejecuta el cdigo que le corresponde
dentro del Select Case.
En caso de que el botn se encuentre activado (tbrPressed), el tercer panel de la
barra de estado se actualiza aclarando que se utilizan ndices; si por el contrario el
botn no se encuentra activado, el tercer panel de la barra de estado se actualiza
aclarando que no se utilizan ndices.





Captulo 21: Controles ActiveX para mejorar la interfaz 537
Cuando hace clic en un botn de tipo Check, primero se cambia su estado (de
activado a desactivado, o viceversa), y despus se procesa el evento ButtonClick.
Active la lista desplegable del quinto botn, haciendo clic en la flecha hacia abajo que
aparece al lado del botn. Seleccione la opcin Lectura.
Al seleccionar una opcin que forma parte de una lista desplegable de un botn de
tipo Dropdown, provoca la ejecucin de tbrBase_ButtonMenuClick. Este
procedimiento tiene un argumento implcito de tipo coleccin, con lo cual todas las
propiedades de dicha coleccin tambin constituyen un argumento implcito;
dentro de estas propiedades que actan como argumentos implcitos, est la propiedad
Key de la opcin de men perteneciente a un botn, misma que es utilizada en una
estructura Select Case. Todo lo anterior puede decirse de manera ms sencilla: al
ejecutarse el evento, ya se sabe qu opcin del men se seleccion de
ButtonMenu.Key.
La estructura Select Case considera para su ejecucin el nombre de la opcin
seleccionada (ButtonMenu.Key); en este caso, la opcin seleccionada fue Lectura,
por lo que actualiza el segundo panel de la barra de estado, especificando que la
operacin que se desea hacer es leer.
Haga clic en el quinto botn (no despliegue el men).
Los botones de tipo Dropdown tiene doble funcin: despliegan un men, pero
tambin actan como botones normales. Al hacer clic, se ejecutar el procedimiento
tbrBase_ButtonClick. A travs del argumento implcito Button.Key, el
procedimiento de evento sabe que hizo clic en el quinto botn, que se llama
operacin, y ejecuta el cdigo que le corresponde dentro del Select Case.
La accin que corresponde es la de enviar un mensaje que contiene el resumen de
todas las opciones seleccionadas hasta el momento. Para ello nos apoyamos en los
valores de los ltimos paneles seleccionados.

_____________________________________________________
Resumen
En este captulo:
Vimos cmo activar los controles del componente Microsoft Windows Common
Controls en un proyecto de Visual Basic.
Vimos cmo se utiliza el control ProgressBar.
Vimos cmo se utiliza el control TreeView.
Vimos la estructura y organizacin de elementos del control TreeView, a travs
de nodos, y su relatividad.





538 Parte 3: Controles grficos y programacin orientada a eventos
Vimos la asociacin de contenedores de imgenes ImageList con otros controles ActiveX
preparados para la utilizacin directa de dicho contenedor.
Vimos cmo se utiliza el control StatusBar.
Vimos cmo los paneles de una barra de estado pueden tomar directamente valores del
sistema.
Vimos cmo se utiliza el control ToolBar.
Vimos las clases de botones que se pueden especificar en una barra de herramientas, tales
como los botones de activar y desactivar, y botones que actan como mens de lista
desplegable.
Es importante que domine el contenido del captulo si desea que sus aplicaciones se vean y se
sientan como aplicaciones profesionales de Windows.















Parte 4
Archivos
y bases de datos
Existe una verdad irrefutable: la mayora de las organizaciones
paga por desarrollos que actualicen bases de datos; lo dems es
extra.
Las bases de datos son las fuentes de la informacin, misma que
permite tomar decisiones de negocios que determinan el xito o
fracaso de una organizacin.
En esta parte del libro nos ocuparemos de aprender cmo generar
bases de datos de escritorio y centralizadas, de tal manera que
pueda construir tanto aplicaciones sencillas como aplicaciones
multiusuario con acceso a bases de datos robustas como SQL
Server, ORACLE, Informix, etctera. Para ello exploraremos,
mediante Visual Basic, las colecciones de objetos DAO y ADO,
as como enlaces ODBC.
Tambin veremos el uso del control Data, y la forma en que
podemos utilizar los archivos de texto plano para la transferencia
de informacin entre bases de datos de diferentes plataformas y
controladores de bases de datos.
Tambin aprenderemos la manera de elaborar informes de base
de datos para salida en papel o pantalla, utilizando el Data Report.
Despus de esta parte quedar listo para trabajar en cualquier
empresa, utilizando Visual Basic.
Aprender el manejo de bases de datos es la parte ms rentable
de todo curso o seminario de Visual Basic, y por qu no, de la
lectura de cualquier libro del lenguaje. Squele partido!
Captulos:
22, 23, 24.25,26,27
28,29.30
Nmero de prcticas: 32


539



540





















Captulo
22
Bases de datos
y DAO
Objetivo
Uniformar conceptos de bases de datos, a fin de que los captulos que tratan la crea-
cin y manipulacin de bases de datos sean mejor entendidos.
Al finalizar este captulo deber:
Conocer la teora de las bases de datos
Saber qu son las bases de datos, las tablas, los registros y los campos
Saber qu es una clave primaria y qu es una clave externa
Saber qu es la integridad referencial
Saber qu es DAO y cul es su jerarqua
Saber qu es el DDL y el DML
Si usted es un experto en bases de datos, slo lea lo relativo a DAO y comprenda
claramente la estructura de la base de datos Ventas que utilizaremos en esta parte 4
del libro. Si no es experto en bases de datos, lea todo el captulo y entienda los con-
ceptos, ya que de lo contrario no encontrar lgica alguna.
541




542 Parte 4: Archivos y bases de datos
Conceptos de bases de datos
Uno de los pilares de la computacin y su evolucin es la capacidad de las aplica-
ciones de almacenar datos. Si las computadoras fueran incapaces de almacenar datos,
seran como simples calculadoras; aquellas tareas complejas o muy extensas seran
imposibles y la determinacin de la informacin recaera en el hombre y otros medios
de registro hasta cierto punto primitivos hoy en da.

Todos sabemos que es importante almacenar informacin. Nuestra misin como pro-
gramadores, atendiendo este aspecto, es garantizar que el almacenamiento se realice
correctamente.
Resulta importante ver algunos conceptos de bases de datos que es necesario conocer
antes de dominar el manejo de datos a travs de Visual Basic; ciertamente este libro
no es para ensearle anlisis y modelacin de bases de datos, pero resulta conveniente
realizar un breve repaso de conceptos con la finalidad de unificar trminos.
Base de datos, tabla, registro y campo
Una base de datos es una coleccin de datos organizados de tal forma que puedan ser
recuperados y procesados para generar informacin, para un propsito especfico.
Existen varios enfoques de base de datos (jerrquico, redes, relacional, orientado a
objetos); el que nos interesa, por ser el mas utilizado es el modelo relacional.
==================================================
Nota: El modelo relacional es el modelo de datos que mayor marketshare posee;
todas las bases de datos importantes, tales como SQL Server, Informix, Oracle,
Progress, FoxPro, Access, entre otras, basan su manejo en dicho modelo.
==================================================
En el modelo relacional, la base de datos se compone de tablas. Una tabla puede vi-
sualizarse como una matriz de datos de dos dimensiones, que almacena datos de una
sola naturaleza, uniforme y completa.
La tabla puede estar compuesta por una o ms columnas, a las que se les conoce como
campos, tambin llamados atributos.
La tabla puede contener una o ms filas, a las que se les conoce como registros; un
registro es una ocurrencia de la coleccin de campos.






Captulo 22: Base de datos y DAO 543
Los equivalentes en ingls de los trminos que hemos definidos son utilizados por
Visual Basic para simplificar el uso del lenguaje, haciendo que dichas palabras sean
de uso reservado; base de datos, tabla, registro y campo, tendrn significado en Visual
Basic a travs de las palabras Datbase, Table, Record y Field, respectivamente.

En este caso, la tabla Articulo, tiene 3 campos (IDArticulo,
NombreArticulo, PrecioUnitario); contiene 4 ocurrencias de todos los
campos, es decir, 4 registros. Conceptualmente hablando, en una tabla no se pueden
tener cantidades dispares de ocurrencias entre los campos (por ejemplo, tener 10
ocurrencias del campo NombreArticulo, y slo 5 en el campo de
PrecioUnitario). A la obligacin de que en un registro, a cada uno de los
campos le corresponda uno y slo uno de los restantes, se le llama principio de
correspondencia. En un registro, a cada IDArticulo le corresponde uno y slo uno,
NombreArticulo y PrecioUnitario.
Clave primaria
Los registros son diferentes entre s, ya que si dos registros son exactamente iguales,
uno de ellos es innecesario. La diferencia entre los registros puede darse en uno o ms
campos; sera complicado tener que estar comparando un registro (campo por campo)
contra otro registro, a fin de encontrarles diferencias. Hacer ese tipo de comparacin
sera como determinar que dos pginas de un libro son distintas, basndonos en la lec-
tura de ambas hojas hasta encontrar las discrepancias; qu es lo que hacemos para
saber que una pgina es diferente de otra? Leemos la pgina. Ese dato es el mnimo,
suficiente y necesario para diferenciar las pginas una de otra.
Al conjunto de campos que en cantidad mnima, suficiente y necesaria identifican
como nico a un registro dentro de una tabla, se le llama clave primaria. Ejemplos de
claves primarias aplicadas en la prctica son muchas. Nmero de seguro social, N-
mero de licencia de conducir. Nmero de matrcula escolar, etctera. Las caracters-




544 Parte 4: Archivos y bases de datos
ticas de la cantidad de campos que componen la clave primaria (cantidad mnima,
suficiente y necesaria), se justifica con el siguiente ejemplo: suponga que en una tabla
desea almacenar los registros de las licencias de manejo; suponga que los campos son
los siguientes:
Licencia = NumeroLicencia + NombreConductor +
ApellidoPaterno + ApellidoMaterno +
FechaNacimiento + TipoLicencia.
Por ejemplo, no podra escoger como clave primaria los campos de
NombreConductor + ApellidoPaterno + ApellidoMaterno, en virtud
de que es posible, aunque remotamente, que los nombres de dos personas coincidan de
manera exacta; por tanto la clave primaria ya no cumplira con su funcin de
identificar de manera nica a los registros en todos los casos.
Otra posibilidad equivocada sera NumeroLicencia + FechaNacimiento.
Es equivocada debido a que no es la cantidad mnima de campos, ya que el
NumeroLicencia slo cumple adecuadamente como clave primaria, sin embargo,
la presencia de FechaNacimiento es excesiva.
La clave primaria, compuesta por el campo NumeroLicencia, es la ms adecuada
para este ejemplo: identifica como nico a cada registro y es el nmero mnimo
suficiente y necesario de campos.
A los campos que forman parte de la clave primaria se les denomina campos primos o
primarios. A los que no forman parte de la clave primaria se les llama campos no
primos o complementarios. ,
Si la clave primaria est compuesta por un solo campo, se le considera clave primaria
simple, si consta de 2 o ms campos, se le considera clave primaria compuesta. No
debe haber 2 tablas con la misma clave primaria, ya que en ese caso procede a unir los
campos no primos de ambas para que formen una sola tabla.
Clave externa y relaciones
Por lo general, las bases de datos tienen ms de una tabla (aunque pueden consistir en
una sola tabla). Cuando la base de datos se compone de varias tablas, es comn que
unas complementen a otras. Cuando una tabla complementa a otra, se dice que
guardan una relacin. La relacin se puede percibir con la presencia de campos
comunes que permiten mantener el principio de correspondencia entre la informacin
distribuida en varias tablas.





Captulo 22: de datos y DAO 545
Lo ideal es que la tabla que requiere informacin de otra tabla contenga como parte de
sus campos aquellos que conforman la clave primaria de la tabla que se quiere utilizar
en correspondencia. Cuando los campos primos de una tabla se encuentran dentro de
otra tabla, se dice que stos conforman una clave externa (en virtud de que permiten
acceder datos "de afuera").
A la tabla que requiere la informacin de otra, es decir, que posee la clave externa, se
le llama tabla cliente; la tabla que es accedida en funcin a una clave primaria, se le
llama tabla servidora. A los campos coincidentes que se encuentran tanto en la tabla
servidora como en la cliente y que permiten establecer la relacin entre las tablas se
les llama campos de coincidencia.
Integridad referencial
Si por cada registro de la tabla servidora debe existir al menos un registro en la tabla
cliente, se dice que la relacin existente entre dichas tablas es una relacin de inte-
gridad. Cuando existe relacin de integridad, y sta se da, se dice que hay corres-
pondencia.
En una relacin de integridad, si para cada uno de los registros de una tabla corres-
ponde uno y slo uno de la otra tabla, se dice que hay una relacin de uno a uno
(1:1); si por cada uno de los registros de una tabla corresponde uno o ms de la otra
tabla, se dice que hay una relacin de uno a muchos (1:). Las relaciones muchos a
muchos no existen, ya que en ese caso, se da pie a la formacin de una nueva tabla,
llamada tabla de relacin, compuesta por las claves primarias de las tablas que tienen
dicha relacin.
Cuando existe una relacin de integridad entre tablas, los registros de la tabla cliente
no puede existir sin los de la tabla servidora; esto obliga que para poder aadir regis-
tros en la tabla cliente, primero se tienen que agregar registros en la servidora; por
otro lado, no podrn borrarse los registros en la tabla servidora mientras existan
registros asociados a stos en la tabla cliente.
Se dice que hay integridad referencial cuando en todos los casos existe correspon-
dencia entre los registros de las tablas que tienen relacin de integridad.
ndices
Los ndices son referencias lgicas a la ubicacin fsica de los registros, sobre la base
de un criterio que determina su organizacin y posicin dentro de un orden. Los ndi-
ces se utilizan para la localizacin rpida de registros, y algunas veces, para ordenar
los registros; por lo general, para su mantenimiento interno, las claves de las tablas se
almacenan en los ndices.









546 Parte 4: Archivos y bases de datos

=====================================================
Nota: En Visual Basic se pueden manejar las bases de datos .mdb, que son las uti-
lizadas por Microsoft Access. Al crear una base de datos .mdb, cuando se genera una
clave primaria, se genera un ndice denominado clave primaria.
=====================================================



>> Anlisis de un modelo relacional de bases de datos. [22.01]
A continuacin aprender a reconocer elementos de un modelo de datos.
1. Anlisis de la tabla Venta:










Captulo 22: de datos y DAO 547
2. Anlisis de la tabla Vendedor:



Ejemplo: base de datos "Ventas"
Para poder ilustrar los ejemplos de base de datos, es necesario contar con una base de
datos de muestra. En nuestro caso, dicha base de datos se llama Ventas, y almacena
las transacciones comerciales de una empresa que vende equipos de cmputo en
remate.
====================================================
Nota: Slo se manej un cuadro bsico de datos que permite ejemplificar la creacin
y manipulacin de bases de datos. No busque en el ejemplo un modelo de datos para
sistemas de punto de ventas porque no lo va a encontrar. Si puede con lo sencillo, podr
con lo complejo, pero eso es materia de otro texto. Por convencin, los nombres de
tablas y campos no incluyen acentos.
====================================================
El ejemplo sobre el que vamos a trabajar tiene las siguientes tablas:
Vendedor = *IDVendedor + NombreVendedor
Venta = *IDVenta + FechaVenta + IDVendedor
Articulo = *IDArticulo + NombreArticulo + PrecioUnitario
Venta_Articulo = *IDVenta + IDArticulo + Cantidad






548 Parte 4: Archivos y bases de datos
====================================================
Nota: El modelo que presentamos con anterioridad est expresado como Diagrama de
Estructura de Datos (DED), donde Archivo es igual a *Campo1 + Campo2 +
... + CampoN, y donde los campos primos siempre van colocados al principio,
identificados por un asterisco.
====================================================
El contenido de las tablas es el siguiente:
Vendedor almacena la informacin de cada uno de los vendedores que pueden
realizar ventas en la compaa. Consideraciones de integridad: toda venta que se
realice, necesariamente debi haber sido hecha por un vendedor registrado. No
necesariamente todos los vendedores han realizado ventas. No se puede eliminar a
un vendedor mientras tenga ventas asociadas a l.
Venta almacena los datos generales de una venta. Consideraciones de integridad:
toda venta fue realizada por un vendedor registrado. Toda venta debe corresponder
al menos a la venta de un artculo en una cantidad determinada.
Articulo almacena los diversos artculos que pueden ser vendidos. Conside-
raciones de integridad: toda venta que se realice corresponde a un artculo re-
gistrado. No necesariamente todos los artculos han sido vendidos. No se puede
eliminar a un artculo mientras tenga ventas asociadas a l.
Venta_Articulo es una tabla de relacin; determina qu artculos y en qu
cantidad se vendieron. Consideraciones de integridad: la venta de un artculo en
determinada cantidad se especifica en esta tabla; tanto la venta como el artculo
deben existir antes de que puedan ser respaldados por el contenido de esta tabla.
Cada registro de la tabla Venta debe tener al menos un registro asociado en
Venta_Articulo, ya que de otra forma no puede existir.
Existe una representacin grfica, denominada Diagrama de Entidad Relacin que
permite lo siguiente:
Identificar las tablas que componen la base de datos
Identificar los campos que componen cada una de las tablas
Identificar la clave primaria de cada una de las tablas
Identificar la(s) clave(s) externa(s) de cada una de las tablas
Identificar las relaciones entre las tablas





Captulo 22: de datos y DAO 549
Aplicado a nuestro ejemplo, quedara como sigue:


>> Identificacin de elementos del modelo de datos. [22.02]
A continuacin aprender a reconocer elementos de un modelo de datos.
1. Mencione cuntos elementos de cada cosa se encuentran en el modelo de datos de
la base de datos Ventas.







550 Parte 4: Archivos y bases de datos
El motor de base de datos Microsoft Jet
Visual Basic proporciona capacidad de acceso a datos basada en el motor de base de
datos Microsoft Jet, que es el mismo que utiliza Microsoft Access. El motor Jet con-
trola las tres funciones bsicas de base de datos, que son:
Almacenamiento. Adicin de datos a la base de datos.
Recuperacin. Lectura de datos de la base de datos.
Actualizacin de datos. Modificacin o eliminacin de datos ya contenidos en
la base de datos.
Asimismo, proporciona la poderosa interfaz de programacin orientada a objetos:
Objetos de Acceso a Datos (DAO).
Una aplicacin de bases de datos en Visual Basic consta de tres partes, como lo mues-
tra la figura 22.4:

El motor de base de datos siempre est entre su programa y los archivos fsicos de
bases de datos (archivos de extensin .mdb).
La interfaz de usuario y el cdigo de aplicaciones
La interfaz de usuario es lo que el usuario ve y con lo que interacta; algunas aplica-
ciones de interfaz son conocidas como front-end, que slo sirven para recibir datos
vlidos para la base de datos y aceptar comandos que sern transmitidos a un motor de
base de datos externo a la aplicacin que se encarga del manejo de los datos. Algunos
motores de base de datos muy famosos son SQL Server, Oracle e Informix.
A estas alturas ya sabe cmo generar una interfaz de usuario, que estar compuesta por
formularios que permiten al usuario agregar, examinar y actualizar la base de datos.
Estos formularios se manipulan mediante el cdigo de Visual Basic de las aplica-

Captulo 22: Base de datos y DAO 551
ciones, incluyendo los objetos de acceso a datos y los mtodos para solicitar servicios
de bases de datos tales como agregar o eliminar registros o ejecutar consultas.
Las solicitudes de servicios no se realizan sobre el archivo fsico de base de datos,
sino que es el motor de base de datos Jet el que realiza las operaciones solicitadas en
el almacn de datos y devuelve el resultado deseado a la aplicacin. De ah que se
requiera que est de intermediario, tal como se mostr en la figura 22.4.
El motor de base de datos
El motor de base de datos Jet est contenido en un conjunto de archivos .dll que se
vinculan con su programa de Visual Basic en tiempo de ejecucin. Su funcin es con-
vertir las solicitudes de la aplicacin en operaciones fsicas del almacn de datos. El
motor de base de datos es el que realmente lee, escribe y modifica la base de datos, y
controla todas las tareas cotidianas, como indexacin, bloqueos, seguridad e integri-
dad referencial, aunque pareciera que la interfaz sea la que lo hace.
El motor de base de datos tambin contiene un procesador de consultas que acepta
cdigo del Lenguaje de Consultas Estructurado (SQL) y acta sobre ellas para llevar
a cabo las operaciones deseadas en la base de datos, as como un procesador de resul-
tados para administrar los resultados devueltos por las consultas.
El almacn de datos
El almacn de datos est formado por el archivo o los archivos que contienen fsica-
mente las tablas de base de datos y su contenido. Para bases de datos nativas de
Visual Basic o Microsoft Access, es un archivo de extensin .mdb. En el caso de
otras bases de datos puede ser un directorio que contenga archivos .dbf
(FoxPro/dBase), u otras extensiones.
Su aplicacin puede tener acceso a datos almacenados en varios archivos y formatos
de bases de datos diferentes. En cualquier caso, el almacn de datos es esencialmente
pasivo. Contiene los datos, pero no realiza nada con ellos, es un contenedor.
En resumen, las tareas a realizar en el almacn de datos sern realizadas por el motor
de base de datos en atencin a lo requerido por la interfaz.

DAO
Visual Basic maneja todo en forma de objetos; los controles son una fuente de objetos
basados en una clase determinada, de la cual nosotros podemos disponer para crear
una interfaz y darle funcionalidad a las aplicaciones. Un botn de comando es un
objeto basado en un control denominado CommandButton. y su definicin es sen-
552 Parte 4: Archivos y bases de datos
cilla; a partir de ah, el objeto dispondr de propiedades, mtodos y procedimientos
de evento que permitirn hacer todo lo que sea posible hacer a travs del objeto. Las
bases de datos tambin se manejan en funcin a objetos, aunque definitivamente
stos son ms complejos que un objeto basado en CommandButton. El nombre
que se le da al conjunto de objetos que permiten la manipulacin de datos en Visual
Basic, es Objetos de Acceso a Datos (DAO).
Visual Basic proporciona dos mtodos para crear una interfaz con el motor de base de
datos Jet: el control Data, que se ver en un captulo posterior, y los objetos de
acceso a datos. El control Data le ofrece una capacidad limitada para tener acceso
sin programacin a bases de datos existentes, y el modelo DAO es una interfaz
completa de programacin que le proporciona un control total de la base de datos.
Estos dos mtodos no son incompatibles entre s; de hecho, hay muchas ocasiones en
que deber emplear ambos al mismo tiempo. Dependiendo la profundidad y
complejidad de lo que desee hacer con los datos, deber decidirse por alguna de estas
alternativas.
El modelo DAO es una coleccin de clases de objetos que modelan la estructura de
un sistema de base de datos relacional. Proporcionan las propiedades y los mtodos
que le permitirn llevar a cabo todas las operaciones necesarias para administrar un
sistema basado en el modelo relacional, que como ya comentamos, es el ms impor-
tante hoy en da. Este manejo incluye funciones para crear bases de datos, definir
tablas, campos e ndices, establecer relaciones entre las tablas (DDL) y desplazarse
por la base de datos, modificar el contenido de la base de datos y crear consultas
sobre ella (DML).
El motor de base de datos Jet convierte estas operaciones, definidas sobre objetos de
acceso de datos, en operaciones fsicas que se efectan directamente sobre los propios
archivos de las bases de datos (almacn fsico) y que controlan todos los mecanismos
de interfaz con las distintas bases de datos compatibles.
La programacin de bases de datos en Visual Basic consiste en la creacin de objetos
de acceso a datos, como los objetos Database, Workspace, TableDef,
Field, Relation e Index, que corresponden a las distintas partes de la base
de datos fsica a la que desea tener acceso. Puede utilizar las propiedades y los
mtodos de estos objetos para realizar operaciones en las bases de datos. Mediante
controles dependientes e independientes puede mostrar en pantalla los resultados de
estas operaciones y aceptar la entrada de datos por parte del usuario en aplicaciones
de Visual Basic. Es importante que considere que los objetos mencionados
anteriormente tienen un manejo lgico, que a fin de cuentas desencadenar un manejo
fsico.
Este mtodo simplifica el cdigo que debe escribir, y hace independientes entre s el
manejo lgico y fsico de la base de datos. Manejar las bases de datos a travs de
DAO proporciona una gran flexibilidad, ya que es posible utilizar los mismos objetos,
propiedades y mtodos para trabajar con la gran variedad de formatos de base de
datos compatibles. Si cambia de un formato de base de datos a otro, por ejemplo si
pasa una base de datos local de Microsoft Access a una base de datos de SQL Server
Captulo 22: Base de datos y DAO 553
u Oracle en una red, slo tendr que efectuar unos pocos cambios en el cdigo. In-
cluso puede crear aplicaciones que combinen tablas de dos o ms bases de datos dis-
tintas en una nica consulta.
Hay tres categoras de bases de datos que Visual Basic reconoce a travs de DAO y
del motor Jet:
Bases de datos de Visual Basic
Tambin denominadas bases de datos nativas, estos archivos de base de datos
utilizan el mismo formato que Microsoft Access (extensin .mdb). El motor Jet crea
y manipula directamente estas bases de datos, con las ventajas y desventajas que
proporcionan.
Bases de datos externas
Son bases de datos del Mtodo de Acceso Secuencial Indexado (ISAM) que se pre-
sentan en varios formatos populares, incluidos Btrieve, dBASE III, dBASE IV, Fox-
Pro y Paradox (en versiones donde la base de datos se compone por un conjunto de
archivos no integrados). Puede crear o manipular desde Visual Basic todos estos for-
matos de base de datos y puede tener acceso a bases de datos de archivos de texto y a
hojas de clculo de Microsoft Excel o 1-2-3, de Lotus.
Bases de datos ODBC
Incluyen las bases de datos cliente - servidor que cumplen el estndar ODBC, por
ejemplo SQL Server, ORACLE, Informix, etctera.

============================================================
Nota: Hay otros mtodos de acceso a datos compatibles con Visual Basic que no
utilizan el motor de base de datos Jet, que sern necesarios para usted cuando sus sis-
temas manejen bases de datos realmente distribuidas y de concurrencia mltiple.
El modo ODBCDirect de los objetos DAO le permite tener acceso directo a datos
ODBC si emplea el mismo modelo de objetos y sintaxis (lo que reduce su curva de
aprendizaje) pero no utiliza el motor Jet.
La edicin empresarial incluye la biblioteca deObjetos de Datos Remotos (RDO) y el
Control de Datos Remotos (RDC), que permiten tener acceso directo a los datos
ODBC; estos temas se vern en otro captulo de este libro.
============================================================
DAO se organiza jerrquicamente, agrupando objetos y colecciones. La figura 22.5
muestra la jerarqua de clases que componen DAO.
La comprensin de la jerarqua es fundamental, ya que si no se entiende, no sabr
con certeza qu est haciendo al trabajar con bases de datos en Visual Basic.
554 Parte 4: Archivos y bases de datos

Clases, objetos y colecciones
La nocin de jerarqua de objetos simplemente quiere decir que los objetos pueden
contener a su vez a otros objetos, los cuales pueden volver a contener a otros objetos.
Esto se consigue mediante un tipo especial de objeto llamado coleccin. El nico
propsito de una coleccin es contener a otros objetos. Todos los objetos que estn
contenidos en una determinada coleccin del mismo tipo.
En la figura 22.5 quisimos diferenciar de manera visible a DBEngine de los dems
elementos. DBEngine se encuentra en la parte superior de la jerarqua; ste
corresponde al motor de base de datos Microsoft Jet propiamente dicho. El objeto
DBEngine es el nico objeto de acceso a datos que no est contenido en ningn otro.

============================================================
Nota: Recuerde la discusin que se encuentra al principio del libro, sobre la dife-
rencia entre control y objeto; un objeto es una ocurrencia de un control, de una clase;
visto dentro de la terminologa de programacin orientada a objetos, una clase es un
elemento a partir del cual se generarn otros con su misma apariencia y funcionali-
dad. En este captulo se llamar "objetos" a algunas clases, como Workspace,
Database, etctera. Se utiliza as por simpleza, aunque de antemano usted sabe que
slo son objetos aquellos elementos creados por usted a partir de una clase.
============================================================
Despus de DBEngine, todos los objetos hacia abajo son de coleccin, es decir, pue-
den contener una o ms ocurrencias. Si el objeto sobre el que se basan otros objetos
es Workspace, la coleccin que se genere a partir de dicho objeto ser Workspaces;
note que el ltimo trmino est en plural, lo que indica que son varios los objetos
que existen en la coleccin.
Captulo 22: Base de datos y DAO 555
El esquema de jerarqua nos dice que:
Existe una coleccin llamada Workspaces, que contiene uno o ms objetos
Workspace.
Cada objeto Workspace tiene una coleccin Databases, la cual contiene uno o
ms objetos Database. . ,
Cada objeto Database tiene una coleccin TableDefs (definicin de tablas), que
contiene uno o ms objetos TableDef, y as sucesivamente.
La jerarqua obliga a que si no existe DBEngine. tampoco habr Workspace, y si no
hay Workspace, no puede haber Database, y si no hay Database no puede haber
TableDef, RecordSet ni Relation. Esta consideracin le determina qu orden debe
seguir al crear los objetos que conformarn su coleccin DAO.
Divisiones de la programacin de bases de datos
Ahora ya conoce los conceptos bsicos de bases de datos, sabe que existe DAO y
sabe que tendr que aprender el manejo de colecciones. El siguiente paso es mostrar
cmo se juntan las diversas piezas para crear aplicaciones de base de datos. Hay dos
reas principales donde se pueden clasificar las tareas de programacin de bases de
datos.
Los trminos comunes para estas reas son:
Lenguaje de Definicin de Datos
Lenguaje de Manipulacin de Datos
Esto no implica que haya dos lenguajes distintos. Es simplemente una forma de agru-
par los elementos del lenguaje (en este caso, objetos de acceso a datos, propiedades y
mtodos) que se usan para definir la estructura de una base de datos y aquellos que se
usan para manipularla.
Lenguaje de Definicin de Datos
El Lenguaje de Definicin de Datos (DDL) consta de las propiedades y mtodos uti-
lizados para definir y crear la propia base de datos, incluyendo sus tablas, campos,
relaciones, etctera. En la terminologa tradicional de base de datos, este conjunto de
definiciones constituye el esquema de la base de datos.
La definicin de la base de datos es normalmente una operacin que se realiza una
vez, ya que el motor Jet almacena en la propia base de datos los objetos de acceso a
datos que definen el esquema. Una vez creada la base de datos, no es necesario es-
pecificar su estructura para tener acceso a ella. Con slo abrir la base de datos, todos
556 Parte 4: Archivos y bases de datos
sus objetos, incluidos los que definen su estructura, quedan bajo el control de la inter-
faz de DAO.
Lenguaje de Manipulacin de Datos
El Lenguaje de Manipulacin de Datos (DML) consta de las propiedades y los mto-
dos utilizados para escribir aplicaciones que manipulan y tienen acceso a bases de
datos existentes. Esto incluye caractersticas para consultar la base de datos,
desplazarse a travs de sus tablas, realizar actualizaciones y agregar o eliminar
registros.
Si est trabajando exclusivamente con bases de datos que ya han sido creadas por otra
aplicacin, es posible crear aplicaciones incluidas totalmente en la funcionalidad del
DML. No obstante, comprender los mtodos DDL enriquecer su conocimiento de la
estructura de bases de datos y aumentar su flexibilidad como programador de las
mismas.

____________________________________________________
Resumen
En este captulo:
Vimos la teora de base de datos
Vimos qu son las bases de datos, tablas, registros y campos
Vimos qu es una clave primaria y qu es una clave externa
Vimos qu es la integridad referencial
Vimos qu es DAO y cul es su jerarqua
Vimos qu es el DDL y el DML
Este captulo brinda un panorama general de las bases de datos, y establece un marco
de referencia de trminos que ya no se explicarn en el resto del libro.
Algunas respuestas a los ejercicios
[22.01] Anlisis de un modelo relacional de base de datos.
1. a) Venta, b) IDVenta. c) Simple, d) IDVenta. e) S,
(hay dos posibles respuestas.)
Captulo 22: Base de datos y DAO 557

e.l) Vendedor, e.2) S, e.3) IDVendedor. f) Cliente.
e.l) Venta_Detalle, e.2) S, e.3) IDVenta. f) Servidora.
2. a) Vendedor, b) IDVendedor. c) Simple, d) IDVendedor. e) S. e.l) Venta,
e.2) S, e.3) IDVendedor. f) Servidora.
[22.02] Identificacin de elementos en el modelo de datos.
1. 1
2. 4
3. 11
4. 4 (1 por tabla)
5. 3
6. 3 (1 por clave externa)
7. 7 (1 por cada clave primaria, ms 1 por clave externa)
558

































































Captulo
23
Lenguaje de Definicin
de Datos y DAO
Objetivo
Conocer el uso de las instrucciones que componen el Lenguaje de Definicin de
Datos disponible a travs de DAO.
Al finalizar este captulo deber:
Conocer la jerarqua de DAO y cmo manejar sus colecciones
Aprender a declarar variables objeto
Aprender a utilizar el bloque With
Aprender a crear almacenes de datos fsicos
Aprender a definir bases de datos, espacios de trabajo, campos, ndices y relaciones
Aprender a implementar ingeniera inversa a travs de las colecciones de objetos de
DAO
Aprender a implementar un modelo de datos relacional en Visual Basic
Es importante que conozca esta teora si no dispone de Access y desea entrar al mundo
de las bases de datos en Visual Basic.
559
560 Parte 4: Archivos y bases de datos
Lenguaje de Definicin de Datos
El Lenguaje de Definicin de Datos (DDL) est compuesto por las instrucciones que
utilizan la jerarqua DAO para crear una estructura de base de datos.
DDL est relacionado de manera inseparable al proceso de creacin de una base de
datos, que a su vez est ntimamente ligado a la definicin de cada uno de los niveles
de la jerarqua DAO. Al utilizar DAO se pretende lo siguiente:
Habilitar DAO (DBEngine)
Definir una base de datos (Database)
Definir un espacio de trabajo (Workspace) para la base de datos
Realizar las definiciones de tablas (TableDef)
Realizar las definiciones de campos (Field)
Realizar las definiciones de ndices (Index)
Realizar las definiciones de las relaciones (Relation)
Asignar propiedades especficas de la base de datos
Integrar de la base de datos

=============================================================
Nota: La edicin de aprendizaje de Visual Basic incluye un conjunto limitado de las
capacidades de acceso a datos del motor Jet. Las herramientas disponibles le permiten
tener acceso a bases de datos existentes, pero no le permiten crear nuevas bases de
datos ni objetos de acceso a datos, por lo cual DDL no est disponible. La edicin
profesional incluye todas las caractersticas del control Data y adems proporciona la
interfaz de programacin de los objetos de acceso a datos. La edicin empresarial
agrega varias herramientas potentes de cliente servidor a la capacidad de acceso a
datos de Visual Basic, como el Control de Datos Remotos (RDC) y la biblioteca de
Objetos de Datos Remotos (RDO), diseados especficamente para tener acceso a
bases de datos remotas ODBC bajo un esquema cliente servidor.
=============================================================

Captulo 23: Lenguaje de Definicin de Datos y DAO 561
Tipos de objetos en DAO
Antes de poder disponer de los objetos que proporciona DAO, debe disponer de dicha tecnologa.
Para agregar DAO a un proyecto, es necesario que incluya en ste la referencia Microsoft DAO Object
Library ms reciente de que disponga.
Una vez que agregue la referencia a su proyecto, dispondr de todos los objetos y colecciones que
ofrece DAO.

========================================================================
Nota: A partir de la versin 5.0 de Visual Basic, se incluy una versin de la referencia Microsoft
DAO Object Library que slo se aplica a plataformas de 32 bits, aunque es compatible con las
aplicaciones desarrolladas de 16 bits. Seguramente, la versin que usted posee de la biblioteca DAO
ser superior a la 3.5, y aplicar la misma restriccin. Ms adelante conocer las restricciones
existentes para tener acceso a bases de datos nuevas, como Access 2000.
========================================================================

Existe la siguiente prelacin lgica entre los elementos de una base de datos relacional:
Base de datos -> Tabla -> Campo
Podramos decir que de una base de datos depende una coleccin de tablas, y que de cada tabla
depende una coleccin de campos. La jerarqua de los objetos DAO respeta esa prelacin, y adems
incluye otros elementos, como el DBEngine y el Workspace. La siguiente tabla muestra algunos de
los elementos que tendr disponibles al momento de agregar la referencia:
Tipo de objeto

Mtodo de creacin

Coleccin que depende
del objeto
DBEngine

Al incluir la referencia
a Microsoft DAO Object
Library en el proyecto
Workspaces

Workspace CreateWorkspace Databases
Database CreateDatabase TableDefs
TableDef CreateTableDef Fields
Field CreateField
Index CreateIndex Fields
Relation CreateRelation

562 Parte 4: Archivos y bases de datos
Sintaxis para el uso de colecciones
La tercera columna de la tabla muestra la coleccin para la cual el tipo de objeto re-
presenta el elemento antecedente o determinante dentro de la relacin lgica de los
elementos.
DBEngine es el nico objeto de acceso a datos que no est contenido en ningn
otro, y por tal motivo no hay una coleccin llamada DBEngines. DBEngine
posee de manera descendente en la jerarqua una coleccin llamada Workspaces,
que contiene uno o ms objetos Workspace. Cada objeto Workspace tiene una
coleccin Databases la cual contiene uno o ms objetos Database. Cada objeto
Database tiene una coleccin TableDefs, que contiene uno o ms objetos
TableDef, y cada objeto TableDef tiene una coleccin Fields, que contiene
uno o ms objetos Field. El nombre de una coleccin es siempre el plural del objeto
que contiene.
Es posible tener acceso a los objetos miembro de una coleccin a travs de un ndice
basado en cero.
Los objetos de la jerarqua DAO se identifican por la "ruta de acceso" completa a
travs de las colecciones anidadas a las que pertenecen, utilizando el separador "."
(punto). Por ejemplo:
DBEngine.Workspaces(8).Databases(0).TableDefs(0).Fields("IDVenta")
Hace referencia al campo llamado IDVenta del primer TableDef de la coleccin
TableDefs, perteneciente al primer objeto Database de la coleccin
Databases, que a su vez pertenece al primer objeto Workspace de la coleccin
Workspaces de DBEngine.
Algunas colecciones tambin permiten ndices no numricos; como en el caso de
nuestro ejemplo, donde la coleccin Fields identifica sus elementos a travs de una
cadena ("IDVenta"), correspondiente a la propiedad Name del objeto Field, que
pertenece a la coleccin.
Cuando haga referencia explcitamente a un miembro de una coleccin puede utilizar
el separador "!" (signo de admiracin) en lugar del punto. Las siguientes expresiones
son equivalentes:
TableDefs(0).Fields("IDVenta")
Es lo mismo que:
MiTableDef.Fields!IDVenta
Captulo 23: Lenguaje de Definicin de Datos y DAO 563
Variables objeto
Ya vio la forma en que se asignan valores a las variables, y sabe que son nombres
que permiten referenciar posiciones de memoria en donde estn almacenados datos
en la RAM. Desde el momento de su definicin, prepare a las variables para que
almacenen un determinado tipo de datos (Integer, Single, Currency,
etctera).
Recuerde que la memoria RAM sirve para almacenar datos de manera temporal que
apoyan los procesos definidos por los programas; sin embargo, no es lo nico que se
almacena en la RAM, ya que en dicha memoria se cargan programas y otros elemen-
tos que tambin contribuyen a la obtencin de resultados a travs de la computadora.
Los objetos son elementos que tambin se almacenan en la memoria, referenciados
por un nombre.
Visual Basic permite que una variable haga referencia no a un dato, sino a un objeto
en la RAM; para ello se requieren dos condiciones:
Que la variable sea declarada para almacenar un tipo de objeto determinado, y no
un tipo de datos determinado.
Que la asignacin de un objeto a una variable se realice a travs de la instruccin
SET.
La sintaxis para el uso de la instruccin SET es la siguiente:
Set NombreVariable = ObjetoAAsignar
Para la definicin tambin se utiliza la instruccin Dim, e incluso est permitida la
definicin de matrices de objetos. Llamaremos variables objeto a las variables que
almacenan objetos en lugar de datos.
Una variable objeto se debe declarar no como un dato, sino como un objeto. Por
ejemplo, para habilitar una variable de nombre fldIDVenta para que maneje un
objeto de tipo Field, se requiere la siguiente lnea:
Dim fldIDVenta As Field
564 Parte 4: Archivos y bases de datos
Y al asignarle valor utilizando la instruccin SET, slo se podr asignar un objeto.
Por ejemplo:
Set fldIDVenta = Databases(0).TableDefs(0).Fields("IDVentas")
Una de las cosas que ms le llamarn la atencin es que las variables cuando son de-
claradas para trabajar con objetos, dispondrn de colecciones que son dependientes de
dichos objetos, tendrn propiedades y podrn utilizar mtodos.
>> Habilitacin de DAO. [23.01]
1. Inicie un nuevo proyecto EXE estndar.
2. Invoque la ventana Cdigo (F7).
3. En el rea de declaraciones generales escriba el siguiente cdigo:
Dim dbBase as
4. En ese momento debe aparecer el men contextual que le sugiere todas las posi-
bilidades de asignacin que tiene en el proyecto. Busque en la lista el elemento
DataBase. Encontr el elemento (s o no)?: _________
5. En caso de que haya o no aparecido el elemento DataBase, por qu cree que
sucede esto?




6. Cierre la ventana Cdigo.
7. Vaya al men Proyecto - Referencias.
8. Aparecer el cuadro de dilogo Referencias.
9. En la lista de referencias disponibles, busque Microsoft DAO Object Lbrary, en
la versin ms avanzada que tenga. Marque dicho control.
10. Haga clic en Aceptar.
11. Invoque la ventana Cdigo (F7).
Captulo 23: Lenguaje de Definicin de Datos y DAO 565
12. Escriba el siguiente cdigo en el rea de declaraciones generales:
Dim dbBase as
13. En ese momento debe aparecer el men contextual que le sugiere todas las posibilidades de
asignacin que tiene en el proyecto. Busque en la lista el elemento DataBase. Encontr el
elemento (s o no)?: _________
14. En caso de que haya o no aparecido el elemento DataBase, por qu cree que sucede esto?




>> DDL utilizando DAO: declaracin de variables objeto. [23.02]
frmCreaDB.frm
A continuacin aprender a utilizar el DDL que permite DAO, a fin de crear una base de datos.
Deber establecer la referencia Microsoft DAO Object Library en su proyecto.
Implementacin visual








566 Parte 4: Archivos y bases de datos
Tabla de objetos y propiedades de frmCreaDB

Codificacin de frmCreaDB
Editar cdigo(General ), Evento: Info.
Private Function Info(strAgregar As String)
txtInforme.Text = txtInforme.Text & vbCrLf & strAgregar
End Function
Editar cdigo: cmdCreaDB, Evento: Click.
cmdCreaDB.Enabled = False
Call Info("Inicio de creacin usando DAO")
Call Info("1: Verificar existencia de archivo")
If FileSystem.Dir("C:\avbp\cap23\Ventas.mdb") <> "" Then
FileSystem.Kill "C:\avbp\cap23\Ventas.mdb"
Call Info("Archivo eliminado")
Else
Call Info("El archivo no exista")
End If
Call Info("2: Preparar base de datos")
Captulo 23: Lenguaje de Definicin de Datos y DAO 567

Dim dbBase As Database
Call Info("3: Preparar espacio de trabajo")
Dim wsEspacio As Workspace
Call Info("4: Preparar tablas")
Dim tbdVendedor As TableDef
Dim tbdVenta As TableDef
Dim tbdArticulo As TableDef
Dim tbdVenta_Articulo As TableDef
Call Info("5: Preparar ndices")
Dim idxVendedor As Index
Dim idxVenta(1 To 2) As Index
Dim idxArticulo As Index
Dim idxVenta_Articulo(1 To 3) As Index
Call Info("6: Preparar relaciones")
Dim relVenta As Relation
Dim relVenta_Articulo(1 To 2) As Relation
Ejecucin
Haga clic en el botn Crear la base de datos.
Al hacer clic en el botn, se ejecuta el procedimiento de eventos cmdCreaDB_Click.
Se inhabilita el botn para que no se vuelva a hacer clic en l durante el proceso. Dicho
procedimiento inicia ejecutando la funcin de alcance privado Info. Esta funcin se
encargar de actualizar el contenido del objeto txtInforme, con lo que contenga en ese
momento, ms un salto de lnea, ms el texto que le proporcione como argumento a la
funcin. De esa forma, la funcin le permitir dar el seguimiento del proceso.
Para mayor sencillez explicativa, dividimos las tareas con un consecutivo numrico.
Segmento 1: verifica si la base de datos que se pretende crear ya existe; en caso de que ya exista el
archivo, procede a eliminarlo utilizando el objeto FileSystem. Se utilizar como directorio de
trabajo el C:\avbp\cap23, por ser el que aplica a este captulo.
Segmento 2: declara la variable objeto que manejar la base de datos. Se declara una variable objeto
Database para cada base de datos que se maneje.
568 Parte 4: Archivos y bases de datos
Segmento 3: declara la variable objeto que manejar el espacio de trabajo para la base de datos.
Se declara una variable objeto Workspace para cada base de datos que se maneje.
Segmento 4: declara las variables objeto que manejarn las tablas de la base de datos. Se declara
una variable objeto TableDef para cada una de las tablas que componen la base de datos.
Segmento 5: declara las variables objeto que manejarn los ndices que tiene cada tabla de la
base de datos. Se declara una variable objeto Index para cada uno de los ndices que se
requieran; se necesita uno por cada clave primaria o externa que tenga en una tabla. Aqu
podemos declarar variables objeto a travs de dos alternativas:
a) Variables objeto independientes:
Dim idxVenta_1 As Index
Dim idxVenta_2 As Index
b) Matriz de variables objeto:
Dim idxVenta(1 To 2) As Index
Encontramos la propuesta b) mucho ms prctica, y es por ello que utilizamos esta tcnica en
todos los objetos que definimos en el ejemplo, en donde se requieran ms de dos elementos
asociados a un mismo objeto padre.
======================================================================
Nota: Quiz se pregunte por qu no se declararon variables objeto de tipo Field. Esto se debe a
que los objetos Field no requieren la existencia de otros objetos dependientes para ser agregados
al objeto padre. En el caso de objetos como TableDef, Index y Relation, no pueden ser
agregados a sus objetos padre (Database, TableDef y Database, respectivamente) hasta que
se les hayan asociado campos o elementos, de ah que requieran variables objeto que realmente son
temporales y de trabajo.
En la siguiente prctica no pierda de vista que en la creacin de los ndices, la definicin de los
campos que los componen se realiza primero, utilizando variables objeto de tipo Field,
agregndolos (Append) al objeto padre (Index), tambin definido a travs de variables objeto.
En el caso de los objetos Field a asociar a los objetos TableDef, agregarlos puede ser un paso
inicial, lo que hace que no sean necesarias las variables objeto. Este mismo punto se discutir ms
delante.
======================================================================

Segmento 6: declara las variables objeto que manejarn las relaciones que existen entre
las tablas de la base de datos. Se declara una variable objeto Relation
Captulo 23: Lenguaje de Definicin de Datos y DAO 569
para cada una de las relaciones que se requieran; se necesita una relacin para
cada clave externa que tenga en una tabla.
1. Mencione cuntos objetos de cada tipo se definieron en el ejercicio:

2. Si encontrara que la tabla Vendedor de la base de datos Ventas ya
no fuera relevante, y eliminara dicha tabla del modelo, cuntos objetos
de cada tipo tendra que definir para crear el nuevo modelo de datos?

3. Revise el contenido del directorio C:\avbp\cap23 hay algn archivo
en dicho directorio (s o no)? __________

570 Parte 4: Archivos y bases de datos
4. Dnde se encuentran todas las definiciones que ha realizado hasta ahora?
___________________________________________


==============================================================
LO inesperado: Cuando trabaja con DAO, los errores ms comunes son:
No se ha definido el tipo definido por el usuario (error de compilacin). Se pre-
senta cuando intenta realizar la declaracin de una variable objeto sin haber
agregado al proyecto la referencia Microsoft DAO Object Library. Soluciones:
antes de utilizar cualquier elemento de DAO, asegrese de revisar que la refe-
rencia ya est incluida en el proyecto.
==============================================================
Espacio de trabajo e integracin de la base de datos
El espacio de trabajo, es un apartado de recursos de la computadora que se define para
poder realizar trabajos de base de datos.
Para poder disponer del espacio de trabajo (y de todas las definiciones de objetos rea-
lizadas hasta el momento), es necesario hacer asignaciones a travs de la instruccin
SET; a cada variable objeto se le deber asignar un objeto existente o bien uno de
nueva creacin.
Los espacios de trabajo disponibles estn definidos en su respectiva coleccin (Work-
spaces), misma que comienza con un elemento cero, que se incrementa a medida
que se definen espacios de trabajo nuevos.
En la prctica 23.01 defini todos los objetos que necesita para crear la base de datos,
sin embargo, an no la ha creado.
Mtodos Create
Una vez definidos los objetos que se utilizarn para la creacin de la base de datos, es
necesario utilizar los mtodos Create de cada uno de los objetos. Por lo general, los
mtodos son iguales a la palabra Create+ Nombre del objeto, de tal forma que:
CreateDatabase Crea un objeto Database
CreateWorkSpace Crea un objeto Workspace
CreateTableDef Crea un objeto TableDef
CreateField Crea un objeto Field
CreateIndex Crea un objeto Index
CreateRelation Crea un objeto Relation


Captulo 23: Lenguaje de Definicin de Datos y DAO 571
Por lo general, los mtodos requieren argumentos y definiciones especiales:

Nombre es el nombre del archivo de base de datos a crear. Debe ser un nombre de
archivo vlido para el sistema operativo que est utilizando.
Localldad es la constante que especifica la localldad que tendr la base de datos.
Algunos valores que puede asignar en Localldad son los siguientes:

Opciones son las constantes o suma de ellas, que definen particularidades de la base
de datos. Algunos valores que puede asignar en Opciones son los siguientes:


Nombre es el nombre de la tabla a crear. Debe ser un nombre de tabla vlido para el
controlador de bases de datos que se est utilizando.




572 Parte 4: Archivos y bases de datos


Nombre es el nombre del campo a crear. Debe ser un nombre de campo vlido.
Tipo es el tipo de datos que tendr el campo. Algunos valores que podemos asignar en tipo son
los siguientes:


Tamao es el tamao que tendr el campo, expresado en bytes. En los campos de tipo
Text, representa el nmero de caracteres permitidos.

Nombre es el nombre del ndice.

Captulo 23: Lenguaje de Definicin de Datos y DAO 573
Nombre es el nombre de la relacin.
TablaServidora es el nombre de la tabla secundaria de la relacin, la que se accede a
travs de la clave externa.
TablaCliente es el nombre de la tabla primaria de la relacin, la que posee la clave
externa.
Atributo es la constante o suma de ellas, que determinan el comportamiento de la
relacin. Algunos de los atributos que pueden ser establecidos son:

Bloque With... End With
En ocasiones, es necesario realizar mltiples definiciones a las propiedades de un
mismo objeto. Para simplificar el cdigo, Visual Basic proporciona el bloque estruc-
tural With.
With tiene la siguiente sintaxis:
With Objeto
.PropiedadDeObjetol = Valor
.PropiedadDeObjeto2 = Valor
.PropiedadDeObjeto3 = Valor
End With
De tal forma que:
With txtInforme
.Caption = " "
.Multiline = True
.ScrollBars = 3
End With
es lo mismo que:
txtinf orine. Caption = ""
txtinforme.Multiline = True
txtinforme.ScrollBars = 3
574 Parte 4: Archivos y bases de datos
Siempre que Visual Basic encuentre un punto como inicio de una referencia a objeto,
asumir el valor de la definicin With, antes del punto.

Decida cul es la asignacin de valores a propiedades que ms le convenga.
>> DDL utilizando DAO: creacin del almacn de base de datos. [23.03]
frmCreaDB.frm
Continuacin de la aplicacin para definir una base de datos basada en el modelo
relacional, utilizando DDL y DAO.
Codificacin de frmCreaDB
Editar cdigo: Form, Evento: Deactivate.
dbBase.Close
Modificar cdigo: cmdCreaDB, Evento: Click.
(Contine el cdigo donde se qued en la prctica 23.02)

Call Info("7: Activar el espacio de trabajo")
Set wsEspacio = DBEngine.Workspaces(0)
Call Info("8; Generar la base de datos")
Set dbBase = _
wsEspacio.CreateDatabase("C:\avbp\cap23\ventas.mdb", _
dbLangGeneral, dbVersion30)
Captulo 23: Lenguaje de Definicin de Datos y DAO 575
Ejecucin
Se cierran las bases de datos al salir de la aplicacin.
Se defini un procedimiento de evento que se ejecutar en el momento en que la
aplicacin deje de estar activa (Form_Deactivate). Este procedimiento cierra
la base de datos que asociemos a la variable objeto dbBase. Esto es importante,
ya que proceder a crear una base de datos, y en el proceso dicha base de datos
estar abierta. Si no la cierra puede causar danos al archivo: evite problemas
tomando precauciones.
Se contina con el procedimiento cmdCreaDB_Click, despus de que se
declararon las variables objeto que se utilizarn para trabajar.
Segmento 7: se activa el espacio de trabajo que se utilizar para realizar tareas de
base de datos. La variable objeto wsEspacio servir para hacer referencia a
dicho espacio de trabajo.
Segmento 8: se genera, utilizando la variable objeto llamada dbBase, la base de
datos con nombre C:\avbp\cap23\Ventas.mdb. La variable objeto ahora repre-
senta un objeto Database, al cual se le asociaran las tablas que componen la
base de datos, as como las relaciones que las tablas guardan entre ellas.
1. Revise el contenido del directorio C:\avbp\cap23 hay algn archivo en
dicho directorio (s o no)? _________
============================================================
Lo inesperado: Cuando trabaja con el objeto FileSystem, los errores ms co-
munes son:
{Ruta} No es una ruta vlida (error 3044 en tiempo de ejecucin). Se presenta
cuando intenta crear una base de datos y la ruta en donde la desea crear no existe
o est mal referenciada. Soluciones: asegrese de que dicha ruta exista y est
bien referenciada.
Base de datos ya existe (error 3204 en tiempo de ejecucin). Se presenta cuando
desea generar una base de datos que ya fue creada. Soluciones:
CreateDatabase no sustituye archivos, por lo que deber verificar la
existencia del almacn de datos, y en caso de que proceda, deber eliminarlo a
travs del uso del objeto FileSystem, con su mtodo Kill.
============================================================

576 Parte 4: Archivos y bases de datos
Elementos requeridos para agregar objetos
La mayora de los objetos en la jerarqua DAO son creados a travs de mtodos
Create ; esto no representa que ya se hayan integrado a la base de datos. Un objeto
se integra a la base de datos cuando es asociado a su objeto padre a travs del mtodo
Append.
Hay que mencionar que algunos objetos requieren de otros de menor jerarqua para
tener razn de ser; por ejemplo, un objeto TableDef (que acta como objeto padre)
que no contenga objetos Field (que actan como objetos hijo), no tiene sentido: una
tabla sin campos. Existe la misma dependencia entre Index y Field, y entre
Relation y Field. Esto nos lleva a pensar que:

============================================================
Lo inesperado: Cuando trabaja con DAO, los errores ms comunes son:
No hay campos definidos No se puede agregar el objeto TableDef o Index
(error 3264 en tiempo de ejecucin). Se presenta cuando intenta agregar un ele-
mento a la base de datos, pero ste no contiene aquellos objetos que justifican su
existencia (por ejemplo, TableDef requiere de Field) Soluciones: defina los
objetos de acuerdo a lo establecido en la jerarqua DAO. Primero genere Work-
space, luego Database, luego TableDef, luego Field, luego agregue los
campos a TableDef y, por ltimo, agregue TableDef a Database.
============================================================

Para integrar una base de datos se debe apoyar en variables objeto, excepto en aquellos
tipos de objeto que no dependen de otros para justificar su existencia, como sera el
caso de Field. Vea el siguiente ejemplo, que genera una base de datos llamada
Prueba.mdb, que posee una tabla llamada Prueba y que contiene dos campos
llamados Campol y Campo2, ambos de tipo Integer. El siguiente ejemplo utiliza
variables objeto de trabajo, incluso para los objetos Field:
' Crea variables objeto de trabajo
Dim wsEspacio As Workspace
Dim dbBase As Database
Dim tbdTabla As TableDef
Captulo 23: Lenguaje de Definicin de Datos y DAO 577
Dim fldCampo1 As Field
Dim fldCampo2 As Field
' Prepara el espacio de trabajo
Set wsEspacio = DBEngine.Workspaces(0)
' Crea la base de datos
Set dbBase = wsEspacio.CreateDatabase("c:\Prueba.mdb", _
dbLangGeneral, dbVersion30)

Crea la tabla
Set tbdTabla = dbBase.CreateTableDef("Prueba")
' Crea los campos
Set fldCampo1 = tbdTabla.CreateField("Campo1", dbInteger)
Set fldCampo2 = tbdTabla.CreateField("Campo2", dbInteger)
' Integra los campos a la tabla, con lo cual
' la tabla justifica su existencia
tbdTabla.Fields.Append fldCampo1
tbdTabla.Fields.Append fldCampo2
' Ya justificada, la tabla se puede agregar a la base
' de datos

dbBase.TableDefs.Append tbdTabla
' Cierra la base de datos
dbBase.Close
Esta otra alternativa es para hacer lo mismo, pero sin utilizar variables objeto de tra-
bajo para los objetos Field, y utilizando bloques With. Observe que en este caso
la misma definicin de creacin del objeto Field sirve para definir las propiedades.
' Crea variables objeto de trabajo

Dim wsEspacio As Workspace
Dim dbBase As Database
Dim tbdTabla As TableDef
Dim fldCampo1 As Field
Dim fldCampo2 As Field
578 Parte 4: Archivos y bases de datos
' Prepara el espacio de trabajo
Set wsEspacio = DBEngine.Workspaces(0)
' Crea la base de datos
Set dbBase = wsEspacio.CreateDatabase("c:\Prueba.mdb", _
dbLangGeneral, dbVersion30)
' Crea la tabla
Set tbdTabla = dbBase.CreateTableDef("Prueba")
' Crea los campos para la tabla
With tbdTabla
.Fields.Append .CreateField("Campo1", dbInteger)
With .Fields("Campo1")
.Required = True
.DefaultValue = 0
End With
End With
With tbdTabla
.Fields.Append .CreateField("Campo2", dbInteger)
With .Fields("Campo2")
.Required = True
.DefaultValue = 0
End With
End With
dbBase.TableDefs.Append tbdTabla
' Cierra la base de datos
dbBase.Close
============================================================
Lo inesperado: Cuando trabaja con DAO, los errores ms comunes son:
Objeto invlido o no permanece definido (error 3420 en tiempo de ejecucin). Se
presenta cuando se intenta integrar a la base de datos un objeto que no ha sido
definido. Soluciones: verifique que todos los mtodos Append agreguen objetos
existentes y vlidos para la coleccin que se trate, es decir, si se agrega un ele-
mento a la coleccin Fields, el objeto a agregar debe ser de tipo Field.
============================================================

Captulo 23: Lenguaje-de Definicin de Datos y DAO 579
>> DDL utilizando DAO: creacin de estructura de tablas y sus campos. [23.04]
frmCreaDB.frm
Continuacin de la aplicacin para definir una base de datos basada en el modelo
relacional, utilizando DDL y DAO.
Codificacin de frmCreaDB

Call Info("9: Se generan las tablas")
Set tbdVendedor = dbBase.CreateTableDef("Vendedor")
Set tbdVenta = dbBase.CreateTableDef("Venta")
Set tbdArticulo = dbBase.CreateTableDef("Articulo")
Set tbdVenta_Articulo = dbBase.CreateTableDef("Venta_Articulo")
Call Info("l0: Generan campos e integrar tablas")
Call Info(" -> Vendedor")
With tbdVendedor
.Fields.Append .CreateField("IDVendedor", dbInteger)
With .Fields("IDVendedor")
.Required = True
End With
.Fields.Append .CreateField("NombreVendedor", dbText, 35)
With .Fields("NombreVendedor")
.AllowZeroLength = False
.Required = True
End With
End With
Call Info(" -> Venta")
With tbdVenta
.Fields.Append .CreateField("IDVenta", dbInteger)
With .Fields("IDVenta")
.Required = True
End With
.Fields.Append .CreateField("FechaVenta", dbDate)
With .Fields("FechaVenta")
.Required = True
End With
.Fields.Append .CreateField("IDVendedor", dbinteger)
With .Fields("IDVendedor")
.Required = True
580 Parte 4: Archivos y bases de datos
End With
End With
Call Info(" -> Articulo")
With tbdArticulo
.Fields.Append .CreateField("IDArticulo", dbInteger)
With .Fields("IDArticulo")
.Required = True
End With
.Fields.Append .CreateField("NombreArticulo", dbText, 40)
With .Fields("NombreArticulo")
.AllowZeroLength = False
.Required = True
End With
.Fields.Append .CreateField("PrecioUnitario", dbCurrency)
With .Fields("PrecioUnitario")
.Required = True
End With
End With
Call Info(" -> Venta_Articulo")
With tbdVenta_Articulo
.Fields.Append .CreateField("IDVenta", dbInteger)
With .Fields("IDVenta")
.Required = True
End With
.Fields.Append .CreateField("IDArticulo", dbInteger)
With .Fields("IDArticulo")
.Required = True
End With
.Fields.Append .CreateField("Cantidad", dbinteger)
With .Fields("Cantidad")
.Required = True
End With
End With
Call Info("11: Integrar la base de datos")
With dbBase
.TableDefs.Append tbdVendedor
.TableDefs.Append tbdVenta
.TableDefs.Append tbdArticulo
.TableDefs.Append tbdVenta_Articulo
End With
Ejecucin
Despus de que se genera el almacn de datos, se contina con el procedimiento
cmdCreaDB_Click.





Captulo 23: Lenguaje de Definicin de Datos y DAO 581
Segmento 9: se utilizan las variables objeto de tipo TableDef para crear cada
una de las tablas de la base de datos. Cada una de las variables representa un
objeto TableDef, al cual deber definirle campos e ndices.
============================================================
Nota: Asumimos que sabe que las variables objeto de trabajo tambin son objetos
de la base de datos, de tal forma que si decimos "variable objeto de trabajo de tipo
TableDef", es lo mismo que si dijramos "objeto TableDef", o bien lo que
representa en la base de datos: la tabla "Vendedor". Ya en un extremo, podramos
decir que dbBase.tbdVendedor.Flelds("lDVendedor") es lo mismo que
si refiriramos fsicamente a C:\avbp\cap23\Ventas.mdb -> Vendedor.
IDVendedor. Queda entendido, para efecto de simplificar la explicacin.
============================================================

Segmento 10: a cada uno de los objetos TableDef se le agregarn campos a su
coleccin Fields, misma que almacena los campos de la tabla, necesarios para
justificar su existencia; en una misma lnea se agrega (Append) el campo y se
crea el campo a agregar (CreateField), lo que simplifica el proceso y evita el
uso de variables objeto de trabajo de tipo Fleld. Una vez creado este objeto
(que ya qued almacenado en la coleccin Fields del objeto TableDef con
un nombre determinado), se le asignan a ste las propiedades especficas de
campo, como Required o AllowZeroLength.
Segmento 11: una vez que quedan integradas las tablas (objetos TableDef con
al menos un objeto Field en su coleccin Fields), se procede a integrar las
tablas a la base de datos. Para ello, se agregan (Append) los objetos TableDef
a la coleccin TableDefs de la base de datos.
Si dispone de Access, podr abrir el archivo C:\avmp\cap23\Ventas.mdb. Si
aparece lo que se muestra en la figura 23.2 al abrir la base de datos, quiere decir que
la prctica concluy de manera satisfactoria.


582 Parte 4: Archivos y bases de datos
>> DDL utilizando DAO: creacin de ndices. [23.05]
frmCreaDB.frm
Continuacin de la aplicacin para definir una base de datos basada en el modelo
relacional, utilizando DDL y DAO.
Codificacin de frmCreaDB
Modificar cdigo: cmdCreaDB, Evento: Click.
(Contine el cdigo donde se qued en la prctica 23.04)
Call Info("12: Crear ndices")
Call Info(" -> Vendedor")
Set idxVendedor = _
tbdVendedor.CreateIndex("pkVendedor")
With idxVendedor
.Fields.Append .CreateField("IDVendedor")
.Primary = True
.Unique = True
End With tbdVendedor.Indexes.Append idxVendedor
Call Info(" -> Venta")
Set idxVenta(1) = _
tbdVenta.CreateIndex("pkVenta")
With idxVenta(1)
.Fields.Append .CreateField("IDVenta")
.Primary = True
.Unique = True
End With
Set idxVenta(2) = _
tbdVenta.CreateIndex("IDVendedor")
With idxVenta(2)
.Fields.Append .CreateField("IDVendedor")
.Primary = False
.Unique = False
End With
With tbdVenta
.Indexes.Append idxVenta(1)
.Indexes.Append idxVenta(2)
End With
Call Info(" -> Articulo")
Set idxArticulo = _
tbdArticulo.CreateIndex("pkArticulo")
Captulo 23: Lenguaje de Definicin de Datos y DAO 583
With idxArticulo
.Fields.Append .CreateField("IDArticulo")
.Primary = True
.Unique = True
End With
tbdArticulo.Indexes.Append dxArticulo
Call Info(" -> Venta_Articulo")
Set idxVenta_Articulo(1) = _
tbdVenta_Articulo.CreateIndex("pkVenta_Articulo")
With idxVenta_Articulo(1)
.Fields.Append .CreateField("IDVenta")
.Fields.Append .CreateField("IDArticulo")
.Primary = True
.Unique = True
End With
Set idxVenta_Articulo(2) = _
tbdVenta_Articulo.CreateIndex("fkVenta")
With idxVenta_Articulo(2)
.Fields.Append .CreateField("IDVenta")
.Primary = False
.Unique = False
End With
Set idxVenta_Articulo(3) = _
tbdventa_Articulo.CreateIndex("fkArticulo")
With idxVenta_Articulo(3)
.Fields.Append .CreateField("IDArticulo")
.Primary = False
.Unique = False
End With
With tbdVenta_Articulo
.Indexes.Append idxVenta_Articulo(1)
.Indexes.Append idxVenta_Articulo(2)
.Indexes.Append idxVenta_Articulo(3)
End With
Ejecucin
Se contina con el procedimiento cmdCreaDB_Click. Despus de que se
genera, integra la base de datos con sus tablas.
Segmento 12: los ndices se aplican sobre las tablas, por lo cual, para poder
definir uno, debe existir antes la tabla (la cual a su vez existe si existen campos).
Se utilizan las variables objeto de tipo Index para crear cada uno de los ndices
de la base de datos. Cada una de las variables representa un objeto Index, al cual
habr que definrsele campos clave y propiedades.
584 Parte 4: Archivos y bases de datos
A cada variable objeto de tipo Index se le asigna un ndice que es creado en ese
momento (Createindex), el cual ya est definido. Una vez que se tiene
definido el ndice, se le agregan (Append) a la coleccin Fields de dicho
ndice las definiciones de los campos que componen la clave; estos campos son
los que justifican la existencia del ndice. Mientras ste no tenga en su coleccin
Fields campos definidos, no puede ser integrado a la tabla.
Una vez que se tiene el ndice definido, se procede a asignarle propiedades
especficas, como Primary y Unique (determinar si la clave es primaria y
nica, respectivamente). Si el ndice ya qued integrado con sus campos y
propiedades, puede ser agregado a la coleccin Indexes de la tabla que ha de
contenerlo.
El ejemplo define los ndices de cada tabla, sean para el manejo de claves pri-
marias o externas.
Si dispone de Access, podr abrir el archivo C:\avbp\cap23\Ventas.mdb. Si aparece
lo que se muestra en la figura 23.3 al abrir la base de datos, al revisar en modo de
diseo la tabla Venta_Articulo y al invocar la ventana de ndices, quiere decir
que la prctica concluy de manera satisfactoria.



>> DDL utilizando DAO: creacin de relaciones. [23.06]
frmCreaDB.frm
Continuacin de la aplicacin para definir una base de datos basada en el modelo rela-
cional, utilizando DDL y DAO.
Captulo 23: Lenguaje de Definicin de Datos y DAO
585 Codificacin de frmCreaDB
Modificar cdigo: cmdCreaDB, Evento: Click.
(Contine el cdigo donde se qued en la prctica 23.05)
Call Info("13: Crear relaciones")
Call Info(" -> Vendedor")
Set relVenta = dbBase.CreateRelation("Venta_Vendedor")
With relVenta
.Table = "Vendedor"
.ForeignTable = "Venta"
.Fields.Append .CreateField("IDVendedor")
.Fields("IDVendedor").ForeignName = "IDVendedor"
End With
dbBase.Relations.Append relVenta
Call Info(" -> Venta_Articulo")
Set relVenta_Articulo(1) = _
dbBase.CreateRelation("Venta_Articulo_Venta")
With relVenta_Articulo(1)
.Table = "Venta"
.ForeignTable = "Venta_Articulo"
.Fields.Append .CreateField("IDVenta")
.Fields("IDVenta").ForeignName = "IDVenta"
End With
Set relVenta_Articulo(2) = _
dbBase.CreateRelation("Venta_Articulo_Articulo")
With relVenta_Articulo(2)
.Table = "Articulo"
.ForeignTable = "Venta_Articulo"
.Fields.Append .CreateField("IDArticulo")
.Fields("IDArticulo").ForeignName = "IDArticulo"
End With
With dbBase
.Relations.Append relVenta_Articulo(1)
.Relations.Append relVenta_Articulo(2)
End With
Ejecucin
Despus de que se integran los ndices a la base de datos, se contina con el pro-
cedimiento cmdCreaDB_Click.
586 Parte 4: Archivos y bases de datos
Segmento 12: las relaciones aplican sobre la base de datos, utilizando las claves
de las tablas, mismas que pueden ser utilizadas a travs de los ndices, por lo
cual, para poder definir una relacin, debe existir antes la base de datos, con sus
tablas (la cual a su vez existe si existen campos).
Se utilizan las variables objeto de tipo Relation para crear cada una de las
relaciones de la base de datos. Cada una de las variables representa un objeto
Relation, al que se le especifican la tabla a la que se tendr acceso (Table),
la tabla que posee la clave externa (ForeignTable) y se le definen los campos
que intervendrn en la relacin (CreateField para agregar campos a la
coleccin Fields de la relacin). Una vez definidos los campos, se especifica
cmo se llaman los campos de la clave externa (ForeignName de cada uno de
los campos de coincidencia) en la tabla a la que se tendr acceso de manera
relacionada.
Se asigna un objeto a la variable objeto de tipo Relation, a travs de la
creacin de un objeto Relation (CreateRelation). En este momento, la
relacin ya est definida; a dicha relacin se le especifica mediante el uso de sus
propiedades, la tabla a la que se tendr acceso (Table), la tabla que posee la
clave externa (ForeignTable), y los campos que intervendrn en la relacin
(usando CreateField tantas veces como campos compongan la clave externa,
para agregar campos a la coleccin Fields de la relacin). Una vez definidos
los campos, se especifica cmo se llaman los campos de la clave externa en la
tabla a la que se tendr acceso de manera relacionada (usando la propiedad
ForeignName de cada uno de los campos de coincidencia, definidos en la
relacin).
Una vez integrada la relacin con sus campos y propiedades, se procede a agregar
(Append) a la coleccin Relations de la base de datos.
El ejemplo define las relaciones de la base de datos; se agrega una para cada
clave externa existente.
Si dispone de Access, podr abrir el archivo C:\avbp\cap23\Ventas.mdb. Si aparece
lo que se muestra en la figura 23.4 al abrir la base de datos y revisar las relaciones de
la base, quiere decir que la prctica concluy de manera satisfactoria.

Captulo 23: Lenguaje de Definicin de Datos y DAO 587
Ahora ya conoce la forma de utilizar Visual Basic como DDL a travs de DAO. Le
recomendamos que aprenda muy bien la teora relacional de base de datos, lo que per-
mitir que defina bases de datos eficientes y funcionales.
============================================================
Lo inesperado: Cuando trabaja con DAO, los errores ms comunes son:
Relaciones deben ser por el mismo numero de campos del mismo tipo de datos
(error 3368 en tiempo de ejecucin). Se presenta cuando pretende agregar una
relacin utilizando un nmero de campos diferente a los que componen la clave
externa, o bien, cuando los campos de relacin entre la tabla cliente y la tabla
servidora deben ser del mismo tipo de datos y no los son. Soluciones: verifique que
todos los campos utilizados tengan el mismo tipo de datos, en la tabla cliente y en la
servidora. El nmero de campos que intervenga en la relacin debe ser igual a los
que componen la clave externa que indica la relacin.
============================================================

Cmo trabajar con las colecciones de DAO
En este momento ya sabe generar una base de datos de manera formal a travs de
DAO; para ello, fue necesario que conociera el modelo de datos que se deseaba ge-
nerar: la base de datos, sus tablas, los campos de las tablas, los ndices de las tablas,
los campos que componen las claves de los ndices y las relaciones existentes entre
las tablas de la base.
Lo ideal es tener el modelo conceptual y luego el almacn de datos fsico (archivo
con extensin .mdb), desafortunadamente, esto no siempre ocurre qu pasara si
usted tiene el almacn de datos pero no tiene el modelo conceptual?
En el terreno computacional, al hecho de obtener a partir de un producto final (base
de datos, programa ejecutable) un producto originador de ste (modelo de datos,
cdigo fuente) se le conoce como ingeniera inversa. Si sabe cmo funciona la
jerarqua de objetos DAO, puede obtener el modelo de datos a partir del almacn de
datos.
DAO parte de un objeto Database. Toda base de datos est compuesta por tablas;
las tablas de una base de datos se encuentran relacionadas en una coleccin llamada
TableDefs. Por ejemplo, para conocer las tablas que componen nuestra base de
datos de ejemplo, podra hacer lo siguiente:
Dim dbBase As Database
Dim tbdTabla As TableDef
Set dbBase = OpenDatabase("C:\avbp\cap23\Ventas.mdb")
588 Parte 4: Archivos y bases de datos
For Each tbdTabla In dbBase.TableDefs
Print tbdTabla.Name
Next tbdTabla
Anteriormente hablamos de la instruccin For Each, que evala los elementos de
una coleccin, utilizando una variable objeto de trabajo del mismo tipo que los
elementos de la coleccin, y que va asumiendo los valores y caractersticas de cada
uno de estos elementos. El cdigo For Each anterior podra entenderse como "Por
cada objeto de la coleccin TableDefs perteneciente al objeto dbBase, asigna el
valor de cada elemento a la variable tbdTabla, imprime la propiedad Name de
dicho objeto y contina con el siguiente elemento, repitiendo el proceso hasta que se
hayan explorado todos los elementos de la coleccin".
Las tablas, a su vez, estn compuestas por campos que se almacenan en una coleccin
llamada Fields. Adems, dichas tablas tienen ndices, que se almacenan en la
coleccin Indexes, stos, a su vez, estn compuestos por campos, que estn con-
tenidos en una coleccin llamada Fields.
Finalmente, la base de datos tiene relaciones, que almacena en una coleccin llamada
Relations.
Si quiere hacer una inspeccin de toda la base de datos, sera como sigue (concep-
tualmente):
Dim dbBase As Database
Dim tbdTabla As TableDef
Dim fldCampo As Field
Dim idxIndice As Index
Dim fldCampoIdx As Field
Dim relRelacion As Relation
Set dbBase =
OpenDatabase("C;\avbp\cap23\Ventas.mdb")
' Coleccin TableDefs de la base de datos
For Each tbdTabla In dbBase.TableDefs
Print tbdTabla.Name
' Coleccin Fields de la Tabla
For Each fldCampo In tbdTabla.Fields
Print fldCampo.Name
Next fldCampo
' Coleccin Indexes de la Tabla
For Each idxIndice In tbdTabla.Indexes
Print idxIndice.Name
Captulo 23: Lenguaje de Definicin de Datos y DAO 589
' Coleccin Fields del ndice
For Each fldCampoIdx In idxindice.Fields
Print fldCampoIdx.Name
Next fldCampoIdx
Next idxIndice
Next tbdTabla
' Coleccin Relations de la base de datos
For Each relRelacion In dbBase.Relations
Print relRelacion.Name
Next relRelacion
Como cada elemento de la base de datos es asignado en un momento dado a las variables de
trabajo, es posible inspeccionar propiedades de cada tabla, campo, ndice o relacin, siempre y
cuando la instruccin For Each est sobre el elemento.
>> Ingeniera inversa utilizando DAO: determinacin del modelo de datos a partir de un
almacn de datos. [23.07]
frmEsquema.frm
Continuacin de la aplicacin para definir una base de datos basada en el modelo relacional,
utilizando DDL y DAO.
Implementacin visual
590 Parte 4: Archivos y bases de datos
Tabla de objetos y propiedades de frmEsquema

Codificacin de frmEsquema
Option Explicit
Dim dbBase As Database
Dim tbdTabla As TableDef
Dim fldCampo As Field
Dim idxIndice As Index
Dim fldCampoIdx As Field
Dim relRelacion As Relation
Editar cdigo:(General) Evento: Mensaje
Private Function Mensaje(txtTexto As String)
txtSeguimiento.Text = txtSeguimiento.Text & vbCrLf & txtTexto
End Function
Editar cdigo:Form Evento: Activate
Set dbBase = OpenDatabase("C;\avbp\cap23\Ventas.mdb")
txtSeguimiento.Font.Name = "Courier"
txtSeguimiento.Font.Size =10
Captulo 23: Lenguaje de Definicin de Datos y DAO 591
Editar cdigo: cmdAnalizar, Evento: Click.
cmdAnalizar.Enabled = False
If FileSystem.Dir("C:\avbp\cap23\Estructura.txt") <> "" Then
FileSystem.Kill "C: \avbp\cap23\Estructura.txt"
End If
Open "C:\avbp\cap23\Estructura.txt" For Output As #1
txtSeguimiento.Text = "Estructura.txt"
Call Mensaje("Anlisis; " & Date & " Hora: " & Time)
Fon Each tbdTabla In dbBase.TableDefs
If Not InStr(1, tbdTabla.Name, "MSys") = 1 Then
Call Mensaje("- - - - - - - - - - - - ")
Call Mensaje( "Tabla:" & tbdTabla.Name)
For Each fldCampo In tbdTabla.Fields
Call Mensaje(vbTab & "Campo:" & fldCampo.Name)
Call Mensaje(vbTab & vbTab & _
IIf(fldCampo.Required = True, "> Requerido", _
"> No requerido"))
Select Case fldCampo.Type
Case 10
Call Mensaje(vbTab & vbTab & "> dbText" & _
"," & Str(fldCampo.Size))
If fldCampo.AllowZeroLength = True Then
Call Mensaje(vbTab & vbTab & _
">Permite longitud cero")
End If
Case 5
Call Mensaje(vbTab & vbTab & "> dbCurrency")
Case 3
Call Mensaje(vbTab & vbTab & "> dbInteger")

End Select

Next fldCampo
Call Mensaje(" ")
For Each idxIndice In tbdTabla.Indexes
If Not idxIndice.Foreign = True Then
Call Mensaje(vbTab & "Indice:" & _
idxIndice.Name)
If idxIndice.Primary = True Then
Call Mensaje(vbTab & vbTab & "> Primary")
592 Parte 4; Archivos y bases de datos
End If
If idxIndice.Unique = True Then
Call Mensaje(vbTab & vbTab & "> Unique")
End If
For Each fldCampoIdx In idxIndice.Fields
Call Mensaje(vbTab & vbTab & _
"Campo de ndice:" & _
fldCampoIdx.Name)
Next fldCampoIdx
End If
Next idxIndice
End If
Next tbdTabla
Call Mensaje("- - Relaciones - - - - - - - - - - - -")
For Each relRelacion In dbBase.Relations
Call Mensaje("Relacin: " & relRelacion.Name)
Call Mensaje(vbTab & "Tabla cliente :" & _
relRelacion.ForeignTable)
Call Mensaje(vbTab & "Tabla servidora:" & _
relRelacion.Table)
Next relRelacion
Print #1, txtSeguimiento.Text
Editar cdigo: Form, Evento: Deactivate.
dbBase.Close
Close #1
Ejecucin
Declaraciones generales de la aplicacin.
Antes de que otra cosa suceda, se realizan las declaraciones generales. En el caso
de esta aplicacin, en dichas declaraciones se definen las variables objeto que se
necesitan para analizar cada uno de los niveles de la jerarqua de objetos DAO:
Base de datos -> Tabla -> Campo, Tabla -> Campo, Base de datos ->
Relaciones.
Procedimientos de uso general.
La aplicacin, a efecto de automatizar los procesos, utiliza una funcin de
alcance privado y de uso general, que es la siguiente:
Captulo 23: Lenguaje de Definicin de Datos y DAO 593
Mensaje: esta funcin se encargar de estar actualizando el contenido del
objeto txtSeguimiento, con lo que contenga en ese momento, ms un
salto de lnea, ms el texto que le proporcione a la funcin como
argumento. De esa forma, la funcin permitir dar el seguimiento del
proceso.
Ya definidos los procedimientos de uso general, podemos referir a los
procedimientos de evento de la aplicacin.
Al activarse el formulario, se ejecuta el procedimiento de evento
Form_Actlvate, que se encarga de abrir la base de datos, y especificar
un tipo de letra y tamao que permitan una lectura clara.
Haga clic en el botn Analizar.
Al hacer clic en Analizar, se ejecuta el procedimiento
cmdAnalizar_Click; ste se encarga de inhabilitar el botn Analizar, a
fin de que no se utilice en el resto de la sesin.
El procedimiento establece un canal de escritura hacia un nombre de archivo
llamado C:\avbp\cap23\Estructura.txt, con el nmero de canal 1; cuando en
la aplicacin se indique Print #1, se realizar una escritura en el archivo.
Antes de definir el canal, se debe verificar si el archivo existe
(FileSystem.Dir), en cuyo caso deber eliminarse antes
(FileSystem.Kill).
Bloque For Each 1: Tablas de la base de datos. Se analiza cada uno de los
elementos de la coleccin TableDefs del objeto de base de datos
dbBase. Se explora el nombre de cada uno de los elementos; tiene que
cuidar que dentro del anlisis no se incluyan las tablas ocultas de sistema
que pertenecen al motor de base de datos Jet, ya que no se tendr acceso
a ellas (son tablas reservadas para el controlador, donde se almacena el
nombre de las tablas, sus campos, sus tipos de datos, etctera). Puede
excluirlas si las identifica; esto se puede hacer de manera sencilla porque
su nombre siempre empieza con "MSys". Se evala, y en caso de que el
nombre del elemento no empiece con "MSys", se procede a su anlisis.
Se reporta el nombre del elemento TableDefs que se analiza en ese
momento.
Bloque For Each 2: campos de las tablas. Se analiza cada uno de los ele-
mentos de la coleccin Field asociados al elemento TableDefs que
se analiza en ese momento. Se reporta el nombre del campo, si es
requerido o no, su tipo de datos, y si es dbText, si permite longitud
cero, y su tamao.
Fin del bloque For Each 2.
Bloque For Each 3: ndices de las tablas. Se analiza cada uno de los ele-
mentos de la coleccin Indexes asociados al elemento TableDefs
que se analiza en ese momento. Se reporta el nombre del ndice (siempre
y cuan-
594 Parte 4: Archivos y bases de datos
do no sea de tipo Foreign, ya que son implementados por Jet para el
manejo de las relaciones), si es primario, y si es nico.
Bloque For Each 4: campos de los ndices. Se analiza cada uno de los
elementos de la coleccin Fields asociados al elemento Indexes
que se analiza en ese momento. Se reporta el nombre del campo.
Fin del bloque For Each 4.
Fin del bloque For Each 3.
Fin del bloque For Each 1.
Bloque For Each 5: relaciones de la base de datos. Se analiza cada uno de los
elementos de la coleccin Relations del objeto de base de datos
dbBase. Se explora el nombre de cada uno de los elementos; se reporta
el nombre del elemento Relations que se analiza en ese momento, y
las propiedades ForeignTabLe y Table.

_______________________________________________________
Resumen
En este captulo:
Vimos qu es un DDL y cules son los elementos que ste tiene en Visual Basic.
Vimos los tipos de objeto de la jerarqua DAO.
Vimos la sintaxis de uso de las colecciones de DAO. ,
Vimos las variables objeto.
Vimos la forma de crear espacios de trabajo, bases de datos, campos, ndices y
relaciones.
Vimos el uso del bloque With.
Vimos la aplicacin de la ingeniera inversa a travs de DAO, mediante el uso de
las colecciones de la jerarqua.
Es importante que domine la teora vista en este captulo, sobre todo si no quiere
depender de Access para la definicin y modificacin de bases de datos.
Captulo 23: Lenguaje de Definicin de Datos y DAO 595
Algunas respuestas a los ejercicios
[23.01] Habilitacin de DAO.
4. No.
5. Porque no se ha incluido la referencia requerida para disponer de DAO, que es la
Microsoft DAO Object Library.
13. S.
14. Aparece porque DAO ya est integrado al proyecto.
[23.02] DDL utilizando DAO: declaracin de variables objeto.
1. Database, 1.
Workspace, 1.
TableDef, 4.
Field, 0.
Index, 7.
Relation, 3.
2. Database, 1.
Workspace, 1.
TableDef, 3.
Field, 0.
Index, 5.
Relation, 2.
3. No.
4. En la memoria RAM, en forma de definiciones; todava no se traducen a un
almacn de datos.
[23.03] DDL utilizando DAO: creacin del almacn de base de datos.
1. S.
596




Captulo
24
Lenguaje
de Manipulacin de
Datos y DAO
Objetivo
Conocer el uso de las instrucciones que componen el Lenguaje de Manipulacin de
Datos disponible a travs de DAO.
Al finalizar este captulo deber:
Conocer qu es el DML
Saber que un modelo de datos tiene validaciones a nivel tabla y a nivel base de
datos
Aprender a desarrollar las tareas de apertura y cierre de bases de datos
Aprender a desarrollar las tareas de escritura de datos, incluyendo actualizadores
que manejan consultas, altas, bajas y modificaciones a bases de datos
Aprender a desarrollar las tareas de bsqueda de datos en una base de datos, a
travs de los ndices
Aprender a desarrollar las tareas de movimiento entre datos
Aprender la tcnica RAR de actualizacin de base de datos, aplicada en Visual
Basic
597
598 Parte 4: Archivos y bases de datos
Lenguaje de Manipulacin de Datos
El manejo del DML presupone que la base de datos ya existe y que conoce la estruc-
tura de la misma. Retomaremos el diagrama del captulo 22, para tener muy presente
el modelo de datos que queremos manipular.




Captulo 24: Lenguaje de Manipulacin de Datos y DAO 599
Validaciones a nivel tabla
Al desarrollar una aplicacin que actualice una base de datos, deben hacerse valida-
ciones a nivel tabla y a nivel base de datos. Se conocen como validaciones a nivel
tabla aquellas validaciones que garantizan que una tabla contenga datos vlidos. Del
modelo que proponemos, se desprenden las siguientes:
Todos los campos son requeridos. No se puede omitir ninguno de los campos.
Todos los campos son de un determinado tipo, por lo que se debe verificar, antes
de proceder a escribir en el almacn de datos, que lo que se quiere almacenar co-
rresponde al tipo indicado.
En la tabla no puede haber dos registros con los mismos valores en la clave pri-
maria; cada registro es nico con respecto a dicha clave.

==================================================
Nota: Este captulo trata de la manipulacin de datos, no de la validacin de datos
en la interfaz. En los ejemplos se asumir que usted introduce en la interfaz slo
datos vlidos. Ya en los captulos de la parte III de este libro, aprendi como validar
los datos de entrada.
Para validar que no se omitan datos. Utilice el evento Validate (siempre y
cuando tenga la propiedad CausesValidation establecida a True), y
compare que lo capturado es diferente a nada ( <> "" ).
Para validar la introduccin de slo MAYSCULAS. Utilice el evento
KeyPress y las funciones Chr( ), Asc( ) y UCase( ).
Para validar si un dato es de determinado tipo. Utilice el evento Validate
(siempre y cuando tenga la propiedad CausesValidation establecida a
True), y comparar que lo capturado devuelva True al aplicar las funciones
ISNumeric( ), IsDate( ), etctera.
Para limitar la cantidad de informacin introducida. Utilice la propiedad
MaxLenght.
El trabajo ms arduo ser el de crear la interfaz adecuada. Aplicar las modificaciones
a la base de datos es relativamente sencillo.
==================================================

Validaciones a nivel base de datos
El modelo de datos tambin supone ciertas relaciones entre las tablas, de tal forma
que la base de datos sea un todo coherente, y no slo un conjunto de tablas autno-
mas; la existencia de las relaciones nos determina las validaciones a nivel base de
600 Parte 4: Archivos y bases de datos
datos, que son aquellas que involucran a dos o ms tablas, y que por tanto, pretenden
guardar la unidad de la base de datos.
Estas validaciones permiten que la integridad referencial se mantenga en la base de
datos, as como la consistencia. En nuestro modelo tenemos las siguientes validaciones
a nivel base de datos:
Antes de poder agregar un registro en Venta, es necesario que el vendedor que
le corresponde est registrado en la tabla Vendedor.
Antes de poder agregar un registro en Venta_Articulo, es necesario que la
venta que le corresponde est registrada en la tabla Venta.
Antes de poder agregar un registro en Venta_Articulo, es necesario que el
artculo que le corresponde est registrado en la tabla Articulo.
Si tiene uno o ms registros relacionados en la tabla Venta, no puede eliminar
un registro en la tabla Vendedor.
Si tiene uno o ms registros relacionados en la tabla Venta_Articulo, no
puede eliminar un registro en la tabla Venta.
Si tiene uno o ms registros relacionados en la tabla Venta_Articulo, no
puede eliminar un registro en la tabla Articulo.
Operaciones bsicas de manipulacin de bases de datos
Las operaciones bsicas de base de datos tienen varias categoras, que se manejan a
travs de mtodos y propiedades de los objetos; una referencia rpida es la siguiente:
Tareas de apertura y cierre de bases de datos. Se encargan de abrir una base de
datos existente, y de cerrarla cuando ya no se vaya a utilizar. Se utilizan los mto-
dos OpenDatabase,OpenRecordSet y Close.
Tareas de escritura de datos. Se encargan de modificar el contenido del almacn
fsico de datos. Se utilizan los mtodos AddNew, Edit, Update y Delete.
Tareas de bsqueda de datos. Permiten localizar un registro del cual conocemos
el dato que acta como clave de bsqueda. Se utiliza el mtodo Seek y las pro-
piedades Index y NoMatch. . '
Tareas de movimiento entre datos. Permiten mover el apuntador de registros entre
las tablas. Se utilizan los mtodos MoveFirst, MoveLast,
MovePrevious y MoveNext, as como las propiedades EOF y BOF.

You might also like