功能

下面将介绍 DelphiScript 语言常用的函数语句。DelphiScript 函数的范围将在 FileIO 例程、数学例程、字符串例程和扩展例程等章节中介绍。

使用求值函数计算表达式

内置函数 Evaluate在运行时解释包含有效数学表达式的字符串并返回结果。例如,您可以编写一个脚本,如 Evaluate(ProcNames[ProcIndex]);中指定的存储过程将被调用。 ProcNames[ProcIndex]中指定的过程将被调用。

要计算这样一个表达式,可以使用 Evaluate方法,其中表达式由 Expr参数指定的表达式。例如,可以计算如下表达式:

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

向函数和存储过程传递参数

脚本中定义的函数和存储过程都可以声明为接受参数。此外,函数被定义为返回值。过程/函数声明中的参数类型会被忽略,可以跳过。例如,以下代码是正确的:

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

从存储过程退出

DelphiScript 提供了 ExitBreak语句来强制存储过程在自然结束之前退出。例如,如果某个参数的值不合适,您可能需要向用户发出警告并退出,如下例所示。

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

文件 IO 例程

DelphiScript 有以下 IO 例程:

Append

AssignFile

ChDir

CloseFIle

Eof

Eoln

Erase

GetDir

MkDir

Read

Readln

Reset

Rewrite

RmDir

Write

Writeln

DelphiScript 提供了将信息写入文本文件的功能,由于 DelphiScript 是一种非类型化语言,因此必须先将所有值转换为字符串。

这里是 ReadReadLn例程是等价的--它们读取一行,但不包括下一行。A Writeln(String)例程等同于 Write(S)Write(LineFeed + CarriageReturn)例程。

要写出文本文件,使用 AssignFile, ReWrite, WritelnCloseFile程序。要读入文本文件,使用 AssignFile, Reset, ReadlnCloseFile程序。下面的示例将写入文本文件并添加行结束标记。建议使用 Try / Finally / End块,以便在 IO 出现故障时确保脚本安全。

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;

数学例程

DelphiScript 有以下数学例程:

Abs

ArcTan

Cos

Exp

Frac

Int

Random

Randomize

Round

Sin

Sqr

Sqrt

Trunc

字符串例程

DelphiScript 具有以下字符串例程,可以处理字符串或字符。下表仅显示了字符串例程的一部分(DelphiScript 使用的大多数字符串例程都是从 Embarcadero Delphi 的 SysUtils 单元导入的):

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

字符串例程 not下表概述了 DelphiScript 支持的字符串例程:

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

扩展例程

扩展例程用于处理脚本中的服务器进程(命令是一个打包的服务器进程,如果有参数的话),尤其是需要提取或设置进程参数的字符串时。下面列出了其中一些例程。

要在脚本中执行进程参数,可能需要使用以下函数:

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

在 DelphiScript 中使用设置

Embarcadero Delphi 的 SetIn关键字以及集合运算符 +, -, *, = >=在 DelphiScript 中不支持。下表中列出了相应的集合运算符关键字。

DelphiScript 没有集合类型。要在 DelphiScript 脚本中使用集合,请使用内置函数; MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersectionSubSet函数,可以在 DelphiScript 脚本中对集合进行操作。下文将详细介绍这些功能。

集合操作符

Embarcadero Delphi Set Operator keyword

Equivalent DelphiScript Set Operator keyword

+

SetUnion

-

SetDifference

*

SetIntersection

=

SubSet

=

=

>

>

In

InSet

MkSet 函数

MkSet函数是一个集合构造函数,参数数量可变。例如

Font.Style = MkSet(fsBold,fsItalic);

这里的 MkSet(fsBold,fsItalic) 在这里只表示两个集合元素; fsBoldfsItalic.

MkSetRange 函数

MkSetRange函数是一个具有参数范围的集合构造函数。例如

LayerSet := MkSetRange(eTopLayer,eBottomLayer);

MkSetRange(eTopLayer,eBottomLayer)函数表示从 eTopLayereBottomLayer.

InSet 函数

InSet函数用于替代 Delphi 的 In操作符。 A in B等于 InSet(A, B).

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

SetUnion 函数

SetUnion函数用来替代 Delphi 的 + 运算符。 A + B等于 SetUnion(A, B).

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

设置差值函数

SetDifference函数用来替代 Delphi 的 - 操作符。 A - B等于 SetDifference(A, B).

SetIntersection 函数

函数 SetIntersection函数用来替代 Delphi 的 * 操作符。 A * B等于 SetIntersection(A, B).

子集函数

子集函数 SubSet函数用来替代 Object Pascal 的 =操作符。 A = B等于 SubSet(A, B).

使用异常处理程序

关键字 Try关键字引入 Try-Except 语句或 Try-Finally 语句。这两种语句相互关联,但目的不同:

Try-Finally

使用 Try-Finally,无论 Try 代码块、Exit 或 Break 是否出现异常,Finally 代码块中的语句始终会被执行。使用 Try-Finally 块释放临时对象和其他资源,并执行清理活动。

通常情况下,一个子程序中只需要一条 Try-Finally 语句。

Example:

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

Try-Except

使用 Try-Except 来处理异常情况。例如,捕获特定的异常并对其进行有用的处理,如将其记录在错误日志中或创建一个友好的对话框。由于 On关键字在 DelphiScript 中不受支持,因此 Raise语句用于 Except块中使用。

Example:

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

提升

关键字 Raise关键字与 Try关键字相关。关键字 Raise关键字可以在不带参数的情况下使用,以重新引发上一个异常。该关键字还可与字符串参数一起使用,以使用特定信息引发异常。

Example:

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

请注意,由于 On关键字,因此不能使用 Exception对象(可在 Embarcadro Delphi 中使用)。

AI-LocalizedAI 翻译
如您发现任何问题,请选中相关文本/图片,并按 Ctrl + Enter 键向我们提交反馈。
功能可用性

您可使用的功能取决于您所选择的 Altium 解决方案 —— Altium DevelopAltium Agile(Agile Teams 或 Agile Enterprise 版本),或仍在有效订阅期内的 Altium Designer。

如果您在软件中未找到文中提及的功能,请联系 Altium 销售团队了解更多信息。

旧版文档

Altium Designer 文档不再提供版本区分。如果您需要访问 Altium Designer 旧版本的文档,请前往其他安装程序页面的旧版文档部分。

Content