www.scribd.com Tutoriales / Manuales LAZARUS Un entorno para programar en Free Pascal Lo más parecido a Delphi, y gratis Este programa no está hecho para desarrollar grandes y poderosas aplicaciones. Está hecho para aprender a programar en un lenguaje estructurado, simple y que te llevará a comprender, sin costo alguno, el universo de la programación. Después de esto podrás ir a mejores lugares con la seguridad de la experiencia en lenguajes de programación. macroplexx Página 1 www.scribd.com Lazarus Tutorial/es Estos son los primeros pasos de una tutoría de Lazarus. Contents [hide] 1 Resumen 2 ¡Tú primer programa con Lazarus! o 2.1 Comenzando o 2.2 Segunda sesión 3 El Entorno integrado de desarrollo (IDE) de Lazarus o 3.1 Ventana principal o 3.2 Otras ventanas del IDE o 3.3 El Menú Principal 3.3.1 El submenú Archivo 3.3.2 El submenú Editar 3.3.3 El submenú Buscar 3.3.4 El submenú Ver 3.3.5 El submenú Proyecto 3.3.6 El submenú Ejecutar 3.3.7 El submenú Componentes (Paquete en la v0.9.26.2) 3.3.8 El submenu Herramientas 3.3.9 El submenú Entorno 3.3.10 El submenú Ventanas 3.3.11 El submenú Ayuda o 3.4 Panel de botones rápidos 4 La Paleta de Componentes o 4.1 Cómo utilizar la paleta o 4.2 Pestañas de la Paleta de Componentes 4.2.1 * Standard 4.2.2 * Additional 4.2.3 * Common Controls 4.2.4 * Dialogs 4.2.5 * Misc 4.2.6 * Data Controls 4.2.7 * Data Access 4.2.8 * System 4.2.9 * SynEdit 4.2.10 * IPro 4.2.11 * SQLdb 4.2.12 * RTTI 5 Como utilizar los controles estándar, comunes y extendidos o 5.1 Nota: todo lo que se dice respecto de modificar las propiedades de los objetos mediante código, tiene efecto únicamente en tiempo de ejecución, por lo que los efectos de los valores modificados no pueden observarse en el Inspector de Objetos.(iskraelectrica) 6 Cómo utilizar menús en nuestros programas 7 El Depurador 8 Los archivos de Lazarus o 8.1 Herramientas del IDE de Lazarus 9 Colaboradores iniciales y cambios Resumen Lazarus es una herramienta de desarrollo libre y de código abierto para el compilador Free Pascal (Object Pascal), que a su vez lo es también. El IDE de Lazarus es un entorno de programación estable y con abundantes características para crear aplicaciones tanto con interfaz gráficas como de consola. Actualmente funciona n sistemas operativos Linux, FreeBSD macroplexx Página 2 www.scribd.com y Windows 32 bits, y proporciona un editor de código fuente personalizable y un entorno visual para crear formularios, junto con un generador de paquetes, un depurador y una completa integración del GUI con el compilador FreePascal. ¡Tú primer programa con Lazarus! Quizá sea recomendable que aprendas antes un poco de Pascal. En Wikilibros tienes este completo curso de Programación en Pascal que puedes seguir antes o al mismo tiempo que este. Comenzando Descarga, instala (Instalación de Lazarus), con lo que también instalarás el compilador FreePascal y ejecuta Lazarus. Notas: en Linux Ubuntu, al menos, el comando para iniciar a Lazarus desde consola es "startlazarus". Si se instaló desde un paquete Debian, habrá una entrada de menú Lazarus en el menú Aplicacioesn / Programación. En Debian y Ubuntu el archivo ejecutable principal y el paquete se denominan "lazarus-ide" porque el paquete "tct" ya viene con una utilidad llamada "Lazarus". Aparecerán varias ventanas en el escritorio: el menú principal arriba, el Inspector de Objetos a la izquierda, el Editor de Código Fuente ocupando la mayor parte del escritorio, y un formulario Form1, preparado sobre el Editor de Código fuente. En la ventana superior, por debajo de la línea del menú, hay una fila de pestañas. Si la pestaña Standard no está seleccionada, selecciónala pulsando sobre ella con el ratón. Después busca el icono Button (un rectángulo con OK) y selecciónalo con el ratón, después pulsa sobre la ventana Form1, en alguna parte de la misma. Aparecerá un rectángulo sombreado etiquetado Button1. Selecciona de nuevo el icono Button en la pestaña estándar, y pulsa sobre Form1 en otra parte del formulario: aparecerá otro rectángulo etiquetado Button2. Ahora selecciona el botón Button1 con el ratón. El Inspector de Objetos mostrará las propiedades del objeto Button1. Entre las primeras hay una propiedad llamada 'Caption', que muestra el valor 'Button1'. Entra en la casilla, y cambia 'Button1' por 'Pulsa'. Si pulsó la tecla INTRO o cambió a otra casilla, verá como el rotulo del botón en Form1 cambia a 'Pulsa'. Ahora haz selecciona la pestaña Eventos del Inspector de Objetos, para ver los eventos de que dispone el botón. Éstos son, por ejemplo, OnClick,OnEnter, OnExit, etc. Selecciona la casilla que hay a la derecha de OnClick: la casilla se transforma en desplegable y también aparece un botón con unos puntos suspensivos. macroplexx Página 3 www.scribd.com Al pulsar este, aparecerá el cursor en el Editor de Código Fuente dentro ya de la plantilla del procedimiento del evento: procedure TForm1.Button1Click(Sender: TObject); begin Button1.caption := 'Pulsa otra vez'; {ahora escribe:} {el editor siempre termina el procedimiento con} end; Si pulsas F12 aparecerá la ventana del formulario, al pulsar otra vez F12 volverás al Editor de Código. Ahora edita las propiedades de Button2: pulsa sobre Button2 para mostrar sus propiedades en el Inspector de Objetos. Cambia su propiedad Caption por 'Cerrar' en lugar de Button2. Ahora selecciona la pestaña Eventos, y haz doble pulsaciónen la casilla de OnClicK, cómo antes, aparecerá el cursor en el Editor de Código Fuente dentro ya de la plantilla del procedimiento del evento: procedure TForm1.Button2Click(Sender: TObject); begin Close; {ahora escriba:} {el editor siempre termina el procedimiento con} end; Pulsa F12 para ver la ventana Form1. Es conveniente guardar ahora tu trabajo, seleccionando 'Proyecto > Guardar proyecto' (que al no haber guardado nuúnca funciona exactamente igual que 'Guardar como...'. Elije una ubicación y pon nombre a la unidad que contiene el formulario (unit1.pas, por defecto) y al proyecto (proyect1.lpi, por defecto). Lazarus guarda automáticamente una copia del proyecto en el directorio backup con el estado del proyecto antes de compilar las últimas modificaciones. Es importante guardar por tu cuenta los estados 'estables' del proyecto. Estás listo ahora para compilar. La forma más simple de hacerlo pulsar la flecha verde que hay en el panel a la izquierda de la barra de pestañas, que equivale a la opción de menú 'Ejecutar -> Ejecutar F9', o más rápido aún: pulsar simplemente F9 . Con esto compilaremos el código y después (si todo es correcto) enlazará y ejecutará el programa. Durante el proceso aparece una ventana con mensajes de texto, informando sobre el proceso de compilación y enlazado, y finalmente la aparecerá la ventana de Form1 sin la rejilla de puntos; ésto indica que es una verdadera ventana de la aplicación, ya dispuesta para que actúe sobre ella, pulsando alguno de los botones que has creado o los que por defecto tiene la ventana, en la barra del título. Pulsa el botón etiquetado 'Pulsa'. Verás que cambia a 'Pulsa otra vez'. Si lo pulsas otra vez, seguirá diciendo ¡¡'Pulse otra vez'!! macroplexx Página 4 www.scribd.com Ahora hazlo con el botón marcado 'Cerrar'. La ventana se cierra, terminando la ejecución del programa. Retornamos a Lazarus, con el formulario form1 para poder continuar el proceso de edición del mismo y del código asociado. Segunda sesión Reabre el proyecto guardado antes, si es que los has cerrado. Selecciona Button1 del Form1 En la ventana Form1. Selecciona la pestaña 'Eventos' en el Inspector de Objetos, Selecciona la casilla de OnClick, pulsa sobre los puntos suspensivos, para situarte el punto apropiado en el Editor de Código Fuente. Edita el código para poner lo siguiente: procedure TForm1.Button1Click(Sender: TObject); {Utilizaremos la propiedad Tag del botón, asignándole el valor 0 o 1} begin if Button1.tag =0 then begin Button1.caption := 'Pulsa otra vez'; Button1.tag := 1 end else begin Button1.caption := 'Pulsa'; Button1.tag := 0 end end; Guarda el trabajo, compila y ejecuta. El botón de la izquierda alternará entre los dos mensajes al pulsarlo. ¡El resto corre de tu cuenta! Si prefieres escribir programas en PASCAL para consola o basados en texto (por ejemplo si está siguiendo un curso de programación en PASCAL básico, o necesitas escribir programas para usar en tratamiento por lotes o para programar el sistema), puedes también utilizar Lazarus para editar, compilar y ejecutar estos programas. Es un entorno ideal para el desarrollo de PASCAL. Ver PASCAL en modo consola. El Entorno integrado de desarrollo (IDE) de Lazarus Al ejecutar por primera vez Lazarus aparecen en el escritorio varias ventanas desconectadas separadas o 'flotantes'. Ventana principal La primera, en la parte superior derecha del escritorio, con el rótulo Editor vXX.XX.XX de Lazarus - project1 (que posteriormente reflejará el nombre que pongas al proyecto). Ésta es la macroplexx Página 5 www.scribd.com ventana principal que controla tu proyecto, y contiene el Menú Principal, la Paleta de Componentes y el panel de Botones Rápidos. Una línea por debajo de la barra de título está el Menú Principal con las habituales opciones Archivo, Editar, Buscar, Ver, Ventanas y Ayuda, y con las opciones que son específicas de Lazarus. Debajo, a la izquierda hay un sistema de Botones Rápidos, que te llevan ágilmente a opciones del Menú Principal, y a la derecha está la Paleta de Componentes. Otras ventanas del IDE Debajo de la ventana del editor de Lazarus aparecerá a la izquierda la ventana Inspector de Objetos, y la del Editor de Código Fuente a la derecha. macroplexx Página 6 www.scribd.com macroplexx Página 7 www.scribd.com Puede haber otra ventana más pequeña, etiquetada, en principio, Form1 , sobre la ventana del Editor de Código. Si no es visible inmediatamente, puede hacerse aparecer presionando la tecla F12 , que alterna entre la vista del Editor de Código y la vista del formulario Form1. La ventana del formulario es en la que constituirá el interfaz gráfico de tu aplicación, mientras que el Editor de Código es la ventana que muestra el código de PASCAL asociado a la aplicación que está creando. El Inspector de Objetos se describe con detalle más adelante, junto con la Paleta de Componentes. Cuando comience un nuevo proyecto (o cuando ejecute Lazarus por primera vez) se construirá un formulario predefinido, que se compone de una caja en la que hay una rejilla de puntos para ayudarle a colocar los diversos componentes del formulario, y una barra a lo largo de la parte superior que contiene los botones habituales Minimizar, Maximizar y Cerrar. Si usted pulsa con el ratón en cualquier lugar de la caja, verá las propiedades de este formulario mostradas en el Inspector de Objetos en el lado izquierdo del escritorio. macroplexx Página 8 www.scribd.com Otras ventanas que pueden llegar a ser visibles durante su trabajo: Inspector del Proyecto, que contiene los detalles de los archivos incluidos en su proyecto, y permite que agregar archivos o eliminar archivos de su proyecto; la ventana Mensajes, que muestra mensajes del compilador, errores o informes sobre el progreso de su proyecto; si Lazarus fuese ejecutado desde una ventana de terminal, el terminal original seguiría siendo visible y los mensajes detallados del compilador también se mostrarían allí. Por último, también puede ver una ventana de mensajes en la parte inferior de la pantalla: ésta es utilizada por Lazarus para mostrar los resultados al programador, por ejemplo, al compilar un programa. El Menú Principal La línea del menú principal contiene las siguientes entradas: Archivo Editar Buscar Ver Proyecto Ejecutar Componentes (Paquete en la versión 0.9.26.2) Herramientas Entorno Ventanas Ayuda Como de costumbre, las opciones se pueden seleccionar colocando el cursor del ratón sobre la opción del menú y pulsando con el botón izquierdo, o pulsando Alt + F en el teclado (suponiendo que la ventana del Menú Principal tenga el foco: si no lo tiene, pulse Tab ⇆ varias veces para completar un ciclo del foco a través de varias ventanas hasta que la ventana deseada tenga su barra de título resaltada). El submenú Archivo Nueva Unidad: Crea un nuevo archivo Unidad (en código fuente Pascal). macroplexx Página 9 www.scribd.com Nuevo Formulario: Crea un nuevo Formulario: tanto la ventana visual en pantalla como el archivo asociado en código fuente Pascal. Nuevo ...: Muestra ventana emergente con un menú (captura de pantalla ) con los distintos tipos de proyectos y archivos nuevos que se pueden crear. Abrir: Muestra un cuadro de diálogo emergente para permitirle recorrer el sistema de archivos y elegir un archivo existente para abrirlo.. Deshacer: Anula los cambios de edición y devuelve el archivo a su estado original. Guardar: Guarda el archivo actual, usando su nombre original. Si no tiene nombre, el sistema se lo pregunta (igual que Guardar como) Guardar como: Le permite escoger una carpeta y un nombre para guardar el archivo actual. Cerrar: Cierra el archivo actual, preguntando si quiere guardar todos los cambios del editor. Cerrar todos los archivos del editor: Cierra todos los archivos abiertos actualmente en el editor. Pregunta si se guardan los cambios. Limpiar directorio: Muestra un diálogo con varios filtros editables para borrar archivos del directorio actual. Útil para borrar archivos .bak y restos de antiguos proyectos en Delphi. Salir: Sale de Lazarus, después de preguntar si se guardan los archivos editados. El submenú Editar macroplexx Página 10 www.scribd.com Deshacer: Deshace el último cambio, dejando el Editor como estaba antes de la última acción. Rehacer: Rehace la última acción que fue anulada por Deshacer. Cortar: Borra el texto u otros objetos seleccionados y los coloca en el portapapeles. Copiar: Hace una copia del texto seleccionado, dejando el original en su sitio y colocando una copia en el portapapeles. Pegar: Sitúa el contenido del portapapeles en la posición del cursor. Si el texto ha sido seleccionado en la posición del cursor, el contenido del portapapeles sustituirá al texto seleccionado. Sangrar selección: Mueve el texto seleccionado hacia la derecha según lo indicado en Entorno -> Opciones del Editor -> General -> Sangrar bloque. Esta característica es útil para formatear su código fuente Pascal para mostrar la estructura del bloque subyacente. macroplexx Página 11 www.scribd.com Desangrar selección: Elimina un nivel de sangrado, moviendo el texto hacia la izquierda según lo indicado en Sangrar bloque. Encerrar selección: Muestra un menú emergente con varias opciones para, lógicamente, encerrar el texto seleccionado (begin ... end; try ... except; try ... finally; repeat ... until; { ... }; etc). Selección en mayúsculas: Convierte el texto seleccionado en mayúsculas. Selección en minúsculas: Convierte el texto seleccionado en minúsculas. Tabulaciones a espacios en selección: Convierta cualquier tabulación en el texto seleccionado según el número de espacios especificado en Entorno -> Opciones del Editor -> General -> Anchura de tabulación. No se fija el número de espacios cuantitativamente, sino el número que se necesita para rellenar el ancho restante de tabulación. Romper líneas seleccionadas: Si algunas líneas en el texto seleccionado o el número especificado en Entorno -> Opciones del Editor -> Pantalla -> Margen derecho, tienen más de 80 caracteres, la línea se rompe en una palabra límite y continúa en la línea siguiente. Comentar selección: Convierte el texto seleccionado en comentarios, insertando // en cada línea. Descomentar selección: Borra las marcas de comentario. Ordenar selección: Ordena líneas (o palabras o párrafos) alphabeticamente; en orden ascendente o descendente, puede ser sensible o insensible a mayúsculas/minusculas. En mitad del código fuente del programa, claro, se convierte en insensible, pero si tiene una lista que necesita ordenar lo puede hacer con esto. Seleccionar: Permite seleccionar bloques de texto. Las opciones son Seleccionar todo, Seleccionar tira, seleccionar párrafo o línea, etc. Insertar desde mapa de caracteres: Permite insertar símbolos que no están en el teclado tales como caracteres acentuados, seleccionándolos desde un mapa de caracteres emergente. Insertar texto: Muestra un menú emergente que permite insertar texto normal, tal como palabras clave de CVS (Author, Date, Header, etc) o avisos de GPL, usuario o fecha y hora actual. Completar código: Completa el código donde está el cursor. Es sensible al contexto y le ahorra mucho tiempo. Por ejemplo: completa clases, añadiendo variables privadas, las propiedades Get y Set acceden a métodos y añaden partes principales de métodos. Asignando variables (por ejemplo i:=3;) añade las declaraciones de las variables. En los procedimientos definidos en adelante añade las partes principales de los métodos. Al asignar eventos (OnClick:=) añade la definición del método y su parte principal. Véase Herramientas del IDE de Lazarus. Extraer procedimiento: Usa el texto seleccionado (una declaración o varias) para construir un nuevo procedimiento. macroplexx Página 12 www.scribd.com El submenú Buscar Buscar: Parecido a lo que existe en casi todos los editores de texto: aparece un cuadro de diálogo emergente que permite introducir una cadena de texto a buscar, con opciones como sensible a mayúsculas/minúsculas, palabras completas, origen, alcance y dirección de búsqueda. Buscar Siguiente, Buscar Anterior: Busca otra vez según la entrada de texto previa, en la dirección especificada. Buscar en archivos: Busca el texto en archivos: cuadro de diálogo emergente con las opciones todos los archivos abiertos, todos los archivos en el proyecto, o todos los directorios; se pueden utilizar caracteres comodín para seleccionar archivos de un tipo determinado. macroplexx Página 13 www.scribd.com Reemplazar: Parecido a Buscar; muestra un cuadro de diálogo emergente con espacio para escribir una cadena de texto y sustituir texto y opciones de sensibilidad a mayúsculas/minúsculas, dirección, etc. Búsqueda incremental: Busca la cadena de texto mientras estamos introduciendo la cadena a buscar. Por ejemplo: después de elegir "Búsqueda incremental" si teclea "l" la primera "l" se resaltará. Si después presiona "a", el editor buscará la siguiente "la" y así sucesivamente. Ir a línea: Mueve el cursor de edición a la línea especificada de un archivo. Saltar atrás: Regresa en el archivo a el anterior marcador (es necesario haber utilizado Añadir punto de salto al historial. Se moverá a marcadores en otros archivos abiertos en el Editor. Saltar adelante: Se mueve hacia delante al próximo marcador. Añadir punto de salto al historial: Añade marcadores o puntos de salto al archivo. Ver historial de salto: Muestra la lista de marcadores del archivo: Todavia no llevado a cabo. Buscar otro final del bloque de código: Situados en un begin, busca el correspondiente end o viceversa. Buscar comienzo del bloque de código: Se mueve al begin de un procedimiento o función en la que está situado el cursor. Buscar declaración desde el cursor: Buscar el lugar en el que se ha declarado el identificador seleccionado. Esto puede ser en el mismo archivo u otro ya abierto en el Editor; si el archivo no está abierto, se abrirá (cuando se declara un procedimiento o una función, por ejemplo, en classesh.inc , se abrirá en el Editor). Abrir nombre de archivo a cursor: Abre el archivo cuyo nombre se ha seleccionado con el cursor. Es útil para examinar archivos Include o archivos que contienen otras Unidades usadas en el proyecto. Ir a directiva de inclusión: Si el cursor está situado en un archivo que está Incluido en otro archivo, va al lugar en el otro archivo que llamó el archivo Include. El submenú Ver macroplexx Página 14 www.scribd.com Controla la visualización de varias ventanas y paneles en la pantalla. Inspector de Objectos: La ventana que normalmente ocupa el lado izquierdo del escritorio y muestra las propiedades del formulario que aparece en él. Si hace clic con el ratón en cualquier componente de un formulario se mostrarán los detalles de ese componente en el Inspector de Objetos. En la parte superior hay un panel que muestra la estructura en árbol del proyecto actual y en el que se pueden seleccionar los componentes del formulario: esto también hará que se muestren en el Inspector de Objetos los correspondientes detalles. El panel principal inferior tiene dos pestañas que permiten seleccionar Propiedades o Eventos. Si se selecciona Propiedades se muestran características como nombre, color, etiqueta, tipo de letra, tamaño, etc.: hay dos columnas, la izquierda muestra la propiedad y la derecha el valor asociado a esa propiedad. Si se selecciona Eventos muestra dos columnas: la izquierda lista los posibles eventos tales como MouseClick o KeyDown asociados con ese componente, y la izquierda la acción que resulta de ese evento. Si ho hay una acción definida, haciendo clic en la casilla apropiada o en el botón macroplexx hace que aparezca el Editor de Código, con el cursor ya colocado en una Página 15 www.scribd.com plantilla de declaración de procedimiento, esperando que tecleemos el código que defina el evento. Editor del código fuente: La ventana principal donde se edita el código fuente. Su funcionamiento es muy parecido a la mayoría de los editores de texto gráficos, así que el ratón puede mover el cursor sobre el texto mostrado, y al hacer clic con el botón izquierdo mientras arrastramos se seleccionará y sombreará texto. Al pulsar con el botón derecho se muestra un menú emergente, pero si está familiarizado con Windows, o editores de Gnome o KDE, encontrará que el menú emergente NO tiene las funciones habituales de edición: Cortar, Copiar y Pegar, sino que incluye opciones como Buscar Declaración o Abrir archivo en cursor. La parte superior del Editor del código fuente tiene varias pestañas, que corresponden a los archivos que están abiertos para el proyecto actual; pulsando sobre cualquiera se verá el archivo, y podrá moverse fácilmente de un archivo a otro, copiando y pegando entre archivos y realizando la mayoría de las funciones normales de edición. El Editor del código fuente resalta texto en color, con colores diferentes para signos de puntuación, comentarios, constantes, etc. También mantiene el nivel de sangrado de línea en línea, mientras no lo cambie. La funcionalidad y apariencia del Editor del código fuente son muy configurables desde el Menú Principal seleccionando Entorno -> Opciones del editor y seleccionando después una de las pestañas del cuadro de diálogo emergente. Explorador de código: Una ventana emergente . normalmente situada a la derecha del escritorio que muestra, en forma de árbol, la estructura del código en la unidad o programa actual. Habitualmente se abre con el nombre de unidad y ramas para las secciones Interface e Implementation, pero pulsando en el recuadro situado a la izquierda de cualquier rama abrirá sus sub-ramas o ramitas, con más y más detalles hasta constantes individuales, se mostrarán tipos y variables, así como procedimientos y declaraciones de función. Si cambia el archivo mostrado en la ventana principal del Editor del código fuente, necesitará pulsar el botón Refrescar del Explorador de Código para mostrar la estructura del nuevo archivo. Unidades...: Abre una ventana emergente de diálogo con una lista de los archivos de unidades en el proyecto actual. Haciendo clic con el ratón sobre un nombre de archivo se selecciona ese archivo; pulse en Abrir para mostrar ese archivo en el Editor del código fuente. Si marca el recuadro Multi podrá seleccionar varios archivos a la vez, y todos ellos se abrirán en el Editor del código fuente (pero sólo se mostrará uno cada vez). Este Menú Opción se parece bastante a Proyecto -> Opciones del Inspector del Proyecto, pero sólo muestra la lista de archivos unidades y permite que sean abiertos. Formularios...: Abre una ventana de diálogo emergente con una lista de los formularios del proyecto actual, y permite seleccionar uno o más para que sean mostrados. Ver dependencias de la unidad: Abre una ventana de diálogo emergente que muestra, como un árbol, la estructura de dependencias del archivo unidad actualmente abierto. La macroplexx Página 16 www.scribd.com mayoría de los archivos listados como dependencias tendrán sus propios recuadros , lo que permite que se exploren las dependencias de los archivos individuales, a menudo de una manera muy recursiva. Commutar Ver formulario / unidad: Commuta entre el Editor del código y el formulario actual situado en la capa superior del escritorio, y le da el foco. Si el Editor del código tiene el foco, puede editar el código fuente; si se le da el foco al formulario podrá manipular los componentes en el escritorio y cambiar el aspecto del formulario. El modo más sencillo de alternar entre el Editor y el formulario es usar la tecla F12 , pero se consigue el mismo resultado seleccionando esta opción en el Menú Principal. Mensajes: Una ventana que muestra los mensajes del compilador, el avance de una compilación con éxito o lista los errores encontrados. Buscar resultados: Una ventana que muestra los resultados de una búsqueda en archivos. Ventanas de depuración: Abre un menú emergente con varias opciones para operar y configurar el depurador. Más abajo se describe el Depurador El submenú Proyecto Nuevo proyecto: Crea un nuevo proyecto. Aparece una ventana de diálogo emergente que ofrece la posibilidad de elegir entre varios tipos de proyectos. Nuevo proyecto desde archivo: Aparece una ventana de diálogo de navegación, que permite seleccionar un archivo desde el cual crear un nuevo proyecto. macroplexx Página 17 www.scribd.com Abrir proyecto Abre un proyecto que ya había sido creado y guardado. Aparece un diálogo de navegación con una lista de archivos con Información del Proyecto Lazarus (Lazarus Project Information (.lpi)) desde el que se puede elegir un proyecto. Abrir proyecto reciente: Muestra una lista emergente de los proyectos recientes en los que ha estado trabajando y permite seleccionar uno de ellos. Guardar proyecto: Parecido a Archivo -> Guardar: se guardan todos los archivos del proyecto actual; si no fueron previamente guardados, se nos pregunta el nombre- como en Guardar Proyecto como... Guardar proyecto como...: Pide un nombre para guardar el proyecto. Se ofrece por defecto el nombre Project1.lpi, pero debería elegir su propio nombre. Lazarus no permitirá usar el mismo nombre para el archivo proyecto y el archivo unidad (véase más abajo). Publicar proyecto: Crea una copia de todo el proyecto. Si desea mandárselo a alguien sólo la configuración de las fuentes y el compilador de su código, esta función es su amiga. Una carpeta normal de proyecto contiene mucha información. La mayoria no es necesario hacerla pública: el archivo .lpi contiene información de la sesión (como posición de inserción de texto y marcadores de unidades cercanas) y la carpeta del proyecto contiene muchos archivos .ppu, .o y el ejecutable. Para crear un archivo lpi solamente con la información base y sólo las fuentes, en todas las subcarpetas use "Publicar proyecto". En el diálogo puede establecer los filtros excluir e incluir y con la orden después puede condensar la salida a un único archivo. Véase Herramientas del IDE de Lazarus Inspector del proyecto: Abre un diálogo con aspecto de árbol que muestra los archivos del proyecto actual. Permite añadir, borrar y abrir los archivos que se seleccionen, o cambiar las opciones del proyecto. Opciones del proyecto...: Abre una ventana de diálogo con varias pestañas para establecer opciones para Aplicación (título, archivo de salida), Formularios (que permite seleccionar, de entre los formularios disponibles, los que se crearan automáticamente al arrancar la aplicación) y Miscelánea (especifica si la información del editor debería guardarse para archivos cerrados, o sólo para archivos del proyecto). NO ESTOY REALMENTE SEGURO DE LO QUE SIGNIFICA ESTO: ¡¡AYUDA!! --> en la versión 0.9.24 estas casillas figuran en la pestaña Sesión y lo que viene a decir es si se salvan cambios realizados en archivos abiertos en el editor, pero que no pertenecen al proyecto, normalmente unidades que figuran en la cláusula uses y otros que nosotros hayamos abierto, pero no añadido al proyecto. Lo de los archivos cerrados si que es un misterio. Opciones del compilador...: (Se trasladó a aquí recientemente desde el Menú Ejecutar). Abre una ventana multipagina con pestañas para configurar el compilador. Las pestañas son Rutas para definir trayectorias de búsqueda para unidades, archivos include, librerías, etc., también permite elegir un tipo de interfaz para los formularios (gtk, gnome, win32); Procesando para elegir las reglas para procesar programas fuente, Código para macroplexx Página 18 www.scribd.com hacer que los programas sean mas rápidos y pequeños, elegir procesador objetivo, tipos de comprobaciones, tamaño de la pila, etc; Enlazando permite elegir como usar la depuración, librerías estáticas o dinámicas, y si se pasarán las opciones a través del enlazador; Mensajes definir que tipo de mensajes se generarán si hay errores; Otro para decidir si usar el archivo de configuración por defecto (fpc.cfg) o algún otro archivo; Heredado muestra un diagrama con estructura de árbol para indicar cómo han sido heredadas las opciones desde unidades ya incorporadas; Compilación permite definir comandos que se ejecutarán antes o después de lanzar el compilador y puede permitir usar archivos Make. Añadir archivo de editor al proyecto: Añade al proyecto el archivo que se está editando en este momento. Eliminar del proyecto: Aparece un menú emergente con los archivos que se pueden quitar del proyecto. Ver fuente: Independientemente del archivo que está editando, lo lleva de regreso al archivo del programa principal (.lpr), o al archivo principal .pas si no hay .lpr. Ver lista Para-Hacer: Abre un cuadro de diálogo con una lista de tareas pendientes asociadas a este proyecto. Listará cualquier comentario de tareas pendientes de su proyecto (líneas que comienzan por //TODO), y cualesquiera otras en las unidades Lazarus que utilizó. Necesita Refrescar las tareas pendientes en el diálogo (usando el botón con el símbolo de una flecha en la barra de herramientas) para que aparezcan las nuevas tareas pendientes. La primera columna de la lista de tareas pendientes contiene números que ha destinado a sus comentarios ToDo; un simple //TODO hará que aparezca un cero, pero un comentario //TODO999 (por ejemplo) pondrá el número 999 en la primera columna. Recuerde que no puede haber espacios antes de //TODO y que los comentarios ToDo añadidos después de la última vez que guardó ¡no se mostrarán! El submenú Ejecutar macroplexx Página 19 www.scribd.com Construir: hace que Lazarus construya (es decir compile) los archivos del proyecto que han sufrido cambios desde la última construcción. Construir todo: Construye todos los archivos del proyecto, hayan sufrido cambios o no. Abortar construcción: Para el proceso de construcción una vez iniciado - si ha recordado que hizo algo mal y quiere parar la construcción , o el proceso parece que se alarga mucho y evidentemente, hay algún error. Ejecutar: Este es el modo normal para lanzar el compilador y, si la compilación tiene éxito, empezar la ejecución de la aplicación. Lo que relamente ocurre es que Lazarus guarda una copia de sus archivos, después inicia el compilador y el enlazador, luego comienza la ejecución del programa binario enlazado final. Pausar: Suspende la ejecución del programa. Esto le puede permitir inspeccionar cualquier salida que haya sido generada; la ejecución se puede continuar seleccionando Ejecutar otra vez. Paso a paso por instrucciones: Utilizado junto con el depurador, produce la ejecución del programa paso a paso hasta un punto señalado del código fuente. macroplexx Página 20 www.scribd.com Paso a paso por funciones: Produce la ejecución paso a paso hasta la declaración señalada, después salta la declaración y continúa la ejecución a velocidad normal. Útil para intentar aislar una declaración que provoca un error lógico. Ejecutar hasta cursor: Provoca la ejecución a velocidad normal (es decir, NO una declaración cada vez) hasta la declaración donde está el cursor; después se para. Continúe la ejecución a velocidad normal seleccionando Ejecutar Detener: Para la ejecución del programa. No se puede continuar seleccionando Ejecutar; esto hará que comience el programa otra vez desde el principio (recompilando si es necesario). Parámetros de ejecución: Abre una ventana emergente multipágina que permite opciones de consola y parámetros que se le pasarán al programa para que sean ejecutados; permite la selección de monitor para ejecutar el programa (por ejemplo, en Linux se puede utilizar un terminal X remoto); algunas variables de entorno pueden ser invalidadas. Una aplicación muy importante de este submenú es activar una ventana de terminal en la que se muestra una consola Pascal de entrada/salida. Si está desarrollando un programa Pascal en modo consola (por ejemplo, que no use el interfaz gráfico de usuario (GUI) con sus formularios, botones y recuadros) debería marcar la casilla "Usar lanzando aplicación". La primera vez que haga esto e intente Compilar/Ejecutar, probablemente obtendrá un desagradable mensaje que diga: "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied". Si ocurre esto, necesita cambiar los permisos del archivo apropiado (por ejemplo usando chmod +x archivo, o usando la utilidad de Windows para cambiar permisos); puede que tenga que hacer esto como administrador. Después, cada vez que ejecute el programa, aparecerá una ventana de terminal con todo su texto de entrada/salida (readln, writeln, etc). Después de terminar la ejecución de su programa, aparecerá un mensaje "Presione intro" en la pantalla. Así, cualquier salida que produzca su programa permanecerá en la pantalla hasta que haya podido leerla; después de que presione 'intro' se cerrará la ventana de consola. Véase este tutorial sobre programación Pascal en modo consola. Reiniciar depurador: Devuelve el depurador a su estado original, con lo que se borran los puntos de interrupción y los valores de las variables. Construir archivo: Compila (construye) sólo el archivo que está abierto en este momento en el editor. Ejecutar archivo: Compila, enlaza y ejecuta sólo el archivo abierto en este momento. macroplexx Página 21 www.scribd.com Configurar Construir+Ejecutar archivo: Abre una ventana multipágina con opciones que permiten construir únicamente este archivo cuando se selecciona Construir proyecto, permite seleccionar la carpeta de trabajo, el uso de varias macros, etc. Después construye y ejecuta el archivo. 4Estas tres últimas opciones le permiten abrir (y mantener) un proyecto de prueba. Use Archivo -> Abrir, para abrir un archivo .lpr, presione cancelar en el diálogo siguiente para abrir este archivo como un archivo "fuente normal". El submenú Componentes (Paquete en la v0.9.26.2) Abrir paquete cargado...: Muestra una Lista de los paquetes instalados , dándonos la posibilidad de abrir uno de ellos , y en la ventana que sale configurarlo, compilarlo o editarlo. Abrir archivo de paquete (lpk)...: Abre el paquete seleccionado y en la ventana que sale configurarlo, compilarlo o editarlo. Abrir paquete de unidad actual: Abre la ventana de configuración del paquete al que pertenece la unidad activa en el editor de código. Abrir paquete reciente...: Abre un paquete que fue abierto recientemente. Añadir unidad activa al paquete: Sitúa el archivo unidad (que se encuentra seleccionado en este momento en el editor) dentro de un paquete. Gráfico de paquete...: Muestra un gráfico con las relaciones entre los paquetes que se están usando (si no estás usando ningún otro paquete, se mostrarán el paquete Lazarus y el FCL y el LCL). Configurar paquetes instalados...: Muestra los paquetes disponibles y los instalados. Permite añadir y suprimir paquetes. El submenu Herramientas macroplexx Página 22 www.scribd.com Configurar herramientas personalizadas: Permite al usuario añadir varias herramientas externas (generalmente macros) al juego de herramientas. Comprobación rápida de la sintaxis: Realiza una comprobación rápida de la sintaxis en su archivo fuente sin compilar nada realmente. El paso esencial en el desarrollo de programas largos y complicados, cuando no quiere perder tiempo compilando si el código está equivocado. Adivinar bloque sin cerrar: Útil si tiene una estructura de bloques anidados y ha dejado un 'end' en algún lugar. Adivinar IFDEF/ENDIF perdido: De utilidad si hay una estructura de macro anidada o compleja y cree que ha dejado una directiva ENDIF. Hacer ResourceString: Convierte la cadena seleccionada en un ResourceString situándola en una sección resourcestrings, que debe existir en alguna unidad del proyecto. Una ventaja de ResourceStrings es que pueden ser modificadas ¡sin necesidad de compilar el proyecto de nuevo! con las herramientas adecuadas. Diff: Permite comparar dos archivos (generalmente dos versiones del mismo archivo) para encontrar diferencias. Opciones para ignorar espacios en blanco al principio o al final de las líneas o variaciones del terminador delínea: CR+LF frente a LF. Útil para comprobar si ha habido cambios desde la última actualización de CVS, etc. macroplexx Página 23 www.scribd.com Opciones de las plantillas del proyecto: Este elemento es añadido por el paquete Project Templates. Verificar archivo LFM en editor: Permite inspeccionar el archivo LFM que contiene las especificaciones que describen el formulario actual. Convertir unidad de Delphi a unidad de Lazarus: Ayuda a convertir aplicaciones Delphi en Lazarus; realiza los cambios necesarios en el archivo fuente. Ver Lazarus para usuarios de Delphi y Guía de conversión de código. Convertir proyecto de Delphi a proyecto de Lazarus: Ayuda a convertir proyectos Delphi en proyectos Lazarus; realiza los cambios necesarios en los archivos que componen el proyecto. Ver Lazarus para usuarios de Delphi y Guía de conversión de código. Convertir paquete de Delphi a paquete de Lazarus: Ayuda a convertir paquetes Delphi en paquetes Lazarus; realiza los cambios necesarios en los archivos que componen el paquete. Ver Lazarus para usuarios de Delphi y Guía de conversión de código. Convertir archivo DFM a LFM: Para llevar de Delphi a Lazarus: convierte los archivos de descripción del formulario de Delphi a Lazarus. Véase Lazarus para usuarios de Delphi y Guía de conversión de código. Construir Lazarus: Ejecuta una reconstrucción de Lazarus desde los archivos más recientemente descargados o actualizados vía CVS. Añadirá o eliminará los paquetes sgún hallamos indicado en la ventana configurar paquetes instalados. Pulse el botón y ¡siéntese a mirar lo que ocurre! (siga el proceso en la ventana Mensajes). Configurar "Construir Lazarus": Permite al usuario determinar qué partes de Lazarus serán reconstruidas, y cómo. Por ejemplo, puede seleccionar que sólo se reconstruya la LCL, o todo excepto los ejemplos; puede seleccionar qué interfaz de LCL usar (por ejemplo qué conjunto de interfaces) , y puede seleccionar el sistema operativo y especificar una carpeta diferente. El submenú Entorno Opciones del Entorno: exhibe una ventana de páginas con múltiples pestañas para Archivo - permite que el usuario especifique la ruta para la carpeta por defecto, el compilador, la carpeta de fuentes y la carpeta temporal para la compilación; Escritorio - opciones para el idioma, guardar automáticamente, guardar propiedades del escritorio, sugerencias para paleta de componentes y botones rápidos; macroplexx Página 24 www.scribd.com Ventanas, permite la especificación del tamaño y del comportamiento de varias ventanas; Editor de formulario - elegir los colores para editar formularios; Inspector de objetos - elegir el color y la altura de elementos; Copia de seguridad - especificar cómo hacer copias de seguridad de los archivos cuando editamos; Nombrando - especificar qué extensión utilizar al nombrar archivos de PASCAL ('pp' o 'pas'), si se guardarán los archivos con nombres en minúsculas, si se borrarán o renombrarán automáticamente. Opciones del Editor: ventana de páginas múltiples, con pestañas para General - determina comportamientos como sangrado automático, resaltado de paréntesis, arrastrar y soltar, desplazamiento por el texto, resaltado de sintaxis, mostrar sugerencias, tamaño de sangrado de bloques y las pestañas, límite de deshacer; Visualizar - opciones para mostrar números de línea, la presencia de canales, el tamaño y el tipo de fuente para el editor, y contiene un panel de vista previa que muestra los colores de varias características de la sintaxis tales como comentarios, carpetas, puntuación, errores y puntos de ruptura; Accesos rápidos - para seleccionar entre el esquema de Lazarus o el de Turbo Pascal; Color - permite elegir el esquema de color para las características del texto, para varios lenguajes tales como Objet PASCAL, C++, Perl, HTML, XML y scripts de shell. Muestra el panel de vista previa otra vez (para cualquier lenguaje seleccionado); Herramientas de código - permite seleccionar características como la terminación del identificador, consejos, especificación del nombre del archivo plantilla, plantillas específicas para la terminación del código. Opciones de depuración: ventana de páginas múltiples con pestañas para General - eligir depurador: ninguno, depurador de GNU (gdb) o gdb a través de SSH, especificar las rutas de búsqueda para las depuraciones, y las opciones específicas para la depuración elegida; Registro de eventos - especificar si borrar el registro y ejecutar, y qué mensajes exhibir; Excepciones del lenguaje - seleccionar qué excepciones se pueden ignorar; Excepciones del sitema operativo - permite que el usuario agregue ciertas señales que se apliquen al sistema operativo actual (no funciona todavía). Opciones de CodeTools: ventana de páginas múltiples, pestañas para General - permite la entrada de las rutas de búsqueda de código fuente adicionales, especificar método de salto; macroplexx Página 25 www.scribd.com Creación de código - se determina si el código creado está agregado antes o después de cierto punto; Palabras - se determina si las palabras claves de Pascal se deben introducir en mayúsculas o minúsculas, o como palabras todas en mayúsculas; Separación de línea - establece las reglas sobre dónde se permite partir las líneas (antes o después de la puntuación, después de las palabras claves, etc); Espacio - decidir si un espacio debe ser agregado automáticamente antes o después de ciertos rasgos sintácticos tales como palabras claves o signos de puntuación. Definir editor de CodeTools: permite insertar plantillas de Free Pascal, Lazarus, Delphi o Kylix. Escanear de nuevo el directorio de fuentes de FPC: busca por la carpeta otra vez. Lazarus utiliza las fuentes del FPC para generar eventos correctos y cuando busca declaraciones. Si cambia la carpeta en las opciones del entorno, esa carpeta se vuelve a explorar, para cerciorarse de que Lazarus utiliza la versión que se almacenó en esa localización. Pero si esa carpeta ha cambiado sin que Lazarus lo advierta, entonces puede obtener algunos errores al diseñar formularios o hacer "Encontrar declaración". Si obtiene tal error, puede hacer dos cosas: 1. Comprobar la carpeta de fuentes del FPC configurada en la opción Entorno. 2. Volver a explorar la carpeta de fuentes del FPC. El submenú Ventanas Contiene una lista de las ventanas abiertas y por tanto disponibles, como Editor de código fuente, Inspector de Objetos ,Inspector del proyecto, Mensajes y las de los formularios. Seleccionando el nombre de una de las ventanas la pondrá en primer plano y le dará el foco. El submenú Ayuda Tiene tres opciones: macroplexx Página 26 www.scribd.com Ayuda en línea abre una ventana del navegador que contiene una imagen de un guepardo corriendo y varios enlaces a Lazarus, FreePascal y el sitio web del WiKi. Configurar Ayuda abre un menú emergente con opciones para seleccionar visores y bases de datos para leer información de ayuda. Esta opción permite especificar cualquiera de los documentos en línea del sitio web de Lazarus-CCR, algunos otros sitios que contienen documentos, o un almacenamiento local para la documentación (esta será la opción por defecto, cuando esté terminado completamente el sistema de ayuda). En la actualidad, al situar el cursor en la ventana del Editor sobre cualquier palabra clave de la Librería de Componentes de FreePascal (FCL) o la Librería de tiempo de ejecución (RTL) (pero no la Librería de Componentes de Lazarus, LCL) y presionar F1 se abrirá a la definición apropiada en el sitio web. Hay otras opciones de ayuda para el usuario final fuera de línea. Por ejemplo, si tienes una copia de Kylix, puede reutilizar los archivos de ayuda que vienen con él, dentro del IDE de Lazarus. Ver la página Adding Kylix Help para más detalles. Acerca de Lazarus muestra un recuadro emergente con información sobre Lazarus, cómo la versión, los integrantes del equipo de desarrollo y agradecimientos varios. Cuándo esté finalizado, será un completo servicio de ayuda en línea, con información sobre sintaxis de Pascal, el uso del IDE, cómo usar, modificar o crear componentes, y sugerencias sobre cómo realizar ciertas tareas. Esta parte de la sección de Documentación (lo que está leyendo ahora mismo) representa el comienzo del proceso. Necesitamos contribuciones de cualquiera que se sienta capacitado: es muy fácil editar el Wiki. Panel de botones rápidos Un pequeño panel de herramientas a la izquierda en la ventana principal, justo debajo del Menú Principal y a la izquierda de la Paleta de Componentes, contiene un conjunto de botones de acceso a las opciones de uso más frecuente del menú principal: Nueva unidad, Abrir, Recientes, Guardar, Guardar todo, Nuevo formulario, Ver formulario/unidad (F12), Ver unidades, Ver formularios, Ejecutar (F9) (compila, enlaza y ejecuta en modo depuración), por instrucciones (F7), Detener, Paso a paso Paso a paso por funciones (F8) (las cuatro últimas son funciones del depurador). macroplexx Página 27 www.scribd.com La Paleta de Componentes Una barra de herramientas con pestañas que muestra un gran número de iconos que representan los componentes más utilizados para construir formularios. Cada pestaña hace que se muestre un conjunto diferente de iconos, que representa a un grupo funcional de componentes. El icono que está más a la izquierda en cada grupo es una flecha inclinada hacia la izquierda, llamada Herramienta de selección. Si deja el cursor del ratón inmóvil sobre cualquier icono de la Paleta de Componentes, sin pulsar sobre el icono, aparecerá el rótulo de ese componente. Advierta que cada rótulo empieza por 'T' - esto significa 'Tipo' o más exactamente 'Clase' de un componente. Cuando selecciona un componente para incluirlo en un formulario, la clase se añade a la sección tipo de la parte interface de la unidad (normalmente como parte del TForm1), y se añada una instancia de esa clase a la sección var(normalmente como la variable Form1). Cualquier Método que diseñe para que sea usado por el formulario o sus componentes (por ejemplo, procedimientos o funciones) será colocado en la parte implementation de la unidad. Cómo utilizar la paleta Para utilizar la paleta, debe haber un formulario abierto a la vista en el editor (si no hay uno, selecciona Archivo -> Nuevo formulario). Haz clic en el icono de la pestaña correspondiente de la paleta para el componente que deseas utilizar y haz clic en el formulario, cerca de donde quieres que aparezca el componente. Cuando el componente aparezca se puede seleccionar haciendo clic en él con el ratón. Una vez seleccionado en el formulario, el objeto se encuentre seleccionado también en la ventana Inspector de Objetos, donde puedes editar sus propiedades y eventos. Ajustes de la apariencia visual de un objeto pueden hacerse, ya sea mediante la alteración de su representación en el formulario usando el ratón, o cambiando la propiedad correspondiente en el Editor de objetos para ese componente Si instalas componentes adicionales, ya sean los que has escrito, o los vienen en un paquete de alguna otra fuente, los iconos correspondientes aparecerán en la paleta de componentes, en una de su pestañas o en una pestaña nueva adicional. Estos nuevos componentes se pueden seleccionar y utilizar en sus formularios de la misma forma que los suministrados por defecto En la lista que sigue de los componentes, encontrarás vínculos a archivos que contienen descripciones de las unidades en que se encuentran. Si deseas obtener información sobre las propiedades de un componente en particular, a menudo merece la pena mirar en la herencia de ese componente e inspeccionar las propiedades del tipo base del que se deriva. Por ejemplo, para entender TMaskEdit también es útil examinar TCustomMaskEdit. Pestañas de la Paleta de Componentes macroplexx Página 28 www.scribd.com Los nombres de las pestañas son bastante descriptivos de su contenido. Las imágenes y los componentes reseñados corresponden a los que vienen por defecto con la Versión 0.9.24 de Lazarus: * Standard (Ver Pestaña Standard para la descripción de los componentes) Componentes utilizados con frecuencia: TMainMenu , TPopupMenu , TButton , TLabel , TEdit , TMemo , TToggleBo x , TCheckBox , TRadioButton , TListBox , TComboBox , TScrollBar , TGroupBox , TSt aticText ,TRadioGroup , TCheckGroup , TPanel , TActionList * Additional (Ver Additional tab/es para la descripción de los componentes) Más, componentes utilizados a menudo: TBitBtn , TSpeedButton , TStaticText , TImage , TShape , TBevel , TPaintBox , TNotebook , TLabeledEdit , TSplitter , TTrayIcon , TMaskEdit , TCheckListBox , TScrol lBox ,TApplicationProperties , TStringGrid , TDrawGrid , TPairSplitter , TColorBox , TCo lorListBox , TChart * Common Controls (Ver Common Controls tab/es para la descripción de los componentes) TTrackBar , TProgressBar , TTreeView , TListView , TStatusBar , TToolBar , TUpDown , TPageControl , TTabControl , THeaderControl , TImageList , TPopupNotifier * Dialogs (Ver Dialogs tab/es para la descripción de los componentes) TOpenDialog , TSaveDialog , TSelectDirectoryDialog , TColorDialog , TFontDialog , TFi ndDialog , TReplaceDialog , TOpenPictureDialog , TSavePictureDialog , TCalendarDial og , TCalculatorDialog , TPrinterSetupDialog ,TPrintDialog , TPageSetupDialog macroplexx Página 29 www.scribd.com Algunos procedimientos y funciones útiles de Dialogos no aparecen en la Paleta, pero se pueden utilizar fácilmente mediante llamadas directas desde tu programa fuente. Puede ver algunos buenos ejemplos de cómo usar los componentes en la subcarpeta $LazarusPath/lazarus/examples de su instalación. Muchos programas muestran cómo usar diálogos y otros componentes directamente sin usar el IDE y la paleta de componentes o tienen un archivo de definición de formularios separado: todos los componentes están total y explícitamente definidos en el programa Pascal principal. Otros programas de ejemplo hacen un uso pleno del IDE. Si algunos ejemplos no funcionan bien: puede que necesite modificar rutas y permisos de archivos o carpetas. Si quiere compilar algún ejemplo, compruebe que tiene permisos de lectura/escritura/ejecución para los archivos y carpetas, o copie los archivos a una carpeta donde tenga los permisos adecuados. Intente ejecutar el programa 'testall' para ver un menú de componentes disponibles junto con pequeños formularios ejemplo de prueba para la mayoría de ellos; después mire el código para ¡descubrir como funcionan! * Misc TColorButton , TSpinEdit , TFloatSpinEdit , TArrow , TCalendar , TEditButton , TFileNa meEdit , TDirectoryEdit , TDateEdit , TCalcEdit , TFileListBox , TXMLPropStorage , TIni PropStorage , TBarChart , TButtonPanel ,TCustomShellTreeView , TIDEDialogLayoutStorage * Data Controls Componentes de datos que son como los de los grupos Standard y Additional, pero aplicables a bases de datos: TDBNavigator , TDBText , TDBEdit , TDBMemo , TDBImage , TDBListBox , TDB ComboBox , TDBCheckBox ,TDBRadioGroup , TDBCalendar , TDBGroupBox , TDBGri d * Data Access TDatasource, TMemDataset, TSdfDataSet, TFixedFormatDataSet, TDbf * System macroplexx Página 30 www.scribd.com TTimer , TIdleTimer , TLazComponentQueue , THtmlHelpDatabase , THtmlBrowserHel pViewer , TProcessUTF8 , TAsyncProcess , TProcess , TSimpleIPCClient , TSimpleIPC Server , TXMLConfig , TEventLog * SynEdit TSynEdit, TSynAutoComplete, TSynExporterHTML, TSynMacroRecorder, TSynMemo, TSynPasSyn, TSynFreePascalSyn, TSynCppSyn, TSynJavaSyn, TSynPerlSyn, TSynHTMLSyn, TSynXMLSyn, TSynLFMSyn, TSynUNIXShellScriptSyn, TSynCssSyn, TSynPHPSyn, TSynTeXSyn, TSynSQLSyn, TSynPhytonSyn, TSynAnySyn, TSynMultiSyn Un grupo de componentes para ayudar a interactuar con otros lenguajes y herramientas de software. SynEdit es un control de edición multilínea avanzado, disponible también para Borland Delphi, Kylix y C++Builder. Soporta resaltado de sintaxis y terminación de código, e incluye filtros de exportación para html, tex y rtf. Son controles desarrollados enteramente con VCL/CLX , lo que significa que no son un envoltorio para controles de M$Windows, y por tanto no precisa de ninguna librería de tiempo de ejecución; esto hace a SynEdit un componente de plataforma cruzada. La compatibilidad con FreePascal está también planeada, y SynEdit es el componente de edición en el IDE de Lazarus. Ver synedit en sourceforge . * IPro TIpFileDataProvider, TIpHtmlPanel * SQLdb TSQLQuery, TSQLTransaction, TSQLScript, TSQLConnector, TPQConnection, TOracleConnection, TODBCConnection, TMySQL40Connection, TMySQL41Connection, TSQLite3Connection, TMySQL50Connection, TIBConnection * RTTI macroplexx Página 31 www.scribd.com TTIEdit, TTIComboBox, TTIButton, TTICheckBox, TTILabel, TTIGroupBox, TTIRadioGroup, TTICheckGroup, TTICheckListBox, TTIListBox, TTIMemo, TTICalendar, TTIImage, TTIFloatSpinEdit, TTISpinEdit, TTITrackBar, TTIProgressBar, TTIMaskEdit, TTIColorButton, TMultiPropertyLink Como utilizar los controles estándar, comunes y extendidos Las unidades StdCtrls, ComCtrls y ExtCtrls contienen definiciones y descripciones de algunos de los controles más comunmente utilizados en la contrucción de formularios (Forms) y otros objetos de las aplicaciones generadas con Lazarus. Algunos de los controles finales que el desarrollador utiliza, tales como TButton, TMemo, TScrollBar etc, tienen su correspondiente clase ancestro tal como TCustomButton, TCustomMemo o TCustomScrollBar. Algunas de las propiedades y métodos relevantes para el control final se definen (y se explican) más en profundidad en la clase TCustomXXX , y son heredados por el control final. Si se sitúa un componente en el editor de formularios no se necesita añadir código explícitamente para crearlo. El componente es creado automáticamente por el IDE junto con el formulario (form) e igualmente destruido al tiempo que el formulario se destruye. De igual forma, si creas un componente por tí mismo, no debes olvidarte de liberar sus recursos cuando ya no sea necesario. Si colocas un componente en el diseñador de formularios (Form Designer) y observas el Inspector de Objetos (Object Inspector), puedes ver como cambian las propiedades a medida que mueves el componente por el formulario. Por ejemplo, si pones un botón (TButton) en el formulario, lo seleccionas con el ratón y lo arrastras por el formulario podrás observar como los valores de las propiedades Top (arriba) y Left (izquierda) cambian en el Inspector de Objetos para reflejar la nueva posición. Igualmente si utilizas las barras de redimensionado para ajustar su tamaño, puedes observar como cambian los valores de las propiedades Height (altura) y Width (anchura). Por otro lado, utilizando el inspector de objetos, puedes modificar el valor asociado con una determinada propiedad tal como la altura (Height) y dandole un nuevo valor (dentro del rango soportado); de esta forma puedes observar directamente como el macroplexx Página 32 www.scribd.com tamaño del objeto seleccionado en el formulario (o el mismo formulario si es el seleccionado) cambia para reflejar el nuevo valor. Puedes además cambiar explícitamente las propiedades del objeto mediante código tecleando (en la sección de implementación apropiada del editor de código fuente), por ejemplo Formulario1.Boton1.Height := 48; Si escribes este nuevo valor en el editor de código fuente y miras de nuevo en el diseñador de formulario (Form Designer), puedes observar que el botón en el formulario ha tomado el nuevo tamaño. El nuevo valor se mostrará también en el inspector de objetos. En resumen, la mayor parte de las veces las propiedades de un objeto se pueden establecer de tres formas diferentes para lograr lo mismo: Utilizando el ratón, Estableciendo los valores en el inspector de objetos, explícitamente escribiendo en el código fuente en la sección adecuada. Nota: todo lo que se dice respecto de modificar las propiedades de los objetos mediante código, tiene efecto únicamente en tiempo de ejecución, por lo que los efectos de los valores modificados no pueden observarse en el Inspector de Objetos.(iskraelectrica) Los componentes definidos en estas unidades tienen varias propiedades que son comunes a la mayor parte de ellos, mientras que otras propiedades son específicas de componentes individuales. Aquí describiremos algunos de los más comunes. Las propiedades menos usuales o específicas de controles se describirán en la explicación de los controles individuales. Siempre se puede obtener ayuda adicional seleccionando una propiedad o palabra, tanto en el inspector de objetos como en el editor de código fuente, y a continuación presionando F1. Esto hará que el visor de ayuda nos presente la página adeduada que buscamos dentro de la documentación disponible. Si la descripción de una propiedad en dicha página no es suficiente, se puede navegar a la correspondiente descripción en las clases ancestro, seleccionando los enlaces en el listado de herencia o seleccionando un tipo de ancestro en la declaración del objeto. Los constructores tales como Create reservan la memoria y otros recursos del sistema que necesita el objeto. También llama a los constructores de los objetos que componen la clase. macroplexx Página 33 www.scribd.com Destructores: eliminan el objeto y liberan la memoria y los otros recursos que pudiera haber tomado. Si se llama a Destroy de un objeto que todavía no se ha inicializado se produce un error. Siempre se debe utilizar el método Free para desalojar objetos porque comprueba cuando el valor del objeto no está establecido, es nil, antes de invocar a Destroy. Hay que tomar las siguientes precauciones cuando alguien crea su propio método Destroy: Declarar Destroy con la directiva override , porque es un método virtual. Llamar siempre inherited Destroy; como lo último en el código del destructor. Tener en cuenta que se puede generar una excepción (exception) por parte del constructor en el caso de que no exista suficiente memoria para crear el objeto, o cualquier otra cosa salga mal. Si no se maneja la excepción dentro del constructor, entonces el objeto solamente se construirá parcialmente. En este caso se llamará a Destroy en el momento que no se espera, por lo que el destructor debe comprobar si los recursos fueron realmente asignados antes de liberarlos. Recuerda llamar a Free para todos los objetos del constructor. Algunas propiedades habitualmente listadas: Propiedad Significado La acción principal o el evento asociado con el objeto. Por ejemplo, Action seleccionando un botón 'Salir' debería causar la acción 'Cerrar' Define la manera en la que un objeto se alinea con el objeto padre. Los posibles valores son alTop (situado arriba del todo y utilizando el máximo ancho disponible), alBottom, alLeft (situado a la izquierda y utilizando la máxima Align altura disonible), alRight. alNone (ubicado en cualquier sitio del objeto padre) o alClient (toma todo el espacio disponible hasta los controles cercanos alineándolo hacia arriba, abajo, izquierda y derecha) Utilizado para mantener un control a una cierta distancia de los bordes definidos del control padre, cuando este último es redimensionado. Por Anchor ejemplo [akBottom, akRight] mantendrá el control a una distancia fija de la esquina inferior derecha. Cuando su valor es verdadero (True), se selecciona todo su texto en un control AutoSelect de edición cuando recibe el foco (es seleccionado) o cuando se presiona la tecla Enter (Intro). Verdadero (True) indica que el control edit o combobox ya han realizado una AutoSelected operación AutoSelect por lo que los subsecuentes clicks de ratón y pulsaciones de tecla proceden con normalidad sin seleccionar texto. El tipo y el espacio alrededor del borde entre un control anclado (Anchored) y BorderSpacing su padre. El texto que es mostrado en o cerca del control; debería sugerir el tipo de función del control, o una instrucción como 'Close' o 'Execute'. Por Caption defecto Caption se establece para tener el mismo valor que la propiedad 'Name', y el programador de la aplicación debería sustituirlo por uno con mayor significado para la aplicación, en lugar de dejar el valor dado automáticamente. Indica como se muestra el texto en un control de edición: Normal (reteniendo el CharCase tipo de letra (mayúsculas/minúsculas) tecleada por el usuario), convertido a mayúsculas (uppercase), o convertido a minúsculas (lowercase) macroplexx Página 34 www.scribd.com Constraints Color Enabled Font Hint Items Lines Name PopUpMenu Position (or Top, Left) ReadOnly ShowHint Establecen el tamaño mínimo y máximo para un control. Si un control se redimensiona, las nuevas dimensiones estarán siempre comprendidas dentro del rango definido aquí. Se debe tener especial cuidado cuando se establecen estas opciones para que no entren en conflicto con las configuraciones de ancho y alineado. El color a usar para dibujar el control o para escribir texto que contiene. Propiedad booleana para determinar cuando o no un control es capaz de ser seleccionado y realizar una accción. Si no se encuentra habilitado (Enabled), entonces se presenta con un color grisaceo (Grayed) fuera en el formulario. Fuente que se utilizará para escribir el texto asociado con el control - tampoco caption o label, o las cadenas de texto contenidas en el control. La entrada en el inspector de objetos habitualmente tiene un cuadro (+) a la izquierda, y seleccionándolo muestra más opciones tales como el juego de caracteres, color y tamaño. Un trozo corto de texto informativo emergente (pop-up) que aparece si se deja el cursor del ratón sobre el control por un breve espacio de tiempo. El listado de cosas 'Things' que un objeto contiene, tal como un grupo de imágenes, una serie de líneas de texto, un número de acciones en un actionlist, etc Una matriz de cadenas de texto, conteniendo datos textuales en controles con más de una sola línea de datos, tal como un Edit-Box o un Combo-Box. La matriz tiene un índice con base cero, eg las líneas están numeradas [0..numLines-1] El identificador por el que el control es conocido en el programa. El IDE( Entorno Integrado de Desarrollo) le asigna un nombre por defecto basándose en su tipo subyacente, por ejemplo, sucesivas instancias de TBitButton se deberían nombrar Form1.BitBitton1 y Form1.BitButton2; depende ya del programador de la aplicación darle un nombre con más significado tal como ExitButton o OKButton. Por defecto el nombre del control se aplica a Caption, pero el texto de Caption puede ser cambiado por separado. Una ventana conteniendo un menú de información sensitivo al contexto que emerge (pop-up) cuando se acciona el pulsador derecho del ratón en el objeto. Determina donde se ubica el control en el formulario o ventana padre/td> Propiedad booleana que si está establecida a verdadero (True), significa que el contenido del control puede ser leido por el usuario o la rutina llamante, pero que no puede ser escrita o cambiada. Permite una pequeña ventana (bocadillo) conteniendo ayuda sensible al u otra descripción que deba mostrarse cuando el cursor se sitúa sobre el objeto. Size (or Height Las dimensiones del control and Width) Las opciones disponibles para estilo (Style) dependen del tipo de control que se Style vaya a considerar: por ejemplo el estilo puede ser definido para TFormStyle, TBorderStyle, TButtonStyle etc. Entero que sirve para definir en que solapa se encuentra (dentro de un objeto) TabOrder del listado total de las disponibles Propiedad booleana que si se establece a verdadero (True)sitúa este control en TabStop la secuencia de objetos que el usuario puede alcanzar pulsando sucesivamente la tecla de tabulación (TAB) Cadena de texto que representa el dato actual que contiene el control. Se aplica particularmente a los tipos de objeto Text, Memo y StringLis. La mayor parte de las operaciones de edición (tales como Select, Clear, Cut, Copy) se realizan Text en esta parte del objeto, que mantiene la cadena actual que va a ser editada. Si el control contiene más de una sola línea de texto, por ejemplo TMemo o TComboBox, entonces los elementos textuales se organizan como una matriz de cadenas (con base cero, ie numeradas desde [0..numLines- macroplexx Página 35 www.scribd.com Visible WordWrap 1]) en Líneas. Si su valor es verdadero (True), el objeto se puede ver en el formulario; si es falso (False), el objeto permanece oculto Flag (bandera o señalizador) para mostrar si el desplazamiento de palabra está habilitado o no. eg si una palabra está cercana al final de una línea y va a ser demasiado larga para contener en ella, entonces se la emplaza abajo en la siguiente línea. Algunas acciones se listan comunmente en la solapa 'Eventos' del inspector de objetos. Seleccionando una entrada del listado aparece un ComboBox con un listado leleccionable (DropDown list)mostrando las acciones que tiene definidas, y permitiendo escoger una para asociarla a este evento. Alternativamente se puede seleccionar la elipsis (tres puntos ...) que nos llevará a un área del editor de código fuente donde se puede empezar a teclear nuestras propias instrucciones de acción para el evento seleccionado. A pesar de la gran cantidad de eventos disponibles para un control dado, en la práctica lo más habitual es utilizar sólamente unos pocos de ellos. Para la mayor parte de los controles es más que suficiente el uso de 'OnClick'; para otros más complejos 'OnEntry' (cuando el cursor del ratón entra en el control y le da el foco o selección) y 'OnExit' (cuando el cursor del ratón abandona el control); o puedes necesitar escribir un gestor de enventos para 'OnChange' o 'OnScroll', dependiendo de la naturaleza de un control particular con el que se esté tratando. El menú emergente (pop-up) que aparece cuando se hace click con el pulsador derecho del ratón en el diseñador de formularios tiene como primer elemento: 'Create default event' y seleccionando esta opción tendremos el mismo efecto que seleccionando la elipsis en el inspector de objetos para el evento por defectot, usualmente OnClick: esto nos lleva al área de implementación del editor de código fuente donde podemos escribir el código para el manejador del evento. Una estrategia habitual en la programación orientada a objetos es aportar un listado de acciones (ActionList) con la facilidad de entrar, eliminar o editar un determinado número de acciones predefinidas desde las que poder seleccionar las más apropiadas para un determinado propósito. Click Algunas acciones listadas habitualmente Significado Acción a realizar si se detecta un cambio (eg movimiento del ratón, click de ratón, pulsación de tecla, edición de texto, cambio de una imagen, etc) Acción a realizar cuando se acciona el pulsador izquierdo del ratón. Esta es habitualmente la acción principal o por defecto del control; por ejemplo, accionando un pulsador en un checkbox inicia la acción asociada con el checkbox. Esto puede iniciar alternativamente un proceso de selección, por ejemplo en un TextBox o Memo, o señalizar el comienzo de dibujo con un lápiz (Pen) o brocha (Brush). Un método para emular mediante código el efecto de accionar en un control. macroplexx Página 36 Acción OnChange OnClick www.scribd.com Este método se encuentra frecuentemente en controles del tipo Button(TButton, TBitBtn, TSpeedButton etc). Se puede escribir un procedimiento que llame el mismo código que la acción OnClick. Esta facilidad puede ser particularmente útil si la activación del control por accionamiento produce una cascada de activación de otros controles, y el método Click se puede utilizar para iniciar la acción, en lugar de que el usuario tenga que hacer click explícitamente en gran cantidad de controles. Acción a realizar durante un Drag-Drop manoeuvres, ie cuando el ratón se OnDragDrop utiliza para capturar 'capture' un elemento o algún texto etc y lo mueve hacia alguna alguna ubicación nueva en la pantalla. Acción a realizar cuando el usuario ha terminado todas las ediciones / OnEditingDone modificaciones al control. Esto a menudo se utiliza para validar el contenido del control (por ejemplo, comprobar si un texto escrito es una dirección IP válida) Acción a realizar cuando el cursor del ratón entra en el área ocupada por el objeto, usualmente transfiriendo el foco al objeto. Esto puede incluir cambios en OnEntry el aspecto del objeto tales como luminosidad o la aparición de un borde emergente. Acción a realizar cuando el ratón se mueve fuera del área del objeto, OnExit habitualmente transfiriendo el foco fuera del objeto. Acción a realizar ante la pulsación de cualquier tecla. Sutilmente diferente de OnKeyDown, la cual cual simplemente responde a una tecla, OnKeyPress independientemente de si ya estaba pulsada cuando se obtuvo el foco por parte del control. OnKeyPress requiere que una tecla sea pulsada mientras el control tiene el foco. Acción a realizar si se pulsa una tecla mientras el control tiene el foco. Sutilmente diferente de OnKeyPress - por ejemplo la tecla debe haberse OnKeyDown presionado con el foco ya obtenido por el control, mientras que OnKeyPress requiere que la tecla sea pulsada mientras el foco está en el control. Acción a realizar si la tecla no está pulsada (eg no presionada) mientras el On Key Up control tiene el foco. On Mouse Down - Acción a ser realizada si el cursor del ratón se mueve OnMouseMove mientras el control tiene el foco. Acción a realizar si el pulsador del ratón está accionado mientras el control OnMouseDown mantiene el foco (está seleccionado). Acción a realizar si el pulsador del ratón no está presionado mientras el cursor está sobre el control. Implica que el pulsador del ratón fué previamente OnMouseUp accionado y posteriormente soltado. El caso en el que el cursor entra en el control, pero el pulsador del ratón no ha sido todavía presionado es tratado por OnEntry o OnMouseEnter. Acción a realizar cuando el control es redimensionado. Puede requerir OnResize realineación del texto o selección de un tipo de tamaño de fuente diferente etc. Cómo utilizar menús en nuestros programas El componente de tipo TMainMenu es responsable de crear el menú principal que aparece en la parte superior de muchos formularios; los diseñadores pueden personalizarlo eligiendo itens para el menú. El componente de tipo TPopupMenu creará un menú en una ventana emergente, con opciones pertinentes según el contexto, normalmente aparece al pulsar el botón derecho del ratón sobre cierto control. TMainMenu es un componente invisible: el icono que representa al componente no aparece en tiempo de ejecución, lo que aparece es el menú que hemos definido macroplexx Página 37 www.scribd.com mendiante el Editor de Menú. Lo mismo sucede con los componentes TPopupMenu que insertemos en nuestros formularios. Para acceder al (Editor de Menú ) hacemos doble clic sobre el icono del componente en el formulario; aprecerá una ventana donde podremos definir los elementos que compondrán el menú. Al aparecer por primera vez la ventana muestra un botón rotulado New Item1. Si pulsamo el botón derecho mientras lo señalamos con el ratón se mostrará el menú contextual con las opciones posibles que podemos ralizar: añadir un nuevo elemento (después o antes), borrar el elemento, crear un submenú, y otras. Las propiedades del elemento seleccionado, como su etiqueta, nombre o comportamiento, pueden ser editadas en el Inspector de Objetos. Lo mínimo que debemos cambiar es el rótulo (propiedad Caption) que mostrará el elemento en el menú, para que se identifique la acción que se realiza con con la opción del menú ("Abrir archivo", "Salir", etc.). Si queremos asociar cierta letra del rótulo como un atajo de teclado hay que preceder la misma con un símbolo &. Así, &Archivo se verá al ejecutar el programa como Archivo. Al pulsar esa letra (A, en este ejemplo) junto con Alt activará la opción correspondiente del menú. También podemos asignar una combinación de teclas como atajo (normalmente para opciones de submenú), tales cómo Ctrl + C para copiar o Ctrl + V para pegar, mediante la propiedad ShortCut del elemento. Es provechoso utilizar los controles de menú en el conjucción con un ActionList que contenga una serie de acciones (Actions) estándar o personalizadas. Los items de menú se pueden enlazar en el Inspector de Objetos a las acciones en la lista, y estas mismas acciones se pueden enlazar a Botones, Barras de Botones (ToolBar Buttons), Botonés rápidos (SpeedButtons), etc.Economizaremos esfuerzos al reutilizar el mismo código para responder a varios acontecimientos, en vez de escribir código para el evento OnClick de cada control individual. De forma predeterminada ciertas acciones normales se cargan en StdActns o, si son controles de Datos (DataAware) en DBActns y estas se pueden seleccionar mediante el editor de ActionList que aparece al hacer bole clic sobre el icono del componente en el formulario. El Depurador Todavía está por escribir?. esta linea se deja por respeto al autor(a) solucion depurador En version 0.9.26 menú 'Entorno'->'Options ...' -> 'Debugger' elegir 'GNU debugger (gdb)' y buscar ubicación (en ubuntu /debian es '/usr/bin/gdb'). macroplexx Página 38 www.scribd.com Nota1: gdb (sin extensión), es el archivo ejecutable linux del depurador. Los archivos de Lazarus (Gracias a Kevin Whitefoot.) (Añadidos de Giuseppe Ridinò, Usuario:Kirkpatc y Tom Lisjac) Al guardar se graban dos archivos: xxx.pas yyy.lpr (Se guardan más, pero estos son a los únicos que tiene que poner nombre). El archivo proyecto (lpr) y el archivo unidad (pas) no deben tener el mismo nombre porque amablemente Lazarus renombrará la unidad (dentro del código fuente) con el mismo que el del archivo unidad y el programa con el mismo del archivo proyecto (es necesario hacer esto, porque si no el compilador probablemente no sea capaz de encontrar la unidad, más tarde, cuando se refiera a ella en el archivo proyecto). Claro, para ser coherente cambia siempre unit1 por xxx. Así que si guarda un proyecto llamado again, si intenta guardar again.pas y again.lpr obtendrá fallos, porque los nombres de la unidad y el programa son iguales, con lo que se produce un error de duplicación de nombre. e:/lazarus/kj/lazhello: total 4740 free 76500 -rwxrwxrwx 1 kjwh -rw-rw-rw1 kjwh -rw-rw-rw1 kjwh -rw-rw-rw1 kjwh -rw-rw-rw1 kjwh -rw-rw-rw1 kjwh -rw-rw-rw1 kjwh -rwxrwxrwx 1 kjwh root root root root root root root root A continuación, lo que obtuve: 4618697 3002 190 506 679 677 2124 335 Mar Mar Mar Mar Mar Mar Mar Mar 24 24 24 24 24 24 24 24 11:19 11:21 11:18 11:08 11:08 11:08 11:08 11:07 again.exe again.lpi again.lpr againu.lfm againu.lrs againu.pas againu.ppu ppas.bat Observe que hay más de los dos archivos que pensé que estaba guardando. A continuación, una breve nota sobre cada archivo: again.exe: El programa principal ejecutable binario. Win32 añade una extensión "exe". En Linux no tiene ninguna. Este archivo será enorme en Linux debido a la inclusión de símbolos de depuración. Ejecute la utilidad 'strip' para borrarlos y disminuir bastante el tamaño del ejecutable. again.lpi: Este es el archivo principal del proyecto Lazarus (Lazarus Project Information); el archivo principal de una aplicación equivalente en Delphi será .dpr. Se almacena en formato XML. macroplexx Página 39 www.scribd.com again.lpr: El archivo fuente del programa principal. A pesar de su extensión específica de Lazarus es en realidad un archivo fuente totalmente normal de Pascal. Tiene una cláusula de usos que permite al compilador encontrar las unidades que necesita. Nótese que la declaración del programa no tiene que ponerle el mismo nombre al programa que al archivo. againu.lfm: Aquí es donde Lazarus almacena el diseño del formulario. Lazarus utiliza esto para generar un archivo fuente que está incluido en la sección de inicio de la unidad againu.pas unit. Los archivos de Delphi dfm se pueden convertir a formato lfm format en el IDE de Lazarus mediante Herramientas->Convertir archivo DFM A LFM. again.lrs: Este es el archivo fuente generado. Adviértase que no es un archivo fuente de Windows. againu.pas: La unidad que contiene el código del formulario. again.ppu: La unidad compilada. ppas.bat: Un script sencillo que enlaza el programa para crear el ejecutable: Si la compilación tiene éxito, lo borra el compilador. macroplexx Página 40