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

thdang@tlnet.com.vn

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 nh­ng 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 nh­ng 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

L­u ý: 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