Вот рабочий пример.... Сложного нет
ничего. У меня при минимизации
анимация в систрее идет, бабочка крылышками
махает :-)).
Option Explicit
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias
"Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As
Boolean
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
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
Dim theForm As NOTIFYICONDATA
Private Sub Form_Load()
Me.Caption = "Клиент ФППИ: " + Autoanswer
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
' запись размера структуры
theForm.cbSize = Len(theForm)
' Установка хедера иконки
theForm.hWnd = picNotifier.hWnd
frmFPPIcl.Icon = LoadResPicture(10, vbResIcon)
theForm.hIcon = Me.Icon
theForm.uId = 1&
'Установка Флажков
'в данном случие показывать иконку,
' отображать TOOLTIP
' передовать события в форму
theForm.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
'Источник событий мышка
theForm.ucallbackMessage = WM_MOUSEMOVE
'Строка тултипа
theForm.szTip = "Клиент ФППИ" & Chr$(0)
Shell_NotifyIcon NIM_ADD, theForm
Me.Hide
App.TaskVisible = False
optSendByHand.Value = True
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
' We also need to remove it when the program is ended.
' Change theForm's cbSize to theForm's length.
theForm.cbSize = Len(theForm)
' Change theForm's hWnd to picNotifier's hWnd.
theForm.hWnd = picNotifier.hWnd
' Change theForm's uId to 1&.
theForm.uId = 1&
' Remove it from the TaskBar.
Shell_NotifyIcon NIM_DELETE, theForm
End Sub
Private Sub picNotifier_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
'Обработка событий
Static Rec As Boolean, msg As Long
msg = X / Screen.TwipsPerPixelX
If Rec = False Then ' Чтоб не повторять Запуск
Rec = True
Select Case msg
'Если DoubleClick
Case WM_LBUTTONDBLCLK:
' Запретим анимацию иконки
tmrAniB.Enabled = False
' и восстановим старую
picNotifier.Picture = LoadResPicture(10, vbResIcon)
theForm.hIcon = picNotifier.Picture
Shell_NotifyIcon NIM_MODIFY, theForm
' Окно в нормальный размер
Me.WindowState = 0
' и покажем его
Me.Show
'Если левая Кнопка нажата
Case WM_LBUTTONDOWN:
'Если левая Кнопка Отжата
Case WM_LBUTTONUP:
'Правая кнопка Click
Case WM_RBUTTONDBLCLK:
'Если Правая Кнопка нажата
Case WM_RBUTTONDOWN:
'Если Правая Кнопка Отжата
Case WM_RBUTTONUP:
PopupMenu mnuSysTrayMenu
End Select
Rec = False
End If
End Sub
Private Sub tmrAniB_Timer()
picNotifier.Picture = LoadResPicture(ResNumB, vbResIcon)
theForm.hIcon = picNotifier.Picture
Shell_NotifyIcon NIM_MODIFY, theForm
ResNumB = ResNumB + 1
If ResNumB > 17 Then
ResNumB = 2
End If
End SubНа ваши вопросы отвечал Калеев
Сергей Александрович |
|