Sign in Join
Wiki copytemporary

Lazarus Packages/es

Deutsch · English · Español · Français · Português · Slovenčina · Русский · 日本語

Descripción del sistema de paquetes Lazarus

¿Qué es un paquete Lazarus?

   Es una conjunto de unidades y componentes, que contiene información sobre cómo compilarlos y utilizarlos en proyectos, otros paquetes o en el IDE. Al contraio que en Delphi los paquetes no están limitados a librerías y pueden ser independientes de la plataforma. Los paquetes Delphi son librerías especiales compiladas que utilizan las aplicaciones, el IDE o ambos. Los paquetes Delphi necesitan de un soporte interno del compilador, FPC no es capaz por ahora de hacerlo y este truco es dependiente del sistema operativo)

   Actualmente el compilador Free Pascal únicamente soporta paquetes estáticos. Por tanto hay que compilar y relanzar el IDE cada vez que se instala o elimina un paquete. El IDE automaticamente compila los paquetes si alguno de sus archivos es modificado.

   Un paquete Lazarus se identifica y distingue por su nombre y su versión. Los paquetes son ideales para compartir código entre proyectos.

Desde Delphi

   Si estás familiarizado con los paquetes de Delphi lee el párrafo siguiente, porque hay algunas diferencias importantes entre los paquetes de Delphi y los de Lazarus.

Preguntas frecuentes

   ¿Es necesario instalar un paquete?

Únicamente si el paquete contiene elementos de diseño, cómo componentes para la paleta del IDE. Si no es así, sí sólo utilizas el paquete en el proyecto, no hay que instalarlo.

   He instalado un paquete, pero el IDE no encuentra las unidades

Al instalar un paquete este se integra en el IDE, no en tu proyecto. Son dos cosas distintas. Para utilizar un paquete en tu proyecto añádelo al mismo, con Proyecto -> Inspector del proyecto, y en la ventana, botón Añadir, y Nuevo Requerimiento.

Inicio rápido

   Para ver el sistema de paquetes en acción y familiarizarse con él, haz lo siguiente:

Creando un nuevo paquete

   ¡Felicidades! has creado tu primer paquete.

Añadiendo un nuevo componente

   ¡Felicidades! has instalado tu primer paquete con tu primer componente.

Añadir un icono para el componente

Para los iconos del componente pueden usarse recursos Lazarus o recursos FPC.

Utilizando Recursos Lazarus:

   Para crear el archivo lrs ejecutar (donde mi_paquete es el nombre de tu paquete y TMiComponente es el nombre de tu componente):

 ~/lazarus/tools/lazres mi_paquete.lrs TMiComponente.png

   Puedes agregar más de una imagen al archivo lrs, añadiendo el nombre del archivo de imagen al final. Por ejemplo ~/lazarus/tools/lazres mi_paquete.lrs TMiComponente.png TMiOtroComponente.png ...

   Si abrimos el archivo mi_paquete.lrs veremos algo como esto.

pascal
 LazarusResources.Add('TMiComponente','PNG',[
 #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175
 +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#0'|IDAT8O'#237#212#209#10#192' '#8
 +#5'P'#247#231#251's'#215#138#133#164#166'\'#220#195'`'#209'c'#157'L'#173#131
 +#153#169'd4'#168'dP'#137'r_'#235'5'#136'@Zmk'#16'd9'#144#176#232#164'1'#247
 +'I'#8#160'IL'#206'C'#179#144#12#199#140'.'#134#244#141'~'#168#247#209'S~;'#29
 +'V+'#196#201'^'#10#15#150'?'#255#18#227#206'NZ>42'#181#159#226#144#15'@'#201
 +#148#168'e'#224'7f<@4'#130'u_YD'#23#213#131#134'Q]'#158#188#135#0#0#0#0'IEND'
 +#174'B`'#130
 ]);
pascal
 unit TuUnidad;
 ...
 uses 
  ..., LResources;
 ...
 implementation
 ...
 initialization
  {$I tuunidad.lrs}
 end.

   Nota: Puedes incluir más de un archivo lrs, pero sólo una vez.

Utilizando Recursos FPC

   Crea una imágen de 24 x 24 puntos y 16 colores para cada componente. Ahora crea un archivo rc como este:

 Nombre_Componente_1 BITMAP "ruta_a_imagen_1//imagen_1.bmp"
 Nombre_Componente_2 BITMAP "ruta_a_imagen_2//imagen_2.bmp"
 ....
 Nombre_Componente_N BITMAP "ruta_a_imagen_N//imagen_N.bmp"

   Resaltar que se utilizan dobles barras (// en linux y \\ en windows) en la ruta de las imágenes. Es aconsejable que el nombre del archivo sea el mismo que el nombre del paquete con la extensión .rc, por ejemplo Nombre_Paquete.rc.

   Usamos windres (Binutils) para crear el recurso:

 (ruta_a_windres)windres -J rc -O res "Nombre_Paquete.rc" "Nombre_Paquete.dcr"

   Añade a la unidad de registro del paquete {$R *.dcr} justo después de la palabra clave implementation, y compila e instala el paquete.

Crear un paquete para nuestras unidades comunes

   Pongamos que tenemos varias unidades, que deseamos utilizar en nuestros proyectos. Colocaremos las unidades en un directorio independiente, por ejemplo, C:\MisUnidadesCompartidas.

Añadir la LCL como una dependencia

   Si nuestro paquete contiene formularios u otros objetos de la LCL, entonces requerirá del paquete LCL.

   Podemos ver el efecto de la inclusión paquete LCL, haciendo doble clic en el editor de paquetes sobre Opciones del compilador en la pestaña Heredado.

Usar nuestro paquete en nuestros proyectos

   Necesitamos añadir la dependencia de nuestro proyecto respecto del nuevo paquete. Hay varias formas de hacerlo:

Los elementos del menú del IDE para paquetes:

Eliminar paquetes

Para eliminar componentes instalados, en el menú Paquete seleccionar la opción Configurar paquetes instalados .... La imagen muestra la ventana de gestión de los paquetes instalados.

   Marcar los paquetes que queremos desinstalar y damos al botón Desinstalar selección.

   Si algo va mal con un paquete (por ejemplo, un directorio de paquete se elimina sin desinstalarlo), Lazarus no permitirá desinstalar los paquetes. Para solucionar el problema, deberemos reconstruir Lazarus (menú Herramientas / Construir Lazarus ...), y en el proceso eliminar los paquetes problemáticos.

La teoría

   Todo paquete Lazarus tiene un archivo .lpk. Un paquete se identifica por su nombre y su versión. El nombre se corresponde con el nombre del archivo lpk. Por ejemplo:

   Nombre: Paquete1, Versión: 1.0, Nombre de archivo: /home/.../Paquete1.lpk.

   Por ejemplo:

pascal
 {This file was automatically created by Lazarus. Do not edit!
 This source is only used to compile and install the package GTKOpenGL 1.0.}
 unit GTKOpenGL;
 interface
 uses GTKGLArea, GTKGLArea_Int, NVGL, NVGLX, LazarusPackageIntf;
 implementation
 procedure Register;
 begin
   RegisterUnit('GTKGLArea', @GTKGLArea.Register);
 end;</elphi>
 initialization
   RegisterPackage('GTKOpenGL', @Register)
 end.

   Por ejemplo: gtkopengl.compiled:

xml
 <?xml version="1.0"?>
 <CONFIG>
   <Compiler Value="/usr/bin/ppc386" Date="781388725"/>
   <Params Value=" -Rintel -S2cgi -CD -Ch8000000 -OG1p1
     -Tlinux -gl -vewnhi -l -Fu../../../lcl/units
     -Fu../../../lcl/units/gtk -Fu../../../packager/units
     -Fu. -FElib/ gtkopengl.pas"/>
 </CONFIG>

Consejos y sugerencias

   Por favor, añada cualquier consejo, sugerencia o error aquí.

   Utilizamos tiOPF como ejemplo. El paquete tiOPF tiene esta estructura de directorios, debido al hecho de que se compila para FPC, Delphi 5-7, D2005 y D200.

 Source                <= ruta completa \Programming\3rdParty\tiOPF\Source
  \Compilers
     \Delphi7          <= el paquete para Delphi 7 está aquí
     \D2005
     \FPC              <= el archivo tiOPF.lpk está aquí
  \Core                <= archivos de la unidades del núcleo
  \Options             <= archivos de unidades opcionales para características adicionales
  \GUI

   Usando este ejemplo, se añade en la ventana de edición del paquete en "botón Opciones - pestaña Uso - Unidad" las siguientes rutas:

 "$(PkgOutDir);..\..\Core;..\..\Options;..\..\GUI" 

   que se añadirán a cualquier proyecto que utilice el paquete.

Añadir componentes existentes a un paquete

   Si se quiere añadir un archivo que contiene un componente a un paquete existente, hay que hacer los siguiente:

   Y ya está, el componente aparecerá en la paleta de componentes.

El procedimiento de registro (procedure Register;)

   Para mostrar el componente en la paleta de componentes, hay que registrarlo en el IDE de Lazarus. Para ello se utiliza el procedimiento de registro.

   Este procedimiento que debe aparecer en la sección interfaz de la unidad, y en el mismo se realizarán una o más llamadas a RegisterComponents, así mismo instalará los editores de componentes y propiedades.

   En un paquete puede haber uno o más procedimientos; en el editor de paquetes hay que indicar la unidad que contiene el procedimiento de registro, para que Lazarus sepa cuál debe llamar cuándo se instala el paquete.

    Hay dos formas de marcar la unidad que contiene el procedimiento de registro:

   Hay que volver a compilar e instalar el paquete después de cambiar las propiedades.

Rutas de búsqueda

   Todas las rutas de búsqueda son relativas al directorio donde reside el archivo .lpk. Si usamos una ruta absoluta, es que no entendemos los paquetes o no nos preocupa.

   Cada paquete tiene dos tipos de rutas de búsqueda:

Paquetes para ejecución y paquetes de diseño

Escenario típico de los paquetes para diseño y de ejecución

   Tenemos una librería de componentes llamados MisComponentes y queremos escribir editores IDE para algunas propiedades especiales. Por ejemplo, un editor de propiedades para la propiedad ArchivoDatos que muestra un TOpenDialog para que el usuario seleccione un archivo. Podemos poner los componentes en un paquete de ejecución llamado MisComponentesLaz.lpk y crear otro directorio diseño para el paquete para diseño MisComponentesIDELaz.lpk. Movemos todas las unidades que contienen los editores IDE y el registro de componenentes al directorio diseño. Añadir una dependencia en MisComponentesIDELaz.lpk a MisComponentesLaz.lpk. Comprobamos que no compartimos unidades ni rutas de búsqueda. Para ver un ejemplo, ../componentes/turbopower_ipro/: El paquete de ejecución es turbopoweripro.lpk y el paquete para diseño es design/turbopoweriprodsgn.lpk.

Para Delphinianos: No puedo instalar un paquete de ejecución, ¿por qué?

   Instalar un paquete implica compilar el código en su totalidad en el IDE. Un paquete de ejecución no contiene código para el IDE e incluso puede lastrarlo. Para utilizar un paquete en un proyecto, estando en el Editor de paquetes, hacer clic derecho para en el menú contextual seleccionarAgregar al proyecto. O bien, usar el menú Proyecto / Inspector de Proyecto y desde ahí, añadir o eliminar paquetes y dependencias.

Varias versiones de un paquete

Puede especificar la versión mínima y máxima requerida. Cuando el proyecto se abre y hay varios archivos .lpk el IDE abrirá automáticamente el de la versión correcta.

Si trabajas con distintas versiones de un paquete, puedes abrir en cualquier momento, el archivo de otro paquete. El paquete previo será cerrado y el nuevo se abrirá. Los elementos registrados se transferirán al nuevo paquete.

Si trabajas con varios proyectos que requieren diferentes versiones de un paquete (por ejemplo, con diferentes ramas del mismo paquete), puedes definir el preferido en las dependencias. En el inspector de proyecto, haz clic derecho sobre la dependencia y en el menú contextual selecciona Establecer nombre de archivo como preferido para esta dependencia. Cuando se abra el proyecto, el paquete preferido será abierto. Si ya existe un paquete con el mismo nombre, será reemplazado. Esta característica aparece en la versión 0.9.29.

Compilar un paquete mediante make

   El IDE puede crear un sencillo Makefile para un paquete a través de la opción Crear Makefile del menú Más de la ventana de edición de paquetes. El IDE crea el archivo Makefile.fpc y llama a fpcmake, que crea el Makefile. Desde la versión 0.9.29 el IDE también crea el archivo Makefile.compiled. Si usas un sistema de control de versiones como svn o git, agrega estos tres archivos al repositorio:

 Makefile
 Makefile.fpc
 Makefile.compiled

   Ahora puedes ejecutar make (v.g. abriendo una consola, yendo (cd) al direcorio del paquete dode está el archivo Makefile) para compilar el paquete.

Notas:

Creación de un paquete de fuentes cerradas

   Propósito: Queremos publicar un paquete, pero deseamos mantener el código cerrado.

   Por el momento muchas de las funciones IDE requieren los fuentes y le avisan si no encuentra los fuentes de una unidad. Por lo tanto, hay que publicar la sección de la interfaz de las unidades, y los archivos que el compilador crea (archivos .ppu y .o). Pasos a seguir:

Links

   Cómo escribir componentes Lazarus - una tutoría sobre cómo crear un nuevo componente.

Contribuciones y comentarios


From the Free Pascal wiki, page "Lazarus Packages/es", as it stood on 2020-02-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.