Viết Script

 

Viết Script

Có một số khái niệm và thuật ngữ quan trọng áp dụng khi viết script:

  • Process là các chuỗi lệnh mà bạn có thể dùng để thực thi lệnh trong script.
  • Component là các đối tượng điều khiển trực quan trên bảng Tool Palette panel mà bạn có thể kéo và thả vào biểu mẫu script để thao tác với thiết kế.
  • Một component được đặt trên biểu mẫu script sẽ có các method, property và event.
  • Object Interfaces là các giao diện đối tượng đặc biệt mà bạn có thể dùng để trích xuất và chỉnh sửa dữ liệu trên tài liệu thiết kế từ script của mình.

Ngôn ngữ Script

Ngôn ngữ script mặc định được đặt là DelphiScript (*.pas). Bản thân công cụ script được viết bằng Embarcadero Delphi, và bảng Tool Palette được xây dựng dựa trên VCL (Visual Component Library) của Delphi.

  • Bạn có thể mở và chạy các script hiện có được viết bằng VBScript và JavaScript (Jscript). Để có thể tạo script mới bằng VBScript, bạn phải bật tùy chọn Legacy.Scripts.SupportOldLanguages trong hộp thoại Advanced Settings dialog.

  • Tài liệu cho API script có thể được tìm thấy tại đây: Scripting API Objects. Xin lưu ý rằng tài liệu này được cập nhật lần cuối cho một phiên bản Altium Designer cũ hơn. Mặc dù nhiều nguyên tắc và cách tiếp cận vẫn giữ nguyên, bạn nên lưu ý rằng các interface, object, method, property và những thành phần tương tự đã thay đổi kể từ đó, và sẽ không phản ánh đầy đủ toàn bộ những gì có trong các phiên bản phần mềm mới hơn.

Một Unit DelphiScript

Một bài thực hành script nhanh và cơ bản có thể được thực hiện bằng cách trước tiên tạo một project và tệp script mới. Giả sử project và tệp script được đặt dùng ngôn ngữ DelphiScript, bạn có thể nhập một script 'Hello World' đơn giản như bên dưới.

Procedure ShowAMessage;
Var
 DefaultMessage;
Begin
 DefaultMessage := 'Hello World!';
 ShowMessage(DefaultMessage);
End;
Khi một tài liệu được chỉnh sửa, một dấu hoa thị sẽ xuất hiện bên cạnh tài liệu script, và biểu tượng trên bảng Projects panel sẽ chuyển sang màu đỏ. Khi một dòng mã script được chỉnh sửa, một khối màu đỏ sẽ xuất hiện ở lề trái của dòng đó, cho biết dòng đã thay đổi.

Trong procedure, có một hàm DelphiScript chuẩn ShowMessage mở một hộp thoại với thông điệp "Hello World", như được xác định bởi biến DefaultMessage.

Vì tất cả biến trong script đều thuộc kiểu variant, nên không cần phải định nghĩa kiểu của biến DefaultMessage trong script.

Chạy Script

Để chạy một trong các script, hãy chọn File » Run Script từ menu chính, sau đó chọn một procedure script khả dụng từ hộp thoại Select Item To Run. Khi một phiên bản được chạy, một hộp thoại sẽ mở ra để hiển thị thông điệp.

Chạy một unit script HelloWorld đơn giản từ menu File » Run Script.
Chạy một unit script HelloWorld đơn giản từ menu File » Run Script.

Script này có một procedure không có tham số. Chỉ những procedure hoặc function don't không có tham số mới xuất hiện trong hộp thoại Select Item To Run. Các procedure yêu cầu truyền tham số sẽ được gọi từ bên trong script (hoặc từ một script khác), chứ không phải từ một hệ thống bên ngoài như hộp thoại Select Item To Run, nơi không truyền tham số.

Script cũng có thể được thực thi bằng lệnh Run của trình soạn thảo, truy cập bằng nút Run (), phím tắt F9 , hoặc bằng cách chọn Run » Run từ menu chính.

Cùng với chính lệnh Run, menu thả xuống Run  cung cấp một loạt lệnh điều khiển script và gỡ lỗi.Cùng với chính lệnh Run, menu thả xuống Run cung cấp một loạt lệnh điều khiển script và gỡ lỗi.

Khi lệnh Run được chọn lần đầu tiên, hộp thoại Select Item to Run sẽ mở ra cho phép bạn chỉ định procedure chính của script (trong trường hợp này là ShowAMessage). Sau khi thiết lập, script có thể dễ dàng được chạy lặp lại từ trình soạn thảo bằng lệnh Run . Dùng Run » Set Project Startup Procedure để đổi thiết lập sang một procedure khác, hoặc đóng rồi mở lại project script để xóa thiết lập.

Để dừng một script đang chạy, hãy dùng nút Stop (), chọn Run » Stop từ menu chính, hoặc dùng phím tắt Ctrl+F3.

Một Biểu mẫu DelphiScript

Phát triển tiếp từ project HelloWorld đã tạo ở trên, có thể tạo một script tương tự bằng cách dùng một form unit.

Script Form là một cửa sổ hộp thoại có thể chứa nhiều điều khiển như nút bấm, memo và hộp danh sách. Nó có các event handler phản hồi khi một điều khiển tạo ra event, chẳng hạn như khi một nút được nhấp.

Để tạo biểu mẫu script mới, hãy nhấp chuột phải vào tên project từ bảng Projects panel, chọn tùy chọn Add New to Project, rồi chọn Script Form. Script có thể được lưu và đổi tên bằng File » Save As từ menu chính.

Khi đã thiết lập một project script mới, hãy thêm một script mới vào project. Khi đã thiết lập một project script mới, hãy thêm một script mới vào project.

Biểu mẫu script tạo ra hai tệp: một tệp *.dfm xác định các phần tử và handle của cửa sổ form, và một tệp *.pas chứa các event handler cùng các procedure hoặc function của form.

Để xem và chỉnh sửa các giá trị thuộc tính cho form hiện được chọn hoặc các component của nó, hãy mở bảng Object Inspector. Bảng Object Inspector được dùng để thay đổi thuộc tính của form và chèn mã vào các event handler liên kết với form hiện tại.

Cấu hình cửa sổ và các thuộc tính của Script Form được minh họa trong bảng Object Inspector.
Cấu hình cửa sổ và các thuộc tính của Script Form được minh họa trong bảng Object Inspector.

Lưu ý rằng Script Form cung cấp hai tab ở cuối tài liệu: tab Code và tab Form .

Tab Code chứa các event handler và procedure như hiển thị ở trên, trong khi tab Form biểu diễn hộp thoại và có các điều khiển cùng các event handler liên kết. Dùng các tab hoặc phím tắt F12 để chuyển đổi giữa hai tab.

Các thuật ngữ 'dialog' và 'script form' về mặt mô tả là tương đương trong hướng dẫn này. Thuật ngữ 'form' chỉ cửa sổ đang được thiết kế theo thời gian thực trong hệ thống script, còn 'dialog' là một form đang hoạt động trong phần mềm, chờ phản hồi từ người dùng và thực hiện hành động khi một nút trên hộp thoại hoặc một điều khiển được nhấp.

Bảng Object Inspector cho phép bạn xem xét và chỉnh sửa các thuộc tính và event của component trong script form đang hoạt động. Nhấp vào một component trên script form đang hoạt động trong cửa sổ trình soạn thảo thiết kế sẽ chọn component đó và hiển thị các thuộc tính liên quan của nó trong bảng Object Inspector. Ngoài ra, hãy dùng trường thả xuống ở phía trên cùng của bảng để chọn từ danh sách tất cả component hiện được đặt trên form đang hoạt động. Bản thân form cũng được bao gồm.

Dùng bảng Object Inspector để cấu hình hộp thoại form và hành động của nó. 
Dùng bảng Object Inspector để cấu hình hộp thoại form và hành động của nó.

Thông tin được hiển thị trên hai tab – Properties và Events:

  • Tab Properties của bảng liệt kê tất cả các thuộc tính của component đang được chọn. Danh sách thuộc tính khả dụng chính xác sẽ phụ thuộc vào loại component cụ thể hiện đang được xem xét. Thuộc tính là một đặc điểm của đối tượng ảnh hưởng đến hành vi hiển thị hoặc hoạt động của nó. Ví dụ, thuộc tính Visible (trong phân nhóm phụ Behavior ) xác định đối tượng có được hiển thị trên script form nơi nó được đặt hay không. Các thuộc tính của component có thể được chỉnh sửa khi cần. Nhấp vào trường bên phải của một thuộc tính rồi nhập trực tiếp, bật/tắt hộp kiểm hoặc chọn một mục từ danh sách thả xuống, tùy trường hợp.
  • Tab Events của bảng cung cấp danh sách tất cả các event mà component đang được chọn có thể phản ứng. Một lần nữa, danh sách event khả dụng chính xác sẽ phụ thuộc vào loại component cụ thể hiện đang được xem xét. Khi một event xảy ra, chẳng hạn như một nút trên form được nhấp, script sẽ thực hiện hành động phù hợp, miễn là đã định nghĩa một procedure xử lý cho event đó trong mã. Loại procedure này được gọi là event handler.

Khung cơ bản cho một event handler có thể được thêm vào mã của tài liệu script từ trong bảng Object Inspector. Chỉ cần chọn component mà bạn muốn định nghĩa event, chọn loại event cụ thể rồi nhấp đúp vào trường bên phải của event. Một tên sẽ được tạo cho event và được dùng trong phần định nghĩa tên của procedure xử lý event - FormName.EventName. Mã khung cho procedure xử lý event sau đó sẽ được thêm vào mã script chính, và tab đó sẽ trở thành tab đang hoạt động trong không gian thiết kế. Phần nội dung của procedure xử lý event sau đó có thể được viết mã để cung cấp phản hồi mong muốn khi event xảy ra và được script đang chạy phát hiện.

Phần dưới cùng của bảng cung cấp mô tả tóm tắt về thuộc tính hoặc event hiện đang được chọn, nếu có.

Có thể chọn và chỉnh sửa đồng thời nhiều component. Những thuộc tính/event chung cho tất cả các component trong vùng chọn sẽ được hiển thị trong bảng. Những thuộc tính/event có giá trị khác nhau giữa các component sẽ được hiển thị trống. Chỉ cần chỉnh sửa các thuộc tính và/hoặc event theo yêu cầu - các thay đổi sẽ được áp dụng ngay lập tức cho từng component trong vùng chọn. Ví dụ, bạn có thể muốn thay đổi phông chữ được dùng cho văn bản trên nhiều nút. Hãy chọn tất cả các nút và thay đổi các thuộc tính được liệt kê trong danh mục Font theo ý muốn - tất cả các nút sẽ được cập nhật để hiển thị văn bản bằng cùng một phông chữ.

Đối với script form này, hãy thay đổi thuộc tính Caption của form trong bảng Object Inspector từ HelloWorldForm thành Hello World!. Các chuỗi này khớp với những chuỗi được dùng trong ví dụ về event handler và mã procedure được hiển thị thêm ở bên dưới.

Để biết thông tin chi tiết hơn về component và các thuộc tính, method, event của chúng, hãy tham khảo trang Component Categories.

Thêm và Cấu hình Điều khiển

Sau khi cấu hình xong biểu mẫu cơ bản, có thể thêm các điều khiển vào hộp thoại theo nhu cầu bằng cách truy cập panel Tool Palette. Tool Palette, dựa trên Visual Component Library của Delphi, là một bảng thành phần cung cấp nhiều loại điều khiển cửa sổ, được tổ chức theo các danh mục thành phần (xem các trang Scripting Graphical Components và Component Categories để biết thêm chi tiết).

Các phần trong panel  Tool Palette có thể được mở rộng hoặc thu gọn bằng các tab tiêu đề vùng.
Các phần trong panel Tool Palette có thể được mở rộng hoặc thu gọn bằng các tab tiêu đề vùng.

Dùng các điều khiển ở phía trên panel, tên danh mục và menu chuột phải để cấu hình cách hiển thị các điều khiển trong panel: mở rộng/thu gọn danh mục, thay đổi cách trình bày các mục trong bảng thành phần, v.v.

Tất cả các thành phần được dùng trong panel đều kế thừa từ TComponent trong Borland Delphi Visual Component Library.

Đối với phiên bản hộp thoại của dự án 'Hello World', có hai nút trên biểu mẫu - Display Close. Nhấp vào TButton trong vùng Standard của panel Tool Palette.

Thực hiện việc này hai lần để đặt hai nút lên biểu mẫu. Một nút sẽ được dùng để hiển thị thông báo 'Hello World!' trong một hộp thoại riêng, và nút thứ hai sẽ được dùng để đóng hộp thoại chính.

Có thể đặt các thành phần lên biểu mẫu script bằng cách nhấp đúp vào thành phần trên panel Tool Palette, hoặc nhấp một lần vào thành phần rồi nhấp lên vị trí trên biểu mẫu nơi bạn muốn thành phần xuất hiện.

Tất cả các thành phần trong panel đều có Properties, Methods và Events đi kèm, trong đó:

  • Property là một đặc tính của đối tượng, ảnh hưởng đến hành vi hiển thị hoặc cách đối tượng hoạt động. Ví dụ, thuộc tính Visible xác định liệu một đối tượng có thể được nhìn thấy trên biểu mẫu script hay không.
  • Method là một thủ tục luôn gắn với một đối tượng và xác định hành vi của đối tượng đó.
  • An Event là một hành động hoặc sự kiện được script phát hiện. Trong script, lập trình viên viết mã cho từng Event Handler để bắt một sự kiện cụ thể, chẳng hạn như một cú nhấp chuột.

Có thể xem xét và chỉnh sửa các thuộc tính và sự kiện của một thành phần sau khi đặt nó bằng panel Object Inspector.

Dùng panel Object Inspector, có thể thay đổi tên và caption mặc định của cấu hình hai nút.

Đặt tên nút thứ nhất là bDisplay và caption của nó là Display. Đặt tên nút thứ hai là bClose và caption của nó là Close. Việc này nhằm khớp với mã event handler mẫu được trình bày bên dưới.

Chọn một thành phần và chỉnh sửa các thuộc tính của nó trong panel Object Inspector.
Chọn một thành phần và chỉnh sửa các thuộc tính của nó trong panel Object Inspector.

Hộp chú thích ở cuối panel Object Inspector cung cấp mô tả cho thuộc tính đang được tô sáng.

Mã event handler có thể được xây dựng bằng cách tham chiếu trực tiếp đến các điều khiển trên biểu mẫu. Trong ví dụ này, nút Display sẽ kích hoạt một hộp thoại ShowMessage phía trên biểu mẫu hiện có, và thao tác của nút Close sẽ đóng biểu mẫu này.

Mã Event Handler

Nhấp đúp vào nút Display sẽ mở biểu mẫu ở chế độ Code view và tạo sẵn phần khung mã cho event handler của nó. Ngoài ra, hãy chọn nút đó rồi chọn tab Events trong panel Object Inspector. Nhấp đúp vào sự kiện OnClick trong panel sẽ mở Code view như trên. Trong Code view, câu lệnh ShowMessage có thể được đưa vào event handler như trong đoạn liệt kê bên dưới.

Procedure THelloWorldForm.bDisplayClick(Sender: TObject);
Begin
 ShowMessage('Hello World!');
End;
Để xem các event handler được định nghĩa sẵn cho bất kỳ thành phần nào trên biểu mẫu script, hãy chọn thành phần đó, rồi nhấp vào tab Events trong panel Object Inspector.
Tương tự, event handler cho nút Close có thể được định nghĩa bằng cách tạo một sự kiện OnClick áp dụng câu lệnh Close (form):
Procedure THelloWorldForm.bCloseClick(Sender: TObject);
Begin
 Close;
End;

Sau khi các event handler được định nghĩa, cần có một thủ tục trong script để dùng làm điểm bắt đầu khi gọi hộp thoại từ phần mềm. Thủ tục này được thêm vào cuối script mã.

Lưu ý rằng tên biểu mẫu là HelloWorldForm và tên thủ tục trong RunHelloWorld — điều quan trọng là phải có tên biểu mẫu duy nhất trong cùng một script để tránh xung đột tên biểu mẫu.

Procedure RunHelloWorld;
Begin
 HelloWorldForm.ShowModal;
End;

Có thể lưu script rồi chạy từ các menu chính (File» Run Script) bằng cách chạy mục thủ tục RunHelloWorld dưới mục HelloWorldDialog.

Ngoài ra, thủ tục có thể được gán cho lệnh/nút Run () thông qua menu Run » Set Startup Project Procedure.

Chạy script biểu mẫu HelloWorld, trong đó nút Display trên biểu mẫu kích hoạt hộp thoại ShowMessage.
Chạy script biểu mẫu HelloWorld, trong đó nút Display trên biểu mẫu kích hoạt hộp thoại ShowMessage.

Panel Object Inspector giúp dễ dàng thay đổi các thuộc tính và sự kiện của một đơn vị biểu mẫu. Ví dụ, để thay đổi vị trí của biểu mẫu trong không gian làm việc, dùng panel để thay đổi giá trị poScreenCenter cho thuộc tính vị trí của biểu mẫu. Khi script được chạy, hộp thoại giờ sẽ được đặt ở giữa màn hình desktop.

Phiên bản tham chiếu của các script dự án Hello World có thể được tìm thấy trong thư mục Scripts\Delphiscript Scripts\General của bộ sưu tập script downloadable. Lưu ý rằng đây là các thiết kế tham chiếu cũ và không được cập nhật.

Gọi một Thủ tục

Như đã đề cập ở trên, bất kỳ script nào (dùng cùng bộ ngôn ngữ) trong một dự án đều có quyền truy cập vào các biến toàn cục và thủ tục, vì vậy một thủ tục trong một script có thể gọi một thủ tục khác trong một script khác của dự án.

Điều này có thể được minh họa bằng phần mã ShowAParametricMessage bổ sung trong dự án ví dụ HelloWorld:

Procedure ShowAParametricMessage(S : String);
Var
    DefaultMessage;
Begin
    DefaultMessage := 'Hello World!';

    If S = '' Then ShowMessage(DefaultMessage)
              Else ShowMessage(S);
End;

Phần này thiết lập một biến chuỗi 'S' có thể được truyền vào thủ tục ShowAParametricMessage.

Chuỗi được truyền vào sẽ được hiển thị bằng hàm hộp thoại ShowMessage, trong khi một phương thức If-Then-Else đơn giản sẽ khiến thông báo mặc định 'Hello World!' được hiển thị nếu chuỗi rỗng.

Để xem điều này hoạt động như thế nào, hãy mở dự án ví dụ (HelloWorld.PrjScr) và thêm dòng được tô xám vào script HelloWorldDialog (không phải script HelloWorld), như minh họa bên dưới.

...
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;
...

Khi script HelloWorldDialog được chạy và nhấp vào nút Close , thủ tục toàn cục ShowAParametricMessage sẽ được gọi từ script HelloWorld.

Một thủ tục có tham số trong script HelloWorld được gọi từ script HelloWorldDialog.
Một thủ tục có tham số trong script HelloWorld được gọi từ script HelloWorldDialog.

Lời gọi này truyền chuỗi thông báo 'Goodbye World' tới thủ tục ShowAParametricMessage, vì vậy thông báo này sẽ được hiển thị khi nhấp vào nút Close, trước khi biểu mẫu đóng lại.

Lời gọi script ở trên chèn một thông báo được chỉ định vào thủ tục đóng biểu mẫu HelloWoldDialog.
Lời gọi script ở trên chèn một thông báo được chỉ định vào thủ tục đóng biểu mẫu HelloWoldDialog.

Nếu tham số chuỗi được truyền vào là rỗng, ShowAParametricMessage(''), thì thông báo mặc định 'Hello World!' sẽ được hiển thị như đã định nghĩa trong thủ tục ShowAParametricMessage.

Để có danh sách các phím tắt giúp đơn giản hóa quá trình viết và gỡ lỗi script, hãy tham khảo trang Script Editor Tools.

Duyệt các Script Identifier bằng panel Code Explorer

Panel Code Explorer cung cấp phần tóm tắt trực quan về tất cả các identifier (biến, hàm và thủ tục) được sử dụng trong tài liệu script đang hoạt động.

Panel Code Explorer
Panel Code Explorer

Thông tin identifier xuất hiện trong panel được nhóm dưới các thư mục cấp cao nhất sau:

  • Procedures & Functions – bao gồm tất cả các thủ tục và hàm được khai báo trong tài liệu script đang hoạt động. Đối với mỗi thủ tục/hàm, mọi tham số được truyền vào thủ tục/hàm hoặc các biến cục bộ của nó cũng được liệt kê.

  • Variables – bao gồm tất cả các biến toàn cục được khai báo trong tài liệu script đang hoạt động.

Nếu có các biến cục bộ được khai báo cho một thủ tục/hàm, chúng sẽ xuất hiện trong một thư mục con variables bên dưới thủ tục/hàm đó. Các biểu tượng riêng biệt được dùng để phân biệt các identifier khác nhau:

Thủ tục

Hàm

Tham số của thủ tục/hàm

Biến (cục bộ hoặc toàn cục)

Nhấp đúp vào một mục trong panel (hoặc chọn mục đó và nhấn phím Enter) sẽ chuyển đến vùng mã tương ứng trong không gian thiết kế.

AI-LocalizedBản địa hóa bằng AI
Nếu bạn phát hiện vấn đề, hãy chọn văn bản/hình ảnh và nhấnCtrl + Enterđể gửi phản hồi cho chúng tôi.
Tính khả dụng của tính năng

Các tính năng có sẵn cho bạn phụ thuộc vào giải pháp Altium mà bạn đang sử dụng – Altium Develop, một phiên bản của Altium Agile (Agile Teams hoặc Agile Enterprise), hoặc Altium Designer (đang còn hiệu lực).

Nếu bạn không thấy tính năng được đề cập trong phần mềm của mình, liên hệ Bộ phận Kinh doanh của Altium để tìm hiểu thêm.

Tài liệu cũ

Tài liệu Altium Designer không còn được phân phiên bản. Nếu bạn cần truy cập tài liệu cho các phiên bản cũ hơn của Altium Designer, hãy truy cập mục Tài liệu cũ trên trang Trình cài đặt khác.

Nội dung