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.
Tùy biến Command ButtonCommand 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ú.
* 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.
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.
Cho e hỏi làm thế nào để khj ta chọn đối tượng thì nó chuyển sang màu khác ạ(như chọn bàn của quàn cf ý ạ..bàn nào có khách thì màu khác các bàn k có khách) e cảm ơn ạ
ReplyDelete