بسم الله الرحمن الرحيم
الحمد لله رب العالمين والصلاة والسلام على سيد الأنبياء وولي المرسلين نبينا محمد وعلى آله الطيبين الطاهرين وأصحابه وزوجاته أمهات المؤمنين وأما بعد:
أتوجه بالشكر للأخ الفاضل GENIUS-IT على مساعدته لي في هذا الدرس وأتمنى من الجميع الإستفادة منه...
هذا الدرس يدول حول عمل رسالة بالونية تظهر بجانب أيقونة الساعة الخاصة ببرنامجك مثلما توضح الصورة 1-1 وسأقوم هنا بشرح كيفية عمل مثل هذه البالونة مع مثال مرفق

صورة 1-1 : رسالة بالونية خاصة بأحد البرامج من برمجتي الخاصة
والدروس عن هذا الموضوع منتشرة على الإنترنت لكن بشكل معقد , ولهذا قمت بتبسيطها بمثال بسيط عبارة عن Form واحدة و Module واحد فقط...
الكود الموجود في الـModule خاص بإرسال أيقونة البرنامج إلى الـSystem Tray وأيضاً إظهار الرسالة البالونية فوقها...
والـForm موجود فيه نصل الرسالة المدخلة وأربع Radio buttons لإختيار أيقونة الرسالة البالونية...
نبدأ أولا ً بالـModule سآخد جزء جزء وأقوم بشرحه :
Public Const APP_SYSTRAY_ID = 999 Public Const NOTIFYICON_VERSION = &H3 Public Const NIF_MESSAGE = &H1 Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 Public Const NIF_STATE = &H8 Public Const NIF_INFO = &H10
هذا الجزء خاص بتعريف ثوابت أو Constants لإرسال الأيقونة بجانب الـSystem Tray
Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_MBUTTONDBLCLK = &H209 Public Const WM_MBUTTONDOWN = &H207 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_RBUTTONDBLCLK = &H206 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_MOUSEMOVE = &H200 Public Const WM_COMMNOTIFY = &H44 Public Const MAX_TOOLTIP As Integer = 64
هذا الجزء خاص بتعريفات الثوابت الخاصة بإلتقاط الحركة بزر الماوس على الأيقونة وهي مصغرة في الـSystem Tray
Public Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 128 dwState As Long dwStateMask As Long szInfo As String * 256 uTimeoutAndVersion As Long szInfoTitle As String * 64 dwInfoFlags As Long guidItem As GUID End Type Public Declare Function Shell_NotifyIcon Lib "shell32.dll" _ Alias "Shell_NotifyIconA" _ (ByVal dwMessage As Long, _ lpData As NOTIFYICONDATA) As Long Public Declare Function GetFileVersionInfoSize Lib "version.dll" _ Alias "GetFileVersionInfoSizeA" _ (ByVal lptstrFilename As String, _ lpdwHandle As Long) As Long Public Declare Function GetFileVersionInfo Lib "version.dll" _ Alias "GetFileVersionInfoA" _ (ByVal lptstrFilename As String, _ ByVal dwHandle As Long, _ ByVal dwLen As Long, _ lpData As Any) As Long Public Declare Function VerQueryValue Lib "version.dll" _ Alias "VerQueryValueA" _ (pBlock As Any, _ ByVal lpSubBlock As String, _ lpBuffer As Any, _ nVerSize As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long)
هنا التعريفات الإضافية لإرسال الأيقونة للـSystem Tray وتجهيز رسالة البالون فوقها بالإضافة إلى دوال API مرتبطة بالعملية..
لم أتوسع كثيرا ً في شرح هذه الأمور لإنها متامثلة ....
الآن للـForm
أهم Functions في الفورم هم :
Private Sub ShellTrayAdd() Dim nid As NOTIFYICONDATA If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion 'set up the type members With nid .cbSize = NOTIFYICONDATA_SIZE .hWnd = Me.hWnd .uID = APP_SYSTRAY_ID .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP .uCallbackMessage = WM_MOUSEMOVE .dwState = NIS_SHAREDICON .hIcon = Me.Icon 'szTip is the tooltip shown when the 'mouse hovers over the systray icon. 'Terminate it since the strings are 'fixed-length in NOTIFYICONDATA .szTip = "Baloon" & vbNullChar .uTimeoutAndVersion = NOTIFYICON_VERSION End With 'add the icon ... Call Shell_NotifyIcon(NIM_ADD, nid) '... and inform the system of the 'NOTIFYICON version in use Call Shell_NotifyIcon(NIM_SETVERSION, nid) End Sub
وهي المسؤولة عن إضافة الأيقونة إلى الـSystem Tray
وأيضا ً :
Private Sub ShellTrayModifyTip(nIconIndex As Long) Dim nid As NOTIFYICONDATA If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion With nid .cbSize = NOTIFYICONDATA_SIZE .hWnd = Me.hWnd .uID = APP_SYSTRAY_ID .uFlags = NIF_INFO .dwInfoFlags = nIconIndex 'InfoTitle is the balloon tip title, 'and szInfo is the message displayed. 'Terminating both with vbNullChar prevents 'the display of the unused padding in the 'strings defined as fixed-length in NOTIFYICONDATA. .szInfoTitle = "ãÍãÏ Õáì Çááå Úáíå æÂáå" & vbNullChar .szInfo = strBaloonMessage & vbNullChar End With Call Shell_NotifyIcon(NIM_MODIFY, nid) End Sub
وهي المسؤولة عن إظهار الرسالة البالونية فوق الأيقونة
وأخيرا ً :
Private Sub ShellTrayRemove() Dim nid As NOTIFYICONDATA If NOTIFYICONDATA_SIZE = 0 Then SetShellVersion With nid .cbSize = NOTIFYICONDATA_SIZE .hWnd = Me.hWnd .uID = APP_SYSTRAY_ID End With Call Shell_NotifyIcon(NIM_DELETE, nid) End Sub
وهي المسؤولة عن حذف الأيقونة من الـSystem Tra وعادة تُستخدم هذه الـFunction في الـForm_unload لإزالتها بعد إغلاق البرنامج.
هذا هو البرنامج بإختصار شديد قمت بتعديله ليكون سهل للجميع :lol:
البرنامج في المرفقات ومن لديه أي مشاكل ليكتبها لنحلها سوية ً ...
أتمنى من الجميع الإستفادة...
والسلام,
أخوكم,

