LËp tr×nh Visual Basic
§Æt biÓu tîng ch¬ng tr×nh vµo
System Tray
Xem bai viet bang font Unicode
Trong ThÕ Giíi Vi TÝnh sè 96 (Th¸nh 12/1999) b¹n TrÇn Xu©n Hoµ (tranvuong@hn.vnn.vn) cã híng dÉn c¸ch ®Æt biÓu tîng ch¬ng tr×nh vµo System Tray nhng kh«ng híng dÉn c¸ch xö lý c¸c t×nh huèng x¶y ra gi÷a Mouse & Form, ë bµi viÕt nµy t«i xin híng dÉn b¹n c¸ch ®Ó t¹o mét menu popup cho ch¬ng tr×nh.

B¹n h·y thiÕt kÕ c¸c control nh sau:
Form: frmStartUp
Menu: mnuDummy, mnuPopUp (Index=0). Tù b¹n ®Æt Caption nhng name th× ph¶i ®óng nh vËy míi ®îc. G¸n cho sù kiÖn Click cña mnuPopUp(0) mét lÖnh nµo ®ã ®Ó thÝ nghiÖm, trong vÝ dô nµy lµ n¹p biÓu mÉu frmCalendar.
mnuDummy
mnuPopUp
Picture: picHook
Image: imgPlay
Lu ý: ch¬ng tr×nh nµy kh«ng hÒ ®¸ ®éng chi ®Õn c¸i icon cña form, khi ch¹y nã chØ n¹p bøc ¶nh trong imgPlay mµ th«i. Cho nªn biÓu tîng cña form lµ g× còng ®îc.

Khai b¸o kiÓu NOTIFYICONDATA
Private 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
B¹n h·y tiÕn hµnh khai b¸o mét lo¹t c¸c h»ng sau:
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Khai b¸o hµm API ®Ó phôc vô cho viÖc ®a icon vµo System tray.
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Dim T As NOTIFYICONDATA
C¸c lÖnh cÇn xö lý lóc cã sù kiÖn n¹p biÓu mÉu.
Private Sub Form_Load()
T.cbSize = Len(T)
T.hwnd = pichook.hwnd
T.uId = 1&
T.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
T.ucallbackMessage = WM_MOUSEMOVE
T.hIcon = imgPlay.Picture
T.szTip = "Agenda2000 (c) NGUYEN HO THIEN DANG" & Chr$(0)
'§Æt ToolTipText cho biÓu
tîng trong System Tray.
Shell_NotifyIcon NIM_ADD, T
'Èn form nµy ®i
Me.Hide
Beep
End Sub
Mét khi form nµy UnLoad còng ®ång nghÜa víi viÖc dõng ch¬ng tr×nh (xãa Icon trong SysTray)
Private Sub Form_Unload(Cancel As Integer)
T.cbSize = Len(T)
T.hwnd = pichook.hwnd
T.uId = 1&
Shell_NotifyIcon NIM_DELETE, T
End
End Sub
Private Sub mnuPopUp_Click(Index As Integer)
frmCalendar.Show
End Sub
Sù kiÖn MouseMove trªn picHook. C¸c dßng lÖnh sau sÏ ®¶m nhËn viÖc Èn hiÖn c¸i menu tªn lµ mnuDummy, vµ ®ãn lÊy c¸c sù kiÖn cña Mouse nh: Up, Down, DoubleClick. Tõ ®©y b¹n chØ cÇn ®Æt c¸c lÖnh cÇn thùc hiÖn øng víi c¸c sù kiÖn cña Mouse lµ xong.
Víi
WM_LBUTTONDBLCLK: Nót tr¸i ®îc nhÊn ®«i
WM_LBUTTONDOWN: Nót tr¸i ®îc nhÊn xuèng
WM_LBUTTONUP: Nót tr¸i ®îc th¶ ra
WM_RBUTTONDBLCLK: Nót ph¶i ®îc nhÊn ®«i
WM_RBUTTONDOWN: Nót ph¶i ®îc nhÊn xuèng
WM_RBUTTONUP: Nót ph¶i ®îc th¶ ra
Private Sub picHook_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Static State As Boolean
Static Popped As Boolean
Static Msg As Long
Msg = X / Screen.TwipsPerPixelX
If Popped = False Then
Popped = True
Select Case Msg
Case WM_LBUTTONDBLCLK:
mnuPopUp_Click 0
Case WM_LBUTTONDOWN:
'
Case WM_LBUTTONUP:
mnuPopUp_Click 0
Case WM_RBUTTONDBLCLK:
'
Case WM_RBUTTONDOWN:
'
Case WM_RBUTTONUP:
PopupMenu mnuDummy, 2, , , mnuPopUp(0)
End Select
Popped = False
End If
End Sub
Chóc b¹n thµnh c«ng víi t¸c phÈm cña m×nh. T«i lu«n mong nhËn ®îc c¸c ý kiÕn ®ãng gãp ®Ó c¸c bµi sau ®îc tèt h¬n.
Thiªn §¨ng, thdang@tlnet.com.vn
03 thaìng hai, 2002 07:35:24 CH
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com