Functions

Now reading version 19. For the latest, read: Functions for version 25

The common function statements used by the DelphiScript language are covered below. The range of DelphiScript functions are presented in sections for FileIO routines, Math routines, String routines, and Extension routines.

Calculating Expressions with the Evaluate Function

The built-in function Evaluate interprets a string containing a valid mathematical expression during runtime and a result is returned. For example, you can write a script such as Evaluate(ProcNames[ProcIndex]); and the procedure specified in ProcNames[ProcIndex] will be called.

To calculate such an expression, you can use the Evaluate method where expression is specified by the Expr parameter. For example, you can calculate expressions such as the following:

Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');

Passing Parameters to Functions and Procedures

Both functions and procedures defined in a script can be declared to accept parameters. Additionally, functions are defined to return a value. Types of parameters in procedure/function declarations are ignored and can be skipped. For example, this code is correct:

Function sum(a, b) : integer;
Begin
  Result := a + b;
End;

Exiting from a Procedure

DelphiScript provides Exit and Break statements to force a procedure to exit before it would terminate naturally. For example; if the value of a parameter is not suitable, you might want to issue a warning to the user and exit, as the example below shows.

Procedure DisplayName (s);
Begin
  If s = '' Then
  Begin
    ShowMessage('Please enter a name');
    Exit;
  End;
  ShowMessage(S + ' is shown');
End;

File IO Routines

DelphiScript has the following IO routines:

Append

AssignFile

ChDir

CloseFIle

Eof

Eoln

Erase

GetDir

MkDir

Read

Readln

Reset

Rewrite

RmDir

Write

Writeln

 

 

DelphiScript gives you the ability to write information to a text file, and since DelphiScript is an untyped language, all values must be converted to strings first.

Here, Read and ReadLn routines are equivalent — they read a line up to, but not including, the next line. A Writeln(String) routine is equivalent to a Write(S) and a Write(LineFeed + CarriageReturn) routine.

To write out a text file, employ the AssignFile, ReWrite, Writeln and CloseFile procedures. To read in a text file, use the AssignFile, Reset, Readln, and CloseFile procedures. The below example writes to a text file and adds an end-of-line marker. Using the Try / Finally / End block is recommended to make scripts secure in the event of an IO failure.

Example:

Var
  InputFile : TextFile;
  OutputFile : TextFile;
  I          : Integer;
  Line       : String;
Begin
  AssignFile(OutputFile,eConvertedFile.Text);
  Rewrite(OutputFile);
  AssignFile(InputFIle,eOriginalFIle.Text);
  Reset(InputFile);
 
  Try
  While not EOF(InputFile) do
  Begin
    Readln(InputFile,Line);
    For I := 1 to Length(Line) Do
      Line[I] := UpperCase(Line[I]);
      Writeln(Outputfile, Line);
    End;
  Finally
    CloseFile(InputFile);
    CloseFile(OutputFile);
  End;
End;

Math Routines

DelphiScript has the following math routines:

Abs

ArcTan

Cos

Exp

Frac

Int

Random

Randomize

Round

Sin

Sqr

Sqrt

Trunc

 

 

String Routines

DelphiScript has the following string routines, which can manipulate strings or characters. Only a subset of string routines (most of the string routines used by DelphiScript are imported from the Embarcadero Delphi's SysUtils unit) are shown in the table below:

AnsiCompareStr

AnsiCompareText

AnsiDequotedStr

AnsiExtractQuotedStr

AnsiLowerCase

AnsiPos

AnsiQuotedStr

AnsiSameStr

AnsiSameText

AnsiUpperCase

CompareStr

CompareText

Copy

Delete

FloatToStr

FloatToStrF

Format

Frac

Insert

Int

IsDelimiter

LastDelimiter

Length

LowerCase

Ord

Pos

Pred

QuotedStr

Round

SameText

SetLength

StringOfChar

StringToGUID

Succ

Trim

TrimLeft

TrimRight

UpCase

UpperCase

WideUpperCase

WideLowerCase

WideSameStr

WideSameText

 

 

String routines that are not supported by DelphiScript are outlined in the table below:

AnsiContainsStr

AnsiContainsText

AnsiEndsStr

AnsiEndsText

AnsiIndexText

AnsiMatchStr

AnsiMatchText

AnsiReplaceStr

AnsiReplaceText

AnsiResemblesProc

AnsiResemblesText

AnsiStartsStr

AnsiStartsText

Concat

DecodeSoundExInt

DecodeSoundExWord

DupeString

LeftStr

MidStr

NullStr

ReverseString

RightStr

SetString

SoundEx

SoundExCompare

SoundExInt

SoundExProc

SoundExSimilar

SoundExWord

Str

StuffString

Val

 

Extension Routines

Extension routines are used when dealing with server processes (a command is a packaged server process with parameters, if any) in scripts, especially if you need to extract or set strings for the parameters of processes. Some of the routines are listed below.

To execute parameters of processes in a script, the following functions may be needed:

AddColorParameter

AddIntegerParameter

AddLongIntParameter

AddSingleParameter

AddWordParameter

GetIntegerParameter

GetStringParameter

ResetParameters

RunProcess

Useful functions:

SetCursorBusy

ResetCursor

CheckActiveServer

GetActiveServerName

GetCurrentDocumentFileName

RunApplication

SaveCurrentDocument

 

 

Useful dialogs:

ConfirmNoYes

ConfirmNoYesCancel

ShowError

ShowInfo

ShowWarning

 

Using Sets in DelphiScript

Embarcadero Delphi's Set and In keywords, and the set operators +, -, *, <= and >= are not supported in DelphiScript. The equivalent Set Operator keywords are tabulated below.

DelphiScript has no set types. To use sets in DelphiScript scripts, use the built-in functions; MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection, and SubSet functions that enable sets to be manipulated in a DelphiScript script. These are described in more detail below.

Set Operators

Embarcadero Delphi Set Operator keyword

Equivalent DelphiScript Set Operator keyword

+

SetUnion

-

SetDifference

*

SetIntersection

<=

SubSet

=

=

<>

<>

In

InSet

MkSet Function

The MkSet function is a set constructor with a variable number of arguments. For example:

Font.Style = MkSet(fsBold,fsItalic);

The MkSet(fsBold,fsItalic) here denotes two set elements only; fsBold and fsItalic.

MkSetRange Function

The MkSetRange function is a set contructor with a range of arguments. For example:

LayerSet := MkSetRange(eTopLayer,eBottomLayer);

The MkSetRange(eTopLayer,eBottomLayer) function denotes a range of layers from eTopLayer to eBottomLayer.

InSet Function

This InSet function is used as a substitution of Delphi's In operator. A in B is equal to InSet(A, B).

If InSet(A,B) then
  ShowMessage('A is in B set')
Else
  ShowMessage('A not in B set');

SetUnion Function

The SetUnion function is used as a substitution of Delphi's + operator. A + B is equal to SetUnion(A, B).

ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.

SetDifference Function

The SetDifference function is used as a substitution of Delphi's - operator. A - B is equal to SetDifference(A, B).

SetIntersection Function

The SetIntersection function is used as a substitution of Delphi's * operator. A * B is equal to SetIntersection(A, B).

SubSet Function

The SubSet function is used as a substitution of Object Pascal's <= operator. A <= B is equal to SubSet(A, B).

Using Exception Handlers

The Try keyword introduces a Try-Except statement or a Try-Finally statement. These two statements are related but serve different purposes:

Try-Finally

With Try-Finally, the statements in the Finally block are always executed regardless of whether an exception from the Try block, Exit or Break occurs. Use the Try-Finally block to free temporary objects and other resources and to perform clean-up activities.

Typically, only one Try-Finally statement is needed in a subroutine.

Example:

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try-Except

Use Try-Except to handle exceptional cases. For example, to catch specific exceptions and do something useful with them, such as log them in an error log or create a friendly dialog box. Since the On keyword is not supported in DelphiScript, the Raise statement is used inside the Except block.

Example:

Try
  X := Y/Z;
Except
  Raise('A divide by zero error!');
End;

Raise

The Raise keyword is related to the Try keyword. The Raise keyword can be used without parameters to re-raise the last exception. It can also be used with a string parameter to raise an exception using a specific message.

Example:

Raise(Format('Invalid Value Entered : %d', [Height]));

Note that since the On keyword is not supported, the Exception objects (available in Embarcadro Delphi) cannot be used.

If you find an issue, select the text/image and pressCtrl + Enterto send us your feedback.
Note

The features available depend on your Altium product access level. Compare features included in the various levels of Altium Designer Software Subscription and functionality delivered through applications provided by the Altium 365 platform.

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Content