OBS/Makros und Scripting/Allgemeines/Syntax: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
(Achtung zu boolsche Variablen welche von OBS in den Scripter über Parameter als variant übergeben werden eingefügt) |
||
Zeile 1: | Zeile 1: | ||
{{Makros und Scripting}} | {{Makros und Scripting}} | ||
Die Makros im OBS orientieren sich an der Syntax der Sprache [https://de.wikipedia.org/wiki/Pascal_%28Programmiersprache%29 Pascal]. | Die Makros im OBS orientieren sich an der Syntax der Sprache [https://de.wikipedia.org/wiki/Pascal_%28Programmiersprache%29 Pascal]. | ||
=Variablen-Typen= | =Variablen-Typen= | ||
==string== | ==string== | ||
Variablen des Typs ''string'' enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'. | Variablen des Typs ''string'' enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'. | ||
==integer== | ==integer== | ||
Variablen des Typs ''integer'' enthalten Ganzzahlen wie 2, 15 oder 1538. | Variablen des Typs ''integer'' enthalten Ganzzahlen wie 2, 15 oder 1538. | ||
==double== | ==double== | ||
Variablen des Typs ''double'' enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.<br /> | Variablen des Typs ''double'' enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.<br /> | ||
Beispiel: | Beispiel: | ||
<source lang=delphi> | |||
Preis := 10.95; | |||
</source> | |||
==boolean== | ==boolean== | ||
Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit ''true'' oder ''false'' setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs [[OBS/Makros#if|''if'']] auch ohne Vergleichswert nutzen.<br /> | Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit ''true'' oder ''false'' setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs [[OBS/Makros#if|''if'']] auch ohne Vergleichswert nutzen.<br /> | ||
Zeile 15: | Zeile 22: | ||
<br /> | <br /> | ||
Vorbelegung: | Vorbelegung: | ||
< | <source lang="Delphi"> | ||
lVerglichen = false; | |||
lA_ist_kleiner_B = false; | |||
</ | </source><br /> | ||
<br /> | |||
Abfrage: | Abfrage: | ||
< | <source lang="Delphi"> | ||
if (not | if (not lVerglichen) then begin | ||
lA_ist_kleiner_B := A < B; | |||
lVerglichen := true; | |||
end; | end; | ||
</ | </source> | ||
{{Achtung|Boolshe Variablen, welche von OBS an den Scripter über die Parameter als variante übergeben werden, werden als Zahlen interpretiert!<br/> | |||
Dies führt dazu, dass diese boolsche Variablen nicht mit einem "not" negiert werden können.<br/> | |||
<source lang=delphi> | |||
if (not lVariable) then begin //Falsch | |||
if (lVariable = False) then begin //Richtig | |||
</source>}} | |||
=Konstanten= | =Konstanten= | ||
Zeile 32: | Zeile 48: | ||
<br /> | <br /> | ||
In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen: | In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen: | ||
< | |||
const | <source lang="Delphi"> | ||
const | |||
GRUSS = 'Mit freundlichen Grüßen'; | |||
HOMEPAGE_HINWEIS = 'Besuchen Sie uns doch mal auf unserer Homepage unter www.unsere-seite.de und erfahren '+ | |||
'Sie mehr über die ergonomische Einrichtung von Arbeitsplätzen. Für aktuelle Informationen '+ | |||
</ | 'oder Aktionen könne Sie sich auf unserer Homepage für den Newsletter eintragen.'; | ||
</source > | |||
Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie [[OBS/Makros#.C3.9Cbersicht_Konstanten|hier]]. | Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie [[OBS/Makros#.C3.9Cbersicht_Konstanten|hier]]. | ||
Zeile 45: | Zeile 63: | ||
<br /> | <br /> | ||
Beispiel Prozedur: | Beispiel Prozedur: | ||
< | <source lang="Delphi"> | ||
procedure Name(cParameter1: string; nParameter2: integer); | procedure Name(cParameter1: string; nParameter2: integer); | ||
</ | </source> | ||
Beispiel Funktion: | Beispiel Funktion: | ||
< | <source lang="Delphi"> | ||
function Name(cParameter1: string; nParameter2: integer): boolean; | function Name(cParameter1: string; nParameter2: integer): boolean; | ||
</ | </source> | ||
=Bedingte Anweisungen= | =Bedingte Anweisungen= | ||
Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür ''if'' und ''case''. Die ''case''-Anweisung unterliegt dabei allerdings im Vergleich zur ''if''-Anweisung einiger Einschränkungen. | Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür ''if'' und ''case''. Die ''case''-Anweisung unterliegt dabei allerdings im Vergleich zur ''if''-Anweisung einiger Einschränkungen. | ||
==if== | ==if== | ||
< | <source lang="Delphi"> | ||
if Bedingung then begin | if (Bedingung) then begin | ||
Befehl1; | |||
Befehl2; | |||
... | //... | ||
end; | end; | ||
</ | </source> | ||
Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.<br /> | Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.<br /> | ||
Alle Bedingungen sollen zutreffen: | Alle Bedingungen sollen zutreffen: | ||
< | |||
if Bedingung1 and Bedingung2 then begin | <source lang="Delphi"> | ||
</ | if (Bedingung1 and Bedingung2) then begin | ||
//code | |||
end; | |||
</source> | |||
Nur eine Bedingung muss zutreffen: | Nur eine Bedingung muss zutreffen: | ||
< | |||
if Bedingung1 or Bedingung2 then begin | <source lang="Delphi"> | ||
</ | if (Bedingung1 or Bedingung2) then begin | ||
//code | |||
end; | |||
</source> | |||
Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!): | Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!): | ||
< | |||
if Bedingung1 or (Bedingung2 and Bedingung 3) then begin | <source lang="Delphi"> | ||
</ | if (Bedingung1 or (Bedingung2 and Bedingung 3)) then begin | ||
//code | |||
end; | |||
</source> | |||
==case== | ==case== | ||
Die ''case''-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).<br /> | Die ''case''-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).<br /> | ||
Struktur: | Struktur: | ||
< | <source lang="Delphi"> | ||
case Wert of | case Wert of | ||
Fall1 : Anweisung; | Fall1 : Anweisung; | ||
Zeile 90: | Zeile 122: | ||
Standard-Anweisung | Standard-Anweisung | ||
end; | end; | ||
</ | </source> | ||
Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.<br /> | Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.<br /> | ||
Beispiel: | Beispiel: | ||
< | <source lang="Delphi"> | ||
case Monat of | case Monat of | ||
1,3,5,7..8,10,12 : Tage := 31; | 1,3,5,7..8,10,12 : Tage := 31; | ||
Zeile 106: | Zeile 139: | ||
Tage := 30; | Tage := 30; | ||
end; | end; | ||
</ | </source> | ||
=Schleifen= | =Schleifen= | ||
Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros. Es wird unterschieden in kopfgesteuerten und fußgesteuerten Schleifen. In den Makros können Sie zwei kopfgesteuerte (''while'' und ''for'') und eine fußgesteuerte Schleife (''repeat until'') verwenden. Der Unterschied besteht darin, dass bei kopfgesteuerten Schleifen der eingefasste Teil nur ausgeführt wird, wenn die Bedingung der Schleife dies zulässt. Bei der fußgesteuerten Schleife wird der eingefasste Teil mindestens einmal ausgeführt. Die weitere Ausführung entscheidet dann die Bedingung am "Fuß" der Schleife. | Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros. Es wird unterschieden in kopfgesteuerten und fußgesteuerten Schleifen. In den Makros können Sie zwei kopfgesteuerte (''while'' und ''for'') und eine fußgesteuerte Schleife (''repeat until'') verwenden. Der Unterschied besteht darin, dass bei kopfgesteuerten Schleifen der eingefasste Teil nur ausgeführt wird, wenn die Bedingung der Schleife dies zulässt. Bei der fußgesteuerten Schleife wird der eingefasste Teil mindestens einmal ausgeführt. Die weitere Ausführung entscheidet dann die Bedingung am "Fuß" der Schleife. | ||
==while== | ==while== | ||
Bei dieser kopfgesteuerten Schleife wird der eingefasste Code solange ausgeführt, bis die Bedingung nicht mehr erfüllt ist. Die Anzahl der Durchläufe kann abhängig von der Bedingung variieren. Es ist möglich Variablen der Bedingung innerhalb der Schleife zu verändern. Es ist möglich eine unendliche Ausführung dieser Schleife zu erzeugen. | Bei dieser kopfgesteuerten Schleife wird der eingefasste Code solange ausgeführt, bis die Bedingung nicht mehr erfüllt ist. Die Anzahl der Durchläufe kann abhängig von der Bedingung variieren. Es ist möglich Variablen der Bedingung innerhalb der Schleife zu verändern. Es ist möglich eine unendliche Ausführung dieser Schleife zu erzeugen. | ||
==for== | ==for== | ||
Schleifen vom Typ ''for'' arbeiten mit einem festen Zähler. Es kann dabei hoch sowie runter gezählt werden. Sobald der Startwert und der Endwert bestimmt sind, wird die Schleife entsprechend oft ausgefüht. Auf den Zähler kann dabei innerhalb der Schleife kein Einfluss genommen werden. | Schleifen vom Typ ''for'' arbeiten mit einem festen Zähler. Es kann dabei hoch sowie runter gezählt werden. Sobald der Startwert und der Endwert bestimmt sind, wird die Schleife entsprechend oft ausgefüht. Auf den Zähler kann dabei innerhalb der Schleife kein Einfluss genommen werden. | ||
==repeat until== | ==repeat until== | ||
Die eingefasste Code dieser fußgesteuerten Schleife wird '''wiederholt''', '''bis''' die Abbruch-Bedingung erfüllt wird. | Die eingefasste Code dieser fußgesteuerten Schleife wird '''wiederholt''', '''bis''' die Abbruch-Bedingung erfüllt wird. |
Version vom 19. Dezember 2019, 13:23 Uhr
Die Makros im OBS orientieren sich an der Syntax der Sprache Pascal.
Variablen-Typen
string
Variablen des Typs string enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'.
integer
Variablen des Typs integer enthalten Ganzzahlen wie 2, 15 oder 1538.
double
Variablen des Typs double enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.
Beispiel:
Preis := 10.95;
boolean
Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit true oder false setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs if auch ohne Vergleichswert nutzen.
Beispiel:
Vorbelegung:
lVerglichen = false;
lA_ist_kleiner_B = false;
Abfrage:
if (not lVerglichen) then begin
lA_ist_kleiner_B := A < B;
lVerglichen := true;
end;
Dies führt dazu, dass diese boolsche Variablen nicht mit einem "not" negiert werden können.
if (not lVariable) then begin //Falsch
if (lVariable = False) then begin //Richtig
Konstanten
Konstanten enthalten wie Variablen bestimmte Werte. Anders als bei Variablen werden Konstanten nicht einfach mit einem Datentyp sondern schon mit dem Wert definiert, der im ganzen Programm(-teil) verfügbar sein soll. Kostanten können nicht verändert werden.
In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen:
const
GRUSS = 'Mit freundlichen Grüßen';
HOMEPAGE_HINWEIS = 'Besuchen Sie uns doch mal auf unserer Homepage unter www.unsere-seite.de und erfahren '+
'Sie mehr über die ergonomische Einrichtung von Arbeitsplätzen. Für aktuelle Informationen '+
'oder Aktionen könne Sie sich auf unserer Homepage für den Newsletter eintragen.';
Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie hier.
Methoden
Es gibt zwei Typen: Prozedur und Funktion. Der Unterschied dabei ist, dass Funktionen einen Rückgabewert haben. Die Definition einer Methode erfolgt in der Reihenfolge Typ-Anweisung, Methodenname, Parameter und bei Funktionen der Typ des Rückgabewerts. Mehrere Parameter sind mit Semikolon zu trennen.
Beispiel Prozedur:
procedure Name(cParameter1: string; nParameter2: integer);
Beispiel Funktion:
function Name(cParameter1: string; nParameter2: integer): boolean;
Bedingte Anweisungen
Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür if und case. Die case-Anweisung unterliegt dabei allerdings im Vergleich zur if-Anweisung einiger Einschränkungen.
if
if (Bedingung) then begin
Befehl1;
Befehl2;
//...
end;
Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.
Alle Bedingungen sollen zutreffen:
if (Bedingung1 and Bedingung2) then begin
//code
end;
Nur eine Bedingung muss zutreffen:
if (Bedingung1 or Bedingung2) then begin
//code
end;
Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!):
if (Bedingung1 or (Bedingung2 and Bedingung 3)) then begin
//code
end;
case
Die case-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).
Struktur:
case Wert of
Fall1 : Anweisung;
Fall2 : Anweisung;
Fall3 : begin
Anweisung 1;
Anweisung 2;
end;
else
Standard-Anweisung
end;
Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.
Beispiel:
case Monat of
1,3,5,7..8,10,12 : Tage := 31;
2 : begin
if IstSchaltjahr then begin
Tage := 29;
end else begin
Tage := 28;
end;
end;
else
Tage := 30;
end;
Schleifen
Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros. Es wird unterschieden in kopfgesteuerten und fußgesteuerten Schleifen. In den Makros können Sie zwei kopfgesteuerte (while und for) und eine fußgesteuerte Schleife (repeat until) verwenden. Der Unterschied besteht darin, dass bei kopfgesteuerten Schleifen der eingefasste Teil nur ausgeführt wird, wenn die Bedingung der Schleife dies zulässt. Bei der fußgesteuerten Schleife wird der eingefasste Teil mindestens einmal ausgeführt. Die weitere Ausführung entscheidet dann die Bedingung am "Fuß" der Schleife.
while
Bei dieser kopfgesteuerten Schleife wird der eingefasste Code solange ausgeführt, bis die Bedingung nicht mehr erfüllt ist. Die Anzahl der Durchläufe kann abhängig von der Bedingung variieren. Es ist möglich Variablen der Bedingung innerhalb der Schleife zu verändern. Es ist möglich eine unendliche Ausführung dieser Schleife zu erzeugen.
for
Schleifen vom Typ for arbeiten mit einem festen Zähler. Es kann dabei hoch sowie runter gezählt werden. Sobald der Startwert und der Endwert bestimmt sind, wird die Schleife entsprechend oft ausgefüht. Auf den Zähler kann dabei innerhalb der Schleife kein Einfluss genommen werden.
repeat until
Die eingefasste Code dieser fußgesteuerten Schleife wird wiederholt, bis die Abbruch-Bedingung erfüllt wird.