If <Bedingung> then ... Befehlsfolge 1 else ... Befehlsfolge 2
Wird die angegebene Bedingung mit JA beantwortet (wird die Bedingung erfüllt), dann wird die Befehlsfolge 1 (steht hinter dem then) ausgeführt. Andernfalls wird die Befehlsfolge 2 (nach else) ausgeführt.
Damit können wir das folgende Projekt realisieren, in dem einfach die Textattribute eines "Label-Textes" mit Hilfe von sogenannten "CheckBoxes" verändert werden sollen:
unit Textatr; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; CheckBoxFett: TCheckBox; CheckBoxKursiv: TCheckBox; CheckBoxUnterstrichen: TCheckBox; Button1: TButton; procedure CheckBoxUnterstrichenClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure CheckBoxFettClick(Sender: TObject); procedure CheckBoxKursivClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.CheckBoxUnterstrichenClick(Sender: TObject); begin If CheckBoxUnterstrichen.Checked then Label1.Font.Style:=Label1.Font.Style+[fsUnderline] else Label1.Font.Style:=Label1.Font.Style-[fsUnderline]; end; procedure TForm1.Button1Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.CheckBoxFettClick(Sender: TObject); begin If CheckBoxFett.Checked then Label1.Font.Style:=Label1.Font.Style+[fsBold] else Label1.Font.Style:=Label1.Font.Style-[fsBold]; end; procedure TForm1.CheckBoxKursivClick(Sender: TObject); begin If CheckBoxKursiv.Checked then Label1.Font.Style:=Label1.Font.Style+[fsItalic] else Label1.Font.Style:=Label1.Font.Style-[fsItalic]; end; end.
Delphi stellt die Komponente "IMAGE" zur Verfügung. Diese verwendet die Eigenschaft "Canvas", mit der die Ausgabe von Grafikobjekten an den Bildschirm (Formular) und an den Drucker ermöglicht wird.
Zunächst wählen wir in der Komponentenpalette die Karteikarte "Zusätzlich" und wählen die Image-Komponente aus:
Die strichlierte Linie kennzeichnet die Größe des Zeichenfensters. Sein Koordinatensystem besteht aus dem Ursprung links oben, der horizontalen X-Achse nach rechts und der vertikalen Y-Achse nach unten. Positive Y-Koordinaten werden somit von oben nach unten aufgetragen (spiegelbildlich zum Koordinatensystem, das wir üblicherweise für geometrische Aufgabenstellungen in der Mathematik verwenden)!
Um Linien zeichnen zu können, werden wir beispielsweise die folgenden Methoden
verwenden:
MoveTo(X,Y:Integer)
Setzt die aktuelle Zeichenposition auf (X,Y)
LineTo(X,Y:Integer)
Linie von der aktuellen Zeichenposition bis (X,Y)
Rectangle(X1,Y1,X2,Y2:Integer)
Rechteck mit linker oberer Ecke (X1,Y1) und rechter unterer Ecke mit (X2,Y2).
Ellipse(X1,Y1,X2,Y2:Integer)
Ellipse, deren Achsenrechteck links oben in (X1,Y1) und rechts unten in (X2,Y2) liegt.
Es ist natürlich sehr, sehr sinnvoll, über die Online-Hilfe von Delphi alle weiteren Grafik-Methoden genauer nachzuschlagen!
unit Grafik; interface uses ... type TForm1 = class(TForm) Image1: TImage; Rechteck: TButton; procedure RechteckClick(Sender: TObject); ... var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.RechteckClick(Sender: TObject); begin Image1.Canvas.Rectangle(10,10,100,100); end;
Andernfalls ...
Um Zufallszahlen zu erhalten, verwenden wir die Funktion random(X).
random(X)
Erzeugt eine ganzzahlige Zufallszahl zwischen 0 und X.
Damit nicht bei jedem Programmlauf die gleichen Zufallszahlen generiert werden, ist es notwendig, mit Hilfe der Prozedur randomize eine neue Serie von Zufallszahlen zu starten.
randomize
Initialisiert den eingebauten Zufallszahlengenerator mit einer Zufallszahl (erhalten von der Systemuhr).
Beachte den Unterschied zwischen einer Funktion und einer Prozedur: Eine Funktion ist ein Programmteil, der nach der Ausführung einen Wert zurückgibt. Dieser Wert muss beim Aufruf einer Variablen zugewiesen werden. Eine Prozedur wird ausgeführt, ohne dass ein Wert zurückgegeb en wird. Sollen Daten einer Prozedur in einer anderen Prozedur verwendet werden können, muss man diese Daten beispielsweise in einer globalen Variablenspeichern.
Die globale Variable "punkte" im vorliegenden Programmtext muss zu Beginn initialisiert werden. Hier wird in der Methode FormCreate, die immer beim Starten des Programmes ausgeführt wird, der Variablen der Wert null zugewiesen. Die Prozedur inc(punkte) erhöht den Wert der Variablen "punkte" um eins, die Prozedur dec(punkte) erniedrigt den Wert um eins.
Zeichenketten können mit dem Plussymbol miteinander verkettet werden:
'Haus' + 'Tor' ergibt die Zeichenkette 'HausTor'.
Im vorliegenden Projekt werden sogenannte "SpeedButtons" verwendet. Sie werden aus der
Komponentenpalette von der Karteikarte "Zusätzlich" ausgewählt.
unit Retrain; interface uses ... type TForm1 = class(TForm) Label1: TLabel; EditZahl1: TEdit; LabelRechenart: TLabel; EditZahl2: TEdit; EditErgebnis: TEdit; LabelBeurt: TLabel; LabelScore: TLabel; ButtonPlus: TButton; ButtonMinus: TButton; ButtonMal: TButton; ButtonDiv: TButton; SpeedButton1: TSpeedButton; Label2: TLabel; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; ... var Form1: TForm1; punkte:integer; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin punkte:=0; end; procedure TForm1.ButtonPlusClick(...); begin labelrechenart.caption:='+'; end; ... procedure TForm1.SpeedButton1Click(...); begin if LabelRechenart.Caption='+' then begin if EditErgebnis.Text = IntToStr(StrToInt(EditZahl1.Text) +StrToInt(EditZahl2.Text)) then begin LabelBeurt.caption:='Richtig'; inc(punkte); end else begin LabelBeurt.caption:='Falsch'; dec(punkte); end; labelScore.caption:= IntToStr(punkte)+ ' Punkte'; EditZahl1.Text:='0'; EditZahl2.Text:='0'; end; end; ... procedure TForm1.SpeedButton2Click(...); begin EditErgebnis.Text:=''; randomize; EditZahl1.Text:=IntToStr(random(20)); EditZahl2.Text:=IntToStr(random(20)); end; procedure TForm1.SpeedButton3Click(...); begin Form1.Close; end; end.