If-Then-Else: Eine Einführung in die Programmierung: Unterschied zwischen den Versionen
(→Wenn-Dann-Sonst) |
|||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 34: | Zeile 34: | ||
:Wenn eine Bedingung '''nicht''' zutrifft, wird der Code ausgeführt. '''Else''' ist optional, muss also nicht angegeben werden. | :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; | ||
+ | |||
+ | |||
+ | == 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; | ||
== Fallstricke == | == Fallstricke == | ||
Zeile 45: | Zeile 91: | ||
Betrachten wir mal diesen Code: | Betrachten wir mal diesen Code: | ||
− | + | ||
if <RechnungsKopf."KENNZ1"> = 'gruppe' then | if <RechnungsKopf."KENNZ1"> = 'gruppe' then | ||
Memo31.Visible:=True | Memo31.Visible:=True | ||
Zeile 55: | Zeile 101: | ||
else | else | ||
Memo31.Visible:=False; | 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. | ||
+ | |||
+ | |||
Zeile 61: | Zeile 125: | ||
:Unabhängig vom Beispiel sollte man Textwerte immer in Großbuchstaben mit der Funktion UpperCase() abfragen, also | :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. | :Objekte, die im Code angesprochen werden, sollten aussagekräftige Namen bekommen. Statt "Memo31" sollte man z.B. "MemoZwischensumme" verwenden. |
Aktuelle Version vom 18. Mai 2019, 21:37 Uhr
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.