18
- 1 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

  • Upload
    votram

  • View
    228

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 1 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Page 2: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 2 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Einführung in das Programmieren mit Delphi 1 Grundlagen Delphi ist eine sog. IDE (Integrated Development Enviroment), d.h. eine Entwicklungsumgebung, die unter einer grafischen Oberfläche alle Werkzeuge zur Programmentwicklung zusammenfasst. Starte Delphi und wähle Datei>>Neu>Anwendung. Das erscheinende Programmfenster gliedert sich in vier Bereiche.

Hauptfenster mit Standard-Symbolleisten Komponenten etc.

Objekt-inspektor zeigt Eigenschaften und Verhalten von Programm-elementen

Unit-Fenster / Editorfenster, hier steht der Programmcode

Formularfenster, die Arbeitsfläche

Page 3: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 3 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Die vier Teile der Programmieroberfläche sind frei beweglich und veränderbar. Vor einer genaueren Beschäftigung sollte eine Einstellung verändert werden. Öffne den Menüpunkt Tools>Umgebungsoptionen und aktiviere die Häkchen unter den Optionen für Autospeichern. Dies vereinfacht das Speichern und Öffnen des Projekts, da die benötigten Dateien automatisch gespeichert und geladen werden und dies nicht einzeln erfolgen muss. Das Hauptfenster besteht aus zwei Teilen. In ihm befinden sich einerseits die Menü- und die

Symbolleiste mit Symbolen z.B. zum Starten eines erstellten Programms . Hinter den Registerreitern verbergen sich zum anderen in mehreren Registerreitern die sog. Komponenten, fertig vorbereitete Programmelemente, die durch Klicken und Ziehen in das Formularfenster eingebaut werden können. Die Komponentenregisterreiter lassen sich untereinander ebenfalls verschieben.

Mehrere gleiche Komponenten lassen sich übrigens leicht erstellen, indem man die Komponente bei gedrückter Umschalttaste anklickt und dann in das Formularfenster klickt. Bei jedem Klicken erscheint die Komponente noch einmal. Beendet wird dieses Verhalten

durch einen Klick auf das Pfeilwerkzeug .

Komponentenbereich Symbol- und Menüleisten

Page 4: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 4 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

2. Das erste Programm – Hallo Welt 2. 1. Aussehen des Programms Erstelle über Neu>Anwendung ein neues Projekt. Speichere es in einem eigenen Ordner ab! Zunächst soll das Aussehen der Form geändert werden.

Aktiviere im Objektinspektor den Registerreiter Eigenschaften. Folgende Eigenschaften sollen verändert werden: Ändere die Eigenschaft Caption in Übung 1. Bei der Eigenschaft Caption handelt es sich um den Formularnamen, eine „Überschrift“ für ein Objekt. Dies darf nicht mit der Eigenschaft Name verwechselt werden! Dieser Name wird benötigt, um das Objekt im Programm anzusprechen. Änder die Eigenschaft Color, die Hintergrundfarbe, auf clSilver. Ändere das Icon links oben im Formfenster in Win2kApp.ico Klicke dazu auf die drei Punkte neben der Eigenschaft, im folgenden Fenster auf Laden und lade die Icon-Datei von dieser Adresse: C:\Programme\Borland\ Delphi7\Objrepos\ Win2Kapp. Ändere die Eigenschaft Font in Times New Roman, Fett, 16. Dies wirkt sich auf alle Labels, Buttons etc. aus. Möglich ist auch, die Form des Cursors über die Eigenschaft Cursor zu ändern, wenn dies sinnvoll ist.

Nun könnte das Programm schon getestet werden. Noch passier aber nichts.

Erstelle über den Registerreiter Standard drei Buttons und markiere sie, indem du mit der Maus ein Rechteck über sie ziehst. Stelle die folgenden Eigenschaften ein:

Caption Aktion 1, 2, 3 Objektaufschrift Top 300 Abstand vom oberen Rand Left 80, 280, 480 Abstand vom linken Rand

Page 5: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 5 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Heigh 30 Höhe des Objekts Width 90 Breite des Objekts

Label enthalten Text, der vom späteren Programmnutzer nicht verändert werden kann. Erstelle ein Label mit den Eigenschaften

Caption Objektaufschrift, hier leer Top 80 Abstand vom oberen Rand Left 80 Abstand vom linken Rand Heigh 120 Höhe des Objekts Width 490 Breite des Objekts AutoSize False Das Label Passt sich nun nicht mehr dem Inhalt

an. Alignment taCenter Ausrichtung des Textes im Label Font Größe 72 Schriftgröße

Noch immer geschieht aber beim Testen nichts. Dazu muss nun entsprechender Programmtext geschrieben werden. 2.2. Prozeduren Prozeduren sind eigenständige Teile des Programmcodes. Sie können von anderen Programmteilen beliebig oft aufgerufen werden, was den Programmtext verkleinert und Wiederholungen (Redundanzen) vermeidet, und werden als Ganzes abgearbeitet. Sie teilen den Programmtext in logische Strukturen (Prinzip der Strukturiertheit), ermöglichen die Verwendung eines Programmteils in anderen Programmen (Prinzip der Modularität). Eine Prozedur beginnt mit dem Begriff Procedure, dann folgt der Formularname, dann der Prozedurname, zusammengesetzt aus Objektname und dem Ereignis. In runden Klammern folgt ein sog. Parameter mit dem dazugehörigen Typ.

Procedure Formularname.Prozedurname(Parameter: Parametertyp) Beim Klicken auf den Button Aktion 1 soll die Schrift Hallo Welt im Label erscheinen. Deshalb muss der Programmtext auch diesem Objekt zugeordnet werden. Klicke doppelt auf den Button, um in das Editorfenster zu gelangen. Du befindest dich gleich an der richtigen Stelle. Die elementaren Elemente sind bereits eingegeben – hier fett dargestellt.

procedure TForm1.Button1Click(Sender: TObject);

Hier wird gesagt, dass es sich um eine Prozedur auf der Form1 handelt, die beim Klicken auf den Button1 abgearbeitet wird.

begin Label1.Caption:= 'Hallo Welt!'; //Dies ist die neue Aufschrift.

Das leere Label erhält eine neue Aufschrift. Die einfachen Anführungszeichen oder Hochkommas zeigen einen String an, der als

Page 6: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 6 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Ganzes übernommen und vom Programm nicht als Programmbefehl interpretiert wird. Jede Befehlszeile muss mit Semikolon abgeschlossen werden.

Label1.Color:=clRed; Änderung der Labelfarbe Label1.Font.Color:=clYellow; Dies ist die Schriftfarbe des Labels. // Dies sind übrigens Kommentarzeichen für einzeilige Kommentare.

Für mehrzeilige Kommentare verwendet man { } oder {* *}.

end; Die beiden anderen Buttons erhalten den folgenden Programmtext.

procedure TForm1.Button2Click(Sender: TObject); begin MessageBeep(0); //Gibt einen Ton über Lautsprecher oder Soundkarte aus. end;

procedure TForm1.Button3Click(Sender: TObject); begin close; //Schließt das Formular. end

Abschließend muss das Projekt noch gespeichert werden. Erstelle für jedes neue Projekt ein eigenes Arbeitsverzeichnis. Wähle dann Speichern oder Alles speichern. Die folgenden Dateien sollten im Arbeitsverzeichnis erscheinen: Die *.exe-Datei gibt es nur, wenn zu Testzwecken kompiliert wurde oder wenn ausdrücklich über Projekt>Project1 compilieren (Strg+F9) kompiliert wurde. *.cfg Projektkonfigurationsdatei. In dieser Datei werden Einstellungen der

Projektkonfiguration gespeichert. Der Name ist identisch mit dem der Projektdatei.*.dof Projektoptionsdatei. Sie enthält die aktuellen Einstellungen für Projektoptionen.

Dazu gehören Compiler- und Linker-Einstellungen, Verzeichnisse, bedingte Direktiven und Befehlszeilenparameter.

*.dpr Projektdatei. Sie enthält das Hauptprogramm. *.dsk Die Desktop-Einstellungen. Diese Datei speichert den aktuellen Zustand des

Desktop, beispielsweise welche Fenster geöffnet sind und an welcher Position sie sich befinden.

*.res Enthält die Versionsinfo-Ressourcen (falls erforderlich) und das Hauptsymbol der Anwendung.

Page 7: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 7 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

3. Farbmischer Der Farbmischer ist ein kleines Programm, das Über Scrollregler die Erstellung der RGB-Farben ermöglicht und diese Mischt. Die Mischfarbe wird als Hexadezimalwert ausgegeben. Zunächst muss die Form erstellt werden. Für die Farbflächen werden vier Shapes benötigt und drei Scrollbars, die über die Eigenschaften einzurichten sind. Die Anzeige der Farbwerte erfolgt in vier Labels und ein Button zum Beenden des Programms darf ebenso nicht fehlen wie ein Label mit der Überschrift.. Die Scrollbars verfügen über einen maximalen Scrollwert, der in den Eigenschaften auf 255 gesetzt werden sollte, da der Farbbereich der einzelnen RGB-Farben von 0 bis 255 reicht. Dieser Wert wird einmal als Integer-Wert zum Rechnen und einmal als String zur Anzeige in den Labels benötigt. Deklariere die entsprechenden Variablen (scrollwertred, scrollwertredstr, scrollwertgreen, scrollwertgreenstr, scrollwertblue, scrollwertbluestr) global! Scrollbars geben den Wert ScrollPos als Integer-Wert zurück. Er lässt sich in einer Variablen erfassen: scrollwertred:=ScrollPos; Für das Label muss er in einen String umgewandelt werden:

str(scrollwertred :4,scrollwertredstr); Nun muss das entsprechende Label noch den Wert anzeigen:

Label6.Caption:=scrollwertredstr;

Die Farbe des Shapes wird über die Eigenschaft Brush.Color verändert: shape1.Brush.Color:=RGB(scrollwertred,0,0);

Damit der richtige RGB-Wert verändert wird, muss die Reihenfolge Rot-Grün-Blau in der Klammer eingehalten werden.

Für das Shape mit der Mischfarbe gilt dasselbe: shape4.Brush.Color:=RGB(scrollwertred,scrollwertgreen,scrollwertblue);

Schließlich muss noch die Hexadezimalanzeige für das untere Label erstellt werden:

Label1.Caption:=IntToHex(RGB(scrollwertblue,scrollwertgreen,scrollwertred),6); Hier wurden der Rot- und der Blau-Wert vertauscht, damit in der Anzeige die richtige Reihenfolge eingehalten wird. Vervollständige das Programm und teste es!

Page 8: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 8 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

4. Mausrennen Ziel des Mausrennens ist es, eine Maus über eine vorgegebene Strecke zu führen. Dabei soll sich die Strecke abschnittsweise farblich verändern und die Zeit soll gemessen werden. Schließlich soll die Eintragung des Ergebnisses in eine einfache Highscoreliste eingetragen und gespeichert werden. Auch das Laden dieser Liste soll möglich sein. Am Ende wird das Programm etwa so aussehen:

4. 1. Erste Version Erstelle zwei Buttons (Button 1 und Button2), ein Label (label1) über dem Startbutton () und fünf Label (Nr. 2-6) vom Start- zum Erfolgsbutton. Erstelle weiterhin den Beenden - Button und den Programmtext, der das Programm beendet. Ändere weiterhin die Farbe der Form (hier: clGray) und der Label (hier: clSilver ). Das Programm sollte sich nun starten und beenden lassen. Teste!

Page 9: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 9 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

4. 2.Zweite Version - Variablen Variablen sind Werte, die über einen Namen angesprochen werden können. Diese Werte sind innerhalb des Programms veränderbar und enthalten in der Regel Daten, mit denen das Programm arbeitet. Variablen müssen deklariert werden. Dabei wird der Typ der Variable angegeben, damit das Programm weiß, wie es den enthaltenen Wert verarbeiten soll. Die Deklaration erfolgt global für das gesamte Programm oder lokal für eine Prozedur. Die Deklaration erfolgt folgendermaßen: var Variablenname : Typ; oder var Variablenname1, Variablenname2, Variablenname3 : Typ; oder var Variablenname1 : string; var Variablenname2 : integer:

Datentyp Erläuterung Größe Integer Ganzzahl zwischen 2147483648 und 214483647 4 Byte Byte Ganzzahl zwischen 0 und 255 1 Byte Boolean Wahrheitswert (True, False) 1 Byte String Zeichenkette variabel Single Gleitkommazahl zwischen 1,5x1045 und 3,4x10308 4 Byte Word Ganzzahl zwischen 0 und 65535 8 Byte

Wenn das Spiel beginnt, soll der Nutzer das mitgeteilt bekommen. Dazu wird in der Prozedur des Startbuttons Label1.Caption:='Jetzt gehts los!'; eingefügt. Damit der Spieler die Fläche erkennt, über die er gerade die Maus führt, muss sich die Farbe jedes Labels ändern. Wähle dazu das Label2 aus und klicke im Objektinspektor auf den Registerreiter Ereignisse. Hier sind verschiedene Ereignisse aufgelistet, zu denen automatisch Prozeduren erstellt werden können. Wähle das Ereignis OnMouseMove aus und füge den Programmtext ein: If spiel_begonnen=true then Label2.Color:=clYellow; Dies muss für alle Label geschehen. Der Erfolgsbutton schließlich soll “Hurra!“ im Label1 erscheinen lassen. Teste das Programm! Leider lässt sich die Maus problemlos auch außerhalb der vorgegebenen Flächen bewegen, ohne dass etwas geschieht. Natürlich könnte man das Spiel bei einer Mausbewegung auf der Form beenden, aber dann käme ja niemand mehr zum Startbutton. Eine Alternative sind Variablen.

Page 10: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 10 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Für unser Spiel soll die Variable spiel_begonnen global als Boolean deklariert werden. Im oberen Teil des Programmtexts wird der entsprechende Text eingefügt. Lokal würde die Variable innerhalb einer Prozedur deklariert. Nun kann das Spiel verbessert werden. Mit Hilfe einer Bedingungsanweisung soll verhindert werden, dass der Nutzer die vorgegebene Strecke verlässt, ohne dass etwas geschieht.

Es wird eine Prozedur für die Form mit dem Ereignis OnMouseMove erstellt, die den folgenden Text enthält:

if spiel_begonnen = true then begin Form1.Color:=clBlue; Label1.Caption:='Doch nicht!'; end else; spiel_begonnen:=false; stoppuhr.Enabled:=false; zeit:=0;

Die Variable spiel begonnen wird auf False gesetzt und der Benutzer wird durch die Farbe der Form und die Labelaufschrift informiert.

Bedingung Erklärung if Bedingung then Anweisung [else Anweisung]

Einfache Bedingung if … then … else

if Bedingung then begin Anweisung1 Anweisung2 Anweisungn End else begin Anweisung1 Anweisung2 Anweisungn end;

Blockstruktur if … then … else

Page 11: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 11 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Der Startbutton wird um spiel_begonnen:=true; ergänzt. Eine Messagebox sollte den Spieler nach dem Spiel fragen, ob er das Programm wirklich beenden will. Eine Messagedialogbox ist folgendermaßen aufgebaut: MessageDlg(‚Feststehender Text’,Typ des Meldungsfeldes; [MesageDialogButtons], Hilfe-Kontext ID) Typen des Meldungsfeldes Wert Bedeutung mtWarning Ein Meldungsfeld mit einem gelben Ausrufezeichen. mtError Ein Meldungsfeld mit einem roten Stoppschild. mtInformation Ein Meldungsfeld mit einem blauen "i". mtConfirmation Ein Meldungsfeld mit einem grünen Fragezeichen. mtCustom Ein Meldungsfeld ohne Grafik. Als Titel des Feldes wird der Name der

Anwendung verwendet. MessageDialogButtons Wert Bedeutung Rückgabewert mbYes Eine Schaltfläche mit dem Text 'Ja' mrYes mbNo Eine Schaltfläche mit dem Text 'Nein' mrNo mbOK Eine Schaltfläche mit dem Text 'Ok'. mrOk mbCancel Eine Schaltfläche mit dem Text 'Abbrechen'. mrCancel mbAbort Eine Schaltfläche mit dem Text 'Abbruch' mrAbort mbRetry Eine Schaltfläche mit dem Text 'Wiederholen' mrRetry mbIgnore Eine Schaltfläche mit dem Text 'Ignorieren' mrIgnore mbAll Eine Schaltfläche mit dem Text 'Alle' mbNoToAll Eine Schaltfläche mit dem Text 'Alle Nein' mrNoToAll mbYesToAll Eine Schaltfläche mit dem Text 'Alle Ja' mrYesToAll mbHelp Eine Schaltfläche mit dem Text 'Hilfe' mbYesNoCancel mbYes, mbNo und mbCancel mbYesNoAllCancel mbYes, mbYesToAll, mbNo, mbNoToAll und mbCancel mbOKCancel mbOK und mbCancel mbAbortRetryIgnore mbAbort, mbRetry und mbIgnore mbAbortIgnore mbAbort, mbIgnore Die Hilfe-Kontext ID legt fest, welche Hilfeseite sich bei F1 öffnet. Der Standardwert ist Null. Der Programmtext lautet:

if MessageDlg('Wollen Sie das Programm verlassen?', mtConfirmation, [mbYes, mbNo],0) = mrYes then begin MessageDlg('Die Anwendung wird beendet', mtInformation, [mbOk], 0); Close; end;

Page 12: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 12 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

4.3. Dritte Version - Timer Noch ist es kein Rennen, denn es fehlt eine Zeitmessung. Wähle im Komponentenbereich den Registerreiter System und aktiviere den Button Timer. Ziehe einen Timer (stoppuhr) auf der Form auf. In den Eigenschaften muss er deaktiviert werden. Der aktivierte Timer wird automatisch jede Millisekunde einmal aufgerufen. Der enthaltene Programmtext wird abgearbeitet. Zur Anzeige der Zeit ist noch ein entsprechendes Label (Label7) nötig. Wechsle mit Doppelklick auf den Timer in das Editorfenster und gib den entsprechenden Code ein:

procedure TForm1.stoppuhrTimer(Sender: TObject); begin zeit:=zeit+0.1; str(zeit:4:1,laufzeit); Label7.Caption:=laufzeit + ' s'; end;

str wandelt den Wert einer Variable (hier: zeit) in einen String um, wobei die nachfolgenden Zahlen den Abstand der angezeigten Zahl vom linken Rand (width) und die Dezimalstellen (Decimals) angeben. Die Variable, die den String enthält, steht nach dem Komma. Wenn die Maus den richtigen Weg verlässt, soll der Timer deaktiviert und die Zeitanzeige auf null gesetzt werden. werden. Nach erfolgreichem Rennen soll der Timer ebenfalls stehen bleiben, aber die Anzeige erhalten bleiben. Deklariere die Variablen global und ergänze den entsprechenden Programmtext. Teste das Programm! 4. 4. Vierte Version - Highscore Die einzelnen Spieler sollen ihre Ergebnisse in einer Highscoreliste sehen können. Ziehe eine GroupBox auf und ändere ihre Caption in Highscoreliste. Erstelle in dieser ein Label mit Name und Zeit und eine TListBox (ListBoxHighscore). Darunter befinden sich ein TEdit-Feld (EditName) und Ein Label mit dem Hinweis „Bitte Namen eingeben und Enter Drücken.“ Markiere das EditName-Feld und erzeuge über das Ereignis OnKeyDown die entsprechende Prozedur! Dann folgt dieser Programmtext:

if (Key = VK_Return) then begin //Wenn Enter gedrückt wird... if EditName.Text<> '' then begin //Wenn EditName nicht leer ist... ListBoxHighscore.Items.Add(Laufzeit+' s'+ ' ' +EditName.text); //Ein Listeneintrag wird hinzugefügt. Variable Laufzeit wird weiterverwendet. end; EditName.Text:=''; //Leert das Eingabefeld. EditName.Visible:=False; //Nach der Eintragung wird das Feld unsichtbar. lblName.Visible:= False; end else begin //Begin ermöglicht hier das Abarbeiten mehrerer Befehle.

Page 13: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 13 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

if (Key = VK_ESCAPE) then begin //Wenn Esc gedrückt wird... EditName.Visible:=False; lblName.Visible:=False; end; end; end;

Am Ende ist es sinnvoll, ein Menü zu erstellen. Es sollte das Programm beenden. Im Komponentenbereich unter dem Registerreiter Standard befindet sich die Komponente MainMenu. Aktiviere sie und ziehe sie auf die Form. Ein Doppelklick öffnet den Menüdesigner. Gib dort das Menü Datei und dann das Untermenü Beenden ein. Das Menü und seine Teile finden sich in der Objekthierarchie wieder. Hier kann es angewählt werden und über das Ereignis OnClick wird die entsprechende Prozedur erstellt. Dann kann der entsprechende Programmtext zum Schließen des Programms folgen. 4. 5. Fünfte Version - Verbesserungen Verschiedene Verbesserungen sind denkbar. Über die Komponenten TSaveDialog und TOpenDialog kann die Highscoreliste gespeichert und wieder aufgerufen werden.

procedure TForm1.mnuSpeichernClick(Sender: TObject); var s:string; begin saveDialog1.Execute; If ListBoxHighscore.Items.Count<>0 then //Wenn die Anzahl der Elemente in der Highscoreliste ungleich Null ist... begin ListBoxHighscore.ItemIndex := 0; //Der erste Eintrag der Highscoreliste wird ausgewählt. s := ListBoxHighscore.Items.Strings[0]; //Die Eigenschaft Items enthält die Strings, die im Listenfeld angezeigt werden.Index der Strings beginnt mit Null. ListBoxHighscore.Clear; //Die Listeneinträge werden gelöscht, sie würden sich sonst beim Speichern verdoppeln. ListBoxHighscore.Items.Add(s);

Page 14: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 14 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

ListBoxHighscore.Items.SaveToFile('testfile.lst'); end end; procedure TForm1.mnuOeffnenClick(Sender: TObject); begin if OpenDialog1.Execute then ListBoxHighscore.Items.LoadFromFile('Testfile.lst'); end;

Verschiedene Tricks, um das Spiel ohne Anstrengung zu gewinnen, müssen noch abgestellt werden. So darf der Spieler nicht mit den Richtungstasten zum Erfolgsbutton kommen.

procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) and spiel_begonnen then //and koppelt die zwei Bedingungen. SpielBeenden ('So geht es nicht!'); //Verhindert das Aktivieren des Erfolg-Buttons mit den Richtungstasten. Der String erscheint in der Caption der Label1. end;

Hier wurde eine Prozedur erstellt, die keiner Komponente zugeordnet ist. Sie enthält Befehle, die das Spiel zurücksetzen und kann von verschiedenen anderen Prozeduren aufgerufen werden.

procedure TForm1.SpielBeenden (S:string); begin spiel_begonnen:=False; Label1.caption:=s; //Der Inhalt der Variablen s wird in der Klammer nach dem Aufruf der Prozedur festgelegt. Label2.Color:=clSilver; Label3.Color:=clSilver; Label4.Color:=clSilver; Label5.Color:=clSilver; Label6.Color:=clSilver; stoppuhr.Enabled:=false; Label7.Caption:='0,0 s'; end;

Auch wenn die Maustaste immer gedrückt wird, kann man das Programm überlisten. Um dies zu verhindern muss zu den entsprechenden Komponenten mit dem Ereignis OnMouseDown eine entsprechende Prozedur geschrieben werden. Sie enthält den Programmtext:

if spiel_begonnen then if Button = mbLeft then SpielBeenden ('Mogeln gilt nicht!');

Dies muss für alle betroffenen Komponenten erfolgen. Teste das vollständige Programm!

Page 15: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 15 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

5. Mausreaktionen Dieses kleine Programm soll die Ereignisse verdeutlichen, die bei der Benutzung der Maus möglich sind. Erstelle dazu eine Programm- oberfläche mit einer TListBox zur Eingabe, einem BitButton, drei Labels und einem Endebutton. Im dritten Label neben dem Eingabefeld soll der Benutzer aufgefordert werden, seinen Namen einzugeben. Versuche dieses Programm selbst zu erstellen. Das Bild für den BitButton kannst du über die Eigenschaft Glyph laden. 6. Würfelspiel In diesem Spiel soll der Benutzer eine Zahl wählen. Der Computer würfelt dann eine andere Zahl, die in einem Feld angezeigt wird. Es soll angezeigt werden, ob der Spieler gewonnen oder verloren hat, wie oft er gewonnen oder verloren hat und welche Zahl der Computer gewürfelt hat. Beim Beenden soll gefragt werden, ob wirklich beendet werden soll und die Entscheidung zum Beenden bestätigt werden. Zunächst wird eine Oberfläche benötigt. Erstelle auf einem Panel fünf Shapes. Ändere die Farbe des Panels und über die Eigenschaft Shape die Form der Shapes. Ändere auch ihre Farbe.

Label3

Label1

Label2

Page 16: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 16 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

Halte bei den Shapes die nebenstehende Nummerierung ein, damit die Programmbeispiele sich problemlos übertragen lassen. Erstelle weiterhin die benötigten Buttons (btnschliessen btn1,2 etc.) und Labels. Die Label, deren Caption verändert wird heißen lblverloren, lblgewonnen, lblcompzahl und lblanzeige. Ergänze den Quelltext für den Schließen-Button, speichere das Programm und teste es. Nun zum Programmtext. Wenn der Nutzer auf den Button Eins Klickt, muss die Zahl, die er gewählt hat, gespeichert werden. Dafür wird die Variable ratezahl global als Integer deklariert und in den Programmtext zum Button kommt der Text ratezahl:=1;. Jetzt muss der Computer würfeln, also eine Zufallszahl erzeugen. Dazu wird mit Randomize; der Zufallsgenerator gestartet und eine Zahl zwischen 0 und sechs generiert: zufallszahl:=Random(6)+1; , wobei die Variable zufallszahl ebenfalls global als Integer deklariert wird. Die Funktion Random berechnet eine Zufallszahl zwischen Null und dem in Klammern angegebenen Maximalwert, also 5,99... Das +1 ist nötig, da bei einem Integer-Wert die Werte nach dem Komma abgeschnitten werden. Es würden dann Werte zwischen 0 und fünf herauskommen. Random ohne den Wert in den Klammern würde eine Gleitkommazahl zurückgeben. Jetzt wird die Zufallszahl noch in einen String umgewandelt, damit sie auch in einem Label angezeigt werden kann: str(zufallszahl:4,zufallstr); Natürlich muss auch die neue Variable zufallstr global deklariert werden, ebenso wie alle noch folgenden Variablen. Dann kann man sie im Label lblcompzahl anzeigen lassen. Natürlich muss der Nutzer noch angezeigt bekommen, ob er gewonnen oder verloren hat und auch seine Punkte müssen gezählt werden. Es wäre sehr lästig, dies bei allen Buttons in den Programmtext zu schreiben. Effektiver ist es, eigene Prozeduren zu definieren, die immer gleiche, wiederkehrende Abläufe enthalten. Dazu wird im oberen Teil des Programmtextes die Prozedur benannt, hier procedure auswertung; und dann kann sie weiter unten mit Inhalt gefüllt werden. Im folgenden Programmtext werden die Gewinnpunkte bei erfolgreichem Raten um eins erhöht und in einen String umgewandelt, damit sie im Label angezeigt werden können. Außerdem erhält die Variable labelanzeige den Inhalt gewonnen.. Bei falschem Raten wird dagegen die Zahl der verlorenen Punkte erhöht und die Variable labelanzeige erhält den Inhalt verloren.. Nun muss die Prozedur nur noch aufgerufen werden.

1 2 3 7 4 5 6

Page 17: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 17 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

procedure auswertung; Begin if zufallszahl = ratezahl then begin gewonnen:= gewonnen+1; str(gewonnen:4,gewonnenstr); labelanzeige:='gewonnen.' end else begin verloren:=verloren+1; str(verloren:4,verlorenstr); labelanzeige:='verloren.'; end; end;

Der Aufruf der Prozedur erfolgt, indem ihr Name in den Programmtext des Buttons eingebaut wird, also

Randomize; ratezahl:=1; zufallszahl:=Random(6)+1; wuerfelanzeige; str(zufallszahl:4,zufallstr); lblcompzahl.Caption:=zufallstr; auswertung; lblanzeige.Caption:=labelanzeige; lblverloren.Caption:=verlorenstr; lblgewonnen.Caption:=gewonnenstr;

Noch tut sich aber beim eigentlichen Würfel nichts. Eigentlich soll hier ja angezeigt werden, was der Würfel gewürfelt hat. Für jeden möglichen Zustand des Würfels muss nun eine eigene Prozedur geschrieben werden, die alle Shapes, die nicht zur gewürfelten Zahl passen, also z.B. eins, unsichtbar machen:

procedure eins; Begin Form1.shape1.Visible:=false; Form1.shape2.Visible:=false; Form1.shape3.Visible:=false; Form1.shape4.Visible:=false; Form1.shape5.Visible:=false; Form1.shape6.Visible:=false; Form1.shape7.Visible:=true; end;

Der Ausdruck Form1.Shape1 ist nötig, damit klar ist, welches Objekt angesprochen wird, denn diese Prozedur ist ja keinem Objekt zugeordnet. Würde dort nur Shape stehen, gäbe es eine Fehlermeldung. Nun ist nur noch zu prüfen, welche Zahl gewürfelt wurde und die entsprechende Prozedur aufzurufen:

Page 18: Einführung in das Programmieren mit Delphi mit Deckblatttorstenm.de/.../if_unterrichtsmaterialien/einfuehrung_delphi.pdf · - 3 - Einführung in das Programmieren mit Delphi mit

- 18 - Einführung in das Programmieren mit Delphi mit Deckblatt.doc

procedure wuerfelanzeige; begin if zufallszahl = 1 then eins; if zufallszahl = 2 then zwei; if zufallszahl = 3 then drei; if zufallszahl = 4 then vier; if zufallszahl = 5 then fuenf; if zufallszahl = 6 then sechs; end;

Baut man diese Prozedur in die Programmtexte zu den Buttons 1 bis 6 ein, so erscheinen nur noch die gewürfelten Punkte. Ergänze das Programm, so dass es vollständig funktioniert. Es fehlen noch die Programmtexte für die Würfelzahlen zwei bis sechs und die Programmtexte für die Buttons zwei bis sechs. Teste das Programm! Literatur Geisler / Geisler: Delphi GE-PACKT. MITP-Verlag Bonn, 2002, 1056 S. Lang / Bohne: Delphi 6 Lernen, Addison-Wesley München, 2004, 426 S. Binzinger: Jetzt lerne ich Delphi. Marekt und Technik Verlag München, 2004, 476 S. Doberenz / Kowalski: Borland Delphi 7. Grundlagen und Profiwissen. Hanser Verlag München, 2003, 1024 S. Doberenz / Kowalski: Kochbuch Borland Delphi 7. Hanser Verlag München, 2003, 1049 S.