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.