Иконка на системной панели

Для этого мы использует 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, но что-

нибудь из этого у вас должно быть