Lazarus ist als Entwicklungsumgebung ein Open-Source-Projekt. Es basiert auf dem Compiler Freepascal und unterstützt viele Betriebsysteme (Windows, Linux, OS X, Debian,...). Also kann einmal geschriebener Quellcode für alle diese Betriebssysteme kompiliert werden.
Vorbemerkung
Viele der ehemaligen Apple-II-User werden irgendwann einmal in Kontakt mit Pascal gekommen sein. Schon auf diesem System gab es UCSD-Pascal - ein ausgefeiltes und gut konzipiertes System, dass nur schon "in der Gründerzeit" eigentlich eine Festplatte gebraucht hätte, mit seinen 4 Floppy-Disks aber auf Systemen mit zwei Diskettenlaufwerken gut lief. Danach - auf einer Z80-Karte unter CP/M - haben viele mit dem genialen Turbo-Pascal gearbeitet, welches dann auch unter MSDOS verfügbar war. Turbo-Pascal war auch sicherlich für viele von uns die Programmiersprache, mit der sie in Schule oder Universität programmierten.
Dann kam Windows und Turbo-Pascal mutierte langsam zu Delphi, einer ziemlich genialen Entwicklungsumgebung, die eine große Fan-Gemeinde fand. (Anders Hejlsberg hieß übrigens der Stammentwickler von Turbo-Pascal (und Delphi) - ca. 1996 wechselte er zu Microsoft und entwickelte dort unter anderem die Microsoft Foundation Class (mit), so dass die visuellen Elemente von .NET seine deutliche Handschrift tragen.) Unterstützt wurde die Beliebtheit von Delphi durch die Tatsache, dass die damalige Inhaber-Firma Borland von jeder Delphi-Version eine freie Variante (meist als "PE" = "Personal Edition" gekennzeichnet) auf den Markt brachte. Mit "Kylix" unternahm sie sogar den Versuch, eine sourcecode-kompatible Variante für Linux auf den Markt zu bringen - leider wurde das Produkt unterdessen eingestellt. Irgendwann firmierte die Compiler-Abteilung von Borland um (unterdessen heißt die Lizenz-Inhaberin Embarcadero) und leider gibt es zur Zeit keine freie Delphi-Variante mehr (obwohl man versprochen hat, wieder eine auf den Markt zu bringen).
Das war für mich der Grund, mir einmal Lazarus näher anzuschauen.
Das System Lazarus
Lazarus selbst ist als Entwicklungsumgebung ein Open Source Projekt (lazarus.freepascal.org), aktuell (August 2010) ist die V0.9.28 (vom Oktober '09). Es basiert auf dem Compiler Freepascal 2.4.0 (vom Januar '10). Wichtig ist, dass es viele Betriebssysteme unterstützt (Windows 32/64; Linux 32/64; OS X PP/i386; Debian mit AMD64,...). Dies bedeutet, dass einmal geschriebener Quellcode im Idealfall (wenn alle benutzten Module auch in den anderen Varianten vorliegen) ohne Änderung für alle diese Betriebssysteme kompiliert werden kann. Die Dokumentation von Lazarus findet größtenteils über ein Wiki statt. Man findet dies zum Beispiel unter dem Aspekt Components and Code-Examples unter: http://wiki.lazarus.freepascal.org/Components_and_Code_examples. Lazarus (zumindest seine Komponentenbibliothek) steht unter der LGPL (der GNU Lesser General Public License), welche bestimmte Anforderung an die Weitergabe von Software formuliert, die mit Produkten erstellt wurde, die unter dieser Lizenz laufen.
Die Entwicklungsumgebung
Nach dem Start von Lazarus präsentiert sich das System uns so:
Zentral im rechten Bereich sehen wir ein "Formular", die Basis des selbst erstellten Programms, die hier schon eine selbst hinzu gefügte "Komponente" enthält: einen Knopf. Im oberen Bereich finden wir die Komponentenbibliotheken, die - thematisch sortiert - die einzelnen Module zur Verfügung stellen. Der linke Bereich zeigt den Objektinspektor, welcher es erlaubt, die Eigenschaften und Methoden des gerade angewählten Objekts zu modifizieren. Um zwischen der Formular-Ansicht (dem Design) und dem eigentlichen Programm (Source-Code) umzuschalten, benutzt man die Taste F12. Hat man ein Programm - auch nur teilweise - fertig gestellt, übersetzt und startet man es durch einen Klick auf das kleine grüne Dreieck in der Menüleiste. Das Programmfenster öffnet sich über der Entwicklungsumgebung, wie das kleine Beispiel links zeigt.
Ein erstes Beispiel
Das abgebildete Programm ist ein kleines Beispiel unter der Nutzung einfacher Lazarus-Komponenten und Pascal-Befehlen. In das standardmäßig erscheinende leere Formular holen wir uns (per Doppelklick in dem Standard-Tab der Komponentenleiste) ein Memofeld sowie einen Knopf. In den Eigenschaften des Memofeldes (dieses Anklicken, dann holt der Inspector seine Eigenschaften in den Vordergrund) gibt es "Lines" - ein Klick auf den kleinen Knopf rechts daneben öffnet das Memo, und lässt uns die vorgegebene Beschriftung löschen und das Ganze mit OK bestätigen und schließen. Wenn wir den Knopf anklicken lässt sich seine Beschriftung über das Caption-Feld des Inspectors ändern.
Wir wollen nun ein kleines Programm entwickeln, welches Zufallszahlen in ein Array schreibt und diese dann in dem Memo ausgibt. Für die Datenstruktur ergänzen wir den VAR-Teil oben im Programm wie folgt:
var
Form1: TForm1;
zahlen : ARRAY[1..100] OF INTEGER;
Nun sollen drei Prozeduren angelegt werden:
1) Beim Start des Programms soll der Zufallsgenerator auf einen zufälligen Start gesetzt werden. Hierzu eignet sich die Methode FormCreate des Formulars. Da sie dessen Standardmethode ist, legen wir sie an und öffnen sie gleichzeitig durch einen Doppelklick auf einen sichtbaren Bereich des Formulars. Dann ergänzen wir sie wie folgt um einen Befehl:
procedure TForm1.FormCreate(Sender: TObject);
begin
RANDOMIZE;
end;
Wie wir sehen, schreibt uns Lazarus sehr komfortabel den Prozedurrumpf vor - wir müssen ihn nur ergänzen.
2) Durch Druck auf den Knopf sollen 100 Zufallszahlen im Bereich von 0-999 erzeugt und in das Array geschrieben werden. Die Standardmethode des Knopfes erstellen wir wieder durch einen Doppelklick auf denselben und ergänzen wie folgt:
procedure TForm1.Button1Click(Sender: TObject);
VAR i : INTEGER;
begin
FOR i := 1 TO 100 DO BEGIN
zahlen[i] := RANDOM(1000);
3) Nun sollen die Zahlen aber auch noch angezeigt werden, deswegen geht der Code wie folgt weiter:
memo1.lines.add(IntToStr(zahlen[i]));
end;
Ein Druck auf den kleinen grünen Pfeil im Menübereich oben compiliert und startet unser erstes Programm. Ein Druck auf den Knopf startet dann unsere Routine.
Um das Projekt zu speichern, empfehle ich, grundsätzlich jedem Projekt einen eigenen Ordner zu geben, denn es sammeln sich da im Laufe der Entwicklung schon einige Dateien an. Dieses Projekt können sich AUGE-Mitglieder in der Windows-Version unter diesem Link herunterladen.
Umgang mit Datenbanken
Es ist ein großer Vorteil von Entwicklungsumgebungen, die mit Komponenten arbeiten und hier erweiterbar sind, dass viele Benutzer mal die eine oder andere Komponente dazu beisteuern! So ist es auch bei Lazarus, und Datenbanken sind hier auf verschiedene Arten und Weisen ansprechbar, die im allgemeinen aber immer über eine Art "Datenpipeline" realisiert wird. Nur an einer Stelle dieser Pipeline spielt es eine Rolle, welches Datenbankformat eigentlich verwendet werden soll - die anderen Komponenten bleiben gleich. Sehr entwicklerfreundlich!
Als Beispiel zeige ich hier den Zugriff auf eine DBF-Datei (dBase - Sie erinnern sich?). Die zitierte Datenpipeline besteht aus einem DBGrid (zum Anzeigen der Daten in Tabellenform), einem DBNavigator (zum sich Bewegen in und dem Verändern der Daten), einer DataSource (welche die - logische - Verbindung zwischen den beiden schon zitierten Komponenten und der Datenbank bildet) und einer DBF-Komponente selbst (welche die Dateien lesen lann und somit die konkrete Datenbank bereit stellt). Als erstes holt man sich diese Komponenten aus den entsprechenden beiden Komponentenleisten in das Formular.
Man findet sie zum Teil in dem Tab "Data-Access" und die restlichen unter "Data-Control". Wenn man mit der Maus über die Symbole fährt, erscheint ein kleines "Schild" mit ihrem Namen. Ein Doppelklick mit der linken Maustaste darauf überträgt sie in das Formular.
Nun muss im Inspektor die Zuordnung mit Hilfe der Werte bestimmter Eigenschaften eingestellt werden: Das DBGrid und der DBNavigator haben als Quelle die Datasource. Die Datasource hat als Dataset die DBF-Komponente. Die DBF beinhaltet in ihrem Attribut FilePath den Pfad auf das Verzeichnis einer dbf-Datei mit der Datenbank und unter TableName deren Namen..
Um zur Laufzeit die Verbindung mit der Datenbank aufzubauen, muss sie "aktiviert" werden. Diese Zeilen erledigen das auf Knopfdruck:
dbf1.FilePath:='daten/';
dbf1.active:=true;
Dieses kleine Beispielprogramm - mit Demo-Daten - zeigt Ihnen nochmals die Vorgehensweise.
Wenn sie damit auf andere Datenbanken zugreifen wollten, müssten Sie die dbf-Komponente durch eine andere ersetzen. Unter Windows bieten sich in der Standardinstallation noch ein "MemDataSet", eine "FixedFormat"-Datenbank sowie Sdf (Simple-Document-Format) an. Externe Komponenten gibt es aber auch für: FoxPro, Paradox, (SQlite,) MySQL, Interbase, Oracle, sogar - plattformabhängig - ODBC und noch andere mehr. Viele Hinweise dazu finden Sie auf dieser Webseite.
Einfache visuelle Standardkontrollelemente, leichter Datenbankzugriff - davon konnte man vor Jahren (und erst Recht vor Jahrzehnten) nur träumen! Warum soll man nicht wieder einmal etwas programmieren? Das meiste hat natürlich irgendwann schon mal irgend jemand umgesetzt - aber ein paar kleine Tools kann man sich immer noch selbst erstellen.
Import von Delphi-Projekten
Wenn Lazarus schon so Delphi-ähnlich ist - kann es dann nicht auch gleich ein Delphi-Programm ausführen? Nun, direkt kann es das nicht (jedenfalls nicht mit jeder Delphi-Version), aber ein Import-Modul gibt es! Wie man rechts sieht, beherbergt das Werkzeuge-Menü einen Punkt: "Delphi- in Lazarus-Projekt umwandeln".
Unter diesem Link finden Sie ein Delphi-2005-Projekt zum Üben (das Programm fügt neue Elemente sortiert in eine verzeigerte lineare Liste ein, aber das ist eigentlich gleichgültig). Wenn Sie importiert haben, bemängelt Lazarus Einiges im Quellcode - bei diesem Beispiel reicht es aus, schlichtweg die entsprechenden Änderungszeilen für Attribute, die Lazarus nicht versteht, zu löschen. Abspeichern, compilieren und - voila - es geht!
Viel Spaß beim Programmieren!
Eine Präsentation zu Lazarus anlässlich der User-Konferenz 2010 finden Sie hier.
Kommentare
Gute alte Zeit
Pascal arbeitet natürlich auch objektorientiert!
M5543, Schriftführer und Leiter der RG600 im AUGE e.V.
Pascal für den Einstieg
Lazarus im Landesabitur Hessen
M5543, Schriftführer und Leiter der RG600 im AUGE e.V.