编写脚本

 

编写脚本

有许多基本概念和术语适用于编写脚本:

  • 进程是您可以用来在脚本中执行命令的命令字符串。
  • 组件是工具面板上的可视控制对象,您可以将其拖放到脚本表单上以操纵设计。
  • 放置在脚本表单上的组件具有方法、属性和事件。
  • 对象接口是特殊的对象接口,您可以使用它们从脚本中提取和修改设计文档上的数据。

脚本语言

默认脚本语言设置为DelphiScript*.pas)。脚本引擎本身是用Embarcadero Delphi编写的,而工具面板是基于Delphi的VCL(可视组件库)。

  • 您可以打开并运行用 VBScript 和 JavaScript (Jscript) 编写的现有脚本。为了能够创建用 VBScript 编写的新脚本,您必须在高级设置对话框中启用Legacy.Scripts.SupportOldLanguages选项。
  • 脚本 API 的文档可以在这里找到:脚本 API 对象。请注意,此文档最后一次更新是针对 Altium Designer 的旧版本。虽然许多原理和方法将保持不变,但请意识到接口、对象、方法、属性等自那时以来已经发生了变化,并且不会反映在软件后续版本中找到的全部内容。

一个 DelphiScript 单元

通过首先创建一个新项目和脚本文件,可以完成一个快速且基础的脚本编写练习。假设项目和脚本文件设置为DelphiScript语言,可以输入如下的简单“Hello World”脚本。

Procedure ShowAMessage;
Var
 DefaultMessage;
Begin
 DefaultMessage := 'Hello World!';
 ShowMessage(DefaultMessage);
End;
当文档被编辑时,脚本文档旁会出现一个星号,并且项目面板上的图标会变成红色。当脚本代码行被编辑时,该行左边距会出现一个红色的块,表示该行已更改。

在该程序中,有一个标准的 DelphiScript ShowMessage 函数,它会打开一个对话框,显示由 DefaultMessage 变量定义的“Hello World”消息。

由于脚本中所有变量都是变体类型,因此无需在脚本中定义 DefaultMessage 变量类型。

运行脚本

要运行其中一个脚本,请从主菜单选择文件 » 运行脚本,然后从选择要运行的项目对话框中选择一个可用的脚本程序。当版本运行时,将打开一个对话框以显示消息。


文件»运行脚本菜单运行一个简单的HelloWorld脚本单元。

此脚本有一个没有参数的过程。只有不带参数的过程或函数才会出现在选择要运行的项目对话框中。需要传递参数的过程是从脚本内部(或另一个脚本)调用的,而不是从像选择要运行的项目对话框这样的外部系统调用的,因为外部系统不传递参数。

脚本也可以通过编辑器的运行命令执行,可以通过运行按钮()、F9快捷键,或者从主菜单选择运行 » 运行来访问。

除了运行命令本身,下拉运行菜单还提供了一系列脚本控制和调试命令。除了运行命令本身,下拉运行菜单还提供了一系列脚本控制和调试命令。

当第一次选择运行命令时,将打开选择要运行的项目对话框,允许您指定脚本的主要过程(在此例中为ShowAMessage)。设置完成后,使用运行命令可以轻松地从编辑器重复运行脚本。使用运行 » 设置项目启动过程更改为不同的过程,或关闭并重新打开脚本项目以清除设置。

要停止正在运行的脚本,请使用停止按钮(),从主菜单选择运行 » 停止,或使用Ctrl+F3快捷键。

一个 DelphiScript 表单

在上面创建的 HelloWorld 项目的基础上,可以使用表单单元创建一个类似的脚本。

脚本表单是一个对话窗口,可以承载各种控件,如按钮、备忘录和列表框。它具有事件处理程序,当控件生成事件时会做出响应,例如当按钮被点击时。

要创建新的脚本表单,请在项目面板中右击项目名称,选择添加新项目到项目选项,并选择脚本表单。可以通过主菜单中的文件»另存为来保存和重命名脚本。

在新建的脚本项目中,添加一个新脚本。在新建的脚本项目中,添加一个新脚本。

脚本表单会创建两个文件:一个是定义表单窗口元素和句柄的*.dfm文件,另一个是承载表单的事件处理程序和过程或函数的*.pas文件。

要查看和编辑当前聚焦表单或其组件的属性值,请打开对象检查器面板。对象检查器面板用于更改表单的属性并在与当前表单关联的事件处理程序中插入代码。

在对象检查器面板中展示了脚本表单的窗口配置和属性。
对象检查器面板中展示了脚本表单的窗口配置和属性。

请注意,脚本表单在文档底部提供了两个标签页:**代码** 和 **表单** 标签页。 **代码** 标签页包含如上所示的事件处理程序和过程,而表单标签页代表对话框,并具有控件和相关的事件处理程序。使用标签页或 **F12** 快捷键在两者之间切换。 “对话框”和“脚本表单”在本指南中描述上是等价的。 “表单”一词指的是在脚本系统中实时设计的窗口,“对话框”是软件中等待用户反馈并在点击了对话框按钮或控件时采取行动的活动表单。

对象检查器面板允许您查询和编辑活动脚本表单中组件的属性和事件。在设计编辑器窗口中点击活动脚本表单上的单个组件将选择该组件,并在对象检查器面板中显示与之相关的属性。或者,使用面板顶部的下拉字段从当前放置在活动表单上的所有组件列表中选择。表单本身也包括在内。

 
使用对象检查器面板来配置表单对话框及其操作。

信息显示在两个标签页上 - 属性事件

  • 面板的属性标签列出了所选组件的所有属性特征。可用的属性列表将取决于当前正在检查的特定组件类型。属性是影响对象可见行为或操作的对象特征。例如,可见属性(在行为子类别中)决定了对象是否在其放置的脚本表单上显示。组件的属性可以根据需要进行修改。点击属性右侧的字段内部,直接输入、切换复选框或从下拉菜单中选择一个条目,视情况而定。
  • 面板的事件标签提供了当前选定组件可以响应的所有事件的列表。同样,可用的事件列表将取决于当前正在检查的特定组件类型。当发生事件时,例如表单上的按钮被点击,脚本将采取适当的行动,前提是已经在代码中定义了事件的处理程序。这种程序被称为事件处理程序。
事件处理程序的基本框架可以通过对象检查器面板添加到脚本文档的代码中。只需选择您希望为其定义事件的组件,选择特定类型的事件,然后双击事件右侧的字段内部。为事件创建一个名称,并在事件处理程序的名称定义中使用 - FormName.EventName。然后,事件处理程序的框架代码被添加到主脚本代码中,该代码在设计空间中成为活动标签。然后可以编写事件处理程序的“填充”代码,以在事件发生并被运行中的脚本检测到时提供所需的响应。

面板的底部部分提供了当前选中的属性或事件的摘要描述(如果有的话)。

可以同时选择和编辑多个组件。在选择中所有组件共有的属性/事件将会在面板中显示。组件之间值不同的属性/事件将会显示为空白。只需按需编辑属性和/或事件 - 所做的更改将立即传达给选择中的每个组件。例如,您可能希望将多个按钮上使用的文本更改为特定字体。选择所有按钮并按需更改字体类别下列出的属性 - 所有按钮将更新,以使用相同的字体显示其文本。

对于这个表单脚本,在对象检查器面板中将表单的标题属性从HelloWorldForm更改为Hello World!。这些字符串与下面进一步显示的示例事件处理程序和过程代码中使用的字符串相匹配。

有关组件及其属性、方法和事件的更详细信息,请参阅组件类别页面。

添加和配置控件

配置好基本表单后,可以根据需要通过访问工具面板来向对话框添加控件。基于Delphi的可视组件库的工具面板是一个组件面板,它提供了一系列窗口控件,这些控件按组件类别组织(有关更多详细信息,请参阅脚本图形组件组件类别页面)。


通过区域标题标签可以展开和折叠工具面板的各个部分。 使用面板顶部的控件、类别名称和右键菜单来配置面板中控件的展示方式:展开/折叠类别,更改调色板项目的展示方式等。
面板中使用的所有组件都源自 Borland Delphi 视觉组件库中的TComponent

在“Hello World”项目的对话框版本中,表单上有两个按钮 - 显示关闭。点击工具面板标准区域的TButton

这样做两次,以在表单上放置两个按钮。一个按钮将用于在单独的对话框中显示“Hello World!”消息,另一个按钮将用于关闭主对话框。

通过在工具面板上双击组件或单击一次组件然后点击您希望组件出现的表单位置,可以将组件放置在脚本表单上。

面板中的所有组件都有关联的属性、方法和事件,其中:

  • 一个属性是影响对象可见行为或操作的对象特征。例如,Visible属性决定了一个对象是否可以在脚本表单上被看到。
  • 一个方法是总是与一个对象关联的过程,定义了那个对象的行为。
  • 一个事件是脚本检测到的动作或发生的事情。在脚本中,程序员为每个事件处理器编写代码,这些事件处理器设计用来捕捉特定事件,如鼠标点击。

使用对象检查器面板,可以在放置后查询和修改组件的属性和事件。

通过对象检查器面板,可以将两个按钮配置从它们的默认名称和标题更改。

将第一个按钮的名称配置为,其标题配置为显示。将第二个按钮的名称配置为bClose,其标题配置为关闭。这是为了匹配下面呈现的示例事件处理程序代码。
对象检查器面板中选择一个组件并编辑其属性。
对象检查器面板底部的评论框提供了突出显示属性的描述。

事件处理程序代码可以通过直接引用表单上的控件来构建。在这个例子中,显示按钮将触发一个在现有表单上方的ShowMessage对话框,而关闭按钮动作将关闭此表单。

事件处理程序代码

双击显示按钮将以代码视图打开表单,并为其事件处理程序创建骨架代码。或者,选择按钮然后在对象检查器面板中选择事件标签。在面板中双击OnClick事件也会如上打开代码视图。在代码视图中,可以如下所示在事件处理程序中包含ShowMessage语句。

```delphi 程序 THelloWorldForm.bDisplayClick(发送者: TObject); 开始 显示消息('你好,世界!'); 结束; ``` 要查看脚本表单上任何组件的预定义事件处理程序,请选择该组件,然后在“对象检查器”面板中点击事件标签。 同样,可以通过生成一个应用了关闭(表单)语句的OnClick事件来定义关闭按钮的事件处理程序: ```delphi 程序 THelloWorldForm.bCloseClick(发送者: TObject); 开始 关闭; 结束; ```

定义了事件处理程序后,脚本中需要有一个过程作为从软件调用对话框时的起点。这将添加在代码脚本的末尾。

请注意,表单名称为HelloWorldForm,过程名称为RunHelloWorld —— 在同一个脚本中拥有唯一的表单名称很重要,以避免表单名称冲突。

Procedure RunHelloWorld;
Begin
 HelloWorldForm.ShowModal;
End;

脚本可以保存然后从主菜单(文件» 运行脚本)通过运行RunHelloWorld过程项下的HelloWorldDialog条目来运行。

或者,可以通过运行»设置启动项目过程菜单将过程分配给运行命令/按钮()

运行一个HelloWorld表单脚本,其中表单的显示按钮激活一个ShowMessage对话框。
运行一个HelloWorld表单脚本,其中表单的显示按钮激活一个ShowMessage对话框。

对象检查器面板使得更改表单单元的属性和事件变得简单。例如,要更改工作区中表单的位置,使用面板更改表单位置属性的poScreenCenter值。当脚本运行时,对话框现在将被放置在桌面屏幕的中心。

可以在可下载的脚本集合中的Scripts\Delphiscript Scripts\General文件夹找到Hello World项目脚本的参考版本。请记住,这些是遗留的参考设计,并且没有更新。

调用一个过程

如上所述,项目中的任何脚本(使用相同的语言集)都可以访问全局变量和程序,因此一个脚本中的程序可以调用项目中另一个脚本的程序。 这可以通过HelloWorld示例项目中额外的`ShowAParametricMessage`代码部分来演示: ``` Procedure ShowAParametricMessage(S : String); Var DefaultMessage; Begin DefaultMessage := 'Hello World!'; If S = '' Then ShowMessage(DefaultMessage) Else ShowMessage(S); End; ``` 这建立了一个字符串变量`S`,可以传递给`ShowAParametricMessage`程序。

传递的字符串将通过ShowMessage对话框函数显示,而一个简单的If-Then-Else方法会在字符串为空时显示默认的'Hello World!'消息。

要看到这个操作,请打开示例项目(HelloWorld.PrjScr)并将灰色高亮的行添加到HelloWorldDialog脚本中(不是HelloWorld脚本),如下所示。

``` ... 程序 THelloWorldForm.bDisplayClick(发送者: TObject); 开始 Showmessage('Hello World!'); 结束; 程序 THelloWorldForm.bCloseClick(发送者: TObject); 开始 ShowAParametricMessage('Goodbye World'); 关闭; 结束; 程序 RunHelloWorld; 开始 HelloWorldForm.ShowModal; 结束; ... ``` 当运行 HelloWorldDialog 脚本并点击关闭按钮时,将从 HelloWorld 脚本调用全局`ShowAParametricMessage`过程。


在HelloWorld脚本中调用了HelloWorldDialog脚本的参数化过程。

调用向ShowAParametricMessage过程传递了'Goodbye World'消息字符串,因此在点击关闭按钮、表单关闭之前,会显示此消息。


上图所示的脚本调用在HelloWoldDialog表单关闭程序中插入了一个指定的消息。 如果传递的字符串参数为空,`ShowAParametricMessage(''),` 将显示默认的'Hello World!'消息,如`ShowAParametricMessage`程序中定义的。
要获取帮助简化编写和调试脚本过程的快捷键列表,请参考脚本编辑器工具页面。

使用代码资源管理器面板浏览脚本标识符

代码资源管理器面板提供了一个视觉摘要,展示了活动脚本文档中使用的所有标识符(变量、函数和过程)。

代码资源管理器面板
代码资源管理器面板

面板中出现的标识符信息按照以下顶级文件夹分组:

  • 程序与函数 – 包括活动脚本文档中声明的所有程序和函数。对于每个程序/函数,还列出了传递给该程序/函数的任何参数或局部变量。

  • 变量 – 包括活动脚本文档中声明的所有全局变量。

如果为过程/函数声明了局部变量,它们将出现在该过程/函数下的变量子文件夹中列出。使用独特的图标来区分各种标识符:

过程

函数

过程/函数参数

变量(局部或全局)

在面板中双击一个条目(或选择它并按Enter键)将跳转到设计空间中相应的代码区域。
如您发现任何问题,请选中相关文本/图片,并按 Ctrl + Enter 键向我们提交反馈。
功能可用性

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

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

旧版文档

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

Content