|
Navigation: Pro Script Editor > Kurze Einführung > Sprachelemente |
|
siehe auch: Erweiterung der Scriptsprache
Sprachelemente
Zum Erstellen von Pro Scripten wird die Programmiersprache Pascal genutzt.
Unterstützte Pascal Syntax:
· begin .. end constructor
· procedure and function declarations
· if .. then .. else constructor
· for .. to .. do .. step constructor
· while .. do constructor
· repeat .. until constructor
· try .. except and try .. finally blocks
· case statements
· array constructors (x:=[ 1, 2, 3 ];)
· ^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators
· access to object properties and methods ( ObjectName.SubObject.Property )
Die Struktur eines Pro Scriptes
SCRIPT 1:
procedure DoSomething;
begin
CallSomething;
end;
begin
CallSomethingElse;
end;
SCRIPT 2:
begin
CallSomethingElse;
end;
SCRIPT 3:
function MyFunction;
begin
result:='Ok!';
end;
Wie in Pascal müssen statements mit ";" abgeschlossen werden. Begin..end Blöcke zum Gruppieren von Elementen sind erlaubt.
Identifizierer
Namen von Variablen, Funktionen und Prozeduren müssen mit einem Buchstaben (a..z or A..Z) oder '_' beginnen und können dann alphanumerische Zeichen oder '_' enthalten. Leerzeichen oder andere Zeichen sind nicht erlaubt.
Gültige Identifizierer:
VarName
_Some
V1A2
_____Some____
Ungültige Identifizierer:
2Var
My Name
Some-more
This,is,not,valid
Zuweisungsstatements
Zuweisungen erfolgen mittels ":="
MyVar := 2;
Button.Caption := 'This ' + 'is ok';
Zeichenfolgen
Zeichenfolgen werden in einfache Anführungszeichen eingeschlossen
A := 'This is a text';
Str := 'Text '+'concat';
B := 'String with CR and LF char at the end'#13#10;
C := 'String with '#33#34' characters in the middle';
Kommentare
Sie können die Zeichen // oder (* *) oder { } Blöcke nutzen um Kommentare in den Code einzufügen.
Falls Sie // Zeichen nutzen, endet der Kommentar in der gleichen Zeile.
Wenn Sie die // Zeichen hinter einer Pascal Anweisung nutzen, lassen Sie bitte hinter ";" ein LEERZEICHEN!!!!
//This is a comment before ShowMessage
ShowMessage('Ok');
ShowMessage('Yupp'); //Another comment
(* This is another comment *)
ShowMessage('More ok!');
{ And this is a comment
with two lines }
ShowMessage('End of okays');
Variablen
Auch wenn dies nicht zwingend nötig ist, sollten Sie Variablentypen im Script auch deklarieren.
script. Examples:
SCRIPT 1:
procedure Msg;
var S:string;
begin
S:='Hello world!';
ShowMessage(S);
end;
SCRIPT 2:
var A:integer;
begin
A:=0;
A:=A+1;
end;
Indizes
Strings, Arrays und Array Eigenschaften können mittels "[" und "]" indiziert werden. Falls str eine Variable vom Typ string ist,
gibt der Ausdruck Str[3] das dritte Zeichen des Strings zurück.
MyChar:=MyStr[2];
MyStr[1]:='A';
MyArray[1,2]:=1530;
Lines.Strings[2]:='Some text';
Arrays
Pro Scripte Scripte unterstützen Array Konstruktoren und Variant Arrays. Um ein Array zu erzeugen benutzt man die Zeichen "[" und "]".
Sie können Mehrdimensionale Array erzeugen, indem Sie Array Konstruktoren verschachteln.
Arrays sind 0-basierte Indexe.
NewArray := [ 2,4,6,8 ];
Num:=NewArray[1]; //Num receives "4"
MultiArray := [ ['green','red','blue'] , ['apple','orange','lemon'] ];
Str:=MultiArray[0,2]; //Str receives 'blue'
MultiArray[1,1]:='new orange';
If Statement
Unterstützt werden die Formen if..then und if..then ... else .
if J <> 0 then Result := I/J;
if J = 0 then
Exit
else
Result := I/J;
if J <> 0 then
begin
Result := I/J;
Count := Count + 1;
end
else
Done := True;
While Statement
while Data[I] <> X do I := I + 1;
while I > 0 do
begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
while not Eof(InputFile) do
begin
Readln(InputFile, Line);
Process(Line);
end;
Repeat Statement
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
repeat
Write('Enter a value (0..9): ');
Readln(I);
until (I >= 0) and (I <= 9);
For Statement
SCRIPT 1:
for c:=1 to 10 do
a:=a+c;
SCRIPT 2:
for i:=a to b do
begin
j:=i^2;
sum:=sum+j;
end;
Case Statement
case uppercase(Fruit) of
'lime': ShowMessage('green');
'orange': ShowMessage('orange');
'apple': ShowMessage('red');
else
ShowMessage('black');
end;
Deklaration von Funktionen und Prozeduren
procedure HelloWord;
begin
ShowMessage('Hello world!');
end;
procedure UpcaseMessage(Msg:string);
begin
ShowMessage(Uppercase(Msg));
end;
function TodayAsString:string;
begin
result:=DateToStr(Date);
end;
function Max(A,B:integer):integer;
begin
if A>B then
result:=A
else
result:=B;
end;
procedure SwapValues(var A, B:integer);
Var Temp:integer;
begin
Temp:=A;
A:=B;
B:=Temp;
end;
Import von DLL Funktionen
function functionName(arguments): resultType; [callingConvention]; external 'libName.dll' [name ExternalFunctionName];
Beispiel:
Die Funktionsdeklaration
function MyFunction(arg: integer): integer; external 'CustomLib.dll';
importiert eine Funktion namens MyFunction aus der DLL CustomLib.dll mit der Standardaufrufkonvention (register).
Sie können als Aufrufkonvention (stdcall, register, pascal, cdecl oder safecall) nutzen.
Beispiel:
function MessageBox(hwnd: pointer; text, caption: string; msgtype: integer):integer; stdcall; external 'User32.dll' name 'MessageBoxA';
importiert 'MessageBoxA' aus User32.dll (Windows API), genannt 'MessageBox'
Unterstützte Datentypen
Integer
Boolean
Char
Extended
String
Pointer
PChar
Object
Class
WideChar
PWideChar
AnsiString
Currency
Variant
Interface
WideString
Int64
Longint
Cardinal
Longword
Single
Byte
Shortint
Word
Smallint
Double
Real
DateTime
Andere Typen wie (records, arrays, etc.) werden nicht unterstützt!
Seitenadresse: http://www.ArchiCrypt.com/shredder5/index.html?sprachelemente.htm