Programmierkurs: Delphi: Einstieg

Aus Wikibooks
Wechseln zu: Navigation, Suche

Einstieg[Bearbeiten]

Was ist Delphi[Bearbeiten]

Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache Object Pascal. Borland benannte Object Pascal jedoch 2003 in Delphi-Language um, mit der Begründung, dass sich bereits soviel in der Sprache verändert habe, dass man es nicht mehr mit Pascal vergleichen könne. RAD-Umgebungen für Object Pascal bzw. Delphi existieren nur wenige. Der bekannteste ist der Delphi-Compiler von Borland. Für Linux gibt es Kylix (Anmerkung: Kylix wurde eingestellt), das ebenfalls von Borland stammt und mit Delphi (ggf. mit wenigen Code-Änderungen) kompatibel ist. Darüber hinaus gibt es das freie Projekt Lazarus, das versucht eine ähnliche Entwicklungsumgebung bereitzustellen. Dieses nutzt FreePascal für die Kompilierung und ist für verschiedene Betriebssysteme erhältlich.

Warum Delphi?[Bearbeiten]

Es gibt viele Gründe, Delphi zu benutzen. Es gibt aber wahrscheinlich auch genauso viele dagegen. Es ist also mehr Geschmacksache, ob man Delphi lernen will oder nicht. Wenn man allerdings Gründe für Delphi sucht, so fällt sicher zuerst auf, dass Delphi einfach zu erlernen ist, vielleicht nicht einfacher als Basic aber doch viel einfacher als C/C++. Für professionelle Programmierer ist es sicher auch wichtig zu wissen, dass die Entwicklung von eigenen Komponenten unter Delphi einfach zu handhaben ist. Durch die große Delphi-Community mangelt es auch nicht an Funktionen und Komponenten.

Erstellt man größere Projekte mit Borlands Delphi Compiler, so ist die Geschwindigkeit beim Kompilieren sicher ein entscheidender Vorteil. Auch die einfache Modularisierung, durch Units, Functions und Procedures ist sicherlich ein Vorteil der Sprache gegenüber primitiveren Sprachen.

Mit Delphi lässt sich zudem fast alles entwickeln, abgesehen von Systemtreibern. Dennoch ist es auch teilweise möglich, sehr hardwarenahe Programme zu entwickeln.

Delphi-Programme laufen in aller Regel auf jedem Windows-Betriebssystem ohne Installation zusätzlicher Software und auch mit sehr alten Delphi-Versionen erstellte Programme funktionieren häufig problemlos auf den neueren Betriebssystemen. Dafür haben die mit Standardmitteln erstellten Programme eine gewisse „Grundgröße“ von einigen hundert Kilobyte.

Die Oberfläche[Bearbeiten]

Ältere Delphi-Versionen[Bearbeiten]

Beim ersten Start von Delphi erscheint ein in mehrere Bereiche unterteiltes Fenster. Oben sieht man die Menüleiste, links befindet sich der Objektinspektor und in der Mitte ist eine so genannte Form. Im Hintergrund befindet sich ein Texteditor. Aus der Menüleiste kann man verschiedene Aktionen, wie Speichern, Laden, Optionen, und anderes ausführen. Unten rechts in der Menüleiste (bzw. bei neueren Delphi-Versionen am rechten Bildschirmrand) kann man die verschiedenen Komponenten auswählen, die dann auf der Form platziert werden. Im Objektinspektor kann man die Eigenschaften und Funktionen der Komponenten ändern. Der Texteditor dient dazu, den Quellcode des Programms einzugeben.

Neuere Delphi-Versionen[Bearbeiten]

Neuere Versionen haben alles in einem Fenster (standardmäßig). Vielen erschwert dies das Arbeiten. Deshalb hat man oben in der Toolbar die Möglichkeit, in einem Drop-Down-Menü (ComboBox) das klassische Layout einzustellen, das ähnlich dem der älteren Versionen ist (abgesehen davon, dass der Objektinspektor noch nach Kategorien unterteilt ist und dass die Komponentenpalette (GUI-Anwendungen) vertikal - nicht horizontal - sortiert ist.

Das erste Programm (Hello world)[Bearbeiten]

Wenn man nun mit dem Mauszeiger auf die Komponente Label (Menükarte „Standard“) und dann irgendwo auf die Form klickt, dann erscheint die Schrift „Label1“. Das so erzeugte Label kann man nun überall auf der Form verschieben. Um die Schrift zu ändern, wählt man das Label an und sucht im Objektinspektor die Eigenschaft „Caption“ und ändert den Wert von „Label1“ in „Hello world!“. Wenn man nun auf den grünen Pfeil in der Menüleiste klickt (oder F9 drückt), kompiliert Delphi die Anwendung, d.h. Delphi erstellt eine ausführbare Datei und startet diese. Nun sieht man ein Fenster mit der Schrift „Hello world!“. Das ist unsere erste Anwendung in Delphi! War doch gar nicht so schwer, oder?

Erweitertes Programm[Bearbeiten]

Nachdem wir unser „Hello world“-Programm mit Datei / Alles speichern... gespeichert haben, erstellen wir mit Datei / Neu / Anwendung eine neue GUI-Anwendung. Auf die neue Form setzt man nun einen Button und ein Label (beides Registerkarte Standard). Wenn man nun doppelt auf den Button klickt, öffnet sich das Code-Fenster. Hier geben Sie folgendes ein:

Label1.Caption := 'Hello world';

Wenn man nun das Programm mit F9 startet und dann auf den Button klickt sieht man, dass sich das Label verändert und nun „Hello world“ anzeigt. Damit haben wir eine Möglichkeit, Labels (und eigentlich alles) während der Laufzeit zu verändern.

Beenden Sie nun die Anwendung und löschen Sie den eben getippten Text wieder. Nun bewegen Sie den Cursor vor das begin und geben folgendes ein:

var
  x, y, Ergebnis: Integer;

Wenn Sie wieder unter dem begin sind, dann geben Sie

x := 40;
y := 40;
Ergebnis := x + y;
Label1.Caption := IntToStr(Ergebnis);

ein. Nun kompilieren Sie mit F9 (oder Start / Start) und sehen sich das Ergebnis an. Sie sehen, wenn man auf den Button klickt, verändert sich das Label und zeigt nun das Ergebnis der Addition an. Dies kann man natürlich auch mit anderen Zahlen oder Operationen durchführen. Es sind Zahlen von -2147483648 bis 2147483647 und die Operatoren +, -, * , div (Ganzzahlendivision) und mod (Divisionsrest) möglich.

Nun fassen wir mal zusammen, was Sie bis jetzt gelernt haben könnten bzw. jetzt lernen:

  • In Delphi fungiert das „:=“ als so genannter Zuweisungsoperator, d.h. die linke Seite enthält nach der Operation den Inhalt der rechten Seite. z.B.:
x := 40;
x := y;
Label1.Caption := 'Text';
  • Es gibt unter Delphi Variablen, die vorher in einem speziellen var-Abschnitt definiert werden, z.B.: x: Integer;, so kann x Zahlen von -2147483648 bis 2147483647 aufnehmen oder x, y: Integer; definiert x und y als Integer (spart Schreibarbeit!)

Die Syntax[Bearbeiten]

(Fast) jeder Programmcode-Befehl wird mit einem Semikolon/Strichpunkt (;) abgeschlossen. Ausnahmen davon sind ein nachfolgendes end (nicht nötig), else (nicht erlaubt) oder until (nicht nötig).

ShowMessage('Hallo Welt');

Strings werden von einfachen Anführungszeichen eingeschlossen

var
  s: string;
...
  s := 'ich bin ein String';

Ebenso wie einzelne Zeichen (Char)

var
  c: Char;
...
  c := 'A';


Die Strukturen von Delphi[Bearbeiten]

Delphi verfügt über die aus Pascal bekannten Kontrollstrukturen zur Ablaufsteuerung: Reihenfolge, Auswahl und Wiederholung. Als Auswahlkonzepte stehen zur Verfügung: ein-, zwei- und mehrseitige Auswahl (Fallunterscheidung). Als Wiederholstrukturen verfügt Delphi über abweisende, nicht abweisende Schleifen und Zählschleifen. Die Syntax der Strukturen stellt sich wie folgt dar:

Reihenfolge

 <Anweisung>;
 <Anweisung>;
 <Anweisung>;
 <...>

Einseitige Auswahl

 if <Bedingung> then <Anweisung>;

Zweiseitige Auswahl

 if <Bedingung> then
   <Anweisung> 
 else
   <Anweisung>;

Fallunterscheidung

 case <Fall> of
   <wert1> : <Anweisung>;
   <wert2> : <Anweisung>;
   <.....> : <Anweisung>
 else
   <Anweisung>
 end; // von case

Abweisende Schleife

 while <Wiederhol-Bedingung> do
   <Anweisung>;

Nicht abweisende Schleife

 repeat
   <Anweisung>;
   <Anweisung>;
   ...
 until <Abbruch-Bedingung>;

Zählschleife

 for <Laufvariable> := <Startwert> to <Endwert> do
   <Anweisung>;

Strukturen können ineinander verschachtelt sein: Die Auswahl kann eine Reihenfolge enthalten, in einer Wiederholung kann eine Auswahl enthalten sein oder eine Auswahl kann auch eine Wiederholung enthalten sein. Enthält die Struktur <Anweisung> mehr als eine Anweisung, so sind Blöcke mittels begin und end zu bilden. Ausnahme davon ist die Repeat-Schleife: Hier wird zwischen repeat und until automatisch ein Block gebildet.

Programmbeispiel mit allen Strukturen

 program example001;
 {$APPTYPE CONSOLE}
 uses
   SysUtils;
 var
   i      : Integer;
   Zahl   : Real;
   Antwort: Char;
 begin
   WriteLn('Programmbeispiel Kontrollstrukturen');
   WriteLn;
   repeat                  // nicht abweisende Schleife
     Write('Bitte geben Sie eine Zahl ein: ');
     ReadLn(Zahl);
     if Zahl <> 0 then     // einseitige Auswahl
       Zahl := 1 / Zahl;
     for i := 1 to 10 do   // Zählschleife
       Zahl := Zahl * 2;
     while Zahl > 1 do     // abweisende Schleife
       Zahl := Zahl / 2;
     i := Round(Zahl) * 100;
     case i of             // Fallunterscheidung
       1: Zahl := Zahl * 2;
       2: Zahl := Zahl * 4;
       4: Zahl := Zahl * 8
     else
       Zahl := Zahl * 10
     end;
     if Zahl <> 0 then     // zweiseitige Auswahl
       WriteLn(Format('Das Ergebnis lautet %.2f', [Zahl]))
     else
       Writeln('Leider ergibt sich der Wert von 0.');
     Write('Noch eine Berechnung (J/N)? ');
     ReadLn(Antwort)
   until UpCase(Antwort) = 'N'
 end.

Prozeduren und Funktionen[Bearbeiten]

Grundsätzlich wird zwischen Prozeduren und Funktionen unterschieden. Dabei liefert eine Funktion immer einen Rückgabewert zurück, hingegen eine Prozedur nicht.

Deklaration[Bearbeiten]

Der eigentliche Code einer Prozedur oder Funktion (in OOP auch als Methode bezeichnet) beginnt immer nach dem begin und endet mit end;

procedure TestMethode;
begin
  ShowMessage('TestMethode!');
end;

Die folgende Funktion liefert beispielsweise einen String zurück.

function TestMethode: string;
begin
  Result := 'ich bin der Rückgabewert';
end;

Parameter können wie folgt verwendet werden:

procedure TestMitParameter1(Parameter1: string);

Mehrere Parameter werden mit „;“ getrennt.

procedure TestMitParameter2(Parameter1: string; Parameter2: Integer);

Mehrere Parameter vom gleichen Typ können auch mit „,“ getrennt werden:

procedure TestMitParameter3(Parameter1, Parameter2: string);

Aufruf[Bearbeiten]

Eine Methode - egal, ob Prozedur oder Funktion - wird prinzipiell nach folgendem Muster aufgerufen:

Methode(Parameter1, Parameter2, Parameter3, Parameter_n);

Es fällt auf, dass Parameter - im Gegensatz zur Deklatation - durch ein Komma, nicht durch ein Semikolon, getrennt werden. Bei Funktionen kann das Resultat (Result) verwendet werden, muss aber nicht. Falls nicht, geschieht das wie bei der Prozedur, falls doch, wird es wie folgt erweitert:

Variable := Funktion(Parameter1, Parameter2, Parameter3, Parameter_n);

Parameter, die bei der Deklaration in eckige Klammern geschrieben wurden, werden entweder ignoriert oder zugewiesen, jedoch nicht in eckige Klammern geschrieben. Delphi erkennt an der Anzahl der Parameter, ob diese Parameter verwendet wurden.


Arrow left.png Pascal: Exceptions Inhaltsverzeichnis Datentypen Arrow right.png