SỐ 113
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 MouseIconMousePointer. 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() 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

[Đầu trang]
Trang chủ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Cõi người ta
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền Công ty Phần mềm & Truyền thông VASC
 99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn
Mọi chi tiết về kinh doanh và quảng cáo xin liên hệ Phòng Quảng cáo. Tel: (04) 9782077 kd@vasc.com.vn