Lazarus Packages/de

From Free Pascal wiki
Jump to: navigation, search

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) português (pt) slovenčina (sk)

Überblick über das Lazarus Package System

Was ist ein Lazarus Package

Ein Lazarus Package ist eine Sammlung von Units und Komponenten, die Informationen darüber enthalten, wie sie kompiliert werden können und wie sie von Projekten und anderen Packages oder der IDE genutzt werden können. Im Gegensatz zu Delphi sind Packages nicht auf Bibliotheken beschränkt und sie können OS unabhängig sein. (Delphi Packages sind speziell kompilierte Bibliotheken, die von Anwendungen, der IDE oder beiden verwendet werden. Sie benötigen in-compiler Unterstützung, wozu FPC im Moment nicht in der Lage ist und natürlich ist diese Magie OS abhängig.)

Gegenwärtig unterstützt der Free Pascal Compiler nur statische Packages, keine dynamischen Packages. Deshalb müssen sie die IDE jedesmal kompilieren und neu starten, wenn ein Package installiert oder deinstalliert wird.

Ein Lazarus Package wird durch den Namen und seine Version identifiziert/angesehen.

Packages sind ideal, um Code zwischen Projekten zu teilen.

Für Entwickler mit Delphi-Erfahrung

Gerade wenn Sie mit Delphi-Packages vertraut sind, ist es notwendig, dass Sie den folgenden Abschnitt lesen. Es gibt nämlich wichtige Unterschiede zwischen einem Delphi- und einem Lazarus-Package.

  • Lazarus Packages bestehen nicht nur aus einer dynamischen Library. Sie werden auch verwandt, um Units in mehreren Projekten zu verwenden und große Projekte zu modularisieren.
  • Manchmal wird die Projektdatei eines Paketes in Delphi Paket-Projekt genannt. So etwas macht bei Lazarus keinen Sinn.
  • Viele Delphi Packages bestehen aus einem Paket-Projekt pro Compiler-Version. Das wird ebenfalls unter Lazarus nicht benötigt. Denn Lazarus Packages enthalten auch Versions-Informationen und Projekte können definieren, dass sie mindestens eine bestimmte Version des Packages benötigen. Lazarus wird dann automatisch die richtige Version laden.

FAQ

F: Muss ich ein Package installieren?

A: Sie müssen ein Package nur dann installieren, wenn es Entwicklungszeit Elemente enthält, wie Komponenten für die IDE Komponentenpalette. Wenn sie solche Elemente nicht benutzen, dann müssen sie auch das Package nicht installieren. Wenn sie ein Package nur in ihrem Projekt verwenden, dann installieren sie es nicht.

F: Ich habe ein Package installiert, aber die IDE findet die Units nicht.

A: Das Installieren eines Packages bedeutet, dass das Package in die IDE integriert wurde, nicht in ihr Projekt. Das sind verschiedene Dinge. Um ein Package in ihrem Projekt zu verwenden, benutzen sie Projekt -> Projektinspektor -> Hinzufügen -> Neue Anforderung. Und deinstallieren sie das Package, falls es keine IDE goodies enthält.

Schnellstart

Um das Packagesystem in Aktion zu sehen und um es zu benutzen, tun sie das folgende:

Erzeugen eines neuen Package:

  • Datei-> Neu... -> Package -> Standard Package
  • Ein Package Editor wird geöffnet
  • Benutzen sie den Save Button oben links.
  • Abhängig von ihrer 'Namensvergabe' Einstellung in den 'Umgebungseinstellungen', wird die IDE sie fragen, die Datei mit kleinen Buchstaben zu speichern. Sagen sie ja.

Glückwunsch: Sie haben gerade ihr erstes Package erstellt!

Hinzufügen einer neuen Komponente:

  • Benutzen sie den Add Button -> Neue Komponente
  • Wählen sie eine Komponente in der Vorfahr-Typ Combobox. Zum Beispiel: TBevel.
  • Klicken sie auf OK
  • Die Datei wird zum Package hinzugefügt und im Editor geöffnet
  • Installieren sie das Package durch Klicken auf den 'install' Button oben im Package Editor.
  • Lazarus will das Package speichern und sie fragen, ob die IDE neu erstellt werden soll. Sagen sie ja.
  • Die Packages werden statisch gelinkt, daher ist ein Neustart der IDE notwendig.
  • Starten sie Lazarus neu und sehen sie ihre neue Komponente in der Komponentenpalette (Zum Beispiel: Ein TBevel1 wird auf der 'Additional' Seite sein).
  • Wenn sie ihre neue Komponente nicht in der Komponentenpalette sehen, ist es höchstwahrscheinlich, dass sie nicht die rekompilierte Version von Lazarus gestartet haben. Sie können sehen wohin Lazarus erstellt unter: Einstellungen -> Umgebungseinstellungen -> Dateien -> Lazarus Verzeichnis. Anstelle Lazarus direkt aufzurufen, können sie auch startlazarus benutzen, das das neuerstellte Lazarus startet, zum Beispiel die Lazarus .exe Datei im ~/.lazarus Verzeichnis, wenn sie keinen Schreibzugriff auf das Verzeichnis haben, in dem Lazarus installiert ist.

Glückwunsch: Sie haben gerade ihr erstes Package installiert mit ihrer ersten Package Komponente.

Die IDE Menüeinträge für Packages:

  • Datei-> Neu... -> Package -> Standard Package

Erzeugt ein neues Package.

  • Projekt -> Projektinspektor
 Hier können sie sehen, welche Packages vom aktuell geöffneten Projekt benötigt werden.
 Sie können neue Abhängigkeiten hinzufügen und nichtgenutzte entfernen.
  • Projekt -> Compilereinstellungen -> Übernehmen
 Hier können sie sehen, welche Compilereinstellungen von welchem Package geerbt sind .

Komponenten ->

 - 'Geladenes Paket öffnen'
   Ein Dialog zeigt alle geöffneten Packages mit ihrem Status.
   
 - 'Paketdatei (.lpk) öffnen'
   Öffnet eine .lpk Datei
 
 - 'Paket der aktuellen Unit öffnen'
   Öffnet die .lpk Datei, die zur Datei im Quelltexteditor gehört
   
 - 'Letztes Paket wieder öffnen'
   Öffnet eine vor kurzem geöffnete Package Datei (lpk Datei).
 - 'Aktuelle Unit zu einem Paket hinzufügen'
   Fügt die Unit im Editor zu einem Package hinzu.
   
 - 'Paketgraph'
   Der Paketgraph zeigt alle geöffneten Packages und ihre Abhängigkeiten.
 - 'Installierte Pakete einrichten'
   Bearbeitet die Liste der in der IDE installierten Packages. Installiert oder deinstalliert verschiedene Packages auf einmal.

Projekt -> Projektinspektor

 Hier können sie alle Packages, die von Projekt verwendet werden, sehen und bearbeiten.

Die Theorie

Jedes Lazarus Package hat eine .lpk Datei. Ein Package wird identifiziert durch seinen Namen und seine Version. Der Name muss mit dem lpk Dateinamen übereinstimmen. Zum Beispiel:

Name: Package1, Version: 1.0, Dateiname: /home/.../package1.lpk.

Hinweis: Um ein Package umzubenennen, benutzen sie 'Speichern unter'.

  • Die IDE erzeugt automatisch die Haupt- Quelldatei (package1.pas). Siehe unten. Die lpk Datei enthält Informationen über die benötigten Packages, die Dateien, die sie benutzt, wie man sie kompiliert, und was benötigt wird, um das Package von anderen Packages/Projekten aus zu benutzen. Das Verzeichnis, wo sich die lpk Datei befindet, wird das "package directory" genannt.
  • Die IDE pflegt eine Liste aller Package Dateien (<config directory>/packagelinks.xml). Jedesmal, wenn ein Package in der IDE geöffnet wird, wird es zu dieser Liste hinzugefügt. Wenn ein Package geöffnet wird, öffnet die IDE automatisch alle benötigten Packages über diese Liste.
  • Es gibt drei Basis Packages: FCL, LCL und SynEdit. Diese sind ein Teil der IDE und daher werden sie automatisch erzeugt, nur mit Leserechten und sie haben keine lpk Datei.
  • Normalerweise hat ein Package ein Quellverzeichnis mit einigen Pascal Units. Und normalerweise wird die lpk Datei auch dort sein. Ein Package hat auch ein Ausgabe Verzeichnis. Voreinstellung ist das Unterverzeichnis 'lib/$(TargetCPU)-$(TargetOS)/' im Package Verzeichnis.
  • Bevor ein Package kompiliert wird, prüft die IDE alle benötigten Packages und wenn sie ein Update benötigen und das auto update flag haben, werden sie zuerst kompiliert. Dann erstellt die IDE die Package Hauptquelldatei. Wenn die lpk Datei package1.lpk war, dann ist die Hauptquelldatei package1.pas. Diese Datei enthält alle Units im uses Abschnitt plus einer 'Register' Prozedur, die im intialization Abschnitt aufgerufen wird.

Zum Beispiel:

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; initialization RegisterPackage('GTKOpenGL', @Register) end.
  • Dann wird der Compiler aufgerufen und das Package wird in das Ausgabe Verzeichnis kompiliert.
  • Nach einer erfolgreichen Kompilierung wird die Statusdatei erstellt. Die Statusdatei wird in das Ausgabe Verzeichnis abgelegt. Sie hat den Namen <packagename>.compiled und enthält die Information, wie das Package kompiliert wurde. Diese Statusdatei wird von der IDE benutzt um zu prüfen, ob ein Update benötigt wird.

Zum Beispiel: gtkopengl.compiled:

<?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>
  • Die IDE öffnet alle benötigten Packages automatisch. Das bedeutet, sie öffnet alle installierten Packages, alle zum Installieren vorgemerkten Packages (auto install), alle Packages mit einem geöffneten Editor, alle Packages, die vom Projekt benötigt werden und alle Packages, die von einem der anderen Packages benötigt werden. Nichtbenötigte Packages werden automatisch entladen, wenn die IDE in den Leerlauf geht.
  • Die IDE öffnet niemals zwei Packages mit dem selben Namen zur selben Zeit. Wenn der Benutzer eine andere Package Datei mit dem selben Namen wie das bereits geöffnete Package öffnet, wird die IDE fragen, ob das alte ersetzt werden soll.
  • Die IDE führt zwei extra Sets von Packages: Die 'installed' Packages und die 'auto install' Packages. Die auto install Packages werden bei der nächsten Kompilierung zur IDE gelinkt. Sie erstellt zwei neue Dateien im config Verzeichnis: staticpackages.inc und idemake.cfg. Dann ruft sie 'make ide OPT=@/path/to/your/config/idemake.cfg' auf um sich selbst zu kompilieren.

Hinweise und Tipps

Bitte fügen sie hier ihre Hinweise, Tipps oder gotchas ein.

  • Um ein Package umzubenennen verwenden sie 'speichern unter...'.
  • Wenn Sie Pfade für units im Package definieren (package - öffnen - Doppelklick auf entsprechenden Package Namen in der Liste : Einstellungen - Bedienung - Units), die automatisch jedem Projekt, das das Package nutzten soll, hinzugefügt werden sollen, dann seien Sie vorsichtig : tragen Sie keine Pfade ein, die früher sind als der Pfad der .lpk Datei (original: don't specify paths that are earlier than the path that the .lpk file lives in). Aufgrund meiner Verzeichnis Anordnung hatte ich genau das getan, und das bereitete mir eine Menge Kopfschmerzen : daraufhin wurden automatisch die falschen Pfade auf das Projekt übertragen, das das Package nutzte.

Beispiel

Ich werde das tiOPF Framework als Beispiel verwenden. Das tiOPF hat die
folgende Verzeichnisstrukur, wegen der Tatsache, dass es kompiliert mit FPC,
Delphi 5-7, D2005 und D2006.

Source                <= full path \Programming\3rdParty\tiOPF\Source
 \Compilers
    \Delphi7          <= Delphi 7 Package Dateien befinden sich hier
    \D2005
    \FPC              <= die tiOPF.lpk befindet sich hier
 \Core                <= core Unit Dateien
 \Options             <= optionale Unit Datei für zusätzliche Features
 \GUI

Using this example, I included in the "Options - Usage - Units"
editbox the following paths:
"$(PkgOutDir);..\..\Core;..\..\Options;..\..\GUI" which will be added
to whatever project uses this package.

'Bold text'Bold text'

Existierende Komponenten zu einem Package hinzufügen

Wenn sie eine Datei, die eine Komponente enthält, zu einem Package hinzufügen wollen, dann können sie folgendes tun:

  • Öffnen sie die Package Datei
  • Klicken sie auf 'Hinzufügen', um ein neues Element zum Package hinzuzufügen.
  • Wählen sie den 'Neue Unit' Tab im erscheinenden Dialog.
  • Wählen sie dann die hinzuzufügende Datei aus.
  • Überprüfen sie die Option 'Besitzt Register-Prozedur', falls die Unit eine Register Prozedur enthält. Wenn die Option deaktiviert ist, werden die Komponenten nicht in der Komponentenpalette angezeigt.
  • Klicken sie auf 'Neue Unit'.
  • Rekompilieren und installieren sie das Package.

Das war alles. Die Komponente(n) sollte jetzt in der Komponentenpalette angezeigt werden.

Die Register Prozedur

Um eine Komponente in der Komponenten Palette anzuzeigen, muss sie in Lazarus registriert werden. Dieses geschieht in der 'Register' Procedure. Diese Procedure muss

  • 1.im Interfaceteil ihrer Unit stehen,
  • 2.einen oder mehrere 'registerComponent calls' ausgeben
  • 3.Eigenschafts- und Komponenteneditoren für die Komponenten installieren.

Es kann eine oder mehrere Register Procedures in einem Package geben: im Package Editor muss man die Units angeben, die eine 'register' Procedure haben, damit Lazarus weiß, welche Procedure es bei der Package Installation aufrufen muss.

Es gibt 2 Wege eine Unit zu kennzeichnen, dass sie eine Register procedure hat :

  • Beim Einfügen der Unit in das Package (siehe 'Einfügen vorhandener Komponenten in ein Package')
  • oder Sie können die Unit auswählen im Package Dialog und die `Register Checkbox` im Detail Panel setzen.

Vergessen Sie nicht das Recompilieren und Installieren des Package nach dem Ändern der Eigenschaften.

Vorstellung der Lazarus Packages

Nachdem bislang über den Umgang mit Packages gesprochen wurde, sollen nun die verfügbaren Packages (kurz) vorgestellt werden.

Zu Lazarus gehörende Packages

cgiLaz

CGILazIDE

CodeTools

DBFLaz

Dieses Package stellt die Komponente TDbf zur Verfügung, mit der ein Zugriff auf dBase und FoxPro Tabellen möglich ist. Die Komponente erscheint auf der 'Data Access' Seite in der Komponentenpalette. Für Details zu TDbf siehe TDbf Tutorial.

demopackagewithhelp

FCL

Die Free Pascal Component Library.

fpcunitconcolerunner

fpcunitide

fpcunittestrunner

gtk2interface

h2paswizard

Dieses Package ermöglicht die Verwendung von C-Bibliotheken durch Anpassung der Header-Dateien. Nähere Informationen sind hier zu finden.

IDEIntf

imagesforlazarus

InterbaseLaz

Das Package stellt 3 Komponenten (TIBDatabase, TIBTransaction, TIBQuery) für den Zugriff auf Interbase Datenbanken bereit. Die Komponenten erscheinen auf der 'Interbase' Seite in der Komponentenpalette.

JPEGForLazarus

Dieses Package erweitert die Komponenten, die für den Umgang mit Bildern zuständig sind, um die Möglichkeit, auch Bilder im JPEG Format verarbeiten zu können.

lazopenglcontext

lazreport

LazReport ist ein Reportgenerator für Lazarus. Zum Funktionieren muss das Package Printer4Lazarus installiert sein.

LCL

Die Lazarus Component Library.

macosfiles

MemDSLaz

popupnotifierlaz

prettyformat

Printer4Lazarus

Dieses Package erweitert Lazarus um Dialoge zum Drucken.

ProjTemplates

RunTimeTypeInfoControls

rx

SDFLaz

semaphorgridlpk

SQLDBLaz

Das vielleicht wichtigste Datenbankpackage. Es stellt Komponenten für den Zugriff auf Firebird, ODBC, Oracle, MySQL und PostgreSQL Datenbanken zur Verfügung.

SynEdit

Dieses Package stellt die Komponenten auf der SynEdit Seite der Komponentenpalette zur Verfügung.

synuni

TAChart

Plotten von Kurven und Daten (TAChart_documentation)

trayiconlaz

TurboPowerIPro

Enthält eine Komponente zur Anzeige von HTML-Code (wird auch von der IDE für die Anzeige der Code-Hints benutzt)

Packages von Drittanbietern

Wem die bei Lazarus enthaltenen Packages nicht ausreichen, der hat natürlich die Möglichkeit, Lazarus mit Packages von Drittanbietern zu erweitern. Einen Überblick über diese Packages bietet auch diese Seite.

fblib

Dieses Package stellt Komponenten für den Zugriff auf Firebird Datenbanken zur Verfügung. Abweichend zu anderen Datenbankkomponenten erfolgt die Anbindung nicht über TDatasource. Der Download ist von der FBLib Webseite möglich.

lazrichview

Dieses Package stellt Komponenten zur Anzeige, Bearbeitung und Ausdruck von Hypertext Dokumenten bereit. Der Download ist von der Sourceforge Seite möglich. Details zum Package finden sie auf dieser Seite.

packpowerpdf

PowerPDF stellt Komponenten zum Erstellen von PDF Dokumenten zur Verfügung. Der Download ist von der Lazarus CCR Sourceforge Seite möglich. Details zum Package finden sie auf dieser Seite.

Mitwirkende und Kommentare

Die Anfänge dieser Seite stammen aus der epikwiki Version.

Siehe auch