Anda di halaman 1dari 22

Manual de Delphi

Bienvenidos a este tutorial de Delphi, el entorno de desarrollo para Object Pascal de la casa Borland. Durante las siguientes lecciones tratar de introducir al lector en este entorno de desarrollo y posibilitarle dar sus primeros pasos en la programacin en Object Pascal segn la filosofa de este excelente producto para desarrollo de aplicaciones Windows. Propsito del Tutorial. A lo largo de mucho tiempo recibo correos de personas que quieren iniciarse en Delphi pero se quejan de la falta de informacin para principiantes especialmente en castellano (espaol), hacindome eco de tales quejas he decidido afrontar el problema por mi mismo y escribir este tutorial que est dirigido a los principiantes por lo que si eres un usuario programador con alguna experiencia en Delphi no encontrars nada que no sepas ya, por el contrario si eres una de esas inquietas personas que desean comenzar a programar usando Delphi estoy casi seguro que este es el tutorial para t. Durante el desarrollo de este tutorial aprenders a identificar las diferentes partes del entorno de desarrollo Delphi, me basar en la versin que tengo en mi mquina la cual es Delphi Enterprise versin 6.0 con Update 2.0 aunque tambin te ser vlido para las versiones 5.0 y 7.0, si algo no te resulta en tu versin de Delphi, o tienes alguna pregunta sobre este tutorial, o quieres comentarme algo no dudes de comuncarmelo. Prerrequisitos. En este tutorial asumo que el lector tiene alguna experiencia en programacin en general, no pretende ser un curso de programacin sino introducirte en Delphi exclusivamente, no es necesario que sepas Pascal (aunque es deseable) pues tocar algunas cosas bsicas sobre este lenguaje; no explicar por ejemplo qu es una variable o qu es una sentencia as como tampoco pretende ser un curso sobre el uso de Windows, asumo tambin que el lector sabe manejarse con soltura en este sistema operativo y sabe reconocer qu es un men descolgable o qu es un botn. Convenciones usadas. Para hacer ms claras mis explicaciones usar algunas convenciones que es necesario recordar. Debido a que voy a utilizar fragmentos de cdigo durante este tutorial y quizs el lector quiera copiar y pegar en el editor de Delphi esos fragmentos los cuales estarn con

la tipografa Courier New que es la misma tipografa estandar que usa el editor de cdigo de Delphi. As mismo har referencia a ciertas combinaciones de tecla que como se ver acelera algunas funciones comunes durante la escritura, compilacin, edicin y ejecucin de un programa hecho en Delphi, usar la notacin conocida por todos, por ejemplo: Crtl+F9 indica que se debe presionar la tecla Control y mientras se mantiene presionada sta, presionar a su vez la tecla F9. El IDE. Para comenzar supondr que ya tienes instalado correctamente el Delphi, por lo que deberas tener un icono en el escritorio de Windows parecido al que figura en la esquina superior izquierda de esta pgina. Haciendo doble click en l se ejecutar el IDE de Delphi, IDE significa Integrated Developement Environment, es decir, Entorno Integrado de Desarrollo. Luego de la pantalla de bienvenida deberas tener algo muy parecido a la figura que aparece a continuacin.

Fig. 1 - El Entorno Integrado de Desarrollo de Delphi 6.0.

Si en tu caso no es exactamente igual a la figura se debe a que el IDE puede ser configurado segn las preferencias del usuario del mismo pero siempre vers cuatro ventanas principales. Si has programado en Visual Basic de Microsoft lo primero que te resultar extrao es que puedes ver "atravs" del IDE, se debe a que el IDE del Delphi tiene sus herramientas separadas en ventanas distintas, las cuales, como cualquier ventana de Windows, pueden ser minimizadas, maximizadas y restauradas, dandole un poco ms de flexibilidad al entorno de desarrollo. Vamos a dar una ligera descripcin a cada parte del IDE sealando sus funciones. No te preocupes si no entiendes exactamente para qu sirve, solo ten en mente que cada cosa descripta te ser de suma importancia cuando desarrolles tus propios programas. En definitiva, de ahora en ms esta ser tu "casa", por lo que debers saberte mover en ella con soltura. La ventana de mens y herramientas. En la siguiente figura se puede ver la ventana que est arriba de la pantalla, y que se llama la ventana de mens y herramientas.

Fig. 2 - Ventana de mens y barras de herramientas. Como su nombre indica en esta ventana se encuentra la barra de men principal del IDE y una serie de barras de botones al estilo del Microsoft Office, al igual que sucede en este programa cada barra puede ser movida de lugar y cambiar de tamao para ajustarde al resto del entorno, incluso pueden hacerse estas barra "flotantes" en ventanas separadas, simplemente toma con el puntero del mouse cada barra en el lugar donde aparece un doble separador a la izquierda de cada una. Cada botn en las barras de herramientas se corresponden con una opcin de la barra de men, no creo que a esta altura represente problema identificar algunos de estos botones, excepto tal vez la barra de componentes, que es la gran barra que ocupa toda la parte baja de la figura 2, est dividida en fichas, cada una con un ttulo tal como "Standard", "Additional", "Win32", etc..., esta barra es particularmente especial pues en ella estn los objetos visuales con los cuales programaremos, en el mundo Delphi estos objetos se llamas "componentes", que pueden ser seleccionados individualmente para luego ser soltado en la ventana de formulario. Tambin aqu aparecern los componentes de terceros o los que crees t mismo usando Delphi. Los que puedes ver en el IDE de Delphi recientemente

instalados son los componentes "de fabrica", pero como ya he mencionado pueden agregarse ms en el futuro. Hablaremos de la paleta de componentes ms adelante en este tutorial. Debajo de esta ventana podemos ver otras tres.

Ventana Inspector de Objeto. Esta ventana es la que se muestra en la figura a continuacin:

Fig. 3 - El Inspector de Objeto. Se trata de la ventana Inspector de Objeto (Object Inspector en su barra de ttulo), en esta ventana se muestran las propiedades y los eventos expuestos por un objeto visual o componente. En la parte de arriba, justo debajo de la barra de ttulo de esta ventana, puedes ver un combo descolgable, en l puedes seleccionar individualmente cada uno de los componentes que estn contenidos en el formulario de nuestro projecto de aplicacin, al seleccionar uno en el resto de la ventana se muestran las propiedades correspondientes a ese

componente en particular. Notars tambin que hay dos fichas con ttulo "Properties" y "Events". La ficha Properties est separada en dos, a la izquierda puedes ver el nombre de la propiedad, y a la derecha su valor que puedes modificar. Luego en la ficha "Event", que tambin est separada en dos puedes ver a la izquierda el nombre del evento al que responde el componente y a la derecha aparecer el procedimiento asociado a ese evento. No te preocupes si no entiendes esto ahora, lo explicar con ms detalle ms adelante. Ventana Editor de Cdigo. Ocupando el espacio por debajo de la ventana de mens y herramientas, y a la derecha de la ventana inspector de objeto puedes ver dos ventanas superpuestas, en la figura 1 puedes ver que tiene el foco la ventana en cuya barra de ttulo dice "Unit1.pas", esta ventana se llama Editor de Cdigo, la siguiente figura la muestra en detalle:

Fig. 4 - Ventana Editor de Cdigo. Esta ventana est dividida en dos, a la izquierda puedes ver un panel que contiene una estructura de arbol, el cual se llama "Code Explorer" o Explorador de Cdigo, con l puedes desplazarte a cada parte o seccin del cdigo Object Pascal que aparece a la derecha de la ventana. La parte derecha de esta ventana no es ms que un editor de texto adaptado para escribir cdigo Object Pascal. Al comenzar un projecto nuevo, tal como puedes ver en la figura 4, el IDE de Delphi automticamente genera un cdigo esqueleto para que el programador no tenga que escribirlo, este cdigo esqueleto es lo mnimo indispensable para que un programa Object Pascal asociado a un formulario Windows funcione, luego t, como programador, puedes modificarlo o agregarle cosas que le darn la funcionalidad a dicho formulario.

Ventana Diseador de Formulario. Finalmente tenemos la cuarta ventana, es la ventana Diseador de Formulario. Cuando se comienza un nuevo proyecto Delphi esta ventana aparece vacia:

Esta ventana parece no contener nada pero eso no es lo importante, lo importante que la propia ventana es parte del proyecto Delphi, puedes redimencionarla, maximizarla, minimizarla y restaurarla pero al hacerlo solo estars modificando visualmente (en tiempo de diseo) las propiedades de la ventana que resultar de ejecutar el programa que ests creando. En cierta forma disear el aspecto visual de tu programa es programar tambin. Si modificas el tamao de esta ventana tomando con el mouse la esquina inferior derecha y si tienes a la vista la ventana Inspector de Objeto (Object Inspector) observa las propiedades Width y Height (Ancho y Alto respectivamente) vers que sus valores a la derecha se modifican dinmicamente; as mismo, si modificas manualmente esos valores en el Object Inspector vers que el tamao de la ventana Diseador de Formulario se modifica tambin. Tambin puedes hacer esta prueba. Ubica la propiedad Left en el Object Inspector (las propiedades estn ordenadas alfabeticamente) y ve cambiando su valor en 10 en 10, vers que la ventana Diseador de Formulario se corre a la derecha o a la izquierda conforme aumentas o disminuyes ese valor. Sucede que tanto el tamao de una ventana Windows (y el Diseador de Formulario lo es) como su posicin (Left significa "izquierda") son propiedades de esa ventana. Aqu hemos introducido un concepto bsico y muy importante: los objetos visuales tienen propiedades visuales que pueden ser modificadas por el programador. Otra cosa que te resultar "extraa" en esta ventana es que est cubierta con pequeos

puntos en toda su superficie, esto tiene el doble propsito de servirte de gua cuando sueltes otros objetos sobre ella y para indicar que esta ventana est en tiempo de diseo y no en ejecusin, vale decir, no es un programa "andando" sino que es parte del IDE de Delphi. Esos puntos no aparecen en el programa una vez ejecutado. Diseando el formulario. Pongamonos manos a la obra y hagamos nuestro primer programa en Delphi. Es una vieja costumbre en el mundo de la programacin hacer, como primer programa uno que muestre un mensaje que diga "Hola Mundo!" y as lo haremos nosotros. Lo que haremos ser traer al frente el Diseador de Formulario (usa F12), luego en la paleta de componentes que est en la Ventana de mens y herramientas que haba comentado en el captulo anterior nos aseguraremos que la paleta visible es la "Standard", luego seleccionaremos con un click el botn cuyo cono es a su vez un pequeo botn que dice "Ok", ese componente se llama Button, como lo indica la pequea ayuda emergente (hint) de color amarillo que aparece al apoyar el puntero del mouse encima de l. Una vez seleccionado este componente de la paleta, haremos un click en cualquier lugar de la ventana Diseador de Formulario. Los pasos estn indicados en la siguiente figura:

Fig. 1 - Soltando un componente desde la paleta de componentes. Nos aseguramos que la paleta de componentes activa sea la "Standard". Seleccionamos el "Button".

Hacemos click en el Diseador de Formulario. Cuando terminemos de hacer esto tendremos un Button en nuestro formulario tal y como aparece en la imgen. Vers que este componente no es ms que uno de esos botones de Windows que estamos tan acostumbrados a ver en casi todos los programas que usamos. Los pequeos cuadritos negros en las esquinas, a la derecha, izquierda, arriba y abajo sirven para redimensionar el botn con el mouse, tambin podemos moverlo de lugar con el mouse arrastrandolo y soltandolo. Vers que el funcionamiento del Diseador de Formulario es muy parecido a un programa de dibujo solo que aqu ests "dibujando" componentes comunes de Windows. Los usuarios acostumbrados a Visual Basic notarn algunas diferencias de comportamiento en este diseador, a diferencia de VB en Delphi no es necesario desplazar el mouse para indicar el tamao por omisin de un botn (lo mismo sucede con el resto de los componentes) pues Delphi ya tiene unas medidas por omisin de los mismos. Igualmente, como haba sealado en el captulo anterior con respecto al formulario en s, si observas el Inspector de Objetos vers las propiedades de este botn, si no es as selecciona el componente "Button1 TButton" desde el combo descolgable en la parte alta de la ventana Object Inspector o simplemente vuelve a seleccionar el botn en el Diseador de Formulario haciendo un click en l. Puedes modificar los valores de las propiedades Width y Height (Ancho y Alto respectivamente) para hacer un "ajuste fino" de esas dimensiones, tambin puedes modificar los valores de Left y Top (Izquierda, Arriba) para mover el botn de lugar, esas cuatro propiedades estn expresadas en pixels de pantalla. Las propiedades Left y Top son relativas a la esquina superior izquierda del formulario (a su vez esas mismas propiedades del formulario son relativas a la misma esquina pero de la pantalla). Eventos. Cuando un usuario hace click en un botn de Windows sucede algo cierto?, pues bin. Tambin puedes verlo de esta manera, cuando el botn recibe un click reacciona ejecutando una accin determinada. A esto en programacin bajo Windows se le denomina evento. Los eventos pueden ocurrir en cualquier momento y pueden ser provocados tanto por el usuario del sistema operativo (por ejemplo cuando se hace click en algn objeto tal como un botn) como por dispositivos conectados a la computadora (un modem cuando arriban datos) o por el propio sistema operativo (cada vez que el reloj de la computadora cambia de segundo se produce un evento), esto significa que el sistema operativo, y las aplicaciones ejecutandose sobre l, no tienen linealidad, es decir, no siguen un orden estricto y predeterminado que guian al usuario a travs de un plan preestablecido, sino que en cualquier momento se pueden ejecutar cuaquier clase de acciones. Los lenguajes diseados para el sistema operativo Windows deben ser concientes de esto, por eso se definen como lenguajes de programacin conducidos por eventos, porque tienen la habilidad de responder a esos eventos segn vayan manifestndose, en contraposicin de los lenguajes llamados lineales

como aquellos usados con el sistema operativo DOS. Nosotros como programadores debemos ajustarnos a este paradigma y Delphi nos facilita lograrlo. Nuestra responsabilidad es programar lo que suceder cuando un evento ocurra, en nuestro programa haremos lo siguente: cuando el evento de hacer click en el botn que acabamos de soltar en el formulario ocurra, le mostraremos al usuario de nuestro programa un mensaje que diga "Hola Mundo!". Pon atencin a la ventana Object Inspector, selecciona el button que acabamos de soltar en el formulario, cmbiate a la paleta "Events" en el inspector de objetos, deberas ver algo como esto:

Fig. 2 - El Inspector de Objetos mostrando los eventos a los que responde un Button. A la derecha se muestran los eventos a los cuales el button es capaz de responder, no es necesario escribir cdigo para todos ellos, si no hay cdigo ejecutable asociado a un evento en particular pues simplemente el button no har nada cuando ese evento ocurra. En Delphi los eventos se identifican precedidos con la silaba "On", as, el evento que nos interesa es el Click, o sea OnClick. Vers que a la derecha de OnClick no aparece nada, esto es as porque an no hemos asociado ningn cdigo a ese evento pero lo haremos ahora mismo: haz doble click en la parte en blanco a la derecha de OnClick en el inspector de objetos,

inmediatamente vers que ocurren dos cosas. La primera, el Editor de Cdigo viene al frente mostrandonos una porcin de cdigo tal como sta: procedure TForm1.Button1Click(Sender: TObject); begin end;

La segunda cosa es que en el lugar que antes estaba vaco en el Inspector de Objeto ahora aparece lo siguiente: Button1Click. Lo que ha ocurrido es que hemos asociado el procedimiento TForm1.Button1Click al evento OnClick del button que habamos soltado en el formulario. Esto significa que cuando se haga click en el botn (es decir, ocurra el evento de pulsar el botn izquierdo del mouse encima del botn) se ejecutar todo lo que escribamos entre las palabras begin yend; debajo del procedimiento TForm1.Button1Click. Begin significa "comenzar" y end significa "fin". Pero qu es lo que escribiremos para lograr mostrar un mensaje tal y como nos habamos propuesto al principio? Trae al frente el Editor de Cdigo si no lo tienes ya y luego escribe entre las palabras Begin y End lo siguiente: ShowMessage('Hola Mundo!'); De modo que al final te debe quedar algo as: procedure TForm1.Button1Click(Sender: TObject); Mundo!'); end; begin ShowMessage('Hola

ShowMessage significa "Mostrar mensaje", cul mensaje?, el que est entre los parentesis a continuacin y encerrado entre comillas simples. Los que tengan experiencia en programacin no vern nada nuevo con esto. Nada ms por ahora, solo resta probar nuestra "obra de arte" :).

Compilacin. Object Pascal es un lenguaje compilado, esto significa que hay un programa que lee el texto del cdigo fuente, lo reconoce como cdigo Object Pascal y lo procesa de forma tal hasta obtener cdigo ejecutable del mismo, vale decir un archivo .exe. Delphi logra esto al presionar nosotros la tecla F9. Con F9 tambin se ejecuta el programa luego de ser compilado exitsamente. Y cuando digo exitsamente quiero decir que el programa no contiene errores de sintaxis. Presiona F9 ahora y vers ejecutarse tu primer programa hecho en Delphi, la primera vez que lo hagas el IDE te pedir guardar dos archivos, Unit1.pas y Project1.dpr, acepta estos nombres por el momento:

Fig. 3 - Ejecucin de Hola Mundo! En la figura 3 podemos ver la ejecucin de nuestro programa Hola Mundo!, haz click en el botn que tiene por ttulo (para hablar con propiedad, se llama Caption del Button) "Button1", y vers algo como esto:

Fig. 4 - Efecto de ShowMessage. Ese es el efecto que tiene al ejecutarse la lnea ShowMessage. Para terminar el programa haz click en el botn X en la esquina superior derecha o bin presiona Alt+F4, vmos, como se cierra cualquier programa de Windows! :). Esto nos regresar al IDE de Delphi. Seguramente muchas preguntas te han asaltado ya, por ejemplo que el botn tenga por ttulo, Caption es el nombre de ello, diga "Button1" no es bonito. Ningn problema, selecciona el Button en el Diseador de Formulario, o bin desde el combo descolgable en el Inspector de Objeto y busca la propiedad Caption (en la paleta "Properties") y reemplaza su valor al que desees aparezca como ttulo en el botn. Tambin querrs hacer otro tanto con el Caption del propio formulario, solo tienes que seleccionar Form1 en el combo descolgable en el Inspector de Objeto o bin haciendo click en cualquier parte del Diseador de Formulario que no est ocupado por el propio botn.

Qu ha ocurrido realmente? Tambin te preguntars cmo sabe nuestro programa qu parte de nuestro cdigo ejecutar y hasta dnde. O peor an, cmo sabe Windows que el usuario hizo click en nuestro botn y no en otra parte. En lo ms profundo de Windows existe un programa que est continuamente ejecutandose, aunque en apariencia la computadora no hace nada, este pequeo demonio est totalmente abocado a la tarea de "pezcar" eventos, rastreando todos los posibles productores de eventos, como ser el propio mouse, el teclado, el reloj interno de la computadora, la placa de red, incluso otros programas ejecutndose sobre el sistema operativo, etc..., cuando detecta un evento lo anota en una cola, llamada la cola de mensajes de Windows, donde marchan en fila india, por decirlo de alguna manera, todos los mensajes que puede recolectar junto con sus respectivos parmetros. En el caso del click con el mouse, este programa genera un mensaje especial (WM_LBUTTONDOWN) cuyo parmetro es la posicin del mouse en la pantalla, este mensaje es recogido por otro programa del sistema operativo que lo saca de la cola y se lo entrega al objeto que est en la posicin indicada en la pantalla: nuestro botn. Si este objeto es capaz de entender el mensaje y procesarlo, es decir, tiene algo qu hacer cuando le llega este mensaje, ejecuta ese cdigo, si no tiene cdigo asociado para ese mensaje no hace nada. Como haba mencionado antes, cuando dimos doble click en el evento OnClick del Button lo que hicimos fue indicarle al button que cuando le llegue el mensaje Click ejecute el procedimiento TForm1.Button1Click, desde begin hasta end. Pero hay ms que eso en nuestro programa. Por ejemplo cuando se cierra nuestra aplicacin al hacer click en el botn de la esquina superior derecha (el de la X) tambin se genera un evento dnde est el cdigo que se ejecuta como resultado de este?. Nosotros no lo hemos escrito, lo ha hecho Delphi por nosotros. Mas an, aunque si miras todo el cdigo que hay en el Editor de Cdigo incluyendo el que el propio Delphi ya ha puesto ah (el cdigo esqueleto) no es nada comparado con el cdigo ejecutable que finalmente va a parar al archivo ejecutable .exe. Por ejemplo, no es necesario que nosotros modifiquemos manualmente (esto significa, escribir cdigo especfico para la ocasin) las propiedades Left y Top para posibilitarle al usuario mover por toda la pantalla nuestra ventana arrastrndola por su barra de ttulo. Eso ya lo ha hecho Delphi sin que nosotros se lo digamos (aunque este comportamiento tambin puede ser controlado como veremos ms adelante). En resumen, el beneficio de contar con un IDE es quitarle al programador el trabajo pesado y dejarle las cosas listas para que se concentre nicamente en lo que es relevante para la aplicacin. Es decir que el programador sea el responsable de programar aquellos eventos que le interesan y que servirn para disparar la funcionalidad de la aplicacin que le interesa, como en nuestro ejemplo, lo que nos interesa es que algo ocurra cuando el usuario hace click en el botn que le hemos puesto.

Los archivos de un proyecto Delphi. Ahora es importante sealar cuales son los archivos que Delphi genera cuando creamos un proyecto Delphi. Por si no te has dado cuenta un proyecto Delphi equivale a una aplicacin Windows, nuestra aplicacin "Hola Mundo!" que acabamos de hacer es una aplicacin. Es importante sealar cul es la diferencia entre "programa" y "aplicacin". Un programa es una unidad de cdigo que puede o no depender de otros programas de una misma aplicacin, mientras que una aplicacin es el conjunto de programas que cooperan entre s para lograr un comentido. Por supuesto, nuestra aplicacin "Hola Mundo!" es sumamente sencilla pues solo cuenta con un programa. Ahora bin, Delphi separa cada programa en un archivo .pas (por pascal) y sabe qu programas conforma un proyecto a partir de un archivo con extensin .dpr (por Delphi Project). Si usas el Explorador de Windows y te diriges a la carpeta "Archivos de Programa\Borland\Delphi\Projects" vers que all se encuentran dos archivos con nombres Unit1.pas y Project1.dpr que es el nico programa que hemos escrito y el correspondiente archivo de proyecto. Ambos archivos son archivos de texto ASCII, si editas el archivo .pas vers que es lo mismo que se v desde el Editor de Cdigo. El archivo.dpr tambin es un archivo de texto y tambin contiene cdigo editable por nosotros, incluso puedes editarlo con el IDE de Delphi aunque no lo muestre por omisin, para hacerlo selecciona el men "Project" de la barra de men y luego "View Source" como se muestra en la siguiente figura:

Fig. 5 - El men Project. Y en la ventana Editor de Cdigo vers el cdigo fuente del proyecto: program Project1; uses Application.Initialize; end. Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin

Application.CreateForm(TForm1, Form1);

Application.Run;

Casi nunca es necesario hacer modificaciones en este cdigo pero luego veremos que en ciertas ocasiones nos es muy til echarle una mirada y meterle un poco la mano, por el momento solo debes saber que el IDE de Delphi se encarga automticamente de escribir en l lo que haga falta. Al mostrar el fuente del archivo .dpr vers que el Editor de Cdigo ha agregado una paleta ms a su ventana:

Fig. 6 - Paletas del Editor de Cdigo. El ttulo de cada paleta se corresponde con el nombre del archivo que est visualizando, puedes cambiar de paleta haciendo click en la que prefieras o bin presionando las teclas Ctrl+Tab. Tambin si haces click derecho en una de las paletas aparecer un men contextual, una de las opciones es "Close" para cerrar esa paleta en particular. Pero estos dos archivos no son los nicos que forman un proyecto Delphi, existe otro archivo ms que es importante. Cuando un programa tiene una ventana asociada, y nuestro programa lo tiene, Delphi almacena los datos de inicializacin de esa ventana en el archivo con el mismo nombre que el programa (en nuestro caso Unit1) y extencin .dfm (por DelphiForm), este archivo a partir de la versin 5.0 de Delphi est en texto ASCII (antes era binario), en l, si lo editas con el block de notas (notepad) vers que se parece mucho a los datos que se ven en el Inspector de Objeto. En este archivo estn almacenados los valores en tiempo de diseo del formulario y todos los objetos contenidos en l; en nuestro caso sern los datos del formulario y de su nico botn. Resumiendo, los archivos que componen un projecto Delphi son:

.dpr: es el archivo de proyecto el cual agrupa todos los programas que lo componen.

.pas: son los archivos donde est el cdigo fuente de cada programa. .dfm: son los que almacenan los datos de los objetos visuales (y no visuales) en tiempo de diseo para aquellos programas que tienen una ventana (formulario) asociada.

Si ests observando la carpeta "Projects" en el Explorador de Windows notars que hay ms archivos que estos tres. Esos archivos no son importantes y se generan cuando se compila un proyecto. Ellos son: Los que en su extensin estn precedidos por el caracter circunflejo (~) son copias de respaldo creadas automticamente al momento de compilar y/o ejecutar un programa, es decir contienen una versin anterior de los programas y el archivo de projecto. Suelen ser tiles en ciertos casos en los que "metemos la pata". Los .dcu (Delphi Compiled Unit) son una versin precompilada de los archivos .pas, estn en binario y no son editables. Suelen servir para distribuir una versin funcional pero no editable de los archivos .pas. El archivo <nombre de proyecto>.cfg contiene informacin de cmo estaba configurado el compilador interno del IDE para ese proyecto en particular. El archivo <nombre de proyecto>.dsk contiene la configuracin del IDE para ese proyecto en particular. Finalmentes puedes encontrar <nombre de proyecto>.exe que no es ms ni menos que nuestra aplicacin lista para ser ejecutada como si fuera una aplicacin ms de Windows. Pero solo los tres primeros son los que nos interesan a nosotros y son los que deberas entregar a una tercera persona que quiera compilar l mismo un proyecto que hemos realizado. En el prximo captulo de este tutorial nos concentraremos de lleno en el lenguaje Object Pascal segn la implementacin de Delphi. Estructura del cdigo fuente. En Pascal existen dos tipos de cdigo fuente: el programa principal, que en nuestro caso es el que se almacena en el archivo .dpr y que a su vez toma el nombre del ejecutable que estamos creando; y luego tenemos los programas de biblioteca que son anexos al programa principal, que Delphi los nombra con la extensin .pas. Estos ltimos no son impresindibles, quiero decir, puede existir un .dpr que no tenga .pas asociados. En efecto, con Delphi es posible crear ejecutables Windows que no tengan ninguna ventana asociada,

o sea que simplemente trabajen con la interface de lnea de comandos (el famoso Simbolo de Sistema). Para el caso de los .dpr la estructura interna de su cdigo fuente es como sigue: Todos comienzan con la palabra reservada program segida del nombre del programa, aunque no es obligatoria conviene usarla para tener un control de qu programa se trata. A continuacin tenemos la palabra reservada uses luego de la cual se listan los nombres de los programas de biblioteca .pas, si no vamos a usar ninguna no es necesario usar esta clusula aunque como veremos ms adelante es extremadamente raro que presidamos de, al menos, una biblioteca. Le sigue la palabra reservada const luego de la cual se declaran las constantes absolutas del programa, no es obligaroria Luego tenemos la clusula type, donde se declaran los tipos definidos por el usuario, tampoco es obligatoria. A continuacin la clusula var luego de la cual se declaran las variables globales, es decir, las que son visibles a todo el programa. Luego se declaran los procedimientos (procedure) y funciones (function) en el orden que se deseen. Finalmente tenemos el bloque del programa principal comenzando por la palabra reservada begin y terminado con la palabra reservada end. (presta atencin al punto). Ambos son obligatorios. Entonces la estructura general es: program nombre_del_programa; uses Unit1, Unit2, Unit3... etc... const type var procedure ejemplo1; begin end; function ejemplo2: tipo_de_retorno; begin end; begin { desarrollo del programa } end. Tomemos por ejemplo nuestro .dpr de la aplicacin Hola Mundo! visto en el captulo anterior de este tutorial, el cual es este: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1};

{$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Application.Run; end.

Form1);

Como vers aqu faltan algunas de las clusulas enumeradas antes pero eso es perfectamente vlido pues no todas son obligatorias, lo que aqu vemos es lo mnimo necesario para formar una aplicacin Windows de una sola ventana. Hay varias cosas para explicar. Primero salta a la vista la presencia de la declaracin Forms en la clusula uses, Forms es una biblioteca que ya est predefinida en Delphi por lo que no tiene un .pas correspondiente en la carpeta de nuestro proyecto (en realidad el cdigo fuente de la unidad Forms reside en otro lugar que est compartido a todos los proyectos creados con Delphi), luego tenemos esto: Unit1 in 'Unit1.pas' {Form1}; Unit1 no es ms que el .pas que hemos modificado pero en este caso Delphi aclara que es el que est en Unit1.pas en la carpeta acutal, lo que sigue entre llaves es un comentario que agrega el IDE de Delphi para hacernos saber que en esa unidad reside la declaracin de la ventana Form1. Luego notars este comentario entre llaves {$R *.res} este no es un comentario normal, es una directiva de compilacin como se denota por la combinacin de los caracteres {$ seguida de una letra, en este caso la R, esta directiva de compilacin le indica al compilador que tome en cuenta un archivo .res, los archivos .res se usan para almacenar recursos visuales o de audio para nuestra aplicacin que luego copiar dentro del .exe final. En nuestro ejemplo no usamos ninguna de estas cosas, no hemos creado ningn archivo de recursos explcitamente, el IDE de Delphi lo ha hecho por nosotros (aunque podemos modificarlo para agregarle cosas este tema no ser tratado en este tutorial), especficamente all ha almacenado el cono por omisin de nuestra aplicacin. Ms adelante explicar cmo cambiar el cono por omisin. En la directiva de compilacin est indicado *.res, ese asterico no significa lo que normalmente significa en Windows (es decir "todos los archivos .res") sino que quiere decir que el archivo de recursos tiene el mismo nombre que el .dpr; por qu no poner el mismo nombre entonces?, porque si cambiamos el nombre al .dpr externamente o cuando salvamos el proyecto desde el IDE, deberamos tomarnos la molestia de cambiar el mismo en la directiva de compilacin. Ahora concentrmonos en lo que est entre begin y end. del .dpr El objeto Application es un objeto predefinido en todos los programas Delphi el cual hace referencia a la propia aplicacin (nuestro programa Hola Mundo!), el mtodo Initialize le indica al compilador que all deben ejecutarse todos los procedimientos de inicializacin

requeridos por Windows para una aplicacin. Luego sigue la llamada a la creacin de la ventana, nuestra ventana. Y luego el mtodo Run es la indicacin de que debe ponerse en espera de eventos, lo que en Windows equivale a que la aplicacin se est ejecutando. Estos tres pasos son los mnimos requeridos para una aplicacin de al menos una ventana. Si tenemos ms de una ventana en nuestra aplicacin, el IDE de Delphi agregar una llamada Application.CreateForm(); por cada una de ellas, pero es importante recordar que la primera llamada a CreateForm establece que esa ventana es la principal de la aplicacin, esto significa que cuando se cierra (con Alt+F4 o haciendo click en el botn X de la esquina superior derecha) la ventana principal, se abandona el mtodo Run y concluye la aplicacin. La estructura de una unidad Pascal. Pasemos ahora al cdigo fuente de las bibliotecas, desde ahora las llamar unidades. La estructura general es como sigue: unit Unit1; interface uses { Lista de unidades } type { Lista de tipos definidos por el usuario } { Luego encabezado de los procedimientos y funciones visibles desde afuera } var { variables visibles desde afuera } implementation uses { lista de unidades usadas localmente } var { variables visibles solo localmente } { Luego implementacin de los procedimientos y funciones declaradas en interface ms otras } initialization { cdigo de inicializacin } finalization { cdigo de finalizacin } end. Igual que en el caso de los .dpr no todas las clusulas son obligatorias, en especial initialization y finalization que sirve para colocar cdigo que se ejecutar antes de que se cargue la unidad y luego cuando esta termine de usarse. Las que s son obligatorias son unit seguido del nombre de la unidad que DEBE SER IGUAL AL NOMBRE FSICO DEL ARCHIVO .pas, interface, implementation y end. El resto de las clusulas no son obligatorias. Como vers una unidad tiene sus propias clusulas uses, esto significa que una unidad puede usar a su vez otras unidades, ya sean predefinidas por Delphi o hechas por nosotros. Todo lo que est declarado a continuacin de la clusulas interface hasta implementation es lo que puede "verse" desde otras partes de la aplicacin. Para entender esto veamos el cdigo fuente de la unidad Unit1 de nuestra aplicacin Hola Mundo1! del captulo anterior la cual, con nuestras reformas incluidas, debera verse ms o menos as: unit Unit1;

interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; TObject); private { Private declarations } public var Form1: TForm1; procedure Button1Click(Sender: { Public declarations } end;

implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: Mundo!'); end; end. Lo que haremos ser mover las dos lneas "var Form1: TForm1" y ponerlas justo debajo de la palabra reservada implementation, de modo que esa parte del cdigo quede como sigue: implementation var Form1: TForm1; TObject); begin ShowMessage('Hola

{$R *.dfm} Ahora compilaremos de nuevo el programa, pero solo lo compilaremos sin ejecutarlo, esto se consigue presionando las teclas Ctrl+F9. Inmediatamente obtendermos un error de compilacin, la siguiente figura lo muestra:

No disponible Fig. 1 - Error de compilacin.

El IDE de Delphi nos trae en la ventana Editor de Cdigo el cdigo de nuestro .dpr resaltando la lnea donde encontr el error y debajo aparece una nueva ventana con el mensaje de error, el cual es: [Error] Project1.dpr(11): Undeclared identifier: 'Form1', el cual quiere decir que la variable Form1 no est declarada o no est visible para el .dpr al compilar la lnea 11 por qu?, porque en la unidad Unit1 nosotros dejamos de hacer visible

desde fuera de la unidad la variable Form1. Para reparar esto solo es necesario volver a hacer visible esa variable trayndola de nuevo a la seccin interface de la unidad Unit1. Restaura las lineas que movimos a su lugar y vuelve a compilar el proyecto con Ctrl+F9. Esto me lleva a decir que las unidades Pascal sirven para no redundar cdigo, es decir, no declarar ms de una vez una misma variable o procedimiento, el uso de las unidades sirve para concentrar el cdigo en comn a toda la aplicacin en un solo cdigo fuente, bastando solamente compartir lo que nos interesa que sea visible desde otros lugares de la aplicacin. Pero tambin para hacer uso de ella es necesario agregar el nombre de la unidad donde reside tal declaracin a la clusula uses de la unidad donde se necesite. Esto ltimo es evidente tanto en el .dpr de nuestro proyecto como en la propia unidad Unit1. Si miras ambas clusulas uses vers que estn listadas un montn de unidades, en especial la clusula uses de la unidad Unit1 contiene 10 llamadas a unidades externas, ninguna de las cuales las hemos hecho nosotros mismos sino que estn predefinidas por Delphi. Esas unidades se llaman unidades estandar, en ellas estn, entre otras cosas, declarado el procedimiento ShowMessage que usamos en el evento OnClick del Button, concretamente en la unidad Dialogs. Podemos hacer este experimento. Encierra con llaves a modo de comentario la llamada a Dialogs en la lista de uses de la unidad Unit1 de modo que toda la declaracin quede asi: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, } StdCtrls; {

Compila con Ctrl+F9 y vers que obtienes un error en la llamada a ShowMessage, esto se debe a casi lo opuesto del error que vimos antes, aqu lo que el compilador no encuentra es dnde est declarado el procedimiento ShowMessage entonces asume, como en el caso anterior que se trata de un identificador desconocido. Exportando variables, tipos, procedimientos y funciones. Los usos de las unidades de biblioteca (units) de Pascal sirven para hacer visibles variables globales, tipos definidos por el usuario, procedimientos y funciones. Me voy a concentrar en estos dos ltimos ya que me parece que el tema de las variables globales quedar ms claro de esta forma mientras que de los tipos nos ocuparemos ms adelante en este tutorial. Los procedimientos son pequeos algoritmos dentro del gran algoritmo que es una unidad Pascal. Es la implementacin de la filosofa de programacin top-down, tambin llamada programacin descendente en donde el problema mayor se divide en problemas menores que se resuelven por separado. Cada procedimiento o funcin es un programa en s mismo, ms o menos independiente del resto y que a su vez puede llamar a otros procedimientos y funciones dentro de la misma unidad o en otra unidad como ya hemos visto.

La estructura general de un procedimiento Pacal es como sigue: procedure Nombre_del_procedimiento(parametro: tipo); const { lista de constantes } var { lista de variables locales al procedimiento } begin { desarrollo del procedimiento } end; Como vers se parece bastante al cdigo que est en el .dpr. Solo son obligatorias las palabras reservadas procedure, begin y end, var y const se usan solo si se necesitan. En el caso de usar var la declaracin de variables solo tienen mbito en ese procedimiento, es decir, esas variables son de caracter local al procedimiento. Pueden ser de un tipo declarado en la type de la unidad. Los procedimientos pueden hacer uso de otros procedimientos dentro de la misma unidad o los que estn exportados en las unidades de la clusula uses de esa unidad. La nica forma de comunicar resultados fuera del procedimieto es atravez de sus parmetros o bin mediante el uso de variables globales pero esto no es recomendable como veremos ms adelante. La declaracin general de una funcin es como sigue: function Nombre_de_la_funcion(parametro: tipo): tipo; const { lista de constantes } { lista de variables locales a la funcin } begin { desarrollo de la funcin } end; var

Es muy parecida la procedure pero difiere en su comportamiento, las functions SIEMPRE devuelven un valor que ser del tipo indicado al final de su encabezado. En Object Pascal (y por ende en Delphi) todas las functions tienen una variable implcitamente definida llamada Result que sirve para enviar el valor de retorno al lugar desde donde es llamada la funcin. En algun lugar dentro de begin ... end esta variable se le debe asignar un valor y puede ser usado como si fuera una variable local ms. Veremos con ms detalles algunos aspectos particulares de los procedimientos y funciones ms adelante en este tutorial. Llamada circular y conflicto de identificadores. Hay algunos problemas que debemos evitar, uno de ellos es las llamadas circulares entre unidades. Supongamos que hemos escrito una unidad con nombre A y otra unidad llamada B, y en la clusula uses de la unidad A hacemos referencia a la unidad B pues nos interesa usar sus variables, tipos o procedimientos visibles en su clusula interface, pero tambin en la unidad B nos interesa usar un procedimiento que es visible (est en la clusula interface) en la unidad A. O sea, A llama a B y B llama a A, esto es una llamada circular lo cual es un error y el compilador se quejar por qu?, porque el compilador cuando hace su trabajo comienza a compilar primero las unidades que estn listadas en la clusula uses del .dpr en el mismo orden en el que estn listadas, all encontrar primero la unidad A que procede a

compilar encontradose en su clusula uses una llamada a la unidad B la cual procede a compilar pero all encuentra una llamada a A que todava no ha terminado de compilar pues apenas va por su clusula uses por lo que no puede determinar cul es el contenido completo de esa unidad y as ponerla disponible para la unidad B. Cmo se soluciona esto?. Recurriendo a la clusula uses que est en la implementation en una de las dos unidades, en nuestro hipottico ejemplo nos conviene quitar la llamada a A en la unidad B de su clusula uses en la interfase y declararla en la uses de su implementation, de forma tal que el compilador no se vea forzado a compilar la unidad A antes que a la B. El segundo problema que podemos encontrar es el conflicto de identificadores. El escenario es el siguente, supongamos que tenemos tres unidades A, B, C. A necesita de B y de C pero tanto B como C comparten al resto de la aplicacin un procedimiento que se llama igual en ambas unidades, por ejemplo EsMayor(); cuando en A hagamos uso de ese procedimiento al estar declarado con el mismo identificador el compilador no sabr a cul de los dos estamos haciendo referencia lo que resultar en un error. Para solucionar esto en la llamada en A debemos calificar la llamada con el siguiente formato: B.EsMayor(par1, par2); // aqu estoy usando el procedimiento en B C.EsMayor(par1, par2); // y aqu el que est en C De esta forma no hay ambigedades.

Anda mungkin juga menyukai