Joachim Mohr   Mathematik Musik Delphi
Delphi

Einführung in Delphi

Delphi


Dieser Einführungskurs ist gedacht für SchülerInnen ab der Klasse 8.

Motivation: Wozu überhaupt programmieren lernen?

Braucht man das später wirklich? Viele bedienen doch den Computer - beruflich und privat- ohne dass sie programmieren können?

Aber es ist eine gewaltiger Unterschied, ob man einen Computer bedient oder beherrscht:

"Bedienen" des Computers ist schnell gelernt, weil es von "Dienen" kommt. Wie oft ärgert man sich über den Computer, weil er es anders machen zu müssen glaubt, als dem Bediener vorschwebt. Man muss die Bedienungsanleitung genau kennen, um im richtigen Augenblick einen Mausklick hier, einen anderen Mausklick dort und so weiter zu machen. Und wenn nichts mehr geht, wird einem schon die Hotline weiterhelfen. Die kennt schließlich schon die gröbsten Programmierfehler und wie man ihnen ausweicht.

Ist es nicht besser, diese Technik zu beherrschen als ihr nur zu dienen?

Mit Hilfe des Computers wollen wir ja unsere Arbeit erleichtern und nicht erschweren.

Und dazu ist ein Grundverständnis von Programmabläufen unentbehrlich.

Man muss wissen: Kurz: Wie denke ich algorithmisch?

Wenn Du etwas vom Programmieren verstehst, weißt Du viel besser, was Du von einem Programm verlangen kannst und was nicht.

Für viele ist Programmieren unterhaltsame und kreativ. Es kann ungeheuren Spaß machen!

1. Stunde: Das erste Programm "Hallo Welt"

Lernziele: Delphi ist ein sogenanntes schnelles Entwicklerwerkzeug (Rapid Application Development Tool). Das Schreiben von Quelltext wird drastisch reduziert, da Delphi vieles in sogenannten Komponenten vorprogrammiert hat und auch noch Teile Deines Quelltextes selbst schreibst. Du brauchst zunächst noch gar nichts von der sogenannten "objektorientierter Programmierung" verstehen. (Du lernst sie aber schnell anzuwenden!).

Dazu musst Du aber zwei Dinge strikt beachten.
  1. Jedes Programm erzeugt mehrere Dateien, die in Wechselwirkungen miteiander stehen. Deshalb: Speichere jedes Programm in einem eigenen Ordner ab!
  2. Was Delphi schreibt, darfst Du nicht schreiben und löschen!
Nun kannst Du mit dem ersten Beispiel anfangen:
Beispiel "Hallo Welt":
   Starte in Delphi eine Neue Anwendung (Menu Datei|Neu).
   Klicke in der Komponentenleiste auf einen Button und setze ihn
   aufs Formular und klicke im Objektinspektor auf das
   Ereignis OnClick.
   Delphi schreibt folgenden Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
  Zur Erinnerung:
  Merke: Was Delphi schreibt, darf nicht geändert oder
         gelöscht werden! Du darfst nur vor begin die
         Variablen deklarieren (siehe spätere Programme)
         und zwischen begin und end Deine Anweisungen.
  Ergänze nun die Prozedur folgendermaßen:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hallo Welt'); //Einzige Anweisung
end;
Hinweis:
Kommentare kann man nach // schreiben, zwischen { und } oder zwischen (* und *).
Kommentare überliest der Compiler und werden nur zur Programmerklärung verwendet.
Gewöhne Dir gleich das richtige Abspeichern an!
Speichere mit Menü Datei|Projekt speichern unter... und
Datei|speichern unter ...
in einem Eigenen Ordner " HalloWelt" ab.
Wichtig: Ein eigener Ordner für jedes Programm!
Zwei Speicherbefehle! Einen für die "unit1" und einen für das "project1"


Delphi speichert zu jedem Projekt mehrere Dateien ab, nämlich . RES (Ressourcendatei) . DPR (Projektdatei) . DFM (graphische Formulardatei) werden alle von Delphi verwaltet und . PAS (Unit Quelltext, nur in diesem schreibt der Programmierer)

Jetzt Programm starten:

Der Compiler erzeugt Unit-Object-Zwischencode . DCU und die eigentliche ausführbare Datei . EXE (nur die erhält der Kunde).
Hinweis:
Wenn Du Dein Programm auf Diskette schreibst, kopiere nur die . RES -, die . DPR -, die . DFM - und die . PAS - Dateien. (die . DCU - und die . EXE - erfordern ca. 10 mal so viel Speicherplatz)
Du erkennst hier:
Die Programmentwicklung in Delphi verläuft in drei Etappen:
1. Etappe:
Bedieneroberfläche gestalten. Hier: Das Objekt button1, d.h. eine Instanz von Tbutton, platzieren
2. Etappe:
Objekt eigenschaften zuweisen. Hier: Im Objektinspekor button1 zum Beispiel die caption OK geben. Denkbar ist auch die Schrift ( Font) zu vergrößern.
3. Etappe:
Ereignisbehandlung schreiben. Hier ShowMessage(..). Zwischen Groß- und Kleinschreibung wird nicht unterschieden. Du kannst auch showmessage schreiben.


Das von Borland/Inprise entwickelte Delphi ist eine objektorientierte Nachfolgesprache von Pascal , einer von dem Zürcher Professor Niklaus Wirth entwickelte klar konzipierte und streng strukturierte Programmiersprache, benannt nach dem französischen Philosophen und Mathematiker Blaise Pascal (1623-1662), der um 1640 (vor seiner mystischen Erleuchtung) eine mechanische Rechenmaschine entwickelt hatte.

Zusatzaufgabe: Setzte weitere Buttons auf Dein Formular und schreibe Ereignisroutinen dazu. Zum Beispiel folgende Befehle:

2. Stunde: Auf Canvas (=Zeichenfläche von Form1) zeichnen.

Lernziele: Beispiel: Linien zeichnen lassen:

Plaziere von der Komponentenleiste "Zusätzlich" ein "imgage1" auf der Form und weise ihr im Objektinspektor die Ausrichtung ("align") "alclient" zu.

Setzte nun in die Mitte des Formulars ein "Shape1" (ebefalls bei "Zusätzlich") und weise ihm im Objektinspektor folgende Eigenschaften zu:
  die Farbe (Color) rot,
  die Höhe (height) 10,
  die Breite (width) 10 und
  das Aussehen (shape) "Kreis" (ctcircle).
Die folgenden Zeichenoperationen beziehen sich auf folgendes Koordinatensystem:
Pixelkoordinaten
Setze dann mehrere "Buttons" in die erste Reihe auf das Formular und schreibe ein Zeichenprogramm nach folgendem Muster:
procedure TForm1.Button1Click(Sender: TObject);
begin
   image1.canvas.MoveTo(shape1.Left,shape1.Top);
  //Der Zeichenstift wird zum Spape1 bewegt (ohne zu Zeichnen)
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  shape1.Left := shape1.Left + 10;
  image1.canvas.LineTo(shape1.Left,shape1.Top);
  //Der Zeichenstift zeichnet eine Linie ab der alten Posituib
end;
Nun bewegt sich eine Figur nach recht und zeichnet eine Linie. Überlege nun, wie Du die Figur nach links, nach oben und nach unten bewegen kannst.

Zusatzaufgabe: Zeichne damit ein Haus (überlege vorher, wie man schräge Linien zeichnen kann).

Spielerei: Platziere wie oben ein Image image1 und ein Shape shape1 auf das Formular und zusätzlich vom Komponentenreiter "Sytem" eine Timer timer1.

Schreibe in das OnCreateEreignis von Form1 und in das OnTimerEreignis von timer1 die folgede Prozeduren.
procedure TForm1.FormCreate(Sender: TObject);
begin
  form1.width := 800;  //Wird unten gebraucht
  form1.height := 600; //Wird unten gebraucht
  //("Globale Konstanten" werden später eingeführt)
  randomize;
  timer1.interval := 10;
  image1.canvas.MoveTo(shape1.Left,shape1.Top);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
  const d = 50;
  var r: integer;
begin
  r := random(100); //Zufallszahl r = 0; 1; 2; ... oder 99
  if r < 25 then Begin
    shape1.Left := shape1.Left + d;
    image1.canvas.LineTo(shape1.Left,shape1.Top)
  End else if r < 50 then Begin
    shape1.Left := shape1.Left - d;
    image1.canvas.LineTo(shape1.Left,shape1.Top);
  End else if r < 75 then Begin
    shape1.top := shape1.top - d;
    image1.canvas.LineTo(shape1.Left,shape1.Top);
  End else Begin
    shape1.top := shape1.top + d;
    image1.canvas.LineTo(shape1.Left,shape1.Top);
  End;
  if shape1.top < 0 then shape1.top := 0;
  if shape1.top > 600 then shape1.top := 600;
  if shape1.Left < 0 then shape1.left := 0;
  if shape1.Left > 800 then shape1.Left := 800;
end;

3. Stunde: Variablen Werte zuweisen:

Dazu:
Wertezuweisung "a : =..."
+ beim Typ string
Die Pascal-Funktionen: showmessage, IntToStr und floatToStr
Schleifen
Mit Hilfe der Variablen werden Werte im Computer gespeichert.
   Variablentypen:
   integer   ganze Zahlen Z={...-3, -2, -1, 0, 1, 2, 3,...}
   real      reelle Zahlen. Genauer: Gleitkommazahlen (floating point numbers)
   strings   Zeichenketten (der Form 'xyz')
   boolean   Wahrheitswerte (true und false)
Überlege und überprüfe mit dem Computer, welche Werte stehen in den folgenden Programmen in den für die Variablen reservierten Speicherbereichen? Schreibe dies Zeile für Zeile auf!
Übung: Protokolliere die Variablenbelegung!
   a) Füge nach jedem Befehl ein:
        showmessage('a=' + a);
        (Ersetzte gegebenenfalls passend a durch b und c!)
procedure TForm1.Button1Click(Sender: TObject);
  var a, b, c:string;
begin
  a := 'Hallo';
  b := 'Welt';
  c := a + ' ' +b;
end;

   b) Füge nach jedem Befehl ein!
      showmessage('a=' + IntToStr(a) + ' b='+IntToStr(b)+
                  ' c='+IntToStr(c));
procedure TForm1.Button1Click(Sender: TObject);
  var a, b, c: Integer;
begin
  a := 5; b := 7; c := 9;
  a:=b; b:=c; c:=a;
  a:=a+1; b:=b-1; c:=c-1;
end;
   c) Füge nach jedem Befehl ein!
      showmessage('a='+floatToStr(a)+' b='+floatToStr(b));
      Ersetzte gegebenenfalls passend a und b durch c und d!
procedure TForm1.Button1Click(Sender: TObject);
  var a,b,c,d:real;
begin
  a:=1+3/10; b:=-3/10;
  a:=a+1/10; b:=b-1/10;
  c:=a+b; d:=1-c;
end;
  d) Füge nach jedem Befehl ein: showmessage(...)
procedure TForm1.Button1Click(Sender: TObject);
    var a,b,c:integer;
begin
  a:=-7; b:=11; c:=13;
  a:=a+6; b:=b-12; c:=c-11;
  a:=a+b; b:=b+c; c:=a+b;
  a:=a+b+c; b:=a+b+c; c:=a+b+c;
end.
  e) Was berechnet folgendes Programm?
    (Schreibe keine Zahl sondern einen Rechenausdruck!)
procedure TForm1.Button1Click(Sender: TObject);
   var s: real;
begin
  s := 0;
  s := s + 1;
  s := s + 2;
  s := s + 3;
  s := s + 4;
  s := s + 5;
  s := s + 6;
  showmessage(FloatToStr(s));
end;
  f) Das Programm e) kann abgekürzt werden zu
procedure TForm1.Button1Click(Sender: TObject);
   var s: real;
       k: integer;
begin
  s := 0;
  for k := 1 to 6 do s := s + k;
  showmessage(FloatToStr(s));
end;
Schreibe nun ein Programm, das folgendes berechnet:
(I)      1 + 2 + 3 + 4 + ... + 100  oder
(II)     1 + 2 + 3 + 4 + ... + 1000 oder
(III)    1 + 1/2 + 1/3 + ... + 1/10000
Die Lösung ist (I) 5050 (II) 500500 und (III) 9,7876