表单和元件

图形组件概述

脚本系统可处理两类组件:可视组件和非可视组件。

可视组件用于构建用户界面,非可视组件用于不同的任务,例如 Timer, OpenDialogMainMenu组件。

  • 非可视组件 Timer非可视组件可用于在预定时间间隔内激活特定代码,用户永远不会看到它。
  • 组件 Button, EditMemo组件是可视组件。

这两类组件在设计时都会出现,但非可视组件在运行时不可见。面板中的组件 Tool Palette面板中的组件是面向对象的,有以下三个项目:

  • 属性
  • 事件
  • 方法

A Property是一个对象的特性,它影响该对象的可见行为或操作。例如,"可见 "属性决定了在脚本表单中能否看到该对象。

一个 Event是脚本检测到的动作或事件。在脚本中,程序员为每个事件处理程序编写代码,目的是捕获特定事件(如鼠标点击)。

A Method是一个过程,它总是与对象相关联,并定义对象的行为。

所有脚本表单都有一个或多个组件。组件通常显示信息或允许用户执行操作。例如 Label用于显示静态文本,一个 Edit框用于允许用户输入一些数据,而 Button可用于启动操作。

任何组件的组合都可以放在表单上,当脚本运行时,用户可以与表单上的任何组件进行交互。程序员的任务是决定当用户点击按钮或更改方框中的文本时会发生什么。 Edit框中的文本时会发生什么。

脚本系统提供了许多组件,可用于为脚本创建复杂的用户界面。要在表单上放置组件,只需在工具调板面板上找到组件图标并双击即可。此操作可将组件置于活动窗体上。大多数组件的可视化表示是通过其属性设置的。组件最初放置在表单上的默认位置,但可以根据需要重新定位(拖动)和调整大小(拉伸)。您也可以稍后使用 Object Inspector面板更改大小和位置。

当一个组件被放置到表单上时,脚本系统会自动生成使用该组件所需的代码,并更新脚本表单。只需设置属性并执行事件处理代码,就能使用所需的方法让窗体上的组件工作。

设计脚本表单

设计脚本表单是为了在环境中与用户进行交互。设计脚本表单是可视化开发的核心。

实际上,所有组件都放在脚本表单上,设置的每个属性都存储在描述表单的文件(一个 *.DFM文件)中,该文件与相关的脚本代码(文件 *.PAS文件)中。每个脚本表单都有 .PAS文件及其对应的 .DFM文件。

在处理脚本表单及其组件时,可以使用 Object Inspector面板查看和修改所有元素属性。你可以通过移位单击组件或在表单上拖动组件周围的选择矩形来选择多个组件。脚本表单有一个标题(表单上的 Caption属性)。 Object Inspector面板上的属性)。

创建新脚本窗体

打开脚本项目后,右键单击 Projects面板上的 Add New to Project项目,并在弹出的上下文菜单中选择一个 Delphi Script Form项目。一个新的脚本表单就会打开,默认名称为 EditScript1.pas.

显示脚本窗体

脚本需要有一个存储过程,用于在脚本窗体执行时显示窗体。在此存储过程中,可以调用 ShowModal方法。表单的 Visible属性必须为 false,这样脚本表单的 ShowModal方法才能正常工作。

ShowModal example:

Procedure RunDialog;
Begin
  DialogForm.ShowModal;
End;

本例 ShowModal示例是在调用存储过程时显示脚本表单的一种非常简单的方法。 RunDialog存储过程时显示脚本表单的非常简单的方法。请注意,可以在调用存储过程之前为脚本表单对象的组件赋值。 DialogForm对象的组件赋值。 DialogForm.ShowModal方法被调用之前,可以为对象的组件赋值。

下面显示的 ModalResult属性的示例要复杂一些。脚本中的以下方法用于脚本窗体上的按钮。当用户单击 OKCancel按钮,返回 mrOkmrCancel方法返回 ShowModal方法分别返回

ModalResult Example:

Procedure TForm.OKButtonClick(Sender: TObject);
Begin
  ModalResult := mrOK;
End;

Procedure TForm.CancelButtonClick(Sender: TObject);
Begin
  ModalResult := mrCancel;
End;

Procedure RunShowModalExample;
Begin
  // Form's Visible property must be false for ShowModal to work correctly.
  If Form.ShowModal = mrOk Then ShowMessage('mrOk');
  If Form.ShowModal = mrCancel Then ShowMessage('mrCancel');
End;
您还可以将 ModalResult值设置为 mrOkOK按钮和 mrCancel按钮的 Cancel按钮的事件处理程序中的值,以达到与上述相同的效果。

当用户单击该脚本窗体上的任一按钮时,对话框就会关闭。无需调用 Close方法,因为当 ModalResult方法被设置后,脚本引擎会自动关闭脚本窗体。

请注意,如果您希望将脚本表单的 ModalResultCancel当用户按下 Esc键时,请使用 Object Inspector面板将取消按钮的 Cancel属性为 True或在表单按钮中插入 Sender.Cancel := True事件处理程序。 CancelButtonClick事件处理程序中。

接受用户输入

可接受用户输入的常见组件之一是 TEdit组件。该组件有一个字段,用户可以在其中输入字符串。请注意,还有其他 Delphi 组件,如 TMaskEdit是一个编辑组件,其输入掩码存储在一个字符串中,用于控制或过滤输入。

下面的示例说明了用户在编辑框中输入内容后点击按钮的过程。如果用户没有在编辑组件中键入任何内容(空白),事件处理程序将响应一条警告消息。

Procedure TScriptForm.ButtonClick(Sender : TObject);
Begin
  If Edit1.Text = '' Then
  Begin
    ShowMessage('Warning - empty input!');
    Exit;
  End;
  // do something else for the input
End;

请注意,用户可以使用 Tab键或单击表单中的其他控件来更改对话框的输入焦点。

响应事件

单击窗体或组件上的按钮时,脚本系统会接收 Altium Designer 发出的事件通知,并调用相应的事件处理程序方法。

See also
Scripts\DelphiScript Scripts\General\文件夹的 HelloWorld 项目。
脚本集文件夹中的 Scripts\DelphiScript Scripts\General\文件夹中的 ShowModal 示例脚本

编写事件处理程序

表单脚本中的每个组件都有一组事件名,脚本事件处理程序使用这些事件名来决定脚本如何对 Altium Designer 中的用户操作做出反应。例如,当用户单击表单上的按钮时,Altium Designer 会向脚本发送一条信息,脚本会对此新事件做出反应。如果 OnClick事件就会被执行。

响应事件的代码通常包含在 DelphiScript 事件处理程序中,所有组件都有一组它们可以响应的事件。例如,所有可点击组件都有一个 OnClick事件,该事件在用户点击组件时触发。所有这些组件也都有一个接收和失去焦点的事件。但是,如果 OnEnterOnExit的代码(OnEnter - 控件已收到焦点; OnExit - 控件已失去焦点),脚本将忽略该事件。

总之,事件是 Altium Designer 中发生的事件(如点击按钮)与响应该事件的代码之间的链接。响应代码就是事件处理程序。该代码修改属性值并调用方法。

组件属性

要查看组件的属性列表,请选择一个组件并打开 Properties选项卡。 Object Inspector面板中的选项卡。

组件事件

要查看组件所能反应的事件列表,请选择一个组件并打开面板中的 Events选项卡。 Object Inspector面板中的选项卡。要创建事件处理程序,请选择希望组件做出反应的事件,然后双击事件名称--脚本系统将自动插入事件处理框架代码。

例如,从 TButton组件 Tool Palette面板上选择组件并将其放到脚本表单上,然后双击 OnClick事件名称旁边双击 Object Inspector面板中的事件名称旁边双击。脚本系统就会调用代码编辑器,并创建该事件的骨架代码。 OnClick事件的骨架代码将被创建。

如果按钮的 Close方法的 CloseClick例如,当按钮被点击时,按钮事件处理程序将捕获该事件,并执行事件处理程序中的代码。 OnClick事件,从而执行事件处理程序中的代码。因此,该 Close方法关闭脚本窗体。

总之,在窗体上或使用 Object Inspector面板,选择 Events页面,然后双击右侧的 OnClick事件,脚本中就会出现一个新的事件处理程序。或者,双击按钮本身,脚本系统将为该事件添加一个处理程序。 OnClick事件的处理程序。请注意,其他类型的组件会有不同的默认操作。

组件方法

要查看组件的方法列表,请参阅组件参考文档。

在脚本表单中下放组件

要在脚本中使用工具选项板面板中的组件,必须先有一个脚本窗体,然后才能在窗体上下放组件。通常情况下,在脚本窗体上下放组件时,无需创建或销毁这些对象,脚本窗体会自动完成这些操作。

脚本系统还会自动生成使用组件所需的代码,并更新脚本表单。然后,只需设置属性、在事件处理程序中添加代码,并使用必要的方法即可实现一个正常工作的脚本窗体。

在脚本中创建组件

可以在脚本中直接创建或销毁组件,只需将一个 Nil参数到 Constructor传递一个参数,就可以在脚本中直接创建或销毁组件。通常情况下,你不需要传递表单的句柄,因为脚本表单会自动处理它。例如,您可以创建和销毁 OpenSave对话框TOpenDialogTSaveDialog类)。

自定义脚本窗体

自定义脚本表单的要点如下:

  • 要强制表单位于其他打开面板的顶部,可将 FormStyle属性为 fsStayOnTop.
  • 要定义表单的默认行为,请将 FormKind设置为以下值之一; fkNone, fkNormal, fkServerPanel fkModal.
  • 如果 fkModal是关闭的,那么表单将是一个模态表单,即等待用户输入后再继续操作,如关闭表单。如果 fkServerPanel则表单将显示为服务器面板。如果 fkNormal则表单将作为普通的非模式表单运行。
  • 要移除表单的默认滚动条,请更改 HorzScrollBarVertScrollBar属性的值。
  • 要使表单成为 MDI 框架或 MDI 子表单,请使用 FormStyle属性。
  • 要更改表格的边框样式,请使用 BorderIconsBorderStyle属性(结果在运行时可见)。
  • 要更改最小化窗体的图标,请使用 Icon属性。
  • 要指定表单在应用程序窗口中的初始位置,请使用 Position属性。
  • 要指定窗体的初始状态(如最小化、最大化或正常),请使用 WindowState属性。
  • 要在运行时定义表单的工作区域,请使用 ClientHeightClientWidth属性(注意 ClientHeightClientWidth代表表单边框内的区域; HeightWidth代表表单的整个区域)。
  • 要在运行时指定哪个控件在表单中拥有初始焦点,请使用 ActiveControl属性。
  • 要将所有键盘事件传递给表单,而不管选中的是哪个控件,请使用 KeyPreview属性。
  • 如果表单包含多个菜单,要指定特定菜单,请使用 Menu属性。

刷新脚本表单和组件

当脚本窗体的表面过时时,例如控件没有更新或重新绘制,那么控件看起来就会冻结或损坏--这可能是由于该脚本进行了密集的后台处理。

脚本窗体的 Update方法和许多来自 Tool Palette面板中的许多脚本组件都提供了刷新表单或特定控件图形内容的方法。在示例中,包含 Update方法的行在下面的示例中以灰色高亮显示。

StatusBar component and its Update method Example:

Procedure TConverterForm.loadbuttonClick(Sender: TObject);
Begin
 If OpenPictureDialog1.Execute then
 Begin
 XPProgressBar1.Position := 0;
 XStatusBar1.SimpleText  := '  Loading...';
 XStatusBar1.Update;
 
 // loading a monochrome bitmap only
 Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 
 // Check if image is monochrome, otherwise prompt a warning
 If Image1.Picture.Bitmap.PixelFormat > pf1bit Then
 Begin
 ShowWarning('The image is not a monochrome!');
 Close;
 End;
 
 lImageSize.Caption := IntToStr(Image1.Picture.Width) + ' x ' +
 IntToStr(Image1.Picture.Height) + ' mils';
 
 convertbutton.Enabled  := True;
 LoadButton.Enabled     := False;
 XStatusBar1.SimpleText := '  Ready...';
 XStatusBar1.Update;
 End;
End;

上述代码片段来自 PCB Logo Creator脚本项目中,该项目位于 Scripts\Delphiscript Scripts\Pcb\PCB Logo Creator文件夹中。

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

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

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

旧版文档

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

Content