914

La cara-oculta-de-delphi

Embed Size (px)

Citation preview

  • ...Mientras intentaba intilmente atrapar un rayo de luzen los confines de una oscura galaxia,Ella escuchaba a los tres guardianes

    del secreto de la Pirmide,y con el Resplandor de sus manos

    me indicaba el camino de regreso a casa...

    A Naroa, porque sigo creyendo en ella.\

  • INDICEINDICE

    PRLOGO DEL AUTOR 19

    CONVENIOS SINTCTICOS 21ACERCA DE LA TERMINOLOGA EMPLEADA 21AGRADECIMIENTOS 21

    PRLOGO A LA SEGUNDA EDICIN 23

    PARA MS EJEMPLOS Y ACTUALIZACIONES... 23

    ENTORNO Y HERRAMIENTAS 27

    1. ES DELPHI SU LENGUAJE? 29

    BREVE HISTORIA DE UN LENGUAJE LLAMADO DELPHI 29ES DELPHI UN LENGUAJE SENCILLO? 31PROGRAMACIN ORIENTADA A OBJETOS VERDADERA 32ARQUITECTURA INTEGRADA DE COMPONENTES 33DELPHI GENERA CONTROLES ACTIVEX 34TRATAMIENTO DE EXCEPCIONES 34VELOCIDAD DE EJECUCIN 35VELOCIDAD DE COMPILACIN Y ENLACE 35RETROALIMENTACIN INMEDIATA 36EL DEPSITO DE OBJETOS Y LA HERENCIA VISUAL 36APLICACIONES DISTRIBUIDAS 37COMPONENTES DE DELPHI 38

    2. HERRAMIENTAS Y UTILIDADES 41

    DELPHI Y EL TECLADO 41CODE INSIGHT: AYUDA DURANTE LA EDICIN 44CLASS COMPLETION 48HERRAMIENTAS DE DEPURACIN 49OBJECT BROWSER 51BDE ADMINISTRATOR 51DATABASE EXPLORER 52DATABASE DESKTOP 53DATA MIGRATION WIZARD 54SQL MONITOR 55IMAGE EDITOR 55

  • 4 La Cara Oculta de Delphi

    3. UNIDADES, PROYECTOS Y PAQUETES 57

    LA ESTRUCTURA DE UN PROYECTO DE APLICACIN 58QU SE PUEDE DECLARAR? 60SINTAXIS DE LAS UNIDADES 62LA CLUSULA USES Y LAS REFERENCIAS CIRCULARES 64LA INCLUSIN AUTOMTICA DE UNIDADES 65LOS FICHEROS DFM 66BIBLIOTECAS DE ENLACE DINMICO 68PAQUETES 69EL ABC DEL USO DE PAQUETES 72PAQUETES DE TIEMPO DE DISEO Y DE EJECUCIN 73LOS GRUPOS DE PROYECTOS 74

    4. SISTEMAS DE BASES DE DATOS 77

    ACERCA DEL ACCESO TRANSPARENTE A BASES DE DATOS 77BASES DE DATOS RELACIONALES 78INFORMACIN SEMNTICA = RESTRICCIONES 80RESTRICCIONES DE UNICIDAD Y CLAVES PRIMARIAS 81INTEGRIDAD REFERENCIAL 82QU TIENE DE MALO EL MODELO RELACIONAL? 83BASES DE DATOS LOCALES Y SERVIDORES SQL 85CARACTERSTICAS GENERALES DE LOS SISTEMAS SQL 87EL FORMATO PARADOX 88EL FORMATO DBF7 91CRITERIOS PARA EVALUAR UN SERVIDOR SQL 92INTERBASE 95MICROSOFT SQL SERVER 97ORACLE 99OTROS SISTEMAS DE USO FRECUENTE 100

    5. EL MOTOR DE DATOS DE BORLAND 103

    QU ES, Y CMO FUNCIONA 104CONTROLADORES LOCALES Y SQL LINKS 105ACCESO A FUENTES DE DATOS ODBC 106DNDE SE INSTALA EL BDE? 106EL ADMINISTRADOR DEL MOTOR DE DATOS 108CONFIGURACIN DEL REGISTRO E INFORMACIN DE VERSIN 108EL CONCEPTO DE ALIAS 110PARMETROS DEL SISTEMA 110PARMETROS DE LOS CONTROLADORES PARA BD LOCALES 112BLOQUEOS OPORTUNISTAS 114PARMETROS COMUNES A LOS CONTROLADORES SQL 114CONFIGURACIN DE INTERBASE 117

  • Indice 5

    CONFIGURACIN DE MS SQL SERVER 118CONFIGURACIN DE ORACLE 120CONFIGURACIN DE OTROS SISTEMAS 121CREACIN DE ALIAS PARA BASES DE DATOS LOCALES Y SQL 121ALTERNATIVAS AL MOTOR DE DATOS 122

    FUNDAMENTOS DEL LENGUAJE 125

    6. PROGRAMACIN ORIENTADA A OBJETOS: ENCAPSULAMIENTO 127

    EL PROBLEMA DE LA DIVISIN EN MDULOS 127LOS MDULOS EN LA PROGRAMACIN ESTRUCTURADA 128REUSABILIDAD Y EL PRINCIPIO ABIERTO/CERRADO 129LLEGAN LOS OBJETOS 130OPERACIONES SOBRE UN TIPO DE DATOS: FUNCIONES 132OPERACIONES SOBRE UN TIPO DE DATOS: MTODOS 134LA PRIMERA VENTAJA: NOMBRES MS CORTOS 135LA IMPLEMENTACIN DE UN MTODO 136EL ESTADO INTERNO DE UN OBJETO 138PARMETROS POR OMISIN 140PBLICO Y PRIVADO 140LAS VARIABLES DE OBJETOS SON PUNTEROS 142CONSTRUCCIN Y DESTRUCCIN: EL CICLO DE LA VIDA 143DEFINIENDO CONSTRUCTORES Y DESTRUCTORES 144

    7. HERENCIA Y POLIMORFISMO 147

    HERENCIA = EXTENSIN + ESPECIALIZACIN 147UN GATO CON BOTAS SIGUE SIENDO UN GATO 149LA CLASE TOBJECT 152JERARQUAS DE HERENCIA 153HERENCIA MLTIPLE, S O NO? 154REDEFINICIN DE MTODOS 155LA TABLA DE MTODOS VIRTUALES 158UTILIZANDO EL COMPORTAMIENTO HEREDADO 160SOBRECARGA: HAY MUY POCOS NOMBRE BUENOS 161PBLICO, PROTEGIDO, PRIVADO... 163MTODOS ABSTRACTOS 164REFERENCIAS DE CLASE 165CONSTRUCTORES VIRTUALES 167INFORMACIN DE TIPOS EN TIEMPO DE EJECUCIN 168MTODOS DE CLASE 170

  • 6 La Cara Oculta de Delphi

    8. ELEMENTOS DE PROGRAMACIN CON WINDOWS 173

    SI ME NECESITAS, LLMAME! 173QU ES UNA VENTANA? 174CLASES DE VENTANA 175EVENTOS O, MS BIEN, MENSAJES 176EL CICLO DE MENSAJES Y LA COLA DE MENSAJES 177EJECUCIN MODAL Y NO MODAL 180EL PROCEDIMIENTO DE VENTANA 180INTERCEPTANDO MENSAJES EN DELPHI 181TAMBIN PODEMOS ENVIAR MENSAJES 184APLICACIONES EN LA BANDEJA DE ICONOS 184CICLO DE MENSAJES Y CONCURRENCIA 187CUANDO NO HAY NADA MEJOR QUE HACER 188EJECUTAR Y ESPERAR 189

    9. PROPIEDADES 191

    LOS PROBLEMAS DE LA POO CLSICA 191PROPIEDADES 194IMPLEMENTACIN DE PROPIEDADES MEDIANTE ATRIBUTOS 195SI NO CREEMOS EN LA ALQUIMIA 197LA SEMNTICA DE LA ASIGNACIN A PROPIEDADES 198PROPIEDADES VECTORIALES 200PROPIEDADES VECTORIALES POR OMISIN 202ESPECIFICACIONES DE ALMACENAMIENTO 202ACCESO A PROPIEDADES POR SU NOMBRE 205

    10. EVENTOS 207

    PUNTEROS A FUNCIONES 207PUNTEROS A MTODOS 208OBJETOS ACTIVOS: ABAJO LA VIGILANCIA! 210EVENTOS VS REDEFINICIN DE MTODOS VIRTUALES 212EL EMISOR Y EL RECEPTOR DEL EVENTO 214RECEPTORES COMPARTIDOS 215TIPOS DE EVENTOS 216NOS PIDEN NUESTRA OPININ... 218LOS EVENTOS EXPRESAN CONTRATOS SIN OBLIGACIONES 218ACTIVACIN RECURSIVA 219

    11. EXCEPCIONES 223

    SISTEMAS DE CONTROL DE ERRORES 223CONTRATOS INCUMPLIDOS 224CMO SE INDICA UN ERROR 225

  • Indice 7

    LA EJECUCIN DEL PROGRAMA FLUYE EN DOS DIMENSIONES 226EL ESTADO DE PNICO 227PAGAMOS NUESTRAS DEUDAS 227EL CONCEPTO DE "RECURSO DE PROGRAMACIN" 228CMO TRANQUILIZAR A UN PROGRAMA ASUSTADO 229EJEMPLOS DE CAPTURA DE EXCEPCIONES 230CAPTURANDO EL OBJETO DE EXCEPCIN 231DISTINGUIR EL TIPO DE EXCEPCIN 231LAS TRES REGLAS DE MARTEENS 233CICLO DE MENSAJES Y MANEJO DE EXCEPCIONES 234EXCEPCIONES A LA TERCERA REGLA DE MARTEENS 235EL EVENTO ONEXCEPTION 236LA EXCEPCIN SILENCIOSA 239CONSTRUCTORES Y EXCEPCIONES 240ASERCIONES 243

    12. TIPOS DE DATOS DE DELPHI 247

    TIPOS NUMRICOS 247FECHAS Y HORAS 249CADENAS DE CARACTERES CORTAS 251PUNTEROS A CARACTERES, AL ESTILO C 253CADENAS DE CARACTERES LARGAS 254VECTORES ABIERTOS 256VECTORES DINMICOS 258VECTORES ABIERTOS VARIANTES 259VARIANTES 260CLASES PARA LA REPRESENTACIN DE LISTAS 261STREAMS: FICHEROS CON INTERFAZ DE OBJETOS 264

    13. TCNICAS DE GESTIN DE VENTANAS 267

    QU HACE DELPHI CUANDO LO DEJAMOS SOLO? 267CREACIN INMEDIATA DE VENTANAS MODALES 269CREACIN INMEDIATA DE VENTANAS NO MODALES 271MTODOS DE CLASE PARA LA CREACIN DINMICA 273CMO TRANSFORMAR INTROS EN TABS 276CMO LIMITAR EL TAMAO DE UNA VENTANA 277CMO DISTRIBUIR EL REA INTERIOR ENTRE DOS REJILLAS 279VENTANAS DE PRESENTACIN 281

    14. LOS MDULOS DE DATOS Y EL DEPSITO DE OBJETOS 283

    LA GALERA DE PLANTILLAS DE DELPHI 1 283EL DEPSITO DE OBJETOS 284LAS PROPIEDADES DEL DEPSITO 286

  • 8 La Cara Oculta de Delphi

    LA UBICACIN DEL DEPSITO DE OBJETOS 287USAR, COPIAR O HEREDAR? 289HERENCIA VISUAL DENTRO DEL PROYECTO 292HERENCIA DE EVENTOS 292LAS PLANTILLAS DE COMPONENTES 293LOS MDULOS DE DATOS 294

    COMPONENTES PARA BASES DE DATOS 297

    15. CONJUNTOS DE DATOS: TABLAS 299

    LA JERARQUA DE LOS CONJUNTOS DE DATOS 299LA ARQUITECTURA DE OBJETOS DEL MOTOR DE DATOS 301TABLAS 303CONEXIN CON COMPONENTES VISUALES 306NAVEGANDO POR LAS FILAS 308MARCAS DE POSICIN 310ENCAPSULAMIENTO DE LA ITERACIN 311LA RELACIN MASTER/DETAIL 313NAVEGACIN Y RELACIONES MASTER/DETAIL 316EL ESTADO DE UN CONJUNTO DE DATOS 321

    16. ACCESO A CAMPOS 323

    CREACIN DE COMPONENTES DE CAMPOS 323CLASES DE CAMPOS 325NOMBRE DEL CAMPO Y ETIQUETA DE VISUALIZACIN 327ACCESO A LOS CAMPOS POR MEDIO DE LA TABLA 328EXTRAYENDO INFORMACIN DE LOS CAMPOS 328LAS MSCARAS DE FORMATO Y EDICIN 330LOS EVENTOS DE FORMATO DE CAMPOS 331VALIDACIN A NIVEL DE CAMPOS 333PROPIEDADES DE VALIDACIN 334CAMPOS CALCULADOS 335CAMPOS DE BSQUEDA 336LA CACH DE BSQUEDA 338EL ORDEN DE EVALUACIN DE LOS CAMPOS 339EL DICCIONARIO DE DATOS 340CONJUNTOS DE ATRIBUTOS 341IMPORTANDO BASES DE DATOS 342EVALUANDO RESTRICCIONES EN EL CLIENTE 343INFORMACIN SOBRE CAMPOS 346CREACIN DE TABLAS 347

  • Indice 9

    17. CONTROLES DE DATOS Y FUENTES DE DATOS 351

    CONTROLES DATA-AWARE 351LOS ENLACES DE DATOS 353CREACIN DE CONTROLES DE DATOS 354LOS CUADROS DE EDICIN 355EDITORES DE TEXTO 356TEXTOS NO EDITABLES 357COMBOS Y LISTAS CON CONTENIDO FIJO 357COMBOS Y LISTAS DE BSQUEDA 360CASILLAS DE VERIFICACIN Y GRUPOS DE BOTONES 362IMGENES EXTRADAS DE BASES DE DATOS 363LA TCNICA DEL COMPONENTE DEL POBRE 363PERMITIENDO LAS MODIFICACIONES 365BLOB, BLOB, BLOB 367LA CLASE TBLOBSTREAM 368

    18. REJILLAS Y BARRAS DE NAVEGACIN 371

    EL FUNCIONAMIENTO BSICO DE UNA REJILLA DE DATOS 371OPCIONES DE REJILLAS 372COLUMNAS A LA MEDIDA 373GUARDAR Y RESTAURAR LOS ANCHOS DE COLUMNAS 376LISTAS DESPLEGABLES Y BOTONES DE EDICIN 377NMEROS VERDES Y NMEROS ROJOS 379MS EVENTOS DE REJILLAS 381LA BARRA DE DESPLAZAMIENTO DE LA REJILLA 382REJILLAS DE SELECCIN MLTIPLE 383BARRAS DE NAVEGACIN 384HABA UNA VEZ UN USUARIO TORPE, MUY TORPE 385AYUDAS PARA NAVEGAR 385EL COMPORTAMIENTO DE LA BARRA DE NAVEGACIN 386REJILLAS DE CONTROLES 388

    19. INDICES 391

    INDICES EN PARADOX 391INDICES EN DBASE 392INDICES EN INTERBASE 394INDICES EN MS SQL SERVER 394INDICES EN ORACLE 395CON QU NDICES PODEMOS CONTAR 396ESPECIFICANDO EL NDICE ACTIVO 398ESPECIFICANDO UN ORDEN EN TABLAS SQL 399BSQUEDA BASADA EN NDICES 401IMPLEMENTACIN DE REFERENCIAS MEDIANTE FINDKEY 403

  • 10 La Cara Oculta de Delphi

    BSQUEDAS UTILIZANDO SETKEY 403EXPERIMENTANDO CON SETKEY 404POR QU EXISTE SETKEY? 405RANGOS: DESDE EL ALFA A LA OMEGA 406EL EJEMPLO DE RANGOS DE CASI TODOS LOS LIBROS 408MS PROBLEMAS CON LOS NDICES DE DBASE 410CMO CREAR UN NDICE TEMPORAL 411

    20. MTODOS DE BSQUEDA 413

    FILTROS 413ESTO NO LO DICE LA DOCUMENTACIN 414UN EJEMPLO CON FILTROS RPIDOS 415EL EVENTO ONFILTERRECORD 418LOCALIZACIN Y BSQUEDA 419UN DILOGO GENRICO DE LOCALIZACIN 422FILTROS LATENTES 424FILTER BY EXAMPLE 426BSQUEDA EN UNA TABLA DE DETALLES 430

    PROGRAMACIN CON SQL 433

    21. BREVE INTRODUCCIN A SQL 435

    LA ESTRUCTURA DE SQL 435PARA SEGUIR LOS EJEMPLOS DE ESTE LIBRO 436LA CREACIN Y CONEXIN A LA BASE DE DATOS 438TIPOS DE DATOS EN SQL 439CREACIN DE TABLAS 440COLUMNAS CALCULADAS 441VALORES POR OMISIN 442RESTRICCIONES DE INTEGRIDAD 442CLAVES PRIMARIAS Y ALTERNATIVAS 444INTEGRIDAD REFERENCIAL 445ACCIONES REFERENCIALES 446NOMBRES PARA LAS RESTRICCIONES 447DEFINICIN Y USO DE DOMINIOS 448CREACIN DE NDICES 449MODIFICACIN DE TABLAS E NDICES 450CREACIN DE VISTAS 451CREACIN DE USUARIOS 451ASIGNACIN DE PRIVILEGIOS 453ROLES 454UN EJEMPLO COMPLETO DE SCRIPT SQL 455

  • Indice 11

    22. CONSULTAS Y MODIFICACIONES EN SQL 457

    LA INSTRUCCIN SELECT: EL LENGUAJE DE CONSULTAS 457LA CONDICIN DE SELECCIN 459OPERADORES DE CADENAS 459EL VALOR NULO: ENFRENTNDONOS A LO DESCONOCIDO 460ELIMINACIN DE DUPLICADOS 461PRODUCTOS CARTESIANOS Y ENCUENTROS 462ORDENANDO LOS RESULTADOS 464EL USO DE GRUPOS 465FUNCIONES DE CONJUNTOS 466LA CLUSULA HAVING 467EL USO DE SINNIMOS PARA TABLAS 467SUBCONSULTAS: SELECCIN NICA 468SUBCONSULTAS: LOS OPERADORES IN Y EXISTS 469SUBCONSULTAS CORRELACIONADAS 471EQUIVALENCIAS DE SUBCONSULTAS 472ENCUENTROS EXTERNOS 473LAS INSTRUCCIONES DE ACTUALIZACIN 475VISTAS 476

    23. PROCEDIMIENTOS ALMACENADOS Y TRIGGERS 479

    PARA QU USAR PROCEDIMIENTOS ALMACENADOS? 479CMO SE UTILIZA UN PROCEDIMIENTO ALMACENADO 481EL CARCTER DE TERMINACIN 482PROCEDIMIENTOS ALMACENADOS EN INTERBASE 483PROCEDIMIENTOS QUE DEVUELVEN UN CONJUNTO DE DATOS 486RECORRIENDO UN CONJUNTO DE DATOS 488TRIGGERS, O DISPARADORES 489LAS VARIABLES NEW Y OLD 491MS EJEMPLOS DE TRIGGERS 491GENERADORES 493SIMULANDO LA INTEGRIDAD REFERENCIAL 495EXCEPCIONES 497ALERTADORES DE EVENTOS 498

    24. MICROSOFT SQL SERVER 501

    HERRAMIENTAS DE DESARROLLO EN EL CLIENTE 501CREACIN DE BASES DE DATOS CON MS SQL SERVER 502TIPOS DE DATOS PREDEFINIDOS 504TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR 505CREACIN DE TABLAS Y ATRIBUTOS DE COLUMNAS 506INTEGRIDAD REFERENCIAL 507INDICES 508

  • 12 La Cara Oculta de Delphi

    SEGURIDAD EN MS SQL SERVER 508PROCEDIMIENTOS ALMACENADOS 509CURSORES 510TRIGGERS EN TRANSACT-SQL 512INTEGRIDAD REFERENCIAL MEDIANTE TRIGGERS 514

    25. ORACLE 517

    SOBREVIVIENDO A SQL*PLUS 517INSTANCIAS, BASES DE DATOS, USUARIOS 519TIPOS DE DATOS 520CREACIN DE TABLAS 521PROCEDIMIENTOS ALMACENADOS EN PL/SQL 522CURSORES 524TRIGGERS EN PL/SQL 525SECUENCIAS 526TIPOS DE OBJETOS 528EXTENSIONES DE DELPHI PARA LOS TIPOS DE OBJETOS 532

    26. USANDO SQL CON DELPHI 537

    EL COMPONENTE TQUERY COMO CONJUNTO DE DATOS 537QUIN EJECUTA LAS INSTRUCCIONES? 538CONSULTAS ACTUALIZABLES 539SIEMPRE HACIA ADELANTE 540CONSULTAS PARAMTRICAS 543CONSULTAS DEPENDIENTES 545LA PREPARACIN DE LA CONSULTA 546ACTUALIZACIN DE DATOS CON SQL 548ALMACENAR EL RESULTADO DE UNA CONSULTA 549EJECUTAR O ACTIVAR? 550UTILIZANDO PROCEDIMIENTOS ALMACENADOS 553VISUAL QUERY BUILDER 555

    27. COMUNICACIN CLIENTE/SERVIDOR 559

    NUESTRA ARMA LETAL: SQL MONITOR 559TABLA O CONSULTA? 560LA CACH DE ESQUEMAS 562OPERACIONES DE NAVEGACIN SIMPLE 563BSQUEDAS EXACTAS CON LOCATE 564BSQUEDAS PARCIALES 564UNA SOLUCIN PARA BSQUEDAS PARCIALES RPIDAS 565BSQUEDAS CON FILTROS LATENTES 567

  • Indice 13

    ACTUALIZACIONES Y CONCURRENCIA 569

    28. ACTUALIZACIONES 571

    LOS ESTADOS DE EDICIN Y LOS MTODOS DE TRANSICIN 571ASIGNACIONES A CAMPOS 572CONFIRMANDO LAS ACTUALIZACIONES 574DIFERENCIAS ENTRE INSERT Y APPEND 575COMO POR AZAR 576MTODOS ABREVIADOS DE INSERCIN 577ACTUALIZACIN DIRECTA VS VARIABLES EN MEMORIA 577AUTOMATIZANDO LA ENTRADA DE DATOS 579ENTRADA DE DATOS CONTINUA 581ELIMINANDO REGISTROS 582COMPRESIN DE TABLAS LOCALES 583

    29. EVENTOS DE TRANSICIN DE ESTADOS 585

    CUANDO EL ESTADO CAMBIA 585REGLAS DE EMPRESA: EN EL SERVIDOR O EN EL CLIENTE? 586INICIALIZACIN DE REGISTROS: EL EVENTO ONNEWRECORD 587VALIDACIONES A NIVEL DE REGISTROS 588ANTES Y DESPUS DE UNA MODIFICACIN 589PROPAGACIN DE CAMBIOS EN CASCADA 591ACTUALIZACIONES COORDINADAS MASTER/DETAIL 592ANTES Y DESPUS DE LA APERTURA DE UNA TABLA 593VACIANDO LOS BUFFERS 594LOS EVENTOS DE DETECCIN DE ERRORES 595LA ESTRUCTURA DE LA EXCEPCIN EDBENGINEERROR 597APLICACIONES DE LOS EVENTOS DE ERRORES 600UNA VEZ MS, LA ORIENTACIN A OBJETOS 602

    30. BASES DE DATOS Y SESIONES 603

    EL COMPONENTE TDATABASE 603OBJETOS DE BASES DE DATOS PERSISTENTES 604CAMBIANDO UN ALIAS DINMICAMENTE 605BASES DE DATOS Y CONJUNTOS DE DATOS 607PARMETROS DE CONEXIN 609LA PETICIN DE CONTRASEAS 609EL DIRECTORIO TEMPORAL DE WINDOWS 611PROBLEMAS CON LA HERENCIA VISUAL 611SESIONES 613CADA SESIN ES UN USUARIO 613SESIONES E HILOS PARALELOS 614

  • 14 La Cara Oculta de Delphi

    INFORMACIN SOBRE ESQUEMAS 617EL MINIEXPLORADOR DE BASES DE DATOS 618GESTIN DE ALIAS A TRAVS DE TSESSION 620DIRECTORIOS PRIVADOS, DE RED Y CONTRASEAS 622

    31. TRANSACCIONES Y CONTROL DE CONCURRENCIA 625

    EL GRAN EXPERIMENTO 625EL GRAN EXPERIMENTO: TABLAS LOCALES 626EL GRAN EXPERIMENTO: TABLAS SQL 628PESIMISTAS Y OPTIMISTAS 628EL MODO DE ACTUALIZACIN 630LA RELECTURA DEL REGISTRO ACTUAL 632LAS PROPIEDADES CIDAS DE UNA TRANSACCIN 633TRANSACCIONES SQL Y EN BASES DE DATOS LOCALES 635TRANSACCIONES IMPLCITAS Y EXPLCITAS 636ENTRADA DE DATOS Y TRANSACCIONES 638AISLAMIENTO DE TRANSACCIONES 639AISLAMIENTO DE TRANSACCIONES MEDIANTE BLOQUEOS 641EL JARDN DE LOS SENDEROS QUE SE BIFURCAN 643DE NUEVO LOS OPTIMISTAS 644

    32. ACTUALIZACIONES EN CACH 649

    CACH PARA QU? 649ACTIVACIN DE LAS ACTUALIZACIONES EN CACH 650CONFIRMACIN DE LAS ACTUALIZACIONES 651MARCHA ATRS 653EL ESTADO DE ACTUALIZACIN 653EL FILTRO DE TIPOS DE REGISTROS 655UN EJEMPLO INTEGRAL 656EL GRAN FINAL: EDICIN Y ENTRADA DE DATOS 658COMBINANDO LA CACH CON GRABACIONES DIRECTAS 660PROTOTIPOS Y MTODOS VIRTUALES 663CMO ACTUALIZAR CONSULTAS NO ACTUALIZABLES 665EL EVENTO ONUPDATERECORD 668DETECCIN DE ERRORES DURANTE LA GRABACIN 669

    33. LIBRETAS DE BANCOS 673

    DESCRIPCIN DEL MODELO DE DATOS 673CREACIN DE VISTAS 675MANTENIENDO ACTUALIZADOS LOS SALDOS 675LIBRETAS DE BANCO Y MS SQL SERVER 677AHORA, EN ORACLE 679EL MDULO DE DATOS 681

  • Indice 15

    GESTIN DE LIBRETAS 684CDIGOS DE OPERACIONES 686LA VENTANA PRINCIPAL 688ENTRADA DE APUNTES 690CORRIGIENDO EL IMPORTE DE UN APUNTE 692

    LOS DETALLES FINALES 695

    34. IMPRESIN DE INFORMES CON QUICKREPORT 697

    LA HISTORIA DEL PRODUCTO 697LA FILOSOFA DEL PRODUCTO 699PLANTILLAS Y EXPERTOS PARA QUICKREPORT 700EL CORAZN DE UN INFORME 701LAS BANDAS 703EL EVENTO BEFOREPRINT 704COMPONENTES DE IMPRESIN 705EL EVALUADOR DE EXPRESIONES 706DEFINIENDO NUEVAS FUNCIONES 708UTILIZANDO GRUPOS 709ELIMINANDO DUPLICADOS 711INFORMES MASTER/DETAIL 712INFORMES COMPUESTOS 714PREVISUALIZACIN A LA MEDIDA 715LISTADOS AL VUELO 716ENVIANDO CDIGOS BINARIOS A UNA IMPRESORA 718

    35. GRFICOS DE DECISIN 721

    GRFICOS Y BIORRITMOS 721EL COMPONENTE TDBCHART 725COMPONENTES NO VISUALES DE DECISION CUBE 727REJILLAS Y GRFICOS DE DECISIN 729MODIFICANDO EL MAPA DE DIMENSIONES 731

    36. BIBLIOTECAS DE ENLACE DINMICO 733

    ARQUITECTURA BSICA 733PROYECTOS DLL 735EXPORTACIN DE FUNCIONES 736IMPORTACIN DE FUNCIONES Y UNIDADES DE IMPORTACIN 739TIPOS DE DATOS EN FUNCIONES EXPORTADAS 740CDIGO DE INICIALIZACIN Y FINALIZACIN 742EXCEPCIONES EN BIBLIOTECAS DINMICAS 744CARGA DINMICA DE BIBLIOTECAS 745

  • 16 La Cara Oculta de Delphi

    DEPURACIN DE BIBLIOTECAS DINMICAS 746FUNCIONES DE USUARIO EN INTERBASE 746BIBLIOTECAS DE RECURSOS E INTERNACIONALIZACIN 749FICHEROS ASIGNADOS EN MEMORIA 752

    37. SERVIDORES DE INTERNET 757

    EL MODELO DE INTERACCIN EN LA WEB 757APRENDA HTML EN 14 MINUTOS 758EXTENSIONES DEL SERVIDOR Y PGINAS DINMICAS 761QU NECESITO PARA ESTE SEGUIR LOS EJEMPLOS? 762MDULOS WEB 763ACCIONES 765RECUPERACIN DE PARMETROS 767GENERADORES DE CONTENIDO 768GENERADORES DE TABLAS 770MANTENIMIENTO DE LA INFORMACIN DE ESTADO 771UN EJEMPLO: BSQUEDA DE PRODUCTOS 773EL MOTOR DE BSQUEDAS 775CREANDO LA EXTENSIN WEB 778GENERANDO LA TABLA DE RESULTADOS 780DOCUMENTOS HTML Y SUSTITUCIN DE ETIQUETAS 781RESPONDIENDO A LAS ACCIONES 783

    38. CONJUNTOS DE DATOS CLIENTES 785

    CREACIN DE CONJUNTOS DE DATOS 785CMO EL TCLIENTDATASET CONSIGUI SUS DATOS... 787NAVEGACIN, BSQUEDA Y SELECCIN 788FILTROS 789EDICIN DE DATOS 790CONJUNTOS DE DATOS ANIDADOS 791CAMPOS CALCULADOS INTERNOS 794INDICES, GRUPOS Y VALORES AGREGADOS 795

    39. EL MODELO DE OBJETOS COMPONENTES: LA TEORA 799

    COM, DCOM, OLE... 800INTERFACES 801LA INTERFAZ IUNKNOWN 803IMPLEMENTACIN DE INTERFACES EN DELPHI 805CMO OBTENER UN OBJETO COM 807DENTRO DEL PROCESO, EN LA MISMA MQUINA, REMOTO... 808EL HUEVO, LA GALLINA Y LAS FBRICAS DE CLASES 809OLE Y EL REGISTRO DE WINDOWS 810CMO SE REGISTRA UN SERVIDOR? 812

  • Indice 17

    AUTOMATIZACIN OLE 812CONTROLADORES DE AUTOMATIZACIN EN DELPHI 814INTERFACES DUALES 815EVENTOS Y CONTROLES ACTIVEX 816BIBLIOTECAS DE TIPOS 817ACTIVEFORMS: FORMULARIOS EN LA WEB 819

    40. EL MODELO DE OBJETOS COMPONENTES: EJEMPLOS 823

    CREACIN DE OBJETOS Y MANEJO DE INTERFACES 823INTERCEPTANDO OPERACIONES EN DIRECTORIOS 824INFORMES AUTOMATIZADOS 828CONTROLADORES DE AUTOMATIZACIN 833DECLARANDO UNA INTERFAZ COMN 835UN SERVIDOR DE BLOQUEOS 836LA IMPLEMENTACIN DE LA LISTA DE BLOQUEOS 838CONTROL DE CONCURRENCIA 840PONIENDO A PRUEBA EL SERVIDOR 843

    41. MIDAS 845

    QU ES MIDAS? 845CUNDO UTILIZAR Y CUNDO NO UTILIZAR MIDAS 847MIDAS Y LAS BASES DE DATOS DE ESCRITORIO 849MDULOS DE DATOS REMOTOS 850PROVEEDORES 853SERVIDORES REMOTOS Y CONJUNTOS DE DATOS CLIENTES 854GRABACIN DE DATOS 856RESOLUCIN 859CONTROL DE ERRORES DURANTE LA RESOLUCIN 862RECONCILIACIN 864RELACIONES MASTER/DETAIL Y TABLAS ANIDADAS 866ENVO DE PARMETROS 866EXTENDIENDO LA INTERFAZ DEL SERVIDOR 867LA METFORA DEL MALETN 870TIPOS DE CONEXIN 871BALANCE DE CARGA SIMPLE 874INTERFACES DUALES EN MIDAS 875

    42. CREACIN DE INSTALACIONES 877

    LOS PROYECTOS DE INSTALLSHIELD EXPRESS 877LA PRESENTACIN DE LA INSTALACIN 879LAS MACROS DE DIRECTORIOS 881GRUPOS Y COMPONENTES 881INSTALANDO EL BDE Y LOS SQL LINKS 884

  • 18 La Cara Oculta de Delphi

    CONFIGURACIN ADICIONAL DEL BDE 885INSTALACIN DE PAQUETES 887INTERACCIN CON EL USUARIO 888LAS CLAVES DEL REGISTRO DE WINDOWS 890CMO SE REGISTRAN LOS COMPONENTES ACTIVEX 891ICONOS Y CARPETAS 892GENERANDO Y PROBANDO LA INSTALACIN 894LA VERSIN COMPLETA DE INSTALLSHIELD EXPRESS 894LAS EXTENSIONES DE INSTALLSHIELD EXPRESS 895

  • Prlogo del AutorPrlogo del AutorAnd if the band youre in start playing different tunes

    Ill see you on the dark side of the moonPink Floyd

    those dark and hideous mysteries which lie in the outer regions of the moon, regions which,owing to the almost miraculous accordance of the satellites rotation on its own axis

    with its sidereal revolution about the earth, have never yet turned,and, by Gods mercy, never shall be turned, to the scrutiny of the telescopes of man.

    Edgar Allan Poe, The Adventure Of One Hans Pfaall

    N LA PRIMAVERA DEL 95 APARECI DELPHI. En aquel momento, el autortrabajaba para una empresa de cartografa, programando en C/C++ para elentorno Windows, y estaba metido en un proyecto bastante complicado. La

    aplicacin en cuestin deba trabajar con grandes cantidades de datos, con relacionescomplejas entre los mismos, y tena que realizar clculos algebraicos a diestra y si-niestra; todo esto aprovechando la interfaz grfica de Windows 3.11. De entradadescart a Visual Basic, pues aunque simplificaba la programacin de la interfaz deusuario, era demasiado lento para las operaciones de clculo y, al no ser un lenguajeorientado a objetos, no me permita modelar elegantemente las clases que manipu-laba mi proyecto. En cuanto al acceso a datos, ya haba trabajado con CodeBase, unabiblioteca de funciones para manipular tablas en formato dbf. En un principio, podautilizar algo as, aunque la versin 5.1, que era la que estaba utilizando, fallaba cuandolos ficheros de datos pasaban de cierto volumen.

    Necesitaba una herramienta de programacin que cumpliera con estos requerimien-tos, y escrib a Borland, pensando en comprar un C++ con las Database Tools. Encambio, Borland me envi informacin sobre un nuevo producto llamado Delphi,cuyo lenguaje de programacin pareca ser Pascal, ofreca un entorno de desarrollovisual parecido al de Visual Basic, y que permita el acceso a bases de datos en di-versos formatos. No lo pens mucho y compr el producto; tengo que reconocer queel precio, relativamente barato, tambin influy en mi decisin. La historia tuvo, porsupuesto, un final feliz como los de los anuncios de detergentes: el proyecto se ter-min a tiempo, la aplicacin se ejecutaba de maravillas y todos quedaron contentos,excepto yo, que tard ms de seis meses en cobrar lo que me corresponda.

    Mi primera experiencia con Delphi fue similar a la de miles de programadores, y laconclusin que extraje de este primer encuentro con el lenguaje debe haber sidosemejante a la de ellos: Delphi es un sistema muy fcil de aprender y utilizar, y ofreceuna potencia de programacin similar a la de los lenguajes tradicionales comoC/C++.

    E

  • 20 La Cara Oculta de Delphi

    No obstante, tras esta aparente sencillez se oculta una trampa. La programacin conDelphi es, efectivamente, muy sencilla si nos limitamos a las tareas bsicas. Pero do-minar el lenguaje requiere tiempo y dedicacin. Los tres problemas bsicos a los quese enfrenta el programador en Delphi son:

    La Programacin Orientada a Objetos. La arquitectura basada en mensajes o eventos. El control de errores mediante excepciones.

    Adems, el programador que quiere desarrollar aplicaciones serias de bases de datostiene que afrontar las dificultades de la programacin concurrente: mecanismos decontrol de acceso, transacciones, integridad y consistencia, el dominio del lenguajeSQL... Si el entorno del cual procede es la programacin para bases de datos locales,todos estos conceptos son nuevos o se abordan desde enfoques diferentes en susistema de programacin original.

    Por todas estas razones, decid escribir un libro dedicado especialmente a la pro-gramacin para bases de datos con Delphi, que entrara en profundidad en los con-ceptos especficos de este rea. Un libro de carcter tutorial, que adems conside-rase todos los temas anteriores con la profundidad necesaria, hubiera tenido el ta-mao de una enciclopedia, y su redaccin necesitara mucho ms tiempo. En vez dellevar una lnea de desarrollo, conducida quizs por una aplicacin nica de ejemplo,he preferido utilizar ejemplos pequeos para cada tema. De este modo, cada captulopuede leerse de forma independiente a los dems, y el libro puede utilizarse comoreferencia.

    El mayor problema de un libro escrito en ese estilo es el de las referencias circulares:necesito explicarle qu es un campo antes de poder hacer ejemplos sencillos con lastablas, pero tambin necesito presentar las tablas antes de poder explicar los campos.Y la nica solucin que se me ocurre es ofrecer adelantos: escribir un poco sobre elrecurso necesario, prometiendo ms informacin sobre ste ms adelante.

    La Cara Oculta de Delphi est destinada a personas que ya han estado sentadasfrente a Delphi. No es necesario que hayan programado en Delphi, pero no es mi in-tencin ensear cmo se inicia Delphi, qu comandos ofrece, qu es un men... Haybastante literatura por ah que se ocupa de estos temas. En particular, me permitorecomendar el Manual Fundamental de Borland Delphi 2.0, de un tal Ian Mar-teens; no ser el mejor, pero conozco al autor y no es mala persona.

  • Prlogo del Autor 21

    Convenios sintcticosA lo largo de este libro tendr que explicar la sintaxis de algunas construcciones deDelphi, especialmente en el rea de objetos y clases, y de las instrucciones del len-guaje SQL. Utilizar en estos casos la notacin habitual, que explico a continuacinpara los lectores no familiarizados:

    Cursivas Nombres o constantes que el programador debesuministrar.

    [Corchetes] Lo que se pone entre corchetes es opcional.Puntos suspensivos... Los puntos suspensivos indican la repeticin de la clusula

    anterior.Verdadero|Falso La barra vertical se utiliza para indicar una alternativa.

    Acerca de la terminologa empleadaLa mayor parte de este libro ha sido redactada directamente en mi (pobre) castellano.He tratado, en lo posible, de mantener los nombres originales de los objetos y con-ceptos utilizados. En los casos en que he traducido el trmino, incluyo tambin sunombre en ingls. No tiene sentido traducir trminos nuevos o que se utilizan conpoca frecuencia; el prximo autor posiblemente utilizar una traduccin diferente,aunque sea por ansias de originalidad.

    Durante la correccin del libro, he insistido en dos traducciones que pueden resultarextraas para el lector espaol. Una de ellas es traducir library como biblioteca, cuandoel trmino ms extendido es librera. La otra singularidad es utilizar el gnero feme-nino para la palabra interfaz. El castellano moderno tiende a masculinizar las palabrasimportadas de otro idioma, as que casi todos dicen en Espaa: el interfaz. Peroesta palabra no es realmente una importacin; se deriva de faz, que es de gnero fe-menino.

    AgradecimientosEn primer lugar, quiero agradecer la acogida que tuvo el Manual Fundamental. Sinel apoyo del pblico, no me hubiera decidido a escribir un segundo libro acerca deDelphi. Por otra parte, gracias a los que compraron el libro, Christine (mi ordenadorpersonal) pas de ser un 486 a 100MHz con 12MB, a convertirse en un Pentiumpotente de mente fra y corazn caliente; vamos, que le habis financiado el lifting.Quiero decir, no obstante, que antes de la actualizacin Delphi 3 poda ejecutarse enmi mquina; no muy felizmente, pero poda.

  • 22 La Cara Oculta de Delphi

    Durante la redaccin de La Cara Oculta tuve el placer de impartir unos cuantoscursos de programacin con Delphi. En cada curso aprend algo, por lo que es dejusticia mencionar a todos los profesionales y estudiantes que asistieron a los mis-mos.

    Dos personas han resultado ser imprescindibles en la revisin del libro. Nuevamente,Octavio Hernndez ha tenido que soportar largas charlas cada vez que se me ocurrauna idea genial. Muchos de los ejemplos que utilizo son fruto de su imaginacin;adems, le debo el ttulo del libro. Octavio, desgraciadamente, no comparte mi aver-sin a C++: nadie es perfecto. Y Marta Fernndez ha tenido el mrito de hacermecomprender que el sentido del humor no es mi punto fuerte. Si este libro resulta alfinal legible e inteligible es gracias a ella. A propsito, Marta tampoco es per-fecta: le he dicho que si acertaba con la lotera le dara la mitad, y no se lo ha credo.

    Finalmente, de no ser por Danysoft International, este libro no hubiera visto la luz,literalmente. Estuvieron las copias de evaluacin, las horas de prcticas en red conlos ms diversos sistemas de bases de datos ... y el apoyo personal de Martha y JosLuis Castao al autor, todas las veces que ste pens que hacer libros de Informticaen Espaa era como escribir frases en la arena de una playa.

    A todos, gracias.

    Ian MarteensPamplona, Agosto de 1997

  • Prlogo a la Segunda EdicinPrlogo a la Segunda Edicin

    Uno escribe un libro cuando siente que tiene algo interesante que contar ... y claro,cuando hay alguien dispuesto a leerlo, y tienes el tiempo disponible, y alguien teofrece dinero por hacerlo ... Uno escribe una segunda edicin cuando se da cuenta detodo lo que faltaba en la primera. As que quiero dar las gracias en primer lugar atodos los lectores de la primera edicin, por la clida acogida que le dieron a estelibro, y por hacerme llegar todos sus consejos, sugerencias y comentarios.

    Un libro de este tamao no puede ser obra exclusiva de la experiencia de una solapersona. Aqu est reflejado el trabajo de muchos programadores que tuvieron a biencompartir sus conocimientos conmigo. Me gustara mencionarlos a todos, pero lalista es larga y temo dejarme a alguien en el tintero. Gracias de todos modos.

    Agradecimientos especiales a Octavio Hernndez, que ha sufrido la revisin de estaspginas sin saltarse un captulo. Despus de ver todos los errores que ha encontrado,he decidido matricularme en clases nocturnas de Expresin Escrita. Como nicopodr pagrselo es revisando sus tres prximos libros.

    Para ms ejemplos y actualizaciones...Es inevitable que se quede algo en el tintero al terminar un libro. Por este motivo, hedecidido mantener una pgina Web en la direccin www.marteens.com. Consulteperidicamente esta pgina para nuevos ejemplos y ampliaciones del material cu-bierto en este libro.

    Ian MarteensMadrid, Agosto de 1998

  • Who is the third who walks always beside you?When I count, there are only you and I together

    But when I look ahead up the white roadThere is always another one walking beside you

    Gliding wrapt in a brown mantle, hoodedI do not know whether a man or a woman,

    But who is that on the other side of you?

    T.S. Eliot, The Waste Land

  • Entorno y Herramientas Es Delphi su lenguaje? Herramientas y utilidades Unidades, proyectos y paquetes Sistemas de bases de datos El Motor de Datos de Borland

    Parte

  • Captulo

    1Es Delphi su lenguaje?Es Delphi su lenguaje?

    STIMADO LECTOR: si est leyendo estas lneas, es muy probable que hayacomprado el libro y tenga claro que la mejor forma de abordar su prximoproyecto de programacin es utilizar Delphi. Puede tambin que hayan im-

    puesto Delphi en su departamento y no le quede otro remedio que aprenderlo lomejor posible. Pero cabe la posibilidad de que est hojeando este libro en la tienda, yque todava tenga dudas acerca de cul es el lenguaje de programacin que ms leconviene para sus aplicaciones de bases de datos.

    Si est usted convencido de que Delphi es el lenguaje que necesita, adelante: slteseesta introduccin y entre en materia en el siguiente captulo. Para los que decidanseguir leyendo, describir en este captulo las principales caractersticas de Delphicomo herramienta de desarrollo, comparndolo con otros lenguajes y entornoscuando sea necesario. Espero entonces que este breve resumen le sea de utilidad.

    Breve historia de un lenguaje llamado DelphiDelphi 1 sali al mercado en la primavera del 95. Estaba diseado para ejecutarse enWindows 3.1, aunque era compatible con las versiones beta de Windows 95, que anno se haba comercializado. Fue el primer entorno de desarrollo RAD que ofreca uncompilador de cdigo nativo. El lenguaje en que se basaba, como todos sabemos, eraPascal; de hecho, internamente el compilador defina directivas de compilacin comoVER80, para indicar que se consideraba la versin 8 de Turbo Pascal. Se comerciali-zaron dos versiones: la Desktop y la Client/Server. Ambas incluan un producto deBorland que ya se distribua con ciertas versiones del Borland C++: el Motor deBases de Datos de Borland, o Borland Database Engine (BDE). Este era un conjuntode DLLs que permitan el acceso funcional a dBase, Paradox, fuentes de datosODBC y diversos sistemas SQL: Oracle, InterBase, Informix y Sybase. En la versinDesktop, sin embargo, no se incluan los controladores necesarios para acceder abases de datos en un servidor, conformndose con las bases de datos locales yODBC.

    E

  • 30 La Cara Oculta de Delphi

    Aunque en el momento de la aparicin de Delphi 1 Visual Basic llevaba unos cuan-tos aos en el mercado, la nueva herramienta tuvo una clamorosa acogida en la co-munidad de programadores. Por primera vez se alcanzaban velocidades de ejecucinprofesionales en programas desarrollados con el paradigma RAD. Por primera vez,un lenguaje RAD era totalmente extensible, permitiendo sin ningn tipo de manio-bras de distraccin el acceso al temido API de Windows. Por primera vez, un len-guaje basado en componentes permita crear tambin esos componentes, sin necesi-dad de recurrir a otro entorno de programacin

    La siguiente versin de Delphi apareci tambin en la primavera (qu romntico!)del 96. El principal avance fue la conversin del compilador para generar aplicacio-nes de 32 bits, para Windows 95 (que todos pensbamos que iba a ser Windows 96) ypara Windows NT. Adems, se incluy una fase de optimizacin de cdigo, todo unlujo para un lenguaje compilado, mientras Visual Basic 4 segua generando cdigointerpretado. La metodologa de programacin experiment mejoras importantes: lainclusin de mdulos de datos, el Depsito de Objetos, el Diccionario de Datos, laherencia visual, etc. Y, gracias a la retroalimentacin por parte de los programadores,los componentes existentes se hicieron ms potentes y manejables. Se incluy tam-bin la posibilidad de crear controladores y servidores de automatizacin, para apro-vechar las nuevas caractersticas de OLE de Windows 95 y NT. El Motor de Datosse aument con un controlador para DB2. Posteriormente, en ese mismo ao, serealiz una actualizacin de Delphi con el nmero de versin 2.01 que, adems decorregir errores, incluy el Internet Solutions Pack, un conjunto de controles Acti-veX para aplicaciones de Internet.

    En mayo del 97 (tambin primavera!), despus de una tensa espera, apareci la ver-sin 3. Las novedades se centraron en tres campos: la tecnologa de paquetes (pack-ages), el aprovechamiento de la tecnologa OLE (ActiveX, automatizacin, bases dedatos en mltiples capas) y la programacin para servidores Web. El objetivo global

  • Es Delphi su lenguaje? 31

    de todas estas incorporaciones fue convertir a Delphi en un verdadero entorno dedesarrollo cliente/servidor, permitiendo la programacin de aplicaciones que seejecutan en el servidor. El Motor de Datos sigui aadiendo formatos: en aquelmomento le toc a Access y a FoxPro. Por otra parte, la arquitectura de acceso adatos fue modificada para facilitar el desarrollo de componentes de acceso a datosque dejaran a un lado el BDE. En esta lnea, Borland lanz Delphi/400, para accedera bases de datos de AS/400, que utilizaba la tcnica de saltarse el BDE.

    Al poco tiempo, Borland lanz una versin de actualizacin de Delphi, con el n-mero de serie 3.01. Adems de la correccin de bugs, incorporaba un nuevo compo-nente, TMIDASConnection, para permitir el desarrollo de aplicaciones en mltiplescapas en redes TCP/IP. Con este componente, se poda evitar la instalacin y confi-guracin de DCOM en redes mayoritariamente formadas por terminales Windows95. Tambin hubo un parche, el 3.02, que corrigi algunos problemas relacionadoscon la tecnologa Midas y con los dichosos controles del Internet Explorer, que ibancambiando de versin mes tras mes. Una versin intermedia del BDE, la 4.51 queapareci con Visual dBase 7, aadi el soporte nativo para Access 97, pues la versinincluida en Delphi solamente soportaba Access 95.

    Finalmente, en julio del 98, Delphi 4 vio la luz. En verano, no en primavera, porprimera vez! Delphi 4 ha mejorado ostensiblemente el entorno de programacin ydesarrollo, al aadir el Explorador de Cdigo, las facilidades de completamiento declases, etc. Hay mejoras en el lenguaje, pero usted no las notar en su programacincotidiana. Hay novedades en los controles visuales, como el soporte de dockable win-dows (ponga aqu su traduccin preferida) y las listas de acciones. En el apartado debases de datos, se ha aadido soporte para las extensiones de objetos de Oracle 8 (lanica herramienta RAD que ofrece este soporte, por el momento!) y se ha oficiali-zado el soporte de Access 97. La tecnologa Midas se ha beneficiado de adelantosimpresionantes, tanto en estabilidad como en posibilidades de conexin: ahora esposible utilizar CORBA como mecanismo de enlace en aplicaciones multicapas y haysoporte para Microsoft Transaction Server. Tambin se ha mejorado el sistema debase de datos en el cliente de Midas, con la posibilidad de utilizar tablas anidadas,campos agregados, etc. No estamos, sin embargo, ante cambios revolucionarios: esmuy difcil mejorar algo que ya era muy bueno.

    Es Delphi un lenguaje sencillo?La respuesta al ttulo de la seccin depende de lo que usted quiera hacer con l.Quiere montar un mantenimiento simple, con objetos que se pueden representar enregistros independientes? En ese caso, s, es muy fcil. Quiere trabajar sobre unesquema relacional complejo, con referencias complicadas entre tablas, estructurasjerrquicas y todo eso? Bueno, con un poco de disciplina, la aplicacin se desarrollaen poco tiempo; es fcil plantearse una metodologa de trabajo, y el resultado ser un

  • 32 La Cara Oculta de Delphi

    programa robusto, que es algo de agradecer. Quiere que el programa anterior seaindependiente del formato de bases de datos subyacente, que se acople lo mismo asistemas locales, como Paradox y dBase, que a Oracle, InterBase o MS SQL Server?Entonces, amigo mo, necesita leer este libro, para que sepa en qu terreno se hametido.

    El problema no reside en Delphi, pues las mismas dificultades se le presentarn conC++ Builder, Visual Basic PowerBuilder. La causa de las complicaciones es, a mientender, el modelo de programacin y acceso concurrente que es necesario dominarpara este tipo de aplicaciones. El programador de bases de datos locales (lase Cli-pper, Paradox, los distintos COBOL para PCs, etctera) aborda las cuestiones deconcurrencia imponiendo bloqueos en cada registro antes de editarlos. En el 95 porciento de los casos, no se plantea la garanta de atomicidad de las actualizacionescompuestas, ni la recuperacin en transacciones, ni el elevar al mximo la concurren-cia de la aplicacin (conozco aplicaciones de facturacin escritas en Clipper parared que slo dejan facturar desde un puesto a la vez). Por supuesto, al programadorque solamente ha trabajado en este tipo de entorno le cuesta ms acostumbrarse adistinguir entre bloqueos optimistas, pesimistas y arquitecturas multigeneracionales.Este libro tiene el propsito de ayudar en el aprendizaje de estos conceptos.

    En las secciones que vienen a continuacin analizaremos en detalle cada una de lasprincipales caractersticas de Delphi.

    Programacin orientada a objetos verdaderaA 28 aos de la definicin del primer lenguaje de programacin orientado a objetos,y a casi 10 aos de la popularizacin de sus conceptos con la aparicin de C++,nadie duda ya de las grandes ventajas aportadas por este estilo de programacin ypensamiento. A pesar de esto, muchos de los lenguajes populares RAD no soportanverdaderamente la programacin orientada a objetos. Para que un lenguaje seaorientado a objetos debe dar soporte a estas tres caractersticas:

    1. Encapsulacin2. Herencia3. Polimorfismo

    En particular, Visual Basic no permite la herencia, en ninguna de sus versiones. VBest basado completamente en el modelo COM, propuesto por Microsoft. En estemodelo, el concepto fundamental es el de interfaz: un conjunto de funciones quedeben ser implementadas por cada objeto perteneciente a una clase determinada.Otros modelos de objetos, como CORBA y JavaBeans, admiten que una clase heredelas caractersticas de otras, lo cual no sucede en COM.

  • Es Delphi su lenguaje? 33

    Delphi incorpora un modelo completo de programacin orientada a objetos, inclu-yendo encapsulacin, herencia simple y polimorfismo. En este sentido Delphi sepuede comparar con lenguajes que son paradigmas de ese estilo de programacin,como C++. Por ejemplo, aunque Delphi no implementa la herencia mltiple al estiloC++, la versin 3 incluye en compensacin el concepto de interfaces, que se encuentraen lenguajes modernos como Java, y que puede utilizarse como mecanismo alterna-tivo en la gran mayora de las aplicaciones prcticas de la herencia mltiple. El so-porte de interfaces hace posible la programacin de objetos COM, controles Acti-veX, automatizacin OLE, etc.

    Por ser un lenguaje desarrollado cuando los conceptos de Programacin Orientada aObjetos han alcanzado su madurez, Delphi ofrece tcnicas de programacin que nose encuentran en lenguajes ms antiguos como C++. Por ejemplo, Delphi imple-menta como parte fundamental de su arquitectura los constructores virtuales, m-todos dinmicos, manejadores de mensajes y un estilo mucho ms humano y fcilde trabajar con la Informacin de Tipos en Tiempo de Ejecucin (RTTI). Estas ex-tensiones se han incorporado tambin al nuevo C++ Builder, de Inprise Corpora-tion, la compaa antes conocida como Borland International1.

    Arquitectura integrada de componentesUna de las principales caractersticas de Delphi es la arquitectura de sus componen-tes, que permite una completa integracin de estos dentro del lenguaje. Los compo-nentes de Delphi estn basados en clases desarrolladas en el propio lenguaje; no hayque utilizar otros entornos de programacin para crear o extender componentes.Otra consecuencia es que el cdigo de estas clases se ejecuta dentro del mismo espa-cio de direcciones de la aplicacin, con la consiguiente ventaja en necesidades dememoria y tiempo de ejecucin. Al conjunto de componentes bsicos de Delphi se ledenomina la Biblioteca de Componentes Visuales; en ingls, Visual Component Library, VCL.

    Visual Basic utiliza como componentes los llamados controles ActiveX, que Delphitambin admite. Desde el punto de vista de su implementacin, los componentesActiveX son objetos COM implementados en bibliotecas de enlace dinmico, oDLLs. Un objeto COM (Component Object Model), a su vez, es un objeto con un for-mato binario estndar definido por Microsoft, que permite que diferentes lenguajesde programacin hagan uso de las propiedades, mtodos y eventos del mismo. Estaes una buena idea, que ahora llega a su madurez al implementarse el llamado DCOM,o Distributed COM, que permite la activacin y uso de objetos remotos en red.

    1 Os imaginis a Mr. Yocam cantando Purple Rain en la prxima conferencia de Borland ...ejem, perdn ... de Inprise?

  • 34 La Cara Oculta de Delphi

    Sin embargo, este modelo tiene sus luces y sus sombras. Anteriormente hemos men-cionado uno de sus defectos: no hay soporte directo de herencia, lo cual limita laextensibilidad de las clases. Hay otro inconveniente importante de orden prctico: loscontroles ActiveX se implementan como DLLs de Windows. Una DLL es, desde elpunto de vista del enlazador (linker), un sistema autoconsistente; esto quiere decir quesi implementamos un control ActiveX en C, el control debe cargar con el runtime deC; si lo implementamos en Delphi o VB5/6, la librera bsica de estos lenguajes de-ber estar presente en tiempo de ejecucin. Si nuestra aplicacin est basada com-pletamente en este tipo de recursos y tenemos que utilizar (como es lo tpico) unascuantas decenas de ellos procedentes de las ms diversas fuentes, piense en el gastode recursos en que incurriremos.

    Por el contrario, los componentes VCL se integran directamente dentro de los eje-cutables producidos por Delphi y por C++ Builder. No tenemos que cargar concopias duplicadas de una biblioteca de tiempo de ejecucin. Las llamadas a mtodos,propiedades y eventos transcurren de modo ms eficiente, pues no tienen que pasarpor la capa OLE. Adems, son completamente extensibles por medio de la herencia.

    Delphi genera controles ActiveXA pesar de todo lo comentado en la seccin anterior, Delphi ofrece, a partir de laversin 3, lo mejor de ambos mundos: los controles VCL pueden ser convertidos,mediante un sencillo paso automtico, en controles ActiveX. Hasta el momento, elmercado de componentes ha estado orientado a la produccin de controles ActiveX;si tanto Delphi como VB podan utilizar estos controles, y VB no tena capacidadpara trabajar con controles VCL, era evidente que los fabricantes de componentesproduciran controles compatibles con estos dos lenguajes. Normalmente, estoscontroles se programaban en C/C++, y todo el mecanismo de generacin de interfa-ces y tablas de mtodos virtuales era manual y tedioso.

    Al introducir el concepto de interfaces, Delphi da soporte directo a la programacinde objetos COM. El proceso de implementar una interfaz consiste en declarar unaclase que incluya en la lista de ancestros la interfaz que se va a implementar, y ensuministrar cuerpos para los mtodos de la interfaz. Delphi tiene clases predefinidasque proporcionan la mayora de los mtodos requeridos por los controles ActiveX yotras interfaces COM comunes, adems de expertos que facilitan el desarrollo.

    Tratamiento de excepcionesEl tratamiento de errores mediante excepciones es la alternativa moderna al trata-miento tradicional mediante cdigos de retorno de errores. Gracias a esa tcnica, seevita mezclar la lgica de control del algoritmo con las instrucciones de salto de la

  • Es Delphi su lenguaje? 35

    deteccin de errores por medio de cdigos de estado. Tanto Delphi como VB im-plementan excepciones, pero solamente Delphi ofrece un conjunto de instruccionesestructuradas correctamente desde el punto de vista del diseo de lenguajes. El di-seo de las excepciones de VB, por el contrario, est basado en el sistema tradicionalde Basic (que no es un lenguaje estructurado!) y sufre la influencia del carcter inter-pretado del cdigo generado, en las versiones anteriores a la actual.

    Velocidad de ejecucinDelphi, con mucho, sigue siendo el ms rpido de los lenguajes RAD. En pruebasrealizadas por una prestigiosa revista de Informtica, se constat que Delphi es de 3a 6 veces ms rpido que Visual Basic 5 a pesar de que, gracias al compilador incor-porado en la esa versin, los programas de VB5 pueden ejecutarse hasta 20 vecesms rpido que antes (segn la propia Microsoft). La versin 4 de Delphi es la ter-cera versin de este producto que genera cdigo de 32 bits, por lo cual estamos anteun compilador ms estable y confiable. Segn pruebas realizadas con Delphi 4 yVisual Basic 6, se sigue manteniendo la proporcin 5:1 en las velocidades de ejecu-cin de los programas desarrollados con estos sistemas.

    Delphi comparte la misma etapa final de optimizacin y generacin de cdigo nativoque la lnea de compiladores de C/C++ de Borland. Las optimizaciones implemen-tadas por estos compiladores son muy sofisticadas. Se incluye la deteccin de subex-presiones comunes a nivel local y global, la optimizacin de registros, la deteccin deinvariantes de bucles, etc.

    En el rea de la Automatizacin OLE, es de destacar que a partir de la versin 3 sepuede trabajar con las interfaces de objetos COM utilizando la v-table: la tabla depunteros a funciones de la interfaz. Esta mejora a OLE permite alcanzar mayor velo-cidad en las llamadas a funciones en objetos con interfaces duales, en contraste conla tcnica anterior, que pasaba por invocar una funcin del API de Windows.

    Velocidad de compilacin y enlaceUno de los puntos fuertes de Delphi es la velocidad con que se compilan y enlazanlas aplicaciones. En este aspecto no tiene parangn con los sistemas competidores. Yes que la velocidad de compilacin es muy importante, tratndose de sistemas dediseo y programacin interactivos. El formato de unidades de compilacin nativode Delphi, el formato dcu, permite alcanzar mayores velocidades de compilacin yenlace al estar basado en el formato obj, especificado por Intel hace ya muchos aos,con la mente puesta en tcnicas obsoletas de enlace. No obstante, Delphi acepta ygenera ficheros obj (a partir de la versin 2), incluso si han sido generados por otroslenguajes. Delphi ofrece un enlazador inteligente, que es capaz de eliminar todo el

  • 36 La Cara Oculta de Delphi

    cdigo que no va a ser utilizado por la aplicacin. Imagina las consecuencias? Apli-caciones ms compactas, que se cargan ms rpido y que ocupan menos espacio enmemoria RAM y en el disco.

    A partir de la versin 3 de Delphi, los tiempos de enlace disminuyen an ms graciasa los packages. Estos packages, o paquetes, se pueden utilizar opcionalmente, y sonDLLs que contienen el cdigo de componentes. De esta forma, dos aplicacionesescritas en Delphi que se ejecutan en paralelo en la misma mquina utilizan una solacopia en memoria del cdigo de las libreras de tiempo de ejecucin del lenguaje.Como consecuencia, el tamao fsico de los ejecutables disminuye dramticamente,junto con el tiempo invertido por el enlazador en generar el fichero.

    De forma adicional, el Entorno de Desarrollo es mucho ms rpido y eficiente. Esteprograma est escrito en Delphi (hay que predicar con el ejemplo!) y utiliza la VCL.Antes, la librera de componentes, la complib.dcl (16 bits) complib32.dcl (32 bits), y elEntorno de Desarrollo utilizaban copias diferentes de la VCL. Ahora, gracias a lospaquetes, este cdigo se comparte, de modo que disminuyen las necesidades de me-moria. A esto adale que cuando se depura una aplicacin nos ahorramos otra copiade la VCL en memoria.

    Retroalimentacin inmediataSe supone que uno de los objetivos fundamentales de un sistema RAD es permitirque el programador pueda hacerse una idea, mientras desarrolla su aplicacin, delaspecto que va a tener la misma, sin necesidad de efectuar el tedioso ciclo de compi-lacin/enlace/puesta a punto. Ha visto alguna vez la rejilla de datos de Visual Basicdurante el tiempo de diseo? Este control no es capaz de mostrar la disposicinvisual que tendr en tiempo de ejecucin, por lo que el programador debe trabajar aciegas. Esto, hay que aclarar, no es una consecuencia del lenguaje en s, sino de unmal diseo de la librera. En cambio, todos los controles de bases de datos de Delphiofrecen una retroalimentacin inmediata, en tiempo de diseo, de su aspecto final.Incluso al establecer relaciones master/detail entre varias tablas, es posible explorartodas ellas de forma sincronizada, utilizando el Editor de Campos. Del mismo modo,cualquier modificacin en el formato de campos se refleja inmediatamente en loscontroles visuales afectados, e incluso los campos de bsqueda (lookup fields), quepermiten representar referencias entre tablas, se pueden visualizar durante el diseode la aplicacin.

    El Depsito de Objetos y la herencia visualLa herencia visual es una potente tcnica disponible cuando utilizamos plantillas delDepsito de Objetos de Delphi. Es una tcnica dirigida tanto a desarrolladores aisla-

  • Es Delphi su lenguaje? 37

    dos como a grupos de trabajo. El comportamiento tpico de otros entornos de desa-rrollo en relacin con el uso de plantillas y expertos, consiste en que la aplicacin quesolicita una plantilla obtenga una copia local del cdigo necesario. Si posteriormentese realizan modificaciones en la plantilla, estos datos no se propagan a la copia local,por lo cual es necesario repetir los cambios en esta copia, o comenzar nuevamentedesde cero.

    Delphi implementa un Depsito de Objetos, en el cual pueden colocarse plantillasdesarrolladas por nosotros mismo e incluso asistentes desarrollados en el propiolenguaje. Delphi permite, al traer plantillas desde el Depsito, hacer una copia, utili-zar el original o crear un objeto por herencia a partir del objeto plantilla. Inclusopermite llamadas a eventos heredados con una sintaxis simple y sin demoras entiempo de ejecucin.

    Por supuesto, Visual Basic no implementa ningn tipo de herencia, mucho menos laherencia visual.

    Aplicaciones distribuidasQuizs la novedad ms importante que introdujo Delphi 3, y que sigue rindiendofrutos en la versin 4, es la posibilidad de crear aplicaciones de bases de datos mul-ticapas, en las que todas las peticiones de datos se dirigen a un servidor de aplicacio-nes remoto. Este servidor se comunica con los clientes utilizando DCOM, OLEn-terprise (un producto cuya versin de evaluacin se incluye con Delphi), TCP/IP oCORBA. El Motor de Datos de Borland reside, en esta configuracin, en el ordena-dor en que se ejecuta este servidor remoto. Si vamos a utilizar DCOM como proto-colo de transporte, por ejemplo, el ordenador que acta como servidor debe ejecutarWindows NT 4 o Windows 95 con los parches DCOM que ofrece Microsoft en suWeb, o el nuevo Windows 98. Los clientes, o estaciones de trabajo, no necesitan elMotor de Datos, ahorrndose el desarrollador la instalacin y configuracin del

  • 38 La Cara Oculta de Delphi

    mismo. Piense cuanto tiempo se ahorra si se trata de instalar una aplicacin de basesde datos con decenas de usuarios accediendo a la misma! El conjunto de tcnicas quehacen posible esta comunicacin se conoce como Midas (Multi-tiered Distributed Appli-cation Services), y le dedicaremos todo un captulo en este libro.

    A propsito del Motor de Datos, ahora Delphi puede acceder directamente a basesde datos de Access y FoxPro, si existe una copia del JetEngine de Microsoft en elordenador. Se siguen soportando todos los formatos anteriores: Paradox, dBase,InterBase, Oracle, Informix, DB2, Sybase y MS SQL Server. El Motor de Datos hasido mejorado para permitir la adicin de nuevos controladores SQL-Links, y la ar-quitectura de la VCL ha sido modificada para permitir la incorporacin incruenta desustitutos del BDE, tales como Titan, Apollo, etc.

    Componentes de DelphiPor ltimo, se han incorporado en Delphi componentes para dar respuesta a las prin-cipales necesidades de las aplicaciones de gestin: grficos, tablas cruzadas para so-porte de decisiones, informes. Grficos tridimensionales? No hay problema. Losquiere en pantalla?, tenemos TChart. Alimentados por una base de datos?, entoncesnecesita TDbChart. En un informe?, para eso est TQrChart. Y no tema, que estoscontroles son componentes VCL, nada de controles ActiveX ni cosas semejantes.

    Una nueva pgina, Decision Cube, contiene componentes para sofisticados anlisis dedatos dinmicos. Estos componentes sern fundamentales en la programacin deaplicaciones de negocios, que ofrezcan posibilidades de anlisis multi-dimensional, loque comnmente se clasifica como tcnicas de data warehousing.

    QuickReport, la herramienta de creacin e impresin de informes, tambin ha sidomejorada y aumentada. Ahora es ms fcil el diseo de la pgina de impresin, conun componente ms visual, y un editor de propiedades ms amigable. Se han in-cluido componentes para imprimir imgenes de forma ms rpida y conveniente,texto con formato e incluso grficos de negocios. Tambin se puede guardar el resul-tado en formato HTML, para ser distribuido en la Web.

  • Es Delphi su lenguaje? 39

    La versin cliente/servidor de Delphi permite, finalmente, la programacin de ex-tensiones para servidores Web. De este modo, es muy sencillo exportar datos quepueden ser visualizados en Internet, sin necesidad de comprar herramientas adicio-nales.

    En esta misma lnea se incluye un amplio conjunto de componentes para el desarro-llo de todo tipo de aplicaciones clientes de Internet: correo electrnico, clientes deFTP, visores para el formato HTML, etc.

  • Captulo

    2Herramientas y utilidadesHerramientas y utilidades

    L PROPSITO DE ESTE BREVE CAPTULO es presentar las herramientas queacompaan a Delphi, y las novedades del propio Entorno de Desarrollodignas de mencin en la versin 4. No es mi intencin entrar en detalles con

    estas herramientas: mejor que leer una larga parrafada, es preferible familiarizarsecon las mismas mediante la prctica.

    Delphi y el tecladoNadie discute las ventajas de alcanzar una buena velocidad de edicin y diseo concualquier herramienta de programacin. Es doloroso, en consecuencia, ver a ciertosprogramadores de Delphi sufrir calladamente mientras realizan determinadas opera-ciones que desconocen que se pueden realizar de una forma ms sencilla. En estaseccin menciono algunos trucos para acelerar el trabajo con el Entorno de Desa-rrollo.

    Comencemos por la adicin de componentes a un formulario. Delphi ofrece, que yoconozca, cuatro formas diferentes de traer un componente a un formulario, aunquemuchos programadores solamente aprovechen una o dos:

    Realizar un doble clic sobre el componente en la Paleta: Se aade un nuevo componentecon el tamao predeterminado y situado sobre el centro del componente activodel formulario. Supongamos que tiene un panel que ocupa todo el formulario(Align=alClient), y que quiere aadir una barra de mensajes debajo del panel. Sipincha la barra sobre el panel, la barra pertenecer al panel, no al formulario. Lasolucin es seleccionar el formulario (ver truco con la tecla ESC ms adelante), iral botn TStatusBar y hacer el doble clic.

    Realizar un clic en la Paleta y un clic sobre el futuro padre del componente: El componentese crea en el sitio indicado, pero con un tamao predeterminado. Es la mejorforma de colocar botones, cuadros de edicin y otros componentes que se bene-fician con una apariencia estndar.

    Realizar un clic en la Paleta, y arrastrar sobre el padre para definir el tamao: Este mtodoahorra tiempo cuando se va a utilizar un tamao diferente del predefinido. Es el

    E

  • 42 La Cara Oculta de Delphi

    mtodo soportado por Visual Basic, y el nico que muchos programadores prin-cipiantes utilizan.

    Pulsar la mayscula y realizar un clic en la Paleta: Con este mtodo, el botn de laPaleta queda seleccionado, an despus de aadir el componente. As se puedentraer varias instancias del mismo componente con menos clics del ratn. Paravolver al modo de seleccin, hay que pulsar el botn con la flecha de cursor queaparece a la izquierda de la Paleta de Componentes.

    Las siguientes combinaciones de teclas y ratn sirven durante el diseo de formula-rios, y se aplican cuando hay algn componente seleccionado, y el formulario dediseo est activo, con la barra de ttulos en color azul:

    CTRL+FLECHA Mueve el componente seleccionado, pxel a pxelMAY+FLECHA Cambia el tamao del componente seleccionado, pxel a pxel

    ESC Selecciona el padre del componente activoMAY+RATN Selecciona el formulario, que puede estar oculto bajo varias capas de

    componentes

    Tambin podemos activar el movimiento o cambio de tamao de un componentepxel a pxel si pulsamos la tecla ALT mientras lo manipulamos con el ratn.

    Para el Editor de Cdigo tambin existen trucos. Cuando hay un bloque selecciona-do en el editor, pueden aplicarse las siguientes operaciones:

    CTRL+K P Imprime el bloqueCTRL+K I Aumenta el margen del bloque

    CTRL+K U Disminuye el margen del bloque

  • Herramientas y utilidades 43

    Y hablando de bloques, saba que se pueden definir bloques rectangulares en elEditor de Cdigo? El modo de definicin de los bloques se controla mediante lossiguiente comandos:

    CTRL+O+C Bloques por columnasCTRL+O+I Bloques inclusivos (prubelos!)

    CTRL+O+K Bloques no inclusivos (los de toda la vida)CTRL+O+L Bloques por lneas

    Tiene una unidad mencionada en la clusula uses de un formulario, y quiere abrir elfichero con el cdigo fuente? Si el fichero se encuentra en el directorio activo, pulsela combinacin CTRL+INTRO, estando situado sobre el nombre de la unidad, y Delphise encargar del asunto. Pulsando CTRL+K y un nmero del cero al nueve, creamosuna marca de posicin a la cual podemos regresar en cualquier momento pulsandoCTRL+Q, ms el nmero en cuestin.

    Pero quizs la mayor sorpresa es descubrir que Delphi ofrece un mecanismo rudi-mentario para grabar y ejecutar una macro de teclado:

    CTRL+MAY+R Inicia y termina la grabacin de una macroCTRL+MAY+P Reproduce la ltima macro grabada

    Por ltimo, las siguientes combinaciones de teclas pueden resultar tiles para noperdernos dentro de la maraa de ventanas y dilogos de una sesin tpica de desa-rrollo con Delphi:

    F11 Trae al Inspector de Objetos al primer planoF12 Intercambia representacin visual de un formulario con su cdigo

    MAY+F12 Muestra la lista de formularios de un proyectoCTRL+F12 Muestra la lista de unidades de cdigo de un proyecto

    ALT+0 Muestra todas las ventanas abiertas del Entorno de Desarrollo

    La tecla F12 funciona no slo con el Editor de Cdigo y los formularios en diseo,sino tambin con el editor de paquetes (ver el captulo 3) y con el editor de Bibliotecasde Tipos. Finalmente, el nuevo comando Search|Find in files nos permite buscar tex-tos dentro de ficheros, que pueden ser los del proyecto activo o los de un directoriodeterminado.

    He dejado para el final el mejor truco: saba usted que en el fichero de ayudaaparecen estos comandos, y muchos ms, perfectamente documentados? Quizsmerezca la pena que pierda unos minutos aprendiendo trucos de teclado, pues leharn ser ms productivo.

  • 44 La Cara Oculta de Delphi

    Code Insight: ayuda durante la edicinEl Editor de Cdigo ha experimentado mejoras sustanciales a partir de Delphi 3.Una de ellas es el uso de plantillas de cdigo, o code templates. Sitese en el editor ypulse la combinacin de teclas CTRL+J. En respuesta, aparece una lista de nombresde plantillas. Cuando seleccionamos una, se copia el cdigo asociado, y el cursor sedesplaza a un punto que depende de la definicin de la plantilla.

    Otra forma de lograr el mismo efecto es tecleando primero el nombre de la plantillay pulsando entonces CTRL+J; pruebe, por ejemplo, con whileb, que crea el esqueletode un bloque while con una instruccin compuesta beginend:

    while { Aqu se queda el cursor } dobeginend;

    Aunque existe una gran variedad de plantillas predefinidas, tambin podemos aadirlas nuestras. Las plantillas de cdigo se configuran en el dilogo asociado al comandode men Tools|Environment options, en la pgina Code Insight:

    El texto de las plantillas se guardan en el subdirectorio bin de Delphi, en el ficherodelphi32.dci. Para definir una plantilla nueva, el programador debe pulsar el botn

  • Herramientas y utilidades 45

    Add. En respuesta aparece un cuadro de dilogo que pide el nombre y la descripcinde la plantilla:

    Luego, debe utilizarse el editor para suministrar el texto de la plantilla. La barra verti-cal | sirve para indicar dnde debe quedar el cursor al ejecutarse la plantilla. Porejemplo:

    with T|.Create(Self) dotryfinally Free;end;

    Las definiciones de macros de Code Insight se almacenan en el fichero delphi32.dci,en el directorio bin de Delphi.

    Pero seguramente el programador utilizar con mayor frecuencia las ayudas interacti-vas de Delphi acerca de los mtodos aplicables a un objeto, y de los parmetros delos procedimientos y funciones. Cuando tecleamos el nombre de una variable deobjeto, o de un tipo de clase, y aadimos un punto, aparece una ventana emergentecon la lista de mtodos y propiedades aplicables. Da lo mismo que el tipo del objetosea predefinido o haya sido creado por nosotros, con tal de que est compilado.

    Si quiere que aparezca esta ventana en cualquier otro momento, debe pulsar la com-binacin de teclas CTRL+ESPACIO.

    Para los procedimientos, funciones y mtodos, la ayuda se presenta cuando teclea-mos el parntesis de apertura a continuacin del nombre de una rutina. La ventana

  • 46 La Cara Oculta de Delphi

    de ayuda es una ventana de indicaciones (esos recuadros amarillos que se interponenen nuestro campo visual cuando dejamos tranquilo al ratn por un tiempo), con elnombre y tipo de los parmetros, segn aparecen en la declaracin de la rutina. Si senos pierde la ventana, tenemos el comando de teclado CTRL+MAY+ESPACIO, para quereaparezca la ayuda:

    La misma combinacin CTRL+ESPACIO, que nos ofrece ayuda para seleccionar mto-dos y propiedades, sirve para ayudarnos con los posibles valores de un parmetrocuando nos encontramos dentro de la lista de parmetros de un mtodo, procedi-miento o funcin:

    Hay que utilizar con precaucin esta tcnica, porque en la lista de posibilidades apa-recen todas las constantes, variables y funciones de tipos compatibles, y esto incluyea las de tipo Variant, que salen hasta en la sopa.

    Ahora mencionaremos las novedades de Delphi 4. La primera es la presencia delnuevo Explorador de Cdigo:

  • Herramientas y utilidades 47

    Esta ventana muestra los smbolos definidos dentro de una unidad. Si est activa,podemos realizar bsquedas incrementales de smbolos utilizando el teclado. Tam-bin es til para cambiar el nombre a un smbolo. Tenga en cuenta, no obstante, queel cambio solamente se aplicar a la declaracin, y que habr que cambiar manual-mente el cdigo en los sitios donde se utiliza el smbolo. Ah, y si le molesta muchoesta ventana, recuerde que puede arrastrarla fuera del Editor, o simplemente cerrarla.

    La segunda novedad se conoce como Navegacin por el Cdigo. Si colocamos elratn (ms bien, el puntero del mismo) sobre un smbolo, ya sea una variable, unaclase, un mtodo, un procedimiento, aparece una indicacin acerca de dnde estdefinido tal smbolo.

    Si adems pulsamos la tecla CONTROL mientras estamos sobre el smbolo, ste adoptala apariencia de un enlace HTML (ah, la moda!), y nos permite ir inmediatamente allugar donde ha sido definido o implementado. La historia de esta navegacin se al-macena en las listas desplegables asociadas al par de botones de la esquina superiorderecha del Editor, que nos permiten movernos hacia delante y hacia atrs por lamisma.

    Por ltimo, las combinaciones de teclas CTRL+MAY+ABAJO y CTRL+MAY+ARRIBA,sirven para alternar rpidamente entre la declaracin de un mtodo en la interfaz deuna unidad, y su cuerpo, en la seccin de implementacin.

  • 48 La Cara Oculta de Delphi

    Class completionClass completion es otra de las tcnicas de mejora de la productividad introducidas porDelphi 4. Como el lector conoce, los mtodos de una clase deben definir sus cabece-ras dentro de la declaracin de la misma, pero su cuerpo debe definirse por separado.Esto implica, casi siempre, navegar desesperadamente desde la seccin de interfaz dela unidad a la seccin de implementacin, y un uso habilidoso de los comandos decopiar y pegar. Delphi nos releva de esta tortura cuando crea mtodos de respuesta aeventos, pero nos deja abandonados cuando tenemos que definir otro tipo de mto-dos. Lo mismo sucede cuando queremos definir propiedades para una clase. La decla-racin de una propiedad debe ir precedida por la declaracin de sus mtodos deacceso. Estos, a su vez, llevan doble trabajo: la declaracin de sus cabeceras y suposterior implementacin. Es cierto que estas labores son ms frecuentes durante laescritura de componentes ... pero todos tenemos derecho a una vida mejor.

    Delphi 4 ofrece la combinacin CTRL+MAY+C para ayudarnos en estos menesteres.Supongamos que tecleamos la siguiente declaracin de clase:

    type TYoQueSe = class(TCiertaClase) public constructor Create(AOwner: TComponent); destructor Destroy; override; published property Entero: Integer; property Vector[Index: Integer]: string; end;

    Hemos dejado incompletas las dos declaraciones de propiedades. Si ahora tecleamosCTRL+MAY+C, Delphi modifica la clase de esta manera:

    type TYoQueSe = class(TCiertaClase) private FEntero: Integer; function GetVector(Index: Integer): string; procedure SetEntero(const Value: Integer); procedure SetVector(Index: Integer; const Value: string); public constructor Create(AOwner: TComponent); destructor Destroy; override; published property Entero: Integer read FEntero write SetEntero; property Vector[Index: Integer]: string read GetVector write SetVector; end;

    Tambin aade, en la seccin de implementacin de la clase, un cuerpo para el cons-tructor, el destructor y para los tres mtodos de acceso que ha generado. Incluso, enel caso de los mtodos de acceso, se atreve a sugerirnos una posible implementacin:

  • Herramientas y utilidades 49

    procedure TYoQueSe.SetEntero(const Value: Integer);begin FEntero := Value;end;

    Herramientas de depuracinPara desarrollar eficientemente aplicaciones con Delphi, es sumamente convenientedominar las tcnicas de depuracin. Estas tcnicas siguen siendo similares a las deldepurador integrado en las primeras versiones de Turbo Pascal. Sin embargo, lasdiferencias quedan determinadas por la diferente estructura de los programas escritospara MS-DOS y Windows. En un programa para Windows es imposible seguir pasoa paso la ejecucin de todas las instrucciones del mismo. Hay un momento en queperdemos de vista el puntero de las instrucciones: cuando nos sumergimos en unarutina conocida como el ciclo de mensajes. A partir de este punto, recuperamos peridi-camente el control, cuando Delphi, C++ Builder Visual Basic ejecutan algunas delas respuestas a eventos, o cuando C++ ejecuta alguna funcin de respuesta o mtodoasociado a mensajes.

    Por lo tanto, lo que debe saber el programador de Delphi es cmo interceptar alprograma cuando pase por los sitios que le interesa, y para esto tiene dos posibi-lidades. La primera es establecer un punto de ruptura ( breakpoint) en una instruccin,para lo cual puede pulsar la tecla F5 (CTRL+F8, si se utiliza a configuracin de tecladotradicional de Borland), o ejecutar el comando de men Run|Add breakpoint, estandoseleccionada la lnea en la cual nos queremos detener. Cuando el programa se ejecutey pase por esa lnea, se detendr, se activar el Entorno de Desarrollo, y podremosdecidir qu hacer: evaluar el estado actual de las variables, seguir ejecutando paso apaso, detener el programa ... La otra posibilidad es utilizar el comando de menRun|Run to cursor, o pulsar la tecla F4, estando situados sobre la lnea deseada. Elefecto es similar a colocar un punto de ruptura temporal, ejecutar el programa yliberar el punto una vez llegados al mismo.

    A un punto de ruptura se le puede asociar una condicin de parada, que debe cum-plirse para que el programa detenga all su ejecucin, y un contador de pasadas, paraactivar el punto a las tantas veces que se pase por l. Los puntos de ruptura pueden

  • 50 La Cara Oculta de Delphi

    controlarse con el comando de men View|Breakpoints. El margen izquierdo delEditor de Cdigo muestra tambin los puntos de ruptura y el estado de los mismos.

    Una vez que el programa se ha detenido temporalmente en un lugar determinado,comenzamos a seguirle la pista a las instrucciones por las que pasa. Tenemos a nues-tra disposicin los siguientes comandos del men Run:

    Trace into (F7) Avanzar una instruccin. Si es una rutina ytenemos el cdigo fuente, entramos en suinterior.

    Step over (F8) Igual a la anterior, pero esquivando el interiorde las rutinas.

    Trace to next source line (MAY+F7) Ir hasta la siguiente lnea de cdigo disponible.

    Tambin se puede pulsar F9, y dejar que el programa se ejecute hasta terminar oencontrar un punto de ruptura.

    La otra tcnica importante nos permite conocer el contenido de las variables, atri-butos y propiedades del espacio de datos del programa. Los comandos Run|Evaluatey Add watch nos permiten evaluar dinmicamente una expresin inspeccionar cons-tantemente el valor, respectivamente.

    Recuerde tambin que, si se trata de una variable o propiedad de un objeto, basta consituar el cursor sobre una referencia a la misma en el cdigo del programa para obte-ner su contenido en una ventana de indicaciones. Tambin podemos utilizar el co-mando de men Run|Inspect, que solamente est disponible en tiempo de ejecucin,para mostrar una ventana como la siguiente con los datos, mtodos y propiedades delobjeto que deseemos:

  • Herramientas y utilidades 51

    Por ltimo, Delphi 4 aade una nueva ventana de depuracin: el event log, o registrode eventos que almacena y muestra opcionalmente los siguientes sucesos: carga ydescarga de mdulos por la aplicacin, mensajes de Windows recibidos por nuestraaplicacin, activacin de puntos de rupturas y mensajes generados con el procedi-miento de Delphi OutputDebugString. Recuerda que en la poca de MS-DOS la tc-nica ms potente de depuracin era con frecuencia escribir en la consola mensajesdel tipo Killroy was here? Ahora podemos retornar nuestra adolescencia gracias alregistro de eventos.

    Object BrowserUno de los grandes desconocidos del Entorno de Desarrollo de Delphi es el Explo-rador de Objetos; en ingls: Object Browser. Es una herramienta integrada en el entorno,que se ejecuta desde el comando de men View|Browser. La informacin que semuestra con la misma se extrae del ejecutable de la aplicacin, por lo que el proyectodebe haber sido compilado previamente para poder activar la utilidad.

    La siguiente figura muestra la ventana principal del Explorador. Consta de dos pane-les; en el de la izquierda se muestra la jerarqua de las clases incluidas en el proyecto,mientras que sus mtodos, eventos y propiedades se muestran en el panel derecho.La barra de herramientas de la porcin superior de la ventana sirve para restringir lainformacin visualizada. Una posibilidad interesante es la navegacin por referencias.

    BDE AdministratorEl Administrador del Motor de Datos (BDE Administrator) es el programa necesariopara configurar las opciones de acceso a bases de datos de Delphi. Esta aplicacintambin se instala cuando distribuimos el Motor de Datos con nuestras aplicaciones.Puede ejecutarse desde el grupo de programas de Delphi. Tambin puede configu-rarse el men Tools del entorno de desarrollo de Delphi para incluir el Administrador,

  • 52 La Cara Oculta de Delphi

    si es que vamos a utilizarlo con frecuencia. Para configurar Tools ejecute el comandode men Tools|Configure tools. En el cuadro de dilogo que aparece, pulse el botnAdd para aadir la nueva opcin. El ejecutable del Administrador, en mi ordenador,corresponde al fichero:

    C:\Archivos de programa\Borland\Common Files\BDE\Bdeadmin.exe

    Para ms detalles sobre esta herramienta, lea el captulo sobre el Motor de Bases deDatos.

    Database ExplorerPara conocer la estructura de una base de datos, saber qu tablas contiene, qu co-lumnas, ndices y restricciones se han definido para cada tabla, y para visualizar losdatos almacenados en las mismas, Delphi ofrece Database Explorer: el Explorador deBases de Datos. Para activar este programa desde Delphi, basta con seleccionar elcomando de men Database|Explore, pero tambin puede ejecutarse como utilidadindependiente desde el grupo de programas de Delphi. En la versin cliente/servi-dor, en la que se incluye, como es lgico, el acceso a bases de datos SQL, la utilidadse nombra SQL Explorer.

    La ventana principal de la utilidad contiene dos pginas: Databases y Dictionary. En laprimera es donde aparecen las distintas bases de datos asociadas a los alias persis-

  • Herramientas y utilidades 53

    tentes del Motor de Datos. El rbol del panel de la izquierda puede expandirse paramostrar jerrquicamente los objetos de la base de datos. Se pueden realizar modifica-ciones en todos estos objetos en el panel de la derecha.

    El Explorador de Bases de Datos tambin sirve para configurar el Diccionario de Datos.Esta entidad es utilizada por Delphi en tiempo de diseo; no tiene funcin alguna entiempo de ejecucin. En el Diccionario de Datos pueden almacenarse, en primerlugar, definiciones de conjuntos de atributos de campos. Los conjuntos de atributos sepueden asociar a los campos de las tablas al ser creados desde Delphi, y permitenuniformizar las propiedades de visualizacin, edicin y validacin de los mismos.Tambin se consultan cuando arrastramos un campo sobre un formulario y Delphicrea un control de edicin; el tipo del control puede determinarse de acuerdo a losatributos asociados.

    La otra operacin importante con el Diccionario de Datos es la importacin de bases dedatos al diccionario. Cuando importamos una base de datos, se copian sus definicio-nes de tablas, campos e ndices al Diccionario. Se pueden entonces asociar conjuntosde atributos a los campos, de modo tal que estos atributos se asocian automtica-mente cuando se crean los campos. Cuando una base de datos ha sido importada,pueden tambin importarse las restricciones de integridad a determinadas propieda-des de los campos y tablas de Delphi. Esto es til en la programacincliente/servidor, pues permite evaluar las verificaciones en los ordenadores clientesantes de ser enviadas, disminuyendo el trfico en la red.

    Los datos del Diccionario por omisin se almacenan en formato Paradox, en la tablabdesdd.db. Sin embargo, pueden crearse nuevos diccionarios en diferentes formatos,incluso en bases de datos cliente/servidor, y ser compartidos por todos los miem-bros de un equipo de desarrollo.

    Database DesktopSin embargo, mi herramienta preferida para crear tablas de Paradox y dBase siguesiendo Database Desktop, que acompaa a Delphi desde su primera versin. A pesarde la apariencia ms moderna de Database Explorer, determinadas tareas se ejecutanms cmodamente y con mayor eficiencia con la vieja interfaz del DatabaseDesktop. Por ejemplo, es muy fcil copiar tablas, modificar su estructura y editar sucontenido. La siguiente figura muestra el dilogo de creacin de una tabla en el for-mato de Paradox 7:

  • 54 La Cara Oculta de Delphi

    De todos modos, es recomendable que la administracin de la estructura de las basesde datos SQL se realice, en general, utilizando las herramientas propias del sistemade bases de datos.

    Desgraciadamente, el Database Desktop que acompaa a Delphi 4 no permiteaprovechar las nuevas posibilidades del formato DBF7. Ha sido un lamentabledescuido que esperamos se corrija pronto.

    Data Migration WizardLas versiones cliente/servidor de Delphi incluyen el programa Data Migration Wizard,que sirve para copiar tablas de una base de datos a otra. Este es un programa asis-tente, en el que se van presentando secuencialmente pginas en un cuadro de dilogopara ayudar paso a paso a realizar determinada operacin.

    Aunque es muy fcil copiar una tabla utilizando el componente TBatchMove de Del-phi, esta utilidad permite mover tambin las restricciones de integridad, ndices, et-

  • Herramientas y utilidades 55

    ctera, algo que no est previsto para TBatchMove. Se puede tambin modificar latraduccin que se genera para tipos de datos diferentes, como se puede ver en lafigura anterior.

    SQL MonitorSQL Monitor es una utilidad incluida en las versiones cliente/servidor de Delphi, quesirve para seguir la pista de las instrucciones SQL generadas por el BDE que se en-van al servidor.

    Cuando el Motor de Datos tiene que conectarse a una base de datos SQL, toda lacomunicacin transcurre enviando instrucciones SQL a la misma. El Motor trata conuna interfaz uniforme a las tablas locales y a las tablas situadas en un servidor. Poreste motivo, a veces la traduccin a SQL de determinada rutina de alto nivel del BDEno es muy evidente. Gracias a esta utilidad, podemos saber qu rdenes le da el Mo-tor de Datos al servidor SQL, y qu le responde ste.

    SQL Monitor puede ejecutarse tanto desde el grupo de programas de Delphi, comodesde Delphi, mediante el comando de men Database|SQL Monitor. El contenidodel captulo 27 est basado completamente en el anlisis de los datos que ofrece SQLMonitor.

    Image EditorPor ltimo, Delphi ofrece un sencillo editor de imgenes, Image Editor, para los grfi-cos nuestros de cada da. Este programa permite editar imgenes en formato demapas de bits e iconos. Pero tambin nos permite abrir y modificar ficheros de re-cursos y los ficheros de recursos compilados de Delphi (Delphi Compiled Resources), de ex-tensin dcr.

  • 56 La Cara Oculta de Delphi

    Un fichero dcr es simplemente un fichero de recursos binarios que almacena sola-mente mapas de bits e iconos. Se utiliza fundamentalmente para definir los iconosasociados a los componentes de la Paleta de Componentes.

    Image Editor no puede trabajar con cadenas contenidas en recursos. A partir deDelphi 3, se poda utilizar declaraciones resourcestring para que el compilador ge-nerara y enlazara los recursos correspondientes dentro de nuestros ejecutables. Perono se poda extraer o modificar estas definiciones a partir de ejecutables o DLLsexistentes. Delphi 4, por fin, ha aadido un editor de recursos de tablas de cadenas alentorno de desarrollo.

  • Captulo

    3Unidades, proyectos y paquetesUnidades, proyectos y paquetes

    ASCAL ES UN LENGUAJE CON BASTANTE HISTORIA, quizs con demasiada.Comenz siendo un proyecto docente para la enseanza de la entonces re-ciente Programacin Estructurada; ya sabemos: eliminar los saltos a etiquetas

    dentro del cdigo y sustituirlos por elegantes instrucciones de control. Era un len-guaje de pequeo tamao y poca complejidad, fcil de aprender, pero inadecuadopara la programacin real, sobre todo por carecer de la posibilidad de descomponerel programa en mdulos independientes capaces de ser compilados por separado.Todo programa en el Pascal original se escriba en un mismo fichero, y se compilabay enlazaba en una sola operacin.

    Al convertirse Pascal en un lenguaje para la programacin real tuvo que transfor-marse, incluyendo nuevas estructuras sintcticas para la compilacin por separado yel trabajo en equipo. La implementacin que traz el camino a seguir fue la de UCSDPascal, un experimento interesante que integraba lenguaje ms sistema operativo(quiera Dios que a Microsoft no se le ocurra repetir la experiencia!). Luego Borlandy la compaa de Redmond utilizaron variantes de la sintaxis establecida por estaimplementacin y la incorporaron a sus productos: estoy hablando de las units o uni-dades.

    El otro cambio importante que sufri Pascal se produjo cuando se populariz laProgramacin Orientada a Objetos. No se introdujeron cambios en la estructura deproyectos, pero cambi bastante la metodologa de trabajo, que se tuvo que adaptar ala forma histrica de organizacin del lenguaje. Por ejemplo, como veremos al estu-diar las tcnicas de Programacin Orientada a Objetos, los mecanismos de control deacceso de las unidades y los de las declaraciones de clase se interfieren mutuamente,lo cual no es muy elegante. Y mientras menos elegante sea un lenguaje de programa-cin es ms difcil de aprender.

    En este captulo describir a grandes rasgos los ficheros y formatos que se utilizan enlos proyectos de Delphi, y los tipos de proyectos que se pueden crear.

    P

  • 58 La Cara Oculta de Delphi

    La estructura de un proyecto de aplicacinEl proyecto ms frecuente en Delphi es el proyecto de aplicacin. Su objetivo: lacreacin de un ejecutable. Delphi divide las aplicaciones en mdulos relativamenteindependientes. Aunque ms adelante veremos toda la flexibilidad del esquema departicin, en principio se utiliza un sistema muy sencillo: cada ventana se coloca enuna unidad separada, y la integracin de las unidades se produce gracias a un ficheroespecial, el fichero de proyecto. Todo el esqueleto bsico del proyecto de aplicacin escreado automticamente por Delphi, y muy pocas veces es necesario modificarloexplcitamente, pero es aconsejable conocer qu est sucediendo detrs del teln.

    El fichero de proyecto tiene la extensin dpr: Delphi PRoject, es decir, Proyecto de Delphi.El contenido de este fichero es Pascal, y su estructura es similar a la que tenan losprogramas escritos en el lenguaje Pascal original:

    program NombreProyecto;

    usesLista de Unidades;

    Declaraciones

    beginLista de instrucciones

    end.

    En primer lugar, tenemos el nombre del proyecto; este nombre debe ser un identifica-dor de Pascal: debe comenzar con un carcter alfabtico y el resto de sus caracteresdeben ser dgitos o letras sin acentos2. El nombre utilizado para el proyecto debecoincidir con el nombre del fichero en que se almacena. De hecho, este nombrecambia cuando guardamos el fichero de proyecto bajo otro nombre. La principalconsecuencia de la regla anterior es que no se pueden generar en Delphi, al menos deforma directa, aplicaciones cuyos nombres contengan acentos, espacios en blanco yotros caracteres vlidos como nombres de fichero, pero no permitidos en identifica-dores Pascal.

    La siguiente seccin es la clusula uses, en la que se nombran las unidades que formanparte del proyecto. En el esqueleto generado por Delphi, todas las unidades integra-das en el proyecto son mencionadas en esta clusula, aunque no es estrictamentenecesario. Mediante la seccin uses del fichero de proyecto, el enlazador de Delphisabe qu unidades deben enlazarse para crear el ejecutable. En contraste, otros len-guajes requieren de la presencia por separado de un fichero de opciones de enlace en

    2 Bueno, s, vale ... y tambin el carcter subrayado, al cual detesto de todo corazn!

  • Unidades, proyectos y paquetes 59

    el cul se especifiquen explcitamente las dependencias entre los mdulos. Toda estainformacin la deduce Delphi automticamente.

    No obstante, el objetivo primordial de la inclusin de una unidad en la clusula useses proporcionar acceso a las declaraciones pblicas efectuadas dentro de la misma.En particular, estas declaraciones se utilizan en el proyecto por omisin de Delphipara la creacin automtica de los objetos de ventanas durante la inicializacin de laaplicacin. Ms adelante, en este captulo, estudiaremos ms detalles de las clusulasuses y de las declaraciones en unidades. La creacin automtica de formularios seestudia en el captulo 13.

    A continuacin de la clusula uses pueden incluirse declaraciones de constantes,tipos, variables y rutinas; todas para uso exclusivo del fichero de proyecto. Por l-timo, es obligatoria la presencia de una lista de instrucciones delimitada por las pala-bras reservadas begin y end. La ejecucin de la aplicacin comienza por esta lista deinstrucciones. En contraste, en otros lenguajes de programacin es ms difcil de-terminar a priori por dnde comienza la ejecucin; en C y C++, por ejemplo, hayque buscar en qu mdulo o fichero se ha definido una funcin de nombre main, enMS-DOS, o WinMain, en Windows.

    El siguiente listado muestra un fichero de proyecto tpico de Delphi. Este proyectocontiene tres ventanas que se crean automticamente al principio de la aplicacin:

    program Project1;uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3};

    {$R *.RES}

    begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.Run;end.

    Observe la ausencia de la lista de declaraciones. La lnea encerrada entre llaves serexplicada ms adelante.

    Para qu se necesitan unidades? En realidad, todo el cdigo y los datos del pro-grama pudiera colocarse tericamente en el mismo fichero de proyecto. Pero en laprctica se hara imposible el mantenimiento de la aplicacin resultante. Por eso sereparten las rutinas y los datos de la aplicacin entre diversos ficheros, actuando elproyecto como coordinador de la estructura de ficheros generada. El diagrama a

  • 60 La Cara Oculta de Delphi

    continuacin ilustra las relaciones establecidas en el ejemplo de proyecto anterior.Las flechas representan la mencin de las unidades en la clusula uses. Este dia-grama es una simplificacin, pues pueden existir referencias entre las propias unida-des. Ms adelante estudiaremos la sintaxis de las unidades, la forma de establecerreferencias entre ellas y los motivos que pueden existir para estas referencias.

    Project1

    Unit1 Unit2 Unit3

    Qu se puede declarar?En la seccin anterior he menci