Option Explicit
'Costanti----------------------------------------------------------------------------------------------
Private Const NIM_ADD = &H0 'Aggiunge un'icona
Private Const NIM_MODIFY = &H1 'Modifica un'icona
Private Const NIM_DELETE = &H2 'Elimina un'icona
Private Const NIF_MESSAGE = &H1 'Per modificare il membro uCallBackMessage
Private Const NIF_ICON = &H2 'Per modificare l'icona
Private Const NIF_TIP = &H4 'Per modificare il testo del tooltip
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201 'Evento Click tasto sinistro
Private Const WM_LBUTTONDBLCLK = &H203 'Doppio clic con il tasto sinistro
Private Const WM_RBUTTONDOWN = &H204 'Evento Click tasto destro
Private Const WM_RBUTTONDBLCLK = &H206 'Doppio clic con il tasto destro
'Tipi---------------------------------------------------------------------------------------------------
Private Type NOTIFYICONDATA
cbSize As Long ' dimensioni della struttura
hwnd As Long ' handle della finestra padre
uId As Long ' utilizzato solo con pių icone associate alla medesima applicazione
uFlags As Long ' Flag
uCallBackMessage As Long ' gestore delle notifiche
hIcon As Long ' handle dell'icona
szTip As String * 64 ' testo del tooltip
End Type
'Dll---------------------------------------------------------------------------------------------------------------
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
'******************************************************************************************************
'Variabili
Dim Nid As NOTIFYICONDATA
Dim IsBackGround As Boolean
Public Sub InitNotifyIcon(ByVal Frm As Form)
Nid.cbSize = Len(Nid)
Nid.hwnd = Frm.hwnd
Nid.uId = 0
Nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
Nid.uCallBackMessage = WM_MOUSEMOVE 'Messaggio di notifica inviato alla finestra
Nid.hIcon = Frm.Icon
Nid.szTip = Frm.Caption + vbNullChar
Shell_NotifyIcon NIM_ADD, Nid
End Sub
Public Sub ChangeTooltipText(ByVal Text As String)
Nid.szTip = Text & vbNullChar
Shell_NotifyIcon NIM_MODIFY, Nid
End Sub
Public Sub DestroyNotifyIcon()
Shell_NotifyIcon NIM_DELETE, Nid
End Sub
Public Sub BackGround(ByVal Frm As Form)
IsBackGround = True
Call CloseWindow(Frm.hwnd)
Frm.Hide
End Sub
Public Sub Handler(ByVal Frm As Form, ByVal X As Single)
'Da chiamare in MouseMove Handler(oggetto form,coordinata x dell'evento MouseMove)
'NB: La scalemode del form deve essere settata in 1-Twip
If IsBackGround Then
Dim Msg As Long
Msg = Frm.ScaleX(X, Frm.ScaleMode, vbPixels)
Select Case Msg
Case WM_LBUTTONDOWN
'***
Case WM_LBUTTONDBLCLK
IsBackGround = False
Frm.WindowState = vbNormal
Frm.Show
Case WM_RBUTTONDOWN
'***
Case WM_RBUTTONDBLCLK
'***
End Select
End If
End Sub