[align=center][size=150]
Kỳ 4: Hướng dẫn tạo DLL qua ví dụ nhỏ.[/size][/align]
Giả sử tôi có 1 số hàm lệnh sau đây, tôi muốn dùng chung các hàm lệnh này cho các chương trình của tôi sau này, nên tôi xây
dựng một ActiveX DLL.
- Chụp ảnh màn hình
- Đặt Form lên vị trí trên cùng (OnTop)
Ở đây, mình lấy ví dụ là 4 mẹo vặt trong VBLib của diễn đàn.
Các bước tiến hành như sau, tuân theo các quy trình ở các kỳ trước đã nói. Các bạn nên áp dụng khuôn mẫu như mình trình bày
để dễ tiện quản lý và sửa đổi khi cần. Đó cũng là 1 mẹo vặt để viết Code cho chương trình.
Bước 1: Tạo 1 dự án ActiveX DLL mới
Bước 2: Thêm 1 Module (Name: mAPI), 1 Class (Name cFunction). Tạo Module để chứa các hàm API và các kiểu
dữ liệu, hằng khai báo dùng chung. Tạo 1 Class để chứa 4 hàm để nêu trên. Đặt thuộc tính
Instancing = MultiUse (Xem
lại các kỳ trước về chức năng của thuộc tính này)
Bước 3: Mở Module mình vừa tạo ra, thêm các dòng sau:
[vb]
Option Explicit
' ----------------------- Khai bao hang ---------------------------
' Hang su dung cho ham chup cua so man hinh
Public Const VK_SNAPSHOT As Byte = &H2C
' Hang su dung cho ham FormOnTop
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
' ----------------------- Ket thuc khai bao -----------------------
' ----------------------- Khai bao API ----------------------------
' Ham API su dung cho ham chup cua so man hinh
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal
dwExtraInfo As Long)
' Ham API su dung cho ham Dat Form tren cung
Public Declare Function SetWindowPos& Lib "user32" (ByVal Hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long,
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Public Declare Function SetForegroundWindow Lib "user32" (ByVal Hwnd As Long) As Long
' ---------------------- Ket thuc khai bao ------------------------
[/vb]
Bước 4: Xong thằng Module, giờ ta mở thằng Class cFunction lên, và thêm vào 2 hàm sau.
Ở bước này, bạn nên đọc kỹ ghi chú có trong hàm FormOnTop, đó cũng là 1 đặc tính rất quan trọng mà mình quên đề cập ở các
kỳ trên (Sorry
)
[vb]
Option Explicit
Public Function CaptureScreen() As StdPicture
On Error GoTo loi
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
DoEvents
Set CaptureScreen = Clipboard.GetData(vbCFBitmap)
loi:
End Function
Public Function FormOnTop(ByVal Hwnd As Long, Optional ByVal bTopMost As Boolean = True) As Long
' Chu y: Ban co thay minh dat khoa Optional truoc tu Byval khong
' Tac dung cua tu khoa nay: Minh muon mac dinh cho bien bTopMost la True, neu
' nguoi dung khong truyen gia tri cho no
' Co the nguoi ta goi: Call FormOnTop (Me.Hwnd) = Call FormOnTop(Me.Hwnd, True)
On Error GoTo loi
Dim f As Long, p As Long
f = SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW
Select Case bTopMost
Case True
p = HWND_TOPMOST
Case False
p = HWND_NOTOPMOST
End Select
SetWindowPos Hwnd, p, 0, 0, 0, 0, f
FormOnTop = 1
loi:
FormOnTop = 0
End Function
[/vb]
Bước 5: Thế là phần khung sườn cho thư viện của bạn đã hoàn chỉnh, công việc của bạn chỉ là Complete ra để
dùng thui. Vào Menu File --> Make [Tên Project].Dll
Ở bước này, bạn xem thêm về cách biên dịch ra thư viện ở kỳ thứ 5
Bước 6: Sử dụng thư viện mình vừa tạo thế nào. Cách làm đơn giản, thực hiện theo các bước nhỏ dưới đây
+ Add thư viện của mình vào 1 Project bất kỳ thông qua chức năng References (Project --> References)
+ Sau khi Add xong, khai báo biến trỏ đến 1 trong những Class có trong thư viện, ở đây là liên kết đến Class cFunction
[vb]
Option Explicit
' Khai bao ham tro den Class cFunction
Dim cF as New cFunction
Private Sub Form_Load()
' Goi va thuc hien Ham FormOnTop co trong Class cFunction
cF.FormOnTop Me.Hwnd
End Sub
[/vb]
Bước 7: Hết --> mời các bạn đọc tiếp kỳ 5 và 6, mình sẽ hướng dẫn chi tiết cách biên dịch và sử dụng thư viện.
http://rubicolort33.googlepages.com/ViduDLL.rar