ابتدا تعریف constant های مورد نیاز :
Public Const WM_RBUTTONUP = &H205
Global Const WM_MOUSEMOVE = &H200
Global Const NIM_ADD = 0
Global Const NIM_DELETE = 2
Global Const NIM_MODIFY = 1
Global Const NIF_ICON = 2
Global Const NIF_MESSAGE = 1
Global Const ABM_GETTASKBARPOS = &H5
سپس تعریف یک type با نام RECT برای نشان دادن یک مستطیل :
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
سپس تعریف یک type با نام NOTIFYICONDATA برای توصیف آیکون :
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
حال تعریف یک type با نام APPBARDATA برای توصیف اطلاعات application bar :
Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End Type
دو متغیر را بصورت زیر تعریف می کنیم :
Global Notify As NOTIFYICONDATA
Global BarData As APPBARDATA
حال نیاز به declare کردن توابع Shell_NotifyIcon و SHAppBarMessage از کتابخانه shell32 داریم :
Private Declare Function Shell_NotifyIcon Lib “shell32.dll” Alias “Shell_NotifyIconA” (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Declare Function SHAppBarMessage Lib “shell32.dll” (ByVal dwMessage As Long, pData As APPBARDATA) As Long
روتین قراردادن آیکون بصورت زیر است :
Sub AddIcon(Form1 As Form, IconID As Long, Icon As Object, ToolTip As String)x
Dim Result As Long
BarData.cbSize = 36&
Result = SHAppBarMessage(ABM_GETTASKBARPOS, BarData)x
Notify.cbSize = 88&
Notify.hwnd = Form1.hwnd
Notify.uID = IconID
Notify.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
Notify.uCallbackMessage = WM_MOUSEMOVE
Notify.hIcon = Icon
Notify.szTip = ToolTip & Chr$(0)x
Result = Shell_NotifyIcon(NIM_ADD, Notify)x
End Sub
روتین حذف آیکون بصورا زیر است :
Sub delIcon(IconID As Long)
Dim Result As Long
Notify.uID = IconID
Result = Shell_NotifyIcon(NIM_DELETE, Notify)
End Sub
در فرم مورد نظرتان ابتدا یک متغیر از نوع object تعریف کنید :
Public IconObject As Object
در Form load عبارات زیر را بنویسید :
Set IconObject = Form.Icon
AddIcon Form, IconObject.Handle, IconObject, “TrayIcon”x
در Form unload عبارات زیر را بنویسید :
delIcon IconObject.Handle
delIcon Form.Icon.Handle
فرض کنید یک منو با نام popmenu در فرم دارید و می خواهید با کلیک راست روی آیکون برنامه در system tray ، آن منو باز شود . ابتدا visible این منو را false کنید و سپس متد زیر را برای mousemove بنویسید :
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static Message As Long
Message = X / Screen.TwipsPerPixelX
Select Case Message
Case WM_RBUTTONUP:
Me.PopupMenu Popup
End Select
End Sub
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن