Đặt biểu tượng chương trình lên
Systray
Xem bai viet bang font ABC
PCWorld VN 12/99
Thời gian qua có một số bạn đã hỏi PC World VN cách đặt biểu tượng chương trình lên System Tray của Windows, nhưng do khuôn khổ mục Trả lời thư bạn đọc không cho phép nên TS Nguyễn Văn Hiệp không nêu cách làm cụ thể mà chỉ nói là phải dùng hàm Windows API Shell_NotifyIcon. Đây cũng có thể là mong muốn của nhiều bạn yêu lập trình nên trong bài này tôi xin mạn phép trình bày cách làm với Visual Basic (và code sử dụng trong bài) lấy trên Internet tại địa chỉ http://support.microsoft.com/support/kb/articles/q149/2/76.asp để các bạn chưa biết hoặc không có điều kiện kết nối Internet cùng tham khảo. Tôi dùng Visual Basic 4.0 32bit bản Enterprise, bạn có thể dùng các bản 32bit khác. Tạo form theo bảng trên đây rồi đổi thuộc tính icon của form thành icon mà bạn muốn nó xuất hiện trên System Tray.

Tiếp theo, vì Shell_Notify-Icon là hàm của Windows nên ta phải khai báo hàm và dữ liệu của nó trước khi sử dụng. Chọn Insert.Module, cửa sổ Module1 xuất hiện, bạn nhập vào như sau:
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Global Const NIM_ADD = 0
Global Const NIM_MODIFY = 1
Global Const NIM_DELETE = 2
Global Const NIF_MESSAGE = 1
Global Const NIF_ICON = 2
Global Const NIF_TIP = 4
Declare Function Shell_NotifyIconA Lib "SHELL32" _
(ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer
Tiếp đó bạn nhập hàm sau vào phần Declarations của frmSystray:
Private Function setNOTIFYICONDATA(hWnd As Long, ID As Long, _
Flags As Long, CallbackMessage As Long, Icon As Long, _
Tip As String) As NOTIFYICONDATA
Dim nidTemp As NOTIFYICONDATA
nidTemp.cbSize = Len(nidTemp)
nidTemp.hWnd = hWnd
nidTemp.uID = ID
nidTemp.uFlags = Flags
nidTemp.uCallbackMessage = CallbackMessage
nidTemp.hIcon = Icon
nidTemp.szTip = Tip & Chr$(0)
setNOTIFYICONDATA = nidTemp
End Function
rồi nhập phần mã đáp ứng các biến cố (event) Click cho các commandbutton:
Private Sub cmdAdd_Click()
Dim i As Integer
Dim nid As NOTIFYICONDATA
nid = setNOTIFYICONDATA(hWnd:= frmSystray.hWnd,_
ID:=vbNull, _
Flags:=NIF_MESSAGE Or NIF_ICON _
Or NIF_TIP, _
CallbackMessage:=vbNull, _
Icon:=frmSystray.Icon, _
Tip:=frmSystray.Caption)
i = Shell_NotifyIconA(NIM_ADD, nid)
End Sub
Private Sub cmdRem_Click()
Dim i As Integer
Dim nid As NOTIFYICONDATA
nid = setNOTIFYICONDATA(hWnd:= frmSystray.hWnd,_
ID:=vbNull, _
Flags:=NIF_MESSAGE Or NIF_ICON _
Or NIF_TIP, _
CallbackMessage:=vbNull, _
Icon:=frmSystray.Icon, _
Tip:="")
i = Shell_NotifyIconA(NIM_DELETE, nid)
End Sub
Khi chạy chương trình, bạn sẽ thấy một form với 2 nút lệnh. Nhấn nút "Add the Icon" để thêm icon của frmSystray lên System Tray và nhấn nút "Remove the Icon" để bỏ nó đi. Xin lưu ý là tooltip (hiện ra khi bạn rê chuột vào icon trên Systray) được thiết lập nhờ tham số Tip của hàm setNOTIFYICONDATA (lpData của Shell_NotifyIcon). Trong ví dụ trên tooltip là Caption của frmSystray, bạn có thể thay nó bằng chuỗi bất kì dài không quá 64 kí tự, nếu quá 64 kí tự, phần dài hơn sẽ không được hiển thị.
Trần Xuân Hoà
Tel: (04) 8334803
E-mail: tranvuong@hn.vnn.vn
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com