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.
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;
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.
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.
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.
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.
Để 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.
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.
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ó.
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ó.
Đố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.
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.
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.
Đố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 và 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.
Tất cả các thành phần trong panel đều có Properties, Methods và Events đi kèm, trong đó:
-
A 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
Visiblexá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. - A 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.
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;
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.
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.
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.
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.
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.
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
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ế.