Проблема с треем

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sanekz
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 07.05.2006 (Вс) 20:42

Проблема с треем

Сообщение sanekz » 09.06.2006 (Пт) 20:49

Нашел тут у вас на форуме кусок кода для того чтоб иконка в трей сворачивалась проблема в том что прога сама не сворачивается а иконка появляеться!Подскажите пожалуйста как сделать так чтоб при нажатии на кнопку закрыть программу она в трей сворачивалась и как сделать меню к иконке в трее Заранее спасибо!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16496
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.06.2006 (Пт) 20:58

Ну... по сабжу я тебе уже сказал... а по поводу меню в трее, то ловить щёлчёк по иконке (это ведь наверняка есть в "куске кода") и делать PopupMenu
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 09.06.2006 (Пт) 21:09

Class Modules
Код: Выделить всё
Option Explicit
   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

   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 Event OnIcon(MouseButton As Integer)


Public Property Get hwnd() As Long
      hwnd = m_hWnd
End Property

Public Property Let hwnd(ByVal NewValue As Long)
      m_hWnd = NewValue
End Property

Public Property Get Icon() As Long
      Icon = m_Icon
End Property

Public Property Let Icon(ByVal NewValue As Long)
      m_Icon = NewValue
End Property

Public Property Get ToolTipText() As String
      ToolTipText = m_ToolTipText
End Property

Public Property Let ToolTipText(ByVal NewValue As String)
      m_ToolTipText = NewValue
End Property

Public Sub Add()
   Dim ret As Long
     
      NID.uID = m_hWnd
      NID.hwnd = m_hWnd
      NID.hIcon = m_Icon
      NID.szTip = Left$(m_ToolTipText, 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 Modify()
   Dim ret As Long
   
      NID.hIcon = m_Icon
      NID.szTip = Left$(m_ToolTipText, 63) & Chr$(0)
      NID.uFlags = NIF_TIP + NIF_ICON
      NID.cbSize = Len(NID)
     
      ret = Shell_NotifyIcon(NIM_MODIFY, NID)
     
End Sub

Public Sub Delete()
   Dim ret As Long

      NID.cbSize = Len(NID)

      ret = Shell_NotifyIcon(NIM_DELETE, NID)
     
End Sub

Public Sub CallEvent(X As Single, Y As Single)
   'проверка, было ли действие по окну или по иконке в трее
      If Y Then Exit Sub
     
      Dim MouseButton As Integer
      MouseButton = (X And &HFF) / Screen.TwipsPerPixelX
   
      RaiseEvent OnIcon(MouseButton)
     
End Sub

Public Sub CallPopupMenu(Window As Form, PopMenu As Menu, Optional Flags, Optional X, Optional Y, Optional DefMenu)
     
      SetForegroundWindow m_hWnd
     
      Window.PopupMenu PopMenu, Flags, X, Y, DefMenu
     
      PostMessage m_hWnd, WM_NULL, 0, 0

End Sub


Объявляем:
Dim WithEvents cTray As TrayIcon
в form_load:
Set cTray = New TrayIcon

sanekz
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 07.05.2006 (Вс) 20:42

Сообщение sanekz » 09.06.2006 (Пт) 22:10

Dex ошибку компиляции выдает и указывает сюда Public Property Get hwnd() As Long

sanekz
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 07.05.2006 (Вс) 20:42

Сообщение sanekz » 09.06.2006 (Пт) 22:44

А можно поподробнее и попроще а то я ламер полный и еще вопрос как там попапменю сделать что то я не понимаю!

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 10.06.2006 (Сб) 0:01

Держи исходник. Излишние комментарии я удалил. Комментарии полная глупость. Там складывается такое ощущение, что код написал один, а присвоил авторство другой.
Ну вот собственно исходник:
Вложения
Иконку в трэй.rar
(3.65 Кб) Скачиваний: 62


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 13

    TopList  
cron