is-Logo Einführung in Grafikprogrammierung
Uebung 2 - Fachklassen benutzen

S. Spolwig


[Home | Unterrichtssequenzen]
[Startseite]

In dieser Übung lernen wir, wie Objekte erzeugt und manipuliert werden. Sie werden von einer Klasse abgeleitet und haben dadurch alle Attribute und Methoden wie in ihrer Klasse beschrieben Man spricht dann von Exemplaren oder Instanzen der Klasse. Die Klasse selbst ist also nur die Beschreibung, die Exemplare (die eigentlichen Objekte) aber leben.


A. Problemanalyse und Anforderungsdefinition

Es soll ein Programm entwickelt werden, das ein Bild mit grafischen Figuren darstellt. Das Bild enthält ein Zeichenblatt, auf dem die Figuren (Rechtecke, Kreise, Linien u.a.) dargestellt werden.

Formular

Das noch leere Entwurfsformular mit der Image-Komponente, die das Zeichenblatt enthält

Die Programmsteuerung zum Anzeigen der Figuren erfolgt mit Buttons (Ende, Rechteck, Kreise, usw.). Wenn der Button 'Rechteck' gedrückt wird, erscheint ein Rechteck auf dem Bild usw.

B. Objektorientierte Analyse (OOA)

Das Fenster soll folgende GUI-Objekte enthalten:
FensterFrm, Bild (Image), SteuerPnl, RechteckBtn, LoeschBtn, EndeBtn.

Das Projekt enthält außerdem zunächst folgende andere Objekte, die die eigentliche Aufgabe beinhalten:
ein weißes Zeichenblatt und ein blaues Rechteck.

C. Implementation

Wenn Sie nicht mehr genau wissen wie es geht, holen Sie sich das Info-Blatt Neues Projekt anlegen mit dem Internet Explorer auf den Bildschirm zum Nachlesen (../unterrichtsmaterialien/delphi) und führen Sie nacheinander folgende Arbeitsschritte aus:

  1. Neues Projekt anlegen
    Der Projektordner heißt: Uebung2
    der Unitname             : uFenster
    der Projektname         : Ueb2

  2. Deklaration der Objekte im INTERFACE-Teil

    a) GUI-Komponenten festlegen.
    Ziehen Sie mit der Maus aus der Komponentenleiste "Standard" 1 Panel und 3 Buttons auf das Form1-Fenster. Legen Sie die Buttons auf das Panel, das als Steuerleiste unten liegen soll.
    Ziehen Sie mit der Maus aus der Komponentenleiste "Zusätzlich" ein Image auf das FensterFrm. Machen Sie das Image so groß wie möglich, wir brauchen es für das Zeichenblatt..

    b) GUI-Komponenten umbenennen mit dem Objektinspektor
    Die Bezeichner (Name) für die Buttons lauten : RechteckBtn, LoeschBtn, EndeBtn
    für das Panel : SteuerPnl
    für das Bild :   BildImg
    für das Formular (Form1) : FensterFrm

    c) Die Grafik-Objekte (aus den Fachklassen) deklarieren

    1. Schritt: Die Unit uGrafik, in der die Figuren beschrieben sind, in das Formular einbinden.

    interface
    // ===============================================================
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls,
    uGrafik;

2. Schritt: Die neuen Grafik-Objekte unter var deklarieren

var
  FensterFrm   : TFensterFrm;
  Zeichenblatt : TZeichenblatt;  
  Rechteck     : TRechteck;

 

  1. Implementation der Objekte im IMPLEMENTATION-Teil

    a) Ereignismethoden erzeugen (zunächst leer) durch Doppelklick auf die Buttons und das FensterFormular .
    (Nicht auf BildImg klicken!)

    b) Zeichenblatt und Rechteck implementieren

    Die Grafikobjekte sollen sofort bei Programmstart erzeugt werden; das übernimmt TFensterFrm.FormCreate. Zeichenblatt wird verbunden mit der Image-Komponente, bekommt eine Farbe und wird gleich angezeigt. Mit Rechteck wird später gearbeitet. Ergänzen Sie dazu in TFensterFrm.FormCreate:

    procedure TFensterFrm.FormCreate(Sender: TObject);
    // -----------------------------------------------
    begin
      Zeichenblatt := TZeichenblatt.Create;
      Zeichenblatt.SetLink(BildImg);          // mit Image verbinden
      Zeichenblatt.SetFuellFarbe(clwhite);
      Zeichenblatt.Zeigen;

      Rechteck := TRechteck.Create;
    end;

 

 Diese Schritte sind grundsätzlich für jedes Objekt immer dieselben in dieser Reihenfolge:

1. Objekt als Variable 
    deklarieren

Unter var einfügen: (Beispiel)
Rechteck : TRechteck;

2. Objekt erzeugen

In die Ereignismethode TFensterFrm.FormCreate einfügen: Rechteck := TRechteck.Create;
3. Objekt mit Anfangs-
    werten initialisieren
In die Ereignismethode TFensterFrm.FormCreate einfügen: Rechteck.SetPos(....);

4. Aufträge
    an Objekt senden

In die Ereignismethode  einfügen: Rechteck.Zeigen;

 

    Regel:  Objekte können erst dann angesprochen
                           werden, wenn sie schon erzeugt sind!

(Wenn Sie die Fehlermeldung erhalten:
"...  ist eine Exzeption der Klasse EAccessViolation aufgetreten", dann haben Sie sicher vergessen, das Objekt zu erzeugen. )

 

Und nun das Rechteck machen
  1. In der Klassendeklaration unter private Zeile einfügen: procedure RechteckMachen;
     
  2. Zum Initialisieren und Zeigen schreiben Sie im IMPLEMENTATION-Teil unten als letzte im Quelltext vor END. eine eigene 
     

    procedure TFensterFrm.RechteckMachen;
    //-----------------------------------
    begin
      Rechteck.SetPos(10, 10, 100, 100);
      Rechteck.SetFarbe(clBlue);
      Rechteck.Zeigen;
    end;

     

  3. Zum Aufrufen dieser Prozedur schreiben Sie als Anweisung  in die Ereignismethode des Rechteck-Buttons den Prozedurnamen:  RechteckMachen
     

    procedure TFensterFrm.RechteckBtn.Click (...)
    //--------------------------------------------
    begin
      RechteckMachen;
    end;

Und nun starten und staunen!

  • Rechteck löschen
    Das Rechteck hat schon eine Methode Loeschen geerbt, die Sie einfach benutzen können.
    Rufen Sie diese im LoeschBtn auf! 

(Zum Prüfen finden Sie hier den Quellcode


©    05. Oktober 2008    Siegfried Spolwig