Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сворачивать форму в трэй?

1.9K
20 февраля 2004 года
MishaSoft
48 / / 16.09.2003
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?
266
20 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by MishaSoft
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?


Посмотри:
http://www.comizdat.com/3/4/6/3001/

258
20 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by MishaSoft
Как определить форму (или все преложение?) чтобы при свертке (minimizing) она уходила не в Таскбар, а в Трэй?



Ну вообщем понимаешь, это две разные задачи.
1. Добавление картинки в Tray. Да, да, в Tray сидят одни картинки и ничего более, они могут передавать твоей программе клики мыши над ними, чтобы ты сам разбирался что с этим делать.

Делается это через API функцию Shell_NotifyIcon, которая получает от тебя заполненную структуру со всей инфой и показывает/удаляет/модифицирует картинку.

Код:
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


2. Скрыть само окно программы. Это проблема решается отдельно. Как это сделать сразу сказать не могу. Если тебе надо убрать окно с панели задач, то обычно делают так:
Создают новое окно со стилем WS_EX_TOOLWINDOW - он отвечает за то чтобы не показывать себя на панели задач и потом это окно назначается родителем твоего и он тоже скрывается, потому что окно со стилем WS_EX_TOOLWINDOW скрывается вместе со всеми своими дочерними окнами.
266
20 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by SergeySV


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

Извиняюсь, что всё закомментировано - как говорится, за что купил, за то и продаю.
258
20 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Да ,вон там в коде они делают так:

Me.Hide ' прячем саму форму

надо просто проверить, но помойму форма останется на панели задач. Если это так, а надо скрыть окно программы вообще, тогда пишим, будем ваять код по моему 2 пункту
1.9K
20 февраля 2004 года
MishaSoft
48 / / 16.09.2003
Да, спасибо ребята. Все работает :D

Me.Hide убирает форму полностью, в Панели Задач она тоже изчезает, так что все работает как надо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог