Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
'константы и структуры Win32API
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_NULL = &H0
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 NID As NOTIFYICONDATA
Private m_hWnd As Long
Private m_Icon As Long
Private m_ToolTipText As String
Public Enum TrayIcon_Mouse
TRAYICON_MOUSE_NONE = 0
TRAYICON_MOUSE_LEFTDOWN = 1
TRAYICON_MOUSE_LEFTUP = 2
TRAYICON_MOUSE_LEFTDBLCLICK = 3
TRAYICON_MOUSE_RIGHTDOWN = 4
TRAYICON_MOUSE_RIGHTUP = 5
TRAYICON_MOUSE_RIGHTDBLCLICK = 6
End Enum
Public Sub Add(hWnd As Long, Icon As Long, Tip As String)
Dim ret As Long
NID.uID = hWnd
NID.hWnd = hWnd
NID.hIcon = Icon
NID.szTip = Left(Tip, 63) & Chr(0)
NID.uFlags = NIF_TIP + NIF_MESSAGE + NIF_ICON
NID.uCallbackMessage = WM_RBUTTONDOWN
NID.cbSize = Len(NID)
ret = Shell_NotifyIcon(NIM_ADD, NID)
End Sub
Public Sub Delete(hWnd As Long)
Dim ret As Long
NID.uID = hWnd
NID.hWnd = hWnd
NID.cbSize = Len(NID)
ret = Shell_NotifyIcon(NIM_DELETE, NID)
End Sub
Как сворачивать форму в трэй?
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
Цитата:
Originally posted by MishaSoft
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
Посмотри:
http://www.comizdat.com/3/4/6/3001/
Цитата:
Originally posted by MishaSoft
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
Ну вообщем понимаешь, это две разные задачи.
1. Добавление картинки в Tray. Да, да, в Tray сидят одни картинки и ничего более, они могут передавать твоей программе клики мыши над ними, чтобы ты сам разбирался что с этим делать.
Делается это через API функцию Shell_NotifyIcon, которая получает от тебя заполненную структуру со всей инфой и показывает/удаляет/модифицирует картинку.
Код:
2. Скрыть само окно программы. Это проблема решается отдельно. Как это сделать сразу сказать не могу. Если тебе надо убрать окно с панели задач, то обычно делают так:
Создают новое окно со стилем WS_EX_TOOLWINDOW - он отвечает за то чтобы не показывать себя на панели задач и потом это окно назначается родителем твоего и он тоже скрывается, потому что окно со стилем WS_EX_TOOLWINDOW скрывается вместе со всеми своими дочерними окнами.
Цитата:
Originally posted by SergeySV
2. Скрыть само окно программы. Это проблема решается отдельно. Как это сделать сразу сказать не могу. Если тебе надо убрать окно с панели задач, то обычно делают так:
Создают новое окно со стилем WS_EX_TOOLWINDOW - он отвечает за то чтобы не показывать себя на панели задач и потом это окно назначается родителем твоего и он тоже скрывается, потому что окно со стилем WS_EX_TOOLWINDOW скрывается вместе со всеми своими дочерними окнами.
2. Скрыть само окно программы. Это проблема решается отдельно. Как это сделать сразу сказать не могу. Если тебе надо убрать окно с панели задач, то обычно делают так:
Создают новое окно со стилем WS_EX_TOOLWINDOW - он отвечает за то чтобы не показывать себя на панели задач и потом это окно назначается родителем твоего и он тоже скрывается, потому что окно со стилем WS_EX_TOOLWINDOW скрывается вместе со всеми своими дочерними окнами.
Мне такой пример скинули:
Код:
'Public 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
'Public Icn As NOTIFYICONDATA
'-}----------------Эта часть отвечает за работу с System Tray-------------------------------------
'отключено ввиду нецелесообразности и глючности
'-{----------------Эта часть отвечает за работу с System Tray-------------------------------------
'Private Declare Function Shell_NotifyIcon _
' Lib "shell32.dll" Alias _
' "Shell_NotifyIconA" (ByVal dwMessage As Long, _
' lpData As NOTIFYICONDATA) _
' As Long ' функция, которая работает с SysTray
'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 ' позволяет добавлять элемент в Tray
'Private Const NIM_DELETE = &H2 ' позволяет удалять элемент из Tray
'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_LBUTTONDOWN = &H201
'Private Const WM_LBUTTONUP = &H202
'Private Const WM_LBUTTONDBLCLK = &H203
'Private Const WM_RBUTTONDOWN = &H204
'Private Const WM_RBUTTONUP = &H205
'Private Const WM_RBUTTONDBLCLK = &H206
'Private Const WM_MBUTTONDOWN = &H207
'Private Const WM_MBUTTONUP = &H208
'Private Const WM_MBUTTONDBLCLK = &H209
'Private Icn As NOTIFYICONDATA
'-}----------------Эта часть отвечает за работу с System Tray-------------------------------------
'отключено ввиду нецелесообразности и глючности
'-{----------------Эта часть отвечает за работу с System Tray-------------------------------------
'Private Sub Form_Resize()
' If Me.WindowState = vbMinimized Then ' если форма минимизируется
' With Icn
' .cbSize = Len(Icn)
' .hwnd = Picture1.hwnd
' .uID = 1
' .uFlags = NIF_FLAG 'вот и наша константа,
' ' содержащая параметры вызова функции
' .uCallbackMessage = WM_MOUSEMOVE
' .hIcon = Picture1.Picture
' Shell_NotifyIcon NIM_ADD, Icn ' добавляем в Tray
' Me.Hide ' прячем саму форму
' End With
' End If
'End Sub
'Private Sub mnuMainExit_Click()
' Shell_NotifyIcon NIM_DELETE, Icn
' Unload Me
' End
'End Sub
'Private Sub mnuMainShow_Click()
' Me.WindowState = vbNormal
' Me.Show
' Shell_NotifyIcon NIM_DELETE, Icn
'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
' Me.PopupMenu mnuMain
' Case WM_MOUSEMOVE
' Case WM_LBUTTONDBLCLK
' mnuMainShow_Click
' Case WM_RBUTTONUP
' Case WM_RBUTTONDBLCLK
' End Select
'End Sub
' cbSize As Long
' hwnd As Long
' uID As Long
' uFlags As Long
' uCallbackMessage As Long
' hIcon As Long
' szTip As String * 64
'End Type
'Public Icn As NOTIFYICONDATA
'-}----------------Эта часть отвечает за работу с System Tray-------------------------------------
'отключено ввиду нецелесообразности и глючности
'-{----------------Эта часть отвечает за работу с System Tray-------------------------------------
'Private Declare Function Shell_NotifyIcon _
' Lib "shell32.dll" Alias _
' "Shell_NotifyIconA" (ByVal dwMessage As Long, _
' lpData As NOTIFYICONDATA) _
' As Long ' функция, которая работает с SysTray
'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 ' позволяет добавлять элемент в Tray
'Private Const NIM_DELETE = &H2 ' позволяет удалять элемент из Tray
'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_LBUTTONDOWN = &H201
'Private Const WM_LBUTTONUP = &H202
'Private Const WM_LBUTTONDBLCLK = &H203
'Private Const WM_RBUTTONDOWN = &H204
'Private Const WM_RBUTTONUP = &H205
'Private Const WM_RBUTTONDBLCLK = &H206
'Private Const WM_MBUTTONDOWN = &H207
'Private Const WM_MBUTTONUP = &H208
'Private Const WM_MBUTTONDBLCLK = &H209
'Private Icn As NOTIFYICONDATA
'-}----------------Эта часть отвечает за работу с System Tray-------------------------------------
'отключено ввиду нецелесообразности и глючности
'-{----------------Эта часть отвечает за работу с System Tray-------------------------------------
'Private Sub Form_Resize()
' If Me.WindowState = vbMinimized Then ' если форма минимизируется
' With Icn
' .cbSize = Len(Icn)
' .hwnd = Picture1.hwnd
' .uID = 1
' .uFlags = NIF_FLAG 'вот и наша константа,
' ' содержащая параметры вызова функции
' .uCallbackMessage = WM_MOUSEMOVE
' .hIcon = Picture1.Picture
' Shell_NotifyIcon NIM_ADD, Icn ' добавляем в Tray
' Me.Hide ' прячем саму форму
' End With
' End If
'End Sub
'Private Sub mnuMainExit_Click()
' Shell_NotifyIcon NIM_DELETE, Icn
' Unload Me
' End
'End Sub
'Private Sub mnuMainShow_Click()
' Me.WindowState = vbNormal
' Me.Show
' Shell_NotifyIcon NIM_DELETE, Icn
'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
' Me.PopupMenu mnuMain
' Case WM_MOUSEMOVE
' Case WM_LBUTTONDBLCLK
' mnuMainShow_Click
' Case WM_RBUTTONUP
' Case WM_RBUTTONDBLCLK
' End Select
'End Sub
Извиняюсь, что всё закомментировано - как говорится, за что купил, за то и продаю.
Me.Hide ' прячем саму форму
надо просто проверить, но помойму форма останется на панели задач. Если это так, а надо скрыть окно программы вообще, тогда пишим, будем ваять код по моему 2 пункту
Me.Hide убирает форму полностью, в Панели Задач она тоже изчезает, так что все работает как надо!