Thursday, October 29, 2009

Những câu hỏi về Delphi

1. Xác định thư mục của chương trình

Hàm dưới đây cho phép bạn lấy đường dẫn tới chương trình của bạn, giống như lệnh App.Path của VB

Function GetCurrentDirectory:String;
var nBufferLength:DWORD;
lpBuffer:PChar;
begin
nBufferLength:=MAX_PATH + 1;
GetMem(lpBuffer, nBufferLength);
try
if Windows.GetCurrentDirectory(nBufferLength,lpBuffer)>0 then
Result:=lpBuffer;
finally
Freemem(lpBuffer);
end;
end;


2. Xác định số Serial của một ổ đĩa bất kỳ

Số serial của ổ đĩa là một số do Hệ điều hành tạo ra, hầu như nó không bao giờ trùng nhau trên cả thế giới. Người ta thường dùng số serial của ổ đĩa để làm cơ sở cho việc hạn chế sao chép phần mềm không có bản quyền, vì mỗi phiên bản cài trên 1 ổ đĩa khác nhau nên số serial mà phiên bản đó đọc được không bao giờ trùng với các phiên bản cài trên các máy khác, do đó mã sử dụng sản phẩm của mỗi phiên bản đều khác nhau, vì vậy người dùng phải bỏ tiền ra mua sản phẩm khi cài nó vào máy khác (nhưng ngày nay nếu chỉ sử dụng cách này thì các Cracker sẽ bẻ khoá trong nháy mắt)

Function GetVolumeID(DriveChar:Char):String;
var MFL,VolFlag,SerNum:DWord;
begin
if GetVolumeInformation(PChar(DriveChar+':\'),nil,0,@SerNum,MFL,VolFlag,nil,0) then
begin
Result:=IntToStr(SerNum);
end
else
Result:='';
end;

3. Sử dụng hàm MessageBox trong Delphi

Để đưa ra các thông báo bạn có thể sử dụng hàm ShowMessage, nhưng hàm này có nhược điểm là không tạo được các nút bấm như Yes, No, Abort, Retry, Ignore... Vì vậy bạn phải sử dụng hàm MessageBox, thực chất đây là một hàm API và cách sử dụng nó như sau:

- Nội dung hàm:

MessageBox(
HWND hWnd, // handle của cửa sổ chính
LPCTSTR lpText, // địa chỉ của chữ trên hộp thông báo
LPCTSTR lpCaption, // địa chỉ của tiêu đề của hộp thông báo
UINT uType // kiểu của hộp thông báo
);

- Các tham số:

hWnd: Handle của cửa sỗ sẽ hiển thị thông báo
lpText: Con trỏ tới chuỗi nội dung thông báo
lpCaption: Con trỏ tới chuỗi nội dung tiêu đề hộp thông báo
uType: Kiểu của hộp thông báo, có các kiểu sau:
MB_ABORTRETRYIGNORE: Hộp thông báo có 3 nút: Abort, Retry, Ignore.
MB_OK:Hộp thông báo có 1 nút OK, đây là giá trị mặc định
MB_OKCANCEL: Hộp thông báo có 2 nút: OK, Cancel.
MB_RETRYCANCEL: Hộp thông báo có 2 nút: Retry, Cancel.
MB_YESNO: Hộp thông báo có 2 nút: Yes, No.
MB_YESNOCANCEL: Hộp thông báo có 3 nút: Yes, No, Cancel.


- Các biểu tượng trên hộp thông báo

MB_ICONEXCLAMATION,MB_ICONWARNING: Một biểu tượng cảnh báo.
MB_ICONINFORMATION, MB_ICONASTERISK: Một biểu tượng thông tin.
MB_ICONQUESTION: Một biểu tượng hỏi xác nhận.
MB_ICONSTOP,MB_ICONERROR, MB_ICONHAND: Một biểu tượng báo hiệu.


-Thiết đặt nút mặc định:

MB_DEFBUTTON1: Nút thứ 1 là mặc định
MB_DEFBUTTON2: Nút thứ 2 là mặc định
MB_DEFBUTTON3: Nút thứ 3 là mặc định
MB_DEFBUTTON4: Nút thứ 4 là mặc định

- Phương thức hiển thị của hộp thông báo:

MB_APPLMODAL: Phải làm việc với hộp thông báo xong mới được làm việc với cửa sổ chương trình
MB_SYSTEMMODAL: Phải làm việc với hộp thông báo xong mới được làm việc với cửa sổ chương trình, và hộp thông báo này luôn nằm trên tất cả các cửa sổ khác
MB_HELP: Thêm một nút Help vào hộp thông báo
MB_RIGHT: Căn lề phải cho chữ
MB_RTLREADING: Hiển thị chữ trên thanh tiêu đề theo chiều từ phải sang trái, dùng cho người do thái hay Arập
MB_TOPMOST: Hộp thông báo được tạo ra với kiểu nằm trên cùng WS_EX_TOPMOST.

- Giá trị trả về

Giá trị trả về là rỗng nếu không đủ bộ nhớ để tạo ra hộp thông báo.
Nếu thành công giá trị trả về sẽ là 1 trong các giá trị sau:
IDABORT: Nút Abort được chọn.
IDCANCEL: Nút Cancel được chọn.
IDIGNORE: Nút Ignore được chọn.
IDNO: Nút No được chọn.
IDOK: Nút OK được chọn.
IDRETRY: Nút Retry được chọn.
IDYES: Nút Yes được chọn.

- Ví dụ:

Tạo một hộp thông báo có 3 nút Abort-Retry-Ignore, nút Abort là mặc định, biểu tượng hộp là dấu hỏi, và luôn nằm trên cùng

MessageBox(form1.Handle,'Hello World','Message Box Demo',MB_ABORTRETRYIGNORE or MB_DEFBUTTON1 or MB_ICONQUESTION or MB_TOPMOST)

Nếu bạn muốn hiển thị nội dung thông báo từ một biến kiểu String:
msg:='Hello World';
title:='Message Box Demo';
MessageBox(form1.Handle,Pchar(msg),Pchar(title),MB_OKCancel)

Nếu bạn muốn nhận giá trị trả về của hàm:
msg:='Hello World';
title:='Message Box Demo';
If MessageBox(form1.Handle,Pchar(msg),Pchar(title),MB_OKCancel)=IDOK then
begin

{Công việc cần thực hiện khi người dùng click vào nút OK}
end;

No comments:

Post a Comment