VCL
Visual Component Library
Visual Component Library
VCL (Visual Component Library) là bộ thư viện trực quan của Delphi để xây dựng các chương trình có giao diện cho Windows. VCL dựa trên các thành phần (component) và các điều khiển (control) để giúp cho việc viết phần mềm trở nên dễ dàng và trực quan hơn.
Để tạo một project VCL mới: File > New > Windows VCL Application
VCL hỗ trợ đầy đủ unicode, nên bạn có thể viết tiếng Việt trong các hàm kiểu string.
Khi tạo một VCL project mới, một form được tạo ra sẵn. Bạn có thể kéo thả các thành phần từ cửa sổ Tool Palette lên form. Những cái đó gọi là các component (thành phần).
Mọi thành phần đều có thể được tìm thấy trong Tool Palette.
Các component có hai loại:
Non-visual component: Là các component không nhìn thấy và thao tác lên được trong thời gian chạy.
Visual component: Những component khi chạy có thể nhìn thấy, thao tác lên nó được như click, double click, drag ... ví dụ như Button, Label, Edit, ... được gọi là control.
Tất cả control đều là component, nhưng không phải component nào cũng là control.
Sau một ít thời gian thực hành, làm quen với các control, bạn sẽ nhận thấy điều này. Một số control có thể đặt vào bên trong control khác. Ví dụ như TButton có thể đặt vào trong TPanel.
Parent
Khi đó, control ở trong gọi là subcontrol, control chứa các subcontrol là parent control.
Với mỗi control đều có thuộc tính Parent. Quy định control nào chứa control hiện tại. Nếu đặt trên form thì Parent là Self (từ đại diện cho tên form).
Bạn có thể chuyển đổi parent. Ví dụ, chuyển một Button1 từ Panel1 sang Panel2, bạn làm như sau
Button1.Parent := Panel1; // Đang ở Panel1
Button1.Parent := Panel2; // Chuyển sang Panel2
Bạn cũng có thể làm điều này thủ công bằng kéo thả ở cửa sổ Structure.
Owner
Như đã biết, mọi control đều là class, nên việc tạo control cũng tương tự như tạo class.
var
Button1: TButton;
begin
Button1 := TButton.Create(Panel1);
Button1.Parent := Panel2;
...
end;
Chú ý đến dòng in đậm, khi dùng hàm tạo Create với một tham số là tên control (Panel1), thì mặc định control đó là Owner (chủ sở hữu). Điều này khác với Parent ở trên.
Parent cho phép control ở bên trong nó. Nhưng Owner chịu trách nhiệm phá hủy (Free) control khi nó bị phá hủy. Ví dụ như trên, khi ta gọi
Panel1.Free;
thì khi Panel1 bị xóa, Button1 cũng bị xóa theo.
Hãy xem xét khi xóa Panel2 (là parent, không phải Owner)
Panel2.Free;
Khi ấy, Panel2 bị xóa, Button1 không được hiển thị (do không có parent) nhưng vẫn tồn tại trong bộ nhớ, gây lãng phí bộ nhớ. Cần cẩn thận tránh trường hợp này.
Với mỗi platform (nền tảng) đều có Z-Order. Windows thì có Windows Z-Order, Android thì có Android Z-Order.
Đơn giản, Z-Order là thứ tự sắp xếp các control, các control có thể chồng lên nhau, control ở trên che lấp control phía dưới (che lấp một phần hoặc toàn bộ).
Mọi control đều cung cấp 2 method để xử lý việc này, là BringToFront và SendToBack.
BringToFront để đưa control lên phía trên cùng, SendToBack thì ngược lại, mang control đặt xuống dưới.
Panel1.BringToFront;
Panel2.SendToBack;
Bạn cũng có thể chuột phải vào control và chọn Control > BringToFront hoặc Control > SendToBack để tùy chỉnh thủ công.
Khi một control (đã Enabled - được bật, thuộc tính Enabled là True) được thao tác lên nó như click, double click, mouse down, ... thì ta nói control đó đã được nhận focus.
Control cũng có thể nhận focus bằng việc nhấn phím Tab. Sau mỗi lần nhấn Tab, focus được chuyển từ control này sang control khác.
Control được nhận focus gọi là active control hoặc focused control.
Khi một control, ví dụ Button1 nhận focus, nó có thể có xuất hiện một đường viền chấm chấm xung quanh. Thuộc tính active control của form trỏ đến control đó.
Self.ActiveControl := Button1;
Form1.ActiveControl := Button1;
Hai câu lệnh trên là tương đương nhau, cùng đặt focus cho Button1.
Bạn cũng có thể đặt focus bằng cách dùng method SetFocus.
Button1.SetFocus;