Иконка на системной панели
Для этого мы использует API-функцию
Shell_NotifyIcon, специально предназначенную для
этого дела. Разберем на конкретном примере. Для
этого нам потребуется:
форма обычная - 1 шт.
кнопка обычная - 2 шт.
PictureBox, тоже обычный - 1 шт.
Private Declare Function Shell_NotifyIcon _
Lib "shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long
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
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
'Делаем собственную константу:
Private Const NIF_FLAG = NIF_MESSAGE Or NIF_ICON _
Or NIF_TIP
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_RBUTTONDOWN = &H204
Private Sub CreateIcon()
Dim Icn As NOTIFYICONDATA
Icn.cbSize = Len(Icn)
Icn.hwnd = Picture1.hwnd
Icn.uID = 1&
Icn.uFlags = NIF_FLAG 'вот и наша константа,
' содержащая параметры вызова функции
Icn.uCallbackMessage = WM_MOUSEMOVE
Icn.hIcon = Picture1.Picture
'текст всплывающей подсказки для нашей программы
Icn.szTip = "Пример программы" & Chr$(0)
erg = Shell_NotifyIcon(NIM_ADD, Icn)
End Sub
Private Sub DeleteIcon()
Dim Icn As NOTIFYICONDATA
Icn.cbSize = Len(Icn)
Icn.hwnd = Picture1.hwnd
Icn.uID = 1&
erg = Shell_NotifyIcon(NIM_DELETE, Icn)
End SubPrivate Sub Command1_Click()
CreateIcon
End Sub
Private Sub Command2_Click()
DeleteIcon
End Sub
Private Sub Picture1_MouseMove(Button _
As Integer, Shift As Integer, _
X As Single, Y As Single)
X = X / Screen.TwipsPerPixelX
Select Case X
Case WM_LBUTTONDOWN
'в эту сточку добавьте код,
'который должен выполниться,
'если нажата левая кнопка мышки
Case WM_RBUTTONDOWN
'в эту сточку добавьте код,
'который должен выполниться,
'если нажата правая кнопка мышки
Case WM_MOUSEMOVE
'в эту сточку добавьте код,
'который должен выполниться,
'при перемещении мышки над иконкой
Case WM_LBUTTONDBLCLK
'в эту сточку добавьте код,
'который должен выполниться,
'при двойном щелчке
End Select
End Sub
Конечно вы можете заменить Command1 и Command2
чем-нибудь другим, суть в том, что иконка
появится рядом с часами если вызвана процедура
CreateIcon и будет удалена если будет вызвана
DeleteIcon. Впринципе пример не сложный, и
разобраться в нем не составит труда. Вместо
PictureBox можно использовать Image, но что-
нибудь из этого у вас должно быть