|
Ðóng
mở khay đĩa CD-Rom
Bạn có muốn viết một tiện ích để đóng mở khay
ổ đĩa CD-Rom cho riêng mình không ? Nến bạn có ý đó thì vài dòng
code sau đây sẽ giúp bạn toại nguyện.
Lưu ý: Chương trình này chỉ tác dụng tới ổ CD đầu tiên trên hệ thống
của bạn (ổ có tên gần với tên Partition cuối cùng của máy).
- Tạo một Project mới.
- Khai báo hàm API sau trong Form1.
Option
Explicit
Private Declare Function
mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal
lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hWndCallback As Long) As
Long
Tạo thêm hàm vbmciSendString() để nhận thông
điệp đóng/mở khay CDROM. Hàm này trả về một String.
Function
vbmciSendString(ByVal Command As String, ByVal hWnd As Long) As
String
Dim
Buffer As String
Dim
dwRet As Long
Buffer
= Space$(100)
dwRet =
mciSendString(Command, ByVal Buffer, Len(Buffer),hWnd)
vbmciSendString = Buffer
End
Function
Tạo lần lượt 2 Command Button và đặt Caption
cho chúng là: "Open" & "Close". Sau đây là mã tương ứng cho 2 nút
lệnh đó.
Private Sub
Command1_Click()
Dim
Dummy As String
Dummy =
vbmciSendString("set cdaudio door open", 0)
End Sub
Private Sub
Command2_Click()
Dim
Dummy As String
Dummy =
vbmciSendString("set cdaudio door closed ", 0)
End
Sub
Như vậy Command1
dùng để mở khay CD, còn Command2 thì đóng khay. Hãy save lại & cho
chạy thử chương trình xem. Hãy áp dụng những thủ thuật của các bài
trước thiết kế cho chương trình chạy thường trú trong Windows, thể
hiện thành 1 Icon ở System Tray để tiện sử dụng.
Nhất định nó sẽ hữu
ích khi bạn làm biếng thò tay nhấn nút Eject hoặc cái nút quái quỷ
đó không còn tác dụng. Riêng tôi cái tiện ích này cực kỳ tiện, do
cái thùng máy (CPU) tôi đặt dưới gầm bàn, muốn lấy CD ra phải
khom người nhấn nút, rồi chờ (một hai giây thôi cũng đủ làm tôi nóng
ruột). Với tiện ích chỉ việc click chuột khi nào nghe tiếng khay
bung ra .... thật tiện lợi.
Đầu trang
Tùy biến Command Button
Command Button là 1 trong những control thông
dụng nhất trong Windows nói chung & trong VB nói riêng. Một chương
trình đơn giản nào hầu nhưng cũng có đối tượng này.
Tuy vậy nó cũng có những vướng mắt chứ chẳng phải đơn giản đâu. Sau
đây là vài thắc mắc của một bạn tự học VB. Tôi muốn phổ biến cùng
các bạn đang tự học VB khác.
Câu hỏi 1: Tại sao khi tôi thay đổi màu BackColor của Command Button
thành một màu khác (màu mặc nhiên của Windows) nhưng nó vẫn trơ như
đá, chẳng thấy thay đổi theo sự lựa chọn của tôi.
Trả lời: Command Button chỉ thay đổi màu Backcolor khi thuộc
tính Style của nó được đặt là 1-Graphical mà thôi. Mặc nhiên là
0-Standard.
Điều này cũng tương tự như thuộc
tính Picture, khi bạn gán một hình ảnh cũng phải gán cho thuộc tính
Style là 1-Graphical thì bức ảnh mới hiện lên, nếu không thì chẳng
thấy thay đổi gì.
Câu hỏi 2: Làm sao để thay đổi màu TextColor (Màu của dòng Text trên
Command Button - Caption) của Command Button ?
Trả lời: Trong chế độ Design của VB không có thuộc tính nào
cho phép ta thay đổi màu TextColor, và khi thi hành chương trình
cũng vậy. Nói tóm lại trong môi trường phát triển của VB bạn không
thể nào thay đổi màu TextColor của Command Button được.
Do vậy ta phải tìm một hướng khác. Tôi xin đề nghị 2 cách sau đây:
* Custom Control: Bạn có thể tự thiết kế, điều này đòi hỏi bạn phải
có khả năng tạo ActiveX (cũng tạo bằng VB). Hay bạn có thể tìm những
ActiveX được thiết kế sẳn, về bổ sung vào ứng dụng của mình
(Internet là nơi chắc chắn bạn phải tìm đến, nếu không có điều kiện,
hãy lục lọi trên các CD free code bán ở các cửa hàng).
Nhưng theo tôi biết, trong bộ VB 4 (Version 32bit) có một custom
control tên là Sheridan 3D Controls (THREED32.OCX) bạn có thể dễ
dàng tìm tìm thấy hơn. Bao gồm các đối tượng sau:
-
SSCheck
-
SSFrame
-
SSPanel
-
SSRibon
-
SSCommand
-
và
SSOption
Bao gồm rất nhiều thuộc tính cho phép ta chọn đủ màu sắc, có cả
thuộc tính cho phép gán hiệu ứng cho Text nữa. Thật lý thú.
Xem thử giao diện
* Tự vẽ lấy Command Button: Cách này thì ai cũng có thể làm, nhưng
đẹp hay xấu là do phụ thuộc vào khả năng vẽ của bạn. Cách làm như
sau:
-
Tự bạn vẽ một nút lệnh, hình dáng kích thước màu sắc tùy ý bạn.
Bằng các chương trình đồ họa (hay dùng ngay Paint của Windows
cũng được).
-
Lưu lại bức ảnh dưới dạng Bitmap (*.bmp). Thật ra với VB6 bạn có
thể dùng format: bmp, jpg, gif ... Còn VB4 chỉ dùng bmp mà thôi.
-
Gán vào thuộc tính Picture của command button. Lưu ý: Bạn phải
đặt cho thuộc tính Style là 1-Graphical & Caption là trống
(không đặt gì cả).
Tôi có làm một thí dụ đơn giản để minh họa

Bức ảnh gif được vẽ bằng các chương
trình vẽ thông dụng.

Button thứ nhất là do tôi vẽ,
button thứ hai là của VB (không thể thay đổi màu cho Text được). Bạn
hãy so sánh.
Có người cho rằng bạn có thể đặt một Picture vào Image control để
giả làm button, nhưng theo riêng tôi cách này không hay, vì khi đặt
hình ảnh trong Image lúc người dùng Click chuột sẽ không cảm thấy bị
lún xuống như là cách đặt hình ảnh vào Command Button của tôi mới
trình bày.
Đầu trang
Làm sao để hiển thị hộp thoại BROWSE FOR FOLDER
?
Trong lúc viết ứng dụng, có lúc bạn chỉ cần cho người dùng chọn thư
mục (nếu chọn tập tin thì đã có Dialog Open rồi). Lúc này bạn nên
cho hiển thị hộp thoại "Browse for Folder" là tiện nhất.
Sau đây là cách thực hiện:

Hãy khởi động VB. Tạo Project mới
Gõ đoạn Code sau đây vào một Module.
Private Type BrowseInfo
hwndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
Dim iNull As Integer
Dim lpIDList As Long
Dim lResult As Long
Dim sPath As String
Dim udtBI As BrowseInfo
With udtBI
.hwndOwner = hwndOwner
.lpszTitle = lstrcat(sPrompt, "")
.ulFlags = BIF_RETURNONLYFSDIRS
End With
lpIDList = SHBrowseForFolder(udtBI)
If lpIDList Then
sPath = String$(MAX_PATH, 0)
lResult = SHGetPathFromIDList(lpIDList, sPath)
Call CoTaskMemFree(lpIDList)
iNull = InStr(sPath, vbNullChar)
If iNull Then sPath = Left$(sPath, iNull - 1)
End If
BrowseForFolder = sPath
End Function
Trên Form tạo một Command Button (Name: Command1), gõ đoạn code sau
vào sự kiện Click.
Private Sub Command1_Click()
Dim strResFolder As String
strResFolder = BrowseForFolder(hWnd,
"Select Folder.")
If strResFolder <> "" Then
MsgBox strResFolder
End If
End Sub
Kết quả chọn của người dùng được đặt vào biến strResFolder. Bạn hãy
áp dụng vào ứng dụng của mình khi có nhu cầu.
Chúc bạn thành công.
Nguyễn Hồ Thiên Đăng. |