If-Then-Else: Eine Einführung in die Programmierung
Inhaltsverzeichnis
1 Allgemeines
Die "Intelligenz" eines Formular-Reports ergibt sich aus dem Code, der im Hintergrund ausgeführt wird, denn der Report ausgeführt wird.
Der Code ist eine Programmierung in einer bestimmten Sprache.
2 Sprache
Wir verwenden "Pascal"-Code in unseren Formularen.
FastReport unterstützt diese Sprachen:
- C++
- Basic
- JavaScript
- Pascal
- Achtung!
- Wenn Sie die Sprache in einem bestehenden Code nachträglich ändern, wird der komplette Code gelöscht!
3 Wenn-Dann-Sonst
Die wichtigsten Befehle in der Programmierung sind
- if
- Trifft eine Bedingung zu?
- then
- Wenn eine Bedingung zutrifft, wird der Code ausgeführt.
- else
- Wenn eine Bedingung nicht zutrifft, wird der Code ausgeführt. Else ist optional, muss also nicht angegeben werden.
Beispiel:
// Wenn der Gesamtpreis 0 ist, den Einzelpreis unterdrücken: // (z.B. bei 100 % Rabatt) if <Positionen."GesBetrag"> = 0 then begin memoPosEinzelPreis.Visible := False; memoPositionenRabattProz.Visible := False; end;
- Hinweis
- Zeilen, die mit // beginnen, sind Kommentare. Diese werden nicht ausgeführt, sondern sollen den Code beschreiben.
- Kommentare sollte häufig verwendet werden!
Im Einzelnen:
if <Positionen."GesBetrag"> = 0 then
Wenn im Feld Positionen."GesBetrag" eine 0 steht, soll der folgende Code ausgeführt werden.
begin ... end;
Wenn der folgende Code mehrere Zeilen umfasst, muss man diese mit begin und end einschließen. Wenn der folgende Code nur aus einer Zeile besteht, kann man begin und end weglassen:
if <Positionen."GesBetrag"> = 0 then memoPosEinzelPreis.Visible := False;
4 Verschiedene Abfrage-Typen
Im Beispiel ob wird eine Zahl abgefragt, die 0.
Wenn man einen Text abfragt, muss man diesen in einfache Anführungszeichen setzen:
// Kennzeichen 3 = Einzelpreise sichtbar Ja/Nein: if <RechnungsKopf."KENNZ3"> = 'Nein' then begin MemHeaderEinzPreis.Visible := False; memoHeaderRabattTitel.Visible := False; memoHeaderGesPreis.Visible := False; end;
5 Fallstricke
5.1 Mehrere if-then-else hintereinander
Wenn man mehrere Bedingungen hintereinander schreibt, die das gleiche behandelt, kann das fatal werden.
Beispiel:
Betrachten wir mal diesen Code:
if <RechnungsKopf."KENNZ1"> = 'gruppe' then Memo31.Visible:=True else Memo31.Visible:=False; if <RechnungsKopf."KENNZ1"> = 'nur gruppe' then Memo31.Visible:=True else Memo31.Visible:=False;
Im ersten Block wird Memo31.Visible entweder auf True oder False gesetzt.
Im zweiten Block wird Memo31.Visible aber auch entweder auf True oder False gesetzt. Das Ergebnis des ersten Blocks wird also ignoriert!
Besser geht es so:
if ( <RechnungsKopf."KENNZ1"> = 'gruppe' ) or ( <RechnungsKopf."KENNZ1"> = 'nur gruppe' ) then Memo31.Visible:=True else Memo31.Visible:=False;
Hier wird in einer Abfrage mit der Befehl " or " (oder) gefragt, ob eine den beiden Bedingungen zutrifft.
- Bemerkungen
- Unabhängig vom Beispiel sollte man Textwerte immer in Großbuchstaben mit der Funktion UpperCase() abfragen, also
if UpperCase(<RechnungsKopf."KENNZ1"> ) = 'NUR GRUPPE' then
- Objekte, die im Code angesprochen werden, sollten aussagekräftige Namen bekommen. Statt "Memo31" sollte man z.B. "MemoZwischensumme" verwenden.