1. Ein Programm in Delphi hört nicht einfach auf, wenn die letzte Programmzeile ausgeführt wurde. Das Formfenster bleibt weiter bestehen. Erst mit einem Klick auf Schließen oder den Tasten [Alt][F4] ist das Programm abgeschlossen.
2. In Delphi umfasst die Erstellung und Bearbeitung eines Programms gleich mehrere Dateien. Deshalb bezeichnet man alles zusammen als Projekt.
3. Im Formular bzw. Formfenster verteilst und ordnest du deine Komponenten aus der Komponentenpalette (bis jetzt hast du nur die Schaltfläche benutzt). Im Editorfenster kümmerst du dich um die Methoden, damit das Programm laufen kann. Ohne den Programm- bzw. Quelltext führt nämlich eine Aktion wie z.B. das Klicken auf eine Schaltfläche zu keinem erkennbaren Ergebnis.
1. Hauptkomponente ist das Formfenster, kurz Form genannt. Daneben sind aus diesem Kapitel erst mal zwei weitere Komponenten bekannt: Die Schalt- und die Anzeigefläche (Button und Label).
2. Ereignisse sind z.B. Mausklicks oder Tastendrücke. Mit Ereignissen lassen sich Methoden verknüpfen, die aktiviert werden, wenn ein Ereignis eintritt: So wird z.B. beim Ereignis OnClick die Methode ButtonClick aktiviert. Viele Methoden sind mit einem Objekt wie z.B. Formfenstern, Buttons, Labels oder anderen Komponenten verbunden.
3. Der Eigenschaft Caption muss ein neuer Wert zugewiesen werden, z.B.
Button1.Caption := 'Lass
Label1.Caption := 'Das ist mir egal!';
1. Einen Versuch findest du im Projekt mit dem Namen Project2A.dpr.
1. Das Projekt Horoskop.dpr bietet dir ein Gerüstprogramm mit zwölf beschrifteten Buttons, zu denen die ButtonClick-Methoden bereits existieren. Nur die passenden Vorhersagetexte musst du selber finden.
2. Dazu schau mal in den Programmtext zum Projekt Mathe2.dpr. (Statt nur Label wurde hier auch mal Panel benutzt – diese Komponente lernst du später noch kennen.)
1. Mit dem Operator ":=" (Doppelpunkt und Gleichheitszeichen) werden Ausdrücke oder Werte zugewiesen, mit dem Operator "=" (nur Gleichheitszeichen) werden Ausdrücke oder Werte verglichen.
2. Für Zensur wird ein zufälliger Wert zwischen 1 und 6 erzeugt.
1. Vorschläge dazu findest du in Mathe1c.dpr bzw. in Mathe2a.dpr.
2. Schau dir dazu mal das Projekt Mathe3.dpr an.
1. Der Haken ist, dass auch "zu groß" ausgegeben wird, wenn die Zahl richtig ist: Das Gegenteil (else) von < ist nämlich >=.
1. Dieses Raten-Projekt trägt den Namen Zraten3a.dpr.
2. Dazu gibt es ein Angebot in Zraten4.dpr. (Wenn in anderen Bereichen als zwischen 0 und 10000 geraten werden soll, kannst du die Anfangswerte von Oben und Unten entsprechend ändern.)
1. Das Programm steckt in einer Endlos-Schleife fest: Weil das Kapital sich nie vermehren kann, wird daraus nie eine Million. Heraus kommt man da aus Delphi nur über Start und Programm zurücksetzen bzw. mit den Tasten [Strg][F2].
2. Über die Eigenschaft ItemIndex wird bei einem Listenfeld (ListBox) ermittelt, welcher Eintrag ausgewählt worden ist.
1. Eine Lösung steht in Million2.dpr.
2. Schau dir dazu das Projekt Horoskop2.dpr an. (Allerdings gibt's auch hier nur ein Gerüst.)
3. Probier mal das Projekt Drueck1.dpr aus.
1. Wenn Optionsfelder oder Kontrollfelder in einem Formfenster zu einer Gruppe zusammengefasst sind, kann man bei Optionsfeldern (RadioGroup/RadioButtons) immer nur eine Komponente einschalten. Bei Kontrollfeldern (ChecKBoxes) dagegen lassen sich beliebig viele Komponenten einer Gruppe aktivieren.
1. Dazu findest Du ein Gerüstprogramm im Projekt Horoskop3.dpr.
2. Die Lösung könnte so wie in Klemp4a.dpr aussehen.
1. Beide Felder dienen der Anzeige von Text. Weil die Anzeigetafel (Panel) dabei von einem sichtbaren Rand umgeben ist, der sich einstellen lässt, kann sie auch ähnlich wie ein Gruppenfeld Komponenten umrahmen und zusammenfassen.
2. Diejenige Komponente, die im Formfenster gerade aktiviert ist, besitzt den Fokus. Beim Programmstart erhält die Komponente den Fokus, die der Eigenschaft ActivControl der Klasse TForm zugeordnet ist.
3. Eine Textdatei kann z.B. über ein Objekt vom Typ TStringList mit LoadFromFile geöffnet und mit SaveToFile gespeichert werden.
4. Als erstes wird eine Instanz vereinbart, z.B. über var EineListe: TStringList. Damit das Objekt dann auch funktionstüchtig ist, wird mit EineListe := TstringList.Create der nötige Platz im Arbeitsspeicher reserviert.
1. Dazu musst du dir mal die Projektdatei Prozent1.dpr anschauen.
2. Eine Lösung ist in der Methode TForm1.Button2Click des Projekts Klemp7a.dpr zu finden.
1. Zuerst legt man ein Symbol für die Komponente MainMenu auf dem Formfenster ab. Mit Doppelklick kommt man in den Menüeditor. Dort lässt sich jeder einzelne Eintrag eingeben. Im Objektinspektor lassen sich zusätzlich die Eigenschaften anpassen. Nach Doppelklick auf einen Menüeintrag kann man die damit verknüpfte Methode bearbeiten.
2. Am Rückgabewert der Methode Execute: Bei allen drei Objekten ist dieser Wert true, wenn der Dialog mit OK beendet wird. Ansonsten gibt Execute false zurück.
3. Objekte vom Typ TStringList sammeln Zeichenketten zeilenweise, sind also sozusagen Behälter für Strings. Objekte vom Typ TRichEdit können einen normalen oder formatiertenText (z.B. mit Schriftart und Absatzformaten) aufnehmen, anzeigen und ausdrucken lassen. (Textformate haben die Kennung TXT und RTF.)
(Aber in Projekts Klemp11.dpr findest du außer einem "Normalmenü" ein Kontext- bzw. Popup-Menü als zusätzliche Erweiterung.)
1. Bei MoveTo wird sozusagen eine unsichtbare Linie gezeichnet und bei LineTo eine Linie in der aktuellen Zeichenfarbe (Pen.Color).
2. Allgemein ist mit Color die Hintergrundfarbe einer Komponenten gemeint. Außerdem ist es bei Pen die Zeichenfarbe, bei Brush die Malfarbe und bei Font die Schriftfarbe.
1. Die passende Anweisung findest du im Projekt Grafik6A.dpr.
2. Eine (einfache) Lösung enthält das Projekt Grafik8.dpr.
1. Bei einer Klassenvereinbarung (mit type) wird sozusagen das Gerüst vereinbart: Eigenschaften und Methoden sind vorhanden. Aber erst nach einer Objektvereinbarung (mit var) können die Eigenschaften mit Werten gefüllt und die Methoden zum Leben erweckt werden. Wichtig ist, dass das Objekts vor dem "Gebrauch" über den Konstruktor initialisiert wird.
1. Dazu solltest du mal die Projektdatei Quadrat.dpr öffnen.
1. Daten und Code bzw. alle Eigenschaften und Methoden eines Objekts werden zu einer Einheit zusammengefasst. Ein Zugriff von außen ist nur über das Objekt direkt möglich – wenn überhaupt.
2. Wird eine Klasse so vereinbart type Name = class (Vorfahr), dann verfügt sie automatisch über alle Eigenschaften und Methoden des Vorfahren. Mit einer geeigneten Basisklasse lässt sich so eine komplette Klassenfamilie aufbauen, bei dem die letzte Klasse in der Hierarchie alles erbt, was all ihre Vorfahren an Fähigkeiten zu bieten haben. (Voraussetzung ist immer, dass es bei der Vererbung keine Einschränkung gibt –siehe dazu übernächstes Kapitel.)
1. Eine Möglichkeit findest du im Projekt Mathe4A.dpr.
2. Die try-except-Strukturen stehen in Mathe4B.dpr.
1. Über Komponente und Neue Komponente öffnest du ein gleichnamiges Dialogfeld, wo du u.a. den Namen der Klasse und des Vorfahren einträgst. Delphi erzeugt eine neue Unit mit den nötigen Basisvereinbarungen der neuen Klasse. In der Unitdatei kannst du weitere Vereinbarungen einfügen. Anschließend muss die Komponente über Komponente und Komponente installieren in einer Packagedatei installiert werden.
2. Darunter versteht man ein Paket z.B. von Komponenten. Die Packagedatei dclusr.dpl z.B. sammelt alle deine als Anwender selbst vereinbarten Komponenten (und packt auf Wunsch ihre Symbole in die Komponentenleiste).
1. Mit der Methode Hide kannst du viele Komponenten vom Formular (scheinbar) verschwinden lassen. Und mit Show tauchen sie dann wieder auf. Schau dazu mal in das kleine Projekt ShowHide.dpr.
1. Eine Lösungsmöglichkeit findest du im Projekt MShow.dpr.
2. Wie man mit einer Animation-Komponente umgehen kann, steht im Projekt OOP3A.dpr. (Nötig sind dazu passende avi-Dateien – z.B. im Bilder-Ordner.)
3. Hier hilft ein Blick in die Projektdatei OOP4.dpr.
1. Weder noch, denn Delphi arbeitet mit mehreren Fenstern, die zum Teil voneinander unabhängig sind. Man könnte aber sagen: Die Entwicklungsumgebung von Delphi besteht aus einem System von MDI- und SDI-Anwendungen.
1. Die Paint-Methode von TCustomControl ist nur eine leere Hülle: procedure TCustomControl.Paint; begin end; Trotzdem wird sie bereits von Methoden der Klasse TCustomControl aufgerufen. Wird sie in einer neuen Komponente wie z.B. TOButton überschrieben und mit entsprechenden Anweisungen gefüllt, dann kann sie auch von den Methoden der Mutter (an Stelle der alten Paint-Methode) verwendet werden.
2. Die Click-Methode wird erst aufgerufen, wenn die linke Maustaste losgelassen wurde, was nicht in unserem Sinne ist. Denn dann wird der OButton zwar eingedrückt, bleibt aber unwiderruflich in diesem Zustand.
1. Dazu solltest du mal die Projektdatei OOP5A.dpr öffnen.
2. Eine Möglichkeit findest du im Projekt OOP5B.dpr (OButton2.pas).
3. Schau mal in die Projektdatei OOP6.dpr (OObutton.pas). Ich habe der neuen Klasse den (sinnigen?) Namen TOOButton gegeben – für »OnOffButton«.
1. Mit angehängtem virtual wird eine Methode virtuell vereinbart. Nur so kann sie später in den Nachkommen der Klasse mit dem Zusatz override überschrieben werden. Soll die Methode des Vorfahren benutzt werden, so wird vor den Methodennamen ein inherited gestellt.
2. Bei der frühen Bindung werden alle Aufrufe von Methoden beim Kompilieren eindeutig festgelegt. Bei der späten Bindung bleibt die Aufrufstelle offen. Und erst während der Laufzeit des Programms wird entschieden, welche Methode aufgerufen wird (Polymorphie).
1. Bei Eingangsparametern wird deren Wert kopiert und innerhalb der Methode verarbeitet. Außerhalb ändert sich nichts, weil ja mit einer Kopie gearbeitet wurde. Bei Durchgangsparametern wird gar keine Kopie erzeugt, sondern über die Adresse direkt der Wert verarbeitet und damit auch außerhalb der Methode verändert.
2. Der except-Zweig enthält Anweisungen, die nur beim Auftreten von Exceptions ausgeführt werden (mit on-do bestimmte Exceptions). Der finally-Zweig dagegen wird in jedem Fall ausgeführt, auch wenn die Versuche unter try fehlschlagen.
1. Diese Änderung steht schon in OButton3.pas drin.
2. Dazu schau dir mal das Projekt FStein7B.dpr an.
1. Die Änderung findest du im Projekt GPlay2A.
2. Im Projekt GPlay3A folgt der Käfer der Maus.