|
HỒ LÔ BIẾN |
|
Con trỏ chuột động
trong VB6
Ngô Bảo Khoa |
|
Trong VB6, biểu mẫu và một số đối tượng như
PictureBox, TextBox, ComboBox,
ListBox, v.v.. có các thuộc tính MouseIcon
và MousePointer. Với một đối tượng, khi bạn
gán trị cho thuộc tính MousePointer là “99
– Custom” và MouseIcon là tên tập tin
thuộc loại ico hoặc cur (tập tin hình
con trỏ chuột) thì con trỏ chuột của đối tượng sẽ là
con trỏ chuột do bạn chỉ định. Con trỏ chuột này
không thể là con trỏ chuột động (VB6 chỉ cho phép
nạp tập tin có phần mở rộng là ico hoặc cur). Tuy
nhiên, bằng cách áp dụng một số hàm API, bạn vẫn có
thể sử dụng con trỏ chuột động trong chương trình. |
|
Ta hãy thử viết một chương trình nạp và loại bỏ con
trỏ chuột động trong VB6. Trước hết, bạn cần tìm
hiểu một số hàm API sẽ được sử dụng. |
|
Các hàm API cần thiết |
|
Hàm API LoadCursorFromFile |
|
- Khai báo: Declare Function LoadCursorFromFile Lib
"user32" Alias "LoadCursorFromFileA" (ByVal
lpFileName As String) As Long |
|
- Ý nghĩa: Hàm này giúp ta lấy hình dạng con trỏ
chuột từ tập tin được khai báo qua tham số
lpFileName. |
|
Hàm API GetClassLong |
|
- Khai báo: Declare Function GetClassLong Lib
"user32" Alias "GetClassLongA" (ByVal hwnd As Long,
ByVal nIndex As Long) As Long |
|
- Ý nghĩa: Mỗi đối tượng trong Windows có chứa một
biến WINDCLASSEX mang thông tin về đối tượng đó, như
là kiểu đối tượng (hộp thoại, cửa sổ, hay trình
đơn…), kiểu con trỏ chuột… Hàm GetClassLong
cho ta trị của biến WINDCLASSEX trong đối tượng (xác
định bằng tham số hwnd) tại vị trí nIndex.
Nếu nIndex có trị là hằng GCL_HCURSOR, hàm
GetClassLong trả về trị mô tả kiểu con trỏ chuột
của đối tượng. |
|
Hàm API SetClassLong |
|
- Khai báo: Declare Function SetClassLong Lib
"user32" Alias "SetClassLongA" (ByVal hwnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long |
|
- Ý nghĩa: Tương tự hàm GetClassLong, nếu
nIndex có trị là hằng GCL_HCURSOR, hàm
SetClassLong thiết lập kiểu con trỏ chuột mới
cho đối tượng. Tham số dwNewLong xác định trị
mới này. |
|
Các bước thực hiện |
|
1. Bạn tạo một dự án mới thuộc dạng Standard EXE
rồi thêm vào biểu mẫu hai CommandButton. Ta
dự định thế này: người dùng ấn vào Command1
để đổi con trỏ chuột hiện thời thành con trỏ chuột
động và ấn vào Command2 để trở lại với con
trỏ chuột bình thường (hình 1). |
|
2. Bạn dùng API Text Viewer hoặc tự đánh vào
đoạn mã 1 để khai báo các hàm API và hằng trong phần
mã của biểu mẫu Form1. |
|
3. Bạn thêm vào Form1 các thủ tục
Form_Load(), Command1_Click() và
Command2_Click() như đoạn mã 2 là xong. |
|
Chúc bạn thành công! |
|
Đoạn mã 1
Option Explicit
Const GCL_HCURSOR = -12
Private Declare Function LoadCursorFromFile Lib
"user32" _
Alias "LoadCursorFromFileA" (ByVal lpFileName As
String) _
As Long
Private Declare Function GetClassLong Lib "user32" _
Alias "GetClassLongA" (ByVal hwnd As Long, ByVal
nIndex _
As Long) As Long
Private Declare Function SetClassLong Lib "user32" _
Alias "SetClassLongA" (ByVal hwnd As Long, ByVal _
nIndex As Long, ByVal dwNewLong As Long) As Long
‘Biến lưu giữ con trỏ chuột hiện thời
Dim BaseCursor As Long
‘Biến lưu giữ con trỏ chuột động
Dim AniCursor As Long |
|
Đoạn mã 2
Private Sub Form_Load()
Command2.Enabled = False
‘Lưu giữ con trỏ chuột hiện thời vào biến BaseCursor
BaseCursor = GetClassLong(hwnd, GCL_HCURSOR)
End Sub
Private Sub Command1_Click()
Command1.Enabled = False
Command2.Enabled = True
‘Nạp con trỏ chuột động vào biến AniCursor.
‘Tập tin chứa con trỏ chuột động có phần mở rộng là
ani.
AniCursor =
LoadCursorFromFile("C:\windows\cursors\hand.ani")
‘Đổi con trỏ chuột hiện thời thành con trỏ chuột
động.
SetClassLong hwnd, GCL_HCURSOR, AniCursor
End Sub
Private Sub Command2_Click()
Command1.Enabled = True
Command2.Enabled = False
‘Bỏ con trỏ chuột động, trở lại
‘với con trỏ chuột trước đó.
SetClassLong hwnd, GCL_HCURSOR, BaseCursor
End Sub |
|

Hình 1 |
|
|