Writing Scripts in Altium Designer
Writing Scripts
There are a number of essential concepts and terms that apply to writing scripts:
- Processes are command strings that you can use to execute commands in scripts.
- Components are visual control objects on the Tool Palette panel that you can drag and drop onto a script form to manipulate the design.
- A component that is placed on a script form has methods, properties, and events.
- Object Interfaces are special object interfaces that you can use to extract and modify data on design documents from your scripts.
Script Languages
The default scripting language is set to DelphiScript (*.pas). The scripting engine itself is written in Embarcadero Delphi, and the Tool Palette panel is based on the Delphi's VCL (Visual Component Library).
A DelphiScript Unit
A quick and basic scripting exercise can be completed by first creating a new project and script file. Assuming the project and script file are set to the DelphiScript language, a simple 'Hello World' script can be entered as below.
Procedure ShowAMessage;
Var
DefaultMessage;
Begin
DefaultMessage := 'Hello World!';
ShowMessage(DefaultMessage);
End;
Within the procedure, there is a standard DelphiScript ShowMessage
function that opens a dialog with the "Hello World" message, as defined by the DefaultMessage
variable.
Running the Script
To run one of the scripts, select File » Run Script from the main menus then choose an available script procedure from the Select Item To Run dialog. When a version is run, a dialog will open to display the message.
A script can also be executed using the editor's Run command, accessed by the Run button (), the F9 shortcut key, or by selecting Run » Run from the main menus.
When the Run command is selected for the first time, the Select Item to Run dialog will open allowing you to specify a script's main procedure (ShowAMessage
in this case). Once set, the script is easy to run repeatedly from the editor using the Run command. Use the Run » Set Project Startup Procedure to change the setting to a different procedure, or close and reopen the script project to clear the setting.
To stop a running script, use the Stop button (), select Run » Stop from the main menu, or use the Ctrl+F3 shortcut.
A DelphiScript Form
Expanding on the HelloWorld project created above, a similar script can be created using a form unit.
A Script Form is a dialog window that can host a range of controls such as buttons, memos, and list boxes. It has event handlers that respond when a control has generated an event, such as when a button is clicked.
To create the new script form, right-click on the project name from the Projects panel, choose the Add New to Project option, and select Script Form. The script can be saved and renamed using File » Save As from the main menus.
To see and edit the property values for the currently focused form or its components, open the Object Inspector panel from the Panels button at the bottom of the design workspace. The Object Inspector panel is used to change the properties of the form and insert code in the event handlers associated with the current form.
Note that the Script Form offers two tabs at the bottom of the document: the Code and Form tabs.
The Code tab contains the event handlers and procedures as shown above, while the Form tab represents the dialog and has controls and associated event handlers. Use the tabs or the F12 shortcut key to change between the two.
The Object Inspector panel shows the values of the properties for the currently focused form or its components. For this form script, change the Caption properties of the form in the Object Inspector panel from HelloWorldForm
to Hello World!
as shown below. These strings match those used in the example event handler and procedure code shown further below.
Add and Configure Controls
With the basic form configured, controls can be added to the dialog as required by accessing the Tool Palette panel from the Panels button at the bottom-right of the design workspace.
The Tool Palette, based on the Delphi's Visual Component Library, is a component palette that offers a wide range of window controls that are organized as component categories (see Scripting Graphical Components for more details).
For the dialog version of the 'Hello World' project, there are two buttons on the form - Display and Close. Click TButton in the Standard section of the Tool Palette panel as shown above.
Do this twice to place two buttons on the form. One button will be used to display a 'Hello World!' message on a separate dialog, and the second button is used to close the main dialog.
Using the Object Inspector panel, the two-button configurations can be changed from their default names and captions.
Configure the first button name to bDisplay
and its caption to Display
. Configure the second button name to bClose
and its caption to Close
. This is to match the example event handler code presented below.
Event handler code can be constructed by directly referencing the controls on the form. In this example, the Display button will instigate a ShowMessage
dialog on top of the existing form, and the Close button action will close this form.
Event Handler Code
Double-clicking on the Display button will open the form in Code view and create the skeleton code for its event handler. Alternatively, select the button and then the Events tab in the Object Inspector panel. Double-clicking on the OnClick
event in the panel will open the code view as above. Within the Code view, the ShowMessage
statement can be included in the event handler as shown in the listing below.
Procedure THelloWorldForm.bDisplayClick(Sender: TObject);
Begin
ShowMessage('Hello World!');
End;
OnClick
event that applies the Close
(form) statement:
Procedure THelloWorldForm.bCloseClick(Sender: TObject);
Begin
Close;
End;
With the event handlers defined, there needs to be a procedure in the script to be used as the starting point when calling up the dialog from the software. This is added at the end of the code script.
Note that the form name is HelloWorldForm and the procedure name in RunHelloWorld — it's important to have unique form names in the same script to avoid form name clashes.
Procedure RunHelloWorld;
Begin
HelloWorldForm.ShowModal;
End;
The script can be saved and then run from the main menus (File» Run Script) by running the RunHelloWorld
procedure item under the HelloWorldDialog entry.
Alternatively, the procedure can be assigned to the Run command/button () via the Run » Set Startup Project Procedure menu.
The Object Inspector panel makes it easy to change the properties and events of a form unit. For example, to change the position of the form in the workspace, use the panel to alter the poScreenCenter
value for the form's position property. The dialog will now be placed at the center of the desktop screen when the script is run.
Calling a Procedure
As mentioned above, any script (using the same language set) within a project has access to global variables and procedures, so a procedure in one script can call another procedure in a different script in the project.
This can be demonstrated by the additional ShowAParametricMessage
code section in the HelloWorld example project:
Procedure ShowAParametricMessage(S : String);
Var
DefaultMessage;
Begin
DefaultMessage := 'Hello World!';
If S = '' Then ShowMessage(DefaultMessage)
Else ShowMessage(S);
End;
This establishes a string variable 'S
' that can be passed to the ShowAParametricMessage
procedure.
The passed string will be displayed using the ShowMessage
dialog function, whereas a simple If-Then-Else method causes a default 'Hello World!' message to display if the string is empty.
To see this in action, open the example project (HelloWorld.PrjScr
) and add the grey highlighted line into the HelloWorldDialog script (not the HelloWorld script), as shown below.
...
Procedure THelloWorldForm.bDisplayClick(Sender: TObject);
Begin
Showmessage('Hello World!');
End;
Procedure THelloWorldForm.bCloseClick(Sender: TObject);
Begin
ShowAParametricMessage('Goodbye World');
close;
End;
Procedure RunHelloWorld;
Begin
HelloWorldForm.ShowModal;
End;
...
When the HelloWorldDialog script is run and the Close button is clicked, the global ShowAParametricMessage
procedure is called from the HelloWorld script.
The call passes 'Goodbye World' message string to the ShowAParametricMessage
procedure, so this message is displayed when the Close button is clicked, prior to the form closing.
If the passed string parameter is empty, ShowAParametricMessage(''),
the default 'Hello World!' message is displayed as defined in the ShowAParametricMessage
procedure.