Các hàm thông dụng
Những hàm, thủ tục được sử dụng thường xuyên trong VCL
Những hàm, thủ tục được sử dụng thường xuyên trong VCL
Bài này sẽ nói về những hàm, thủ tục thông dụng trong lập trình đồ họa. Trong VCL, việc nhập xuất phải thực hiện thông qua các control, nên sẽ khó viết mã nhanh. Ví dụ, để nhập tên của 1 người, bạn phải thêm một TEdit, và xử lý sự kiện cho nó. Khá rắc rối.
Delphi cung cấp một số hàm, thủ tục nhanh để hỗ trợ việc nhập xuất cơ bản này.
Unit: VCL.Dialogs (hoặc FMX.Dialogs)
Dùng để hiển thị thông báo một chuỗi string cho người dùng. Có thể sử dụng với helper ToString cho các kiểu dữ liệu khác.
var
MyName: string;
MyAge: Integer;
begin
ShowMessage('Tên tôi là Tống Hoàng Vũ');
MyName := 'Tống Hoàng Vũ';
ShowMessage(MyName);
MyAge := 17;
ShowMessage(MyAge.ToString);
end;
Trong VCL, có hỗ trợ đầy đủ unicode, thế nên bạn có thể cho thông báo một chuỗi tiếng Việt có dấu.
Để hiển thị thông báo trên nhiều dòng, sử dụng kí tự #13 để phân cách (chỉ trên Windows) hoặc hằng sLineBreak (cho mọi nền tảng). Mình khuyên nên sử dụng sLineBreak cho quen.
begin
ShowMessage('This is line 1' + #13 + 'This is line 2');
ShowMessage('This is line 1' + sLineBreak + 'This is line 2');
end;
Lưu ý: ShowMessage có giới hạn độ dài chuỗi. Nếu hiển thị chuỗi quá dài, nội dung sẽ bị cắt bớt.
Tương tự ShowMessage, nhưng hiển thị với định dạng (format).
var
Value: Integer;
SoDuong: Word;
MyName: string;
MyAge: Integer;
begin
Value := -10;
ShowMessageFmt('The value is %d', [Value]);
SoDuong := 20;
ShowMessageFmt('The value is %u', [SoDuong]);
MyName := 'Tong Hoang Vu';
ShowMessageFmt('My name is %s', [MyName]);
MyAge := 17;
ShowMessageFmt('My name is %s. I am %d', [MyName, MyAge]);
end;
Như các bạn thấy, hàm ShowMessageFmt có đối số 1 là string, đối số 2 là một set variant (tập hợp trong dấu [], có thể chứa nhiều biến.
Trong đó, đối số string phải chứa kí tự đại diện cho các biến đó tùy theo kiểu dữ liệu như sau:
%u: unsigned, số không âm
%d: decimal, số nguyên
%f: float, số thực
%s: string, chuỗi kí tự
Còn nữa nhưng ở trên là những kí tự định dạng thông dụng. Thứ tự các biến trong set ở tham số thứ 2 phải phù hợp với thứ tự định dạng đã quy định. Nghĩa là những biến phía sau sẽ nhảy lên phía trước vào đúng vị trí đã định.
Đây là một hàm, trả về một chuỗi. Hàm này rất tiện trong việc yêu cầu người dùng nhập vào thông tin dạng chuỗi.
var
MyName: string;
...
begin
MyName := InputBox('Đây là tiêu đề', 'Đây là văn bản', 'Giá trị có sẵn');
end;
Khi chạy, một hộp thoại nhỏ như hình bên hiện ra, yêu cầu người dùng nhập dữ liệu.
Chú ý vào các tham số ở đoạn code ở trên và giá trị trên hình bên.
Khi người dùng nhấn bất kì nút nào (Ok, Cancel hoặc Close) thì giá trị hàm trả về vẫn là những gì có trong khung nhập văn bản.
Nếu bạn muốn nhập số vào trong đó, hãy sử dụng hàm TryStrToInt kết hợp với InputBox.
var
Age: Integer;
begin
while TryStrToInt(InputBox('Tiêu đề', 'Nội dung', ''), Age) = false do
ShowMessage('Tuổi phải là số, mời bạn nhập lại');
end;
Chúng ta sử dụng vòng lặp while ... do, nếu nhập đúng là số (hàm TryStrToInt là true) thì sẽ không cần nhập lại. Ngược lại, nếu nhập sai thì sẽ hiển thị thông báo lỗi (ShowMessage) và quay lại nhập.
Mẹo hay: InputBox có thể dùng để nhập mật khẩu. Khi đó, hộp nhập văn bản sẽ chứa các kí tự như ***** (dấu chấm tròn đen chứ không phải dấu sao đâu). Để làm như vậy, bạn có thể sử dụng hàm InputBox theo một cách như sau.
begin
InputBox('Tiêu đề', #31'Nhập mật khẩu', '');
...
end;
Trong đó, kí tự #31 là kí tự đặc biệt. Hàm InputBox nếu tham số thứ 2 bắt đầu bằng kí tự đặc biệt (từ #0 đến #31) thì sẽ hiển thị dưới dạng mật khẩu ****.
Các control trong VCL cung cấp một method khá tiện lợi để thay đổi kích thước và vị trí của control nhanh chóng. Thay vì gán cho 4 thuộc tính (Top, Left, Width, Height) như sau
Button1.Left := 20;
Button1.Top := 30;
Button1.Width := 40;
Button1.Height := 50;
Thì chỉ cần dùng một method SetBounds cho cả 4 thuộc tính
Button1.SetBounds(20, 30, 40, 50);
Cấu trúc method SetBounds với các tham số theo thứ tự như sau
procedure SetBound(ALeft, ATop, AWidth, AHeight: Integer);