Biểu mẫu & Linh kiện
Tổng quan về các thành phần đồ họa
Hệ thống scripting xử lý hai loại thành phần: thành phần trực quan và thành phần không trực quan.
Các thành phần trực quan được dùng để xây dựng giao diện người dùng, còn các thành phần không trực quan được dùng cho nhiều tác vụ khác nhau, chẳng hạn như các thành phần Timer, OpenDialog và MainMenu.
- Thành phần không trực quan
Timercó thể được dùng để kích hoạt đoạn mã cụ thể theo các khoảng thời gian đã lên lịch, và người dùng sẽ không bao giờ nhìn thấy nó. - Các thành phần
Button,EditvàMemolà các thành phần trực quan.
Cả hai loại thành phần đều xuất hiện trong thời gian thiết kế, nhưng các thành phần không trực quan sẽ không hiển thị khi chạy. Các thành phần từ bảng Tool Palette có tính hướng đối tượng và có ba mục sau:
- Thuộc tính
- Sự kiện
- Phương thức
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ác thao tác của đối tượng đó. Ví dụ, thuộc tính Visible xác định liệu đối tượng này có được hiển thị trên một biểu mẫu script hay không.
Event là một hành động hoặc sự việc được script phát hiện. Trong một script, lập trình viên viết mã cho từng trình xử lý sự kiện được thiết kế để bắt một sự kiện cụ thể, chẳng hạn như nhấp chuột.
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 đó.
Tất cả các biểu mẫu script đều có một hoặc nhiều thành phần. Các thành phần thường hiển thị thông tin hoặc cho phép người dùng thực hiện một hành động. Ví dụ, Label được dùng để hiển thị văn bản tĩnh, ô Edit được dùng để cho phép người dùng nhập dữ liệu, còn Button có thể được dùng để khởi tạo hành động.
Bất kỳ tổ hợp thành phần nào cũng có thể được đặt trên một biểu mẫu, và khi script đang chạy, người dùng có thể tương tác với bất kỳ thành phần nào trên biểu mẫu. Nhiệm vụ của lập trình viên là quyết định điều gì sẽ xảy ra khi người dùng nhấp vào một nút hoặc thay đổi văn bản trong ô Edit.
Hệ thống Scripting cung cấp một số thành phần có thể dùng để tạo các giao diện người dùng phức tạp cho script. Để đặt một thành phần lên biểu mẫu, hãy tìm biểu tượng của nó trên bảng Tool Palette panel và nhấp đúp vào đó. Thao tác này sẽ đặt một thành phần lên biểu mẫu đang hoạt động. Biểu diễn trực quan của hầu hết các thành phần được thiết lập thông qua các thuộc tính của chúng. Ban đầu, một thành phần được đặt ở vị trí mặc định trên biểu mẫu nhưng có thể được di chuyển (kéo thả) và thay đổi kích thước (co giãn) khi cần. Bạn cũng có thể thay đổi kích thước và vị trí sau đó bằng bảng Object Inspector .
Khi một thành phần được thả lên biểu mẫu, hệ thống Scripting sẽ tự động tạo mã cần thiết để sử dụng thành phần đó và cập nhật biểu mẫu script. Chỉ cần thiết lập các thuộc tính và triển khai mã trình xử lý sự kiện để sử dụng các phương thức mong muốn là có thể làm cho thành phần trên biểu mẫu hoạt động.
Thiết kế biểu mẫu script
Một biểu mẫu script được thiết kế để tương tác với người dùng trong môi trường làm việc. Thiết kế biểu mẫu script là cốt lõi của phát triển trực quan.
Trên thực tế, tất cả các thành phần đều được đặt trên một biểu mẫu script, và mỗi thuộc tính được thiết lập sẽ được lưu trong một tệp mô tả biểu mẫu (tệp *.DFM) có liên kết với mã script tương ứng (tệp *.PAS). Với mỗi biểu mẫu script, sẽ có tệp .PAS và tệp .DFM tương ứng.
Khi làm việc với biểu mẫu script và các thành phần của nó, toàn bộ thuộc tính của các phần tử có thể được xem và chỉnh sửa bằng bảng Object Inspector. Bạn có thể chọn nhiều hơn một thành phần bằng cách giữ Shift và nhấp vào các thành phần, hoặc kéo một khung chọn bao quanh các thành phần trên biểu mẫu. Một biểu mẫu script có tiêu đề (thuộc tính Caption trên bảng Object Inspector).
Tạo biểu mẫu script mới
Khi đã mở một dự án script, nhấp chuột phải vào dự án trong bảng Projects, nhấp vào mục Add New to Project trong menu ngữ cảnh bật lên, rồi chọn mục Delphi Script Form. Một biểu mẫu script mới sẽ mở ra với tên mặc định là EditScript1.pas.
Hiển thị biểu mẫu script
Một script cần có một thủ tục để hiển thị biểu mẫu khi biểu mẫu script được thực thi. Trong thủ tục này, có thể gọi phương thức ShowModal cho biểu mẫu. Thuộc tính Visible của biểu mẫu cần được đặt là false để phương thức ShowModal của biểu mẫu script hoạt động đúng.
ShowModal example:
Procedure RunDialog;
Begin
DialogForm.ShowModal;
End;
Ví dụ ShowModal là một cách tiếp cận rất đơn giản để hiển thị biểu mẫu script khi thủ tục RunDialog được gọi. Lưu ý rằng có thể gán giá trị cho các thành phần của đối tượng DialogForm trước khi gọi phương thức DialogForm.ShowModal.
Ví dụ về thuộc tính ModalResult hiển thị bên dưới phức tạp hơn một chút. Các phương thức sau trong script được dùng cho các nút trên biểu mẫu script. Các phương thức này làm cho hộp thoại kết thúc khi người dùng nhấp vào nút OK hoặc Cancel, từ đó trả về mrOk hoặc mrCancel từ phương thức ShowModal tương ứng.
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;
Khi người dùng nhấp vào một trong hai nút trên biểu mẫu script này, hộp thoại sẽ đóng. Không cần gọi phương thức Close, vì khi phương thức ModalResult được thiết lập, bộ máy script sẽ tự động đóng biểu mẫu script.
Lưu ý rằng nếu bạn muốn đặt ModalResult của biểu mẫu thành Cancel khi người dùng nhấn phím Esc , hãy dùng bảng Object Inspector để đặt thuộc tính Cancel của nút Cancel thành True, hoặc chèn Sender.Cancel := True vào trình xử lý sự kiện CancelButtonClick của nút trên biểu mẫu.
Nhận dữ liệu nhập từ người dùng
Một trong những thành phần phổ biến có thể nhận dữ liệu nhập từ người dùng là thành phần TEdit. Thành phần này có một trường để người dùng có thể nhập một chuỗi ký tự. Lưu ý rằng còn có các thành phần Delphi khác như TMaskEdit, là một thành phần chỉnh sửa có mặt nạ nhập được lưu trong một chuỗi — thành phần này dùng để kiểm soát hoặc lọc dữ liệu nhập.
Ví dụ bên dưới minh họa quá trình khi người dùng nhấp vào nút sau khi nhập nội dung nào đó vào ô chỉnh sửa. Nếu người dùng không nhập gì vào thành phần chỉnh sửa (để trống), trình xử lý sự kiện sẽ phản hồi bằng một thông báo cảnh báo.
Procedure TScriptForm.ButtonClick(Sender : TObject);
Begin
If Edit1.Text = '' Then
Begin
ShowMessage('Warning - empty input!');
Exit;
End;
// do something else for the input
End;
Lưu ý rằng người dùng có thể thay đổi tiêu điểm nhập của hộp thoại bằng phím Tab hoặc bằng cách nhấp vào một điều khiển khác trên biểu mẫu.
Phản hồi sự kiện
Khi một nút trên biểu mẫu hoặc một thành phần được nhấp, Hệ thống Scripting sẽ phản hồi bằng cách nhận thông báo sự kiện từ Altium Designer và gọi phương thức trình xử lý sự kiện thích hợp.
See also
Dự án HelloWorld từ thư mục Scripts\DelphiScript Scripts\General\ của bộ sưu tập scripts.
Ví dụ script ShowModal từ thư mục Scripts\DelphiScript Scripts\General\ của bộ sưu tập scripts.
Viết trình xử lý sự kiện
Mỗi thành phần trong một biểu mẫu script có một tập tên sự kiện, và chúng được dùng bởi các trình xử lý sự kiện của script để xác định cách script phản ứng với các thao tác của người dùng trong Altium Designer. Chẳng hạn, khi người dùng nhấp vào một nút trên biểu mẫu, Altium Designer gửi một thông điệp đến script và script phản ứng với sự kiện mới này. Nếu sự kiện OnClick của nút được chỉ định, nó sẽ được thực thi.
Mã dùng để phản hồi các sự kiện thường nằm trong các trình xử lý sự kiện DelphiScript, và mọi thành phần đều có một tập sự kiện mà chúng có thể phản ứng. Ví dụ, tất cả các thành phần có thể nhấp đều có sự kiện OnClick, được kích hoạt khi người dùng nhấp vào thành phần. Tất cả các thành phần như vậy cũng có sự kiện để nhận và mất tiêu điểm. Tuy nhiên, nếu mã cho OnEnter và OnExit chưa được chỉ định (OnEnter - điều khiển đã nhận tiêu điểm; OnExit - điều khiển đã mất tiêu điểm) thì script sẽ bỏ qua sự kiện đó.
Tóm lại, một sự kiện là cầu nối giữa một sự việc xảy ra trong Altium Designer, chẳng hạn như nhấp nút, và một đoạn mã phản hồi lại sự việc đó. Đoạn mã phản hồi chính là trình xử lý sự kiện. Mã này sẽ thay đổi giá trị thuộc tính và gọi các phương thức.
Thuộc tính của thành phần
Để xem danh sách các thuộc tính của một thành phần, hãy chọn thành phần đó và mở tab Properties trong bảng Object Inspector.
Sự kiện của thành phần
Để xem danh sách các sự kiện mà một thành phần có thể phản ứng, hãy chọn thành phần đó và mở tab Events trong bảng Object Inspector. Để tạo một thủ tục xử lý sự kiện, hãy chọn sự kiện mà bạn muốn thành phần phản ứng và nhấp đúp vào tên sự kiện — hệ thống scripting sẽ tự động chèn mã khung của trình xử lý sự kiện.
Ví dụ, chọn thành phần TButton từ bảng Tool Palette và thả nó lên biểu mẫu script, sau đó nhấp đúp vào bên cạnh tên sự kiện OnClick trong bảng Object Inspector . Hệ thống scripting sẽ đưa Code Editor lên tiêu điểm và tạo mã khung cho sự kiện OnClick.

Ví dụ, nếu một nút có phương thức Close trong trình xử lý sự kiện CloseClick, thì khi nút được nhấp, trình xử lý sự kiện của nút sẽ bắt sự kiện OnClick, làm cho mã bên trong trình xử lý sự kiện được thực thi. Kết quả là, phương thức Close sẽ đóng biểu mẫu script.
Tóm lại, hãy chọn một thành phần nút trên biểu mẫu hoặc bằng bảng Object Inspector, chọn trang Events, rồi nhấp đúp vào phía bên phải của sự kiện OnClick, một trình xử lý sự kiện mới sẽ xuất hiện trong script. Hoặc, nhấp đúp trực tiếp vào chính nút đó, hệ thống scripting sẽ thêm một trình xử lý cho sự kiện OnClick này. Lưu ý rằng các loại thành phần khác sẽ có các hành động mặc định khác nhau.
Phương thức của thành phần
Để xem danh sách các phương thức của một thành phần, hãy xem tài liệu Component Reference.
Thả thành phần lên biểu mẫu script
Để sử dụng các thành phần từ bảng Tool Palette panel trong một script, cần phải có sẵn một biểu mẫu script trước khi có thể thả các thành phần lên biểu mẫu đó. Thông thường, khi các thành phần được thả lên một biểu mẫu script, các đối tượng này không cần phải được tạo hoặc hủy — biểu mẫu script sẽ tự động thực hiện việc đó.
Hệ thống scripting cũng tự động sinh ra mã cần thiết để sử dụng một thành phần và cập nhật biểu mẫu script. Sau đó, bạn chỉ cần thiết lập các thuộc tính, thêm mã vào các bộ xử lý sự kiện, và dùng các phương thức cần thiết để triển khai một biểu mẫu script hoạt động hoàn chỉnh.
Tạo Thành phần trong Script
Các thành phần có thể được tạo hoặc hủy trực tiếp trong một script bằng cách truyền một tham số Nil vào Constructor của một thành phần. Thông thường bạn không cần truyền handle của biểu mẫu vì biểu mẫu script sẽ tự động xử lý việc này. Ví dụ, bạn có thể tạo và hủy các hộp thoại Open và Save (các lớp TOpenDialog và TSaveDialog từ Embarcadero Delphi RTL).
Tùy chỉnh Biểu mẫu Script
Các điểm cốt lõi khi tùy chỉnh biểu mẫu script là:
- Để buộc một biểu mẫu luôn nằm trên các panel đang mở khác, đặt thuộc tính
FormStylethànhfsStayOnTop. - Để xác định hành vi mặc định của một biểu mẫu, đặt
FormKindthành một trong các giá trị sau:fkNone,fkNormal,fkServerPanelhoặcfkModal. - Nếu
fkModalbị đóng, thì biểu mẫu sẽ là biểu mẫu modal — tức là sẽ chờ người dùng nhập liệu trước khi tiếp tục, chẳng hạn như trước khi đóng biểu mẫu. NếufkServerPanelthì biểu mẫu sẽ được hiển thị dưới dạng một panel Server. NếufkNormalthì biểu mẫu sẽ hoạt động như một biểu mẫu không modal thông thường. - Để loại bỏ các thanh cuộn mặc định của biểu mẫu, hãy thay đổi giá trị của các thuộc tính
HorzScrollBarvàVertScrollBar. - Để biến biểu mẫu thành khung MDI hoặc phần tử con MDI, hãy dùng thuộc tính
FormStyle. - Để thay đổi kiểu viền của biểu mẫu, hãy dùng các thuộc tính
BorderIconsvàBorderStyle(kết quả sẽ hiển thị khi chạy). - Để thay đổi biểu tượng cho biểu mẫu khi được thu nhỏ, hãy dùng thuộc tính
Icon. - Để chỉ định vị trí ban đầu của một biểu mẫu trong cửa sổ ứng dụng, hãy dùng thuộc tính
Position. - Để chỉ định trạng thái ban đầu của biểu mẫu (ví dụ: thu nhỏ, phóng to hoặc bình thường), hãy dùng thuộc tính
WindowState. - Để xác định vùng làm việc của biểu mẫu khi chạy, hãy dùng các thuộc tính
ClientHeightvàClientWidth(lưu ý rằngClientHeightvàClientWidthbiểu thị vùng bên trong đường viền của biểu mẫu;HeightvàWidthbiểu thị toàn bộ vùng của biểu mẫu). - Để chỉ định điều khiển nào sẽ nhận focus ban đầu trong biểu mẫu khi chạy, hãy dùng thuộc tính
ActiveControl. - Để chuyển tất cả các sự kiện bàn phím đến biểu mẫu, bất kể điều khiển nào đang được chọn, hãy dùng thuộc tính
KeyPreview. - Để chỉ định một menu cụ thể, nếu một biểu mẫu chứa nhiều hơn một menu, hãy dùng thuộc tính
Menu.
Làm mới Biểu mẫu Script và Thành phần
Khi bề mặt của một biểu mẫu script không còn được cập nhật đúng, chẳng hạn như các điều khiển không được cập nhật hoặc vẽ lại, thì các điều khiển có thể trông như bị treo hoặc bị lỗi hiển thị — điều này có thể là do quá trình xử lý nền nặng từ script đó.
Phương thức Update của biểu mẫu script, cùng nhiều thành phần script từ bảng Tool Palette , cung cấp cách làm mới nội dung đồ họa của biểu mẫu hoặc (các) điều khiển cụ thể. Các dòng chứa phương thức Update được tô xám trong ví dụ bên dưới.
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;
Đoạn mã ví dụ trên lấy từ dự án script PCB Logo Creator, có thể tìm thấy trong thư mục Scripts\Delphiscript Scripts\Pcb\PCB Logo Creator của bộ sưu tập script downloadable.