home | ### 4. Abend
Druckversion dieser Seite | Ziele : Wir sind in der Lage mit dem Borland C++ Builder ein erstes Projekt zu starten. Wir können das bereits erlernte in der neuen Umgebung einsetzen
### Der C++ Builder |
| Die Borland-Enwicklungsumgebung verfolgt einen etwas anderen Ansatz, als das was wir bis jetzt kennengelernt haben. Grundsätzlich erzeugt man eine sogenannte Form. Man zieht darauf visuelle Komponenten, die sich auf den Werkzeugleisten befinden. Eine kleine Einführung und Grundsätzliches zum C++ Builder, findet ihr im (neuen) Buch ab Kapitel 2.
| Im obersten Drittel befindet sich wie vermutet die Menuleiste. Rechts darunter befindet sich die Komponentenleiste. Die Idee ist, dass man Komponenten aus dieser Leiste auswählt und diese auf der Form verteilt. Die Form (eigentlich das Formular) ist das gepunktete Fenster im oberen rechten Drittel der Abbildung. Im unteren Drittel befindet sich der Source-Code Editor. Links neben der Form ist der Object Inspector. Jede Komponente besitzt einige Attribute wie Farbe, Font oder Grösse. Diese Attribute werden im Object Inspector für die aktuell angewählte Komponente angezeigt und können auch geändert werden.
Beispiel Button |
| Wähle in der Komponentenleiste das Symbol für den Knopf aus :
| Zeichne jetzt auf der Form ein Rechteck, mit der die Grösse des Buttons definiert wird.
| Wähle den Button an, er sollte jetzt im Object Inspector als aktuelles Objekt angezeigt werden. Im Object Inspector kann nun der Text auf dem Button geändert werden. Das Attribut heisst : "Caption".
| Der C++ Builder erzeugt aufgrund unserer Aktionen neuen C++ Code. Es existiert bereits eine Klasse TForm1, die im Editor betrachtet werden kann. Die Form, die wir vor uns haben ist ein Objekt dieser Klasse. Durch das hinzufügen des Buttons hat der C++ Builder zu dieser Klasse das Datenelement "Button1" in die Klasse eingesetzt. Das Datenelement ist vom Typ Zeiger auf TButton. TButton ist eine Klasse, die von Borland entwickelt wurde und einem Button auf dem Bildschirm entspricht. Ähnlich wie zum Beispiel die String-Klasse (string) aus der C++-Standardbibliothek befindet sich die Klasse TButton in der Borland-Library.
| Dieser Button hat wie bereits gesehen gewisse Eigenschaften, Attribute wie der Text, der darauf steht und andere, die im Object-Inspector geändert werden können. Ein Button-Objekt hat aber nicht nur Eigenschaften, sondern erzeugt bei der Bedienung sogenannte "events", Ereignisse ! Wollen wir Code erzeugen, der ausgeführt wird, wenn unser Button zum Beispiel angeklickt wird, können wir dies bequem im Object-Inspector tun.
| Wähle den Button aus, so dass er im Object-Inspector angezeigt wird. Wechsle im Object Inspector von der Properties-Ansicht zur Events-Ansicht. Wähle das Event "OnClick" aus und gib im Feld rechts an, wie die Funktion heissen soll, die aufgerufen wird, wenn der Button angeklcikt wird !
| Die Funktion, die bei mir "SagHallo" heisst wird direkt erzeugt und der Klasse TForm1 zugeordnet, da der Button sich auf der Form befindet.
| Ergänzen wir dort also folgenden Code :
    void __fastcall TForm1::SagHallo(TObject *Sender)
    {
     MessageBox (0, "Ich sage Hallo", "Hallo Box", MB_OK);
    }
| Im Menu "Project" findest Du die Befehle um das Beispiel zu compilieren. Im Menu "Run" befinden sich die Befehle mit denen das Programm getestet werden kann, mit oder ohne Debugger. Es gibt die Möglichkeit Haltepunkte zu setzen und das Programm schrittweise abzuarbeiten.
Beispiel Noten |
| Dieses Beispiel werden wir gemeinsam im Unterricht erarbeiten und wird zu einem späteren Zeitpunkt Online verfügbar. Wir werden aber folgende Klasse verwenden, die sich um unsere Noten kümmert.
Noten.h |
    #ifndef NOTEN_H
    #define NOTEN_H

    class Noten
    {
    public:
           Noten();
           ~Noten();

           // Diese Funktion berechnet
           // den Durchschnitt
           double HoleDurchschnitt();
           // Um eine neue Note
           // anzufügen einfach
           // diese Funktion aufrufen
           void NeueNote(double note);
    private:
            // Zeiger auf dynamisches
            // Datenelement
            double*  m_pNoten;
            // Anzahl Noten zur
            // einfacheren Durch-
            // schnittsberechnung
            unsigned long m_lAnzahlNoten;
    };

    #endif
| Dazu auch gleich die Implementation in de cpp Datei :
Noten.cpp |
    #include "Noten.h"

    //////////////////////////////

    Noten::Noten()
    {
        // brav initialisieren !
        m_pNoten = 0;
        m_lAnzahlNoten = 0;
    }

    //////////////////////////////

    Noten::~Noten()
    {
        // Speicher wieder
        // freigeben
        delete [] m_pNoten;
    }

    //////////////////////////////

    double Noten::HoleDurchschnitt()
    {
        double durchschnitt = 0.0;
        double summe = 0.0;

        for(unsigned long i = 0; i < m_lAnzahlNoten; ++i)
        {
            summe = summe + m_pNoten[i];
        }

        durchschnitt = summe / (double)m_lAnzahlNoten;

        return durchschnitt;
    }

    //////////////////////////////

    void Noten::NeueNote(double note)
    {
        m_lAnzahlNoten++;

        // neues Array anlegen !
        double* neueNoten = new double[m_lAnzahlNoten];

        // alte Werte kopieren
        for(unsigned long i = 0; i < m_lAnzahlNoten-1; ++i)
        {
            neueNoten[i] = m_pNoten[i];
        }

        // altes Array löschen
        delete m_pNoten;

        m_pNoten = neueNoten;

        // neue Note hinten anfügen
        m_pNoten[m_lAnzahlNoten-1] = note;
    }

    //////////////////////////////