A_M_IT2005
03-06-2006, 00:57
براي قرار دادن آيکون برنامه در system tray ابتدا يک ماژول تعريف کرده و اطلاعات زير را در آن قرار دهيد :
ابتدا تعريف 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
------------------------------------------------
منبع:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
-----------------------------------------------
امیدوارم به دردتون بخوره
در ضمن مقاله های زیادی در مورد ویژوال بیسیک دارم.
توی همین تاپیک بزارم یا برای هر کدوم یک تاپیک بسازم
نظر بدین.
ابتدا تعريف 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
------------------------------------------------
منبع:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
-----------------------------------------------
امیدوارم به دردتون بخوره
در ضمن مقاله های زیادی در مورد ویژوال بیسیک دارم.
توی همین تاپیک بزارم یا برای هر کدوم یک تاپیک بسازم
نظر بدین.