TrayIcon

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

TrayIcon

Сообщение lilak » 11.12.2004 (Сб) 10:18

Никак не получается загнать в системный tray иконку.
В API Guide подыскал подходящую функцию- Shell_NotifyIcon,
но как её заставить практически работать?Компилятор всё время ругается. Может быть у кого-то есть работающий пример с этой функцией?Плииз!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.12.2004 (Сб) 10:21

Ты знаешь, уже проще найти человека, у которого нет работающего примера shell_notifyicon...

Если есть api-guide, то есть и пример. Copy. Paste. F5. Enjoy.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

lilak
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 04.12.2004 (Сб) 17:57
Откуда: Israel

Сообщение lilak » 11.12.2004 (Сб) 10:33

GSerg писал(а):Если есть api-guide, то есть и пример. Copy. Paste. F5. Enjoy.

Конечно, так и делаю. Только вот с Enjoy-не получается -ругается компилятор. Потому и пишу. Если есть реальный пример- помоги, пожалуйста.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.12.2004 (Сб) 10:38

Нет уж, разберёмся...

Что именно говорит компилятор?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Серый
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 06.11.2004 (Сб) 10:51

Сообщение Серый » 11.12.2004 (Сб) 10:56

Вот тут вопрос о трее возник:
Как узнать какие значки (программы) "засунуты" в трей?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 11:05

Ну дают... :roll:
Один из многочисленных примеров тут: http://mastershome.net.ru/vbfaq/d02.htm

Работающий не везде пример получения иконок из трея (от Оловянникова) у меня есть, но я так и не смог заставить его работать в своей Win2000. В Win98 и WinXP, по словам Оловянникова работает. Кинуть сюда?
Изображение

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 11.12.2004 (Сб) 14:08

Кидай, интересно, почему он у тебя не заработал.. XP и 2k api'шками не сильно отличаются, да и принципы почти одни и те же :?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.12.2004 (Сб) 17:18

Ок... Проверьте плз кто где может, а то мне уже самому интересно :-)
Вложения
NewTray.rar
(8.55 Кб) Скачиваний: 46
Изображение

lilak
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 04.12.2004 (Сб) 17:57
Откуда: Israel

Сообщение lilak » 11.12.2004 (Сб) 17:49

GSerg писал(а):Нет уж, разберёмся...

Что именно говорит компилятор?

Прежде хочу показать, что говорит Апи Гид:
Код из примера:
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 WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_RBUTTONUP = &H205

Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Dim TrayI As NOTIFYICONDATA
Private Sub Form_Load()
TrayI.cbSize = Len(TrayI)
'Set the window's handle (this will be used to hook the specified window)
TrayI.hWnd = pichook.hWnd
'Application-defined identifier of the taskbar icon
TrayI.uId = 1&
'Set the flags
TrayI.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
'Set the callback message
TrayI.ucallbackMessage = WM_LBUTTONDOWN
'Set the picture (must be an icon!)
TrayI.hIcon = imgIcon(2).Picture
'Set the tooltiptext
TrayI.szTip = "Recent" & Chr$(0)
'Create the icon
Shell_NotifyIcon NIM_ADD, TrayI

Me.Hide
End Sub
Private Sub Form_Unload(Cancel As Integer)
'remove the icon
TrayI.cbSize = Len(TrayI)
TrayI.hWnd = pichook.hWnd
TrayI.uId = 1&
Shell_NotifyIcon NIM_DELETE, TrayI
End
End Sub
На что компилятор плюётся
Sub or Function not defined

и выделяет строку TrayI.hIcon = imgIcon(2).Picture

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.12.2004 (Сб) 17:52

Нет чтоб разобраться? :)

Ну помести на форму пикчербокс, загони в него иконку, и укажи там его имя вместо imgIcon(2).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 12.12.2004 (Вс) 9:09

GSerg писал(а):Нет чтоб разобраться? :)

Ну помести на форму пикчербокс, загони в него иконку, и укажи там его имя вместо imgIcon(2).
Или просто
Код: Выделить всё
TrayI.hIcon =Me.Icon
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

lilak
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 04.12.2004 (Сб) 17:57
Откуда: Israel

Сообщение lilak » 12.12.2004 (Вс) 11:48

Ruslan Demidow писал(а):GSerg писал(а):
Нет чтоб разобраться?

Ну помести на форму пикчербокс, загони в него иконку, и укажи там его имя вместо imgIcon(2).
Или просто
Код:

TrayI.hIcon =Me.Icon

Делал и по-GSerg:TrayI.hIcon =PictureBox-name.Picture

и по-Ruslan Demidow: TrayI.hIcon =Me.Icon

и(что то же самое) :TrayI.hIcon =Form-name.Icon


Ругается! Но уже по-другому:
Run-time error '404'
Object required

и при debug выделяет строку:
TrayI.hWnd = pichook.hWnd

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.12.2004 (Вс) 11:51

Ничё человек не хочет разбираться... :(
TrayI.hWnd = me.hWnd
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

lilak
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 04.12.2004 (Сб) 17:57
Откуда: Israel

Сообщение lilak » 12.12.2004 (Вс) 14:28

GSerg писал(а):Ничё человек не хочет разбираться...
TrayI.hWnd = me.hWnd


Спасибо,GSerg, за твоё терпение и за желание помочь.
Ты мне действительно помог и многому научил.
Хотя в данном конкретном эпизоде кода есть решение и проще-данную строчку TrayI.hWnd = me.hWnd можно просто убрать.
Но спасибо- иконка стала появляться -таки в трэйе, хотя появилась и проблема: при наведении на иконку в трэйе мышкой- иконка сразу пропадает, а хотелось бы сделать поп-меню. С поп-меню я буду ещё возиться, а вот почему пропадает сама иконка?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.12.2004 (Вс) 14:33

:lol: :lol:
Именно потому и пропадает, что нельзя эту строчку убирать ;-)
Изображение

lilak
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 04.12.2004 (Сб) 17:57
Откуда: Israel

Сообщение lilak » 12.12.2004 (Вс) 15:29

Спасибо,Tyomitch, с благодарностью принимаю все советы и рекомендации. А сейчас пару слов о твоей программе NewTray.rar
Попробовал её в win XP
После запуска программы меня тут же обругали:
Windows Explorer has encountered a problem and needs to close.

А после того как я закрыл это сообщение, поднялась форма с таблицей: Who lives in my systemtray?

В таблице 5 колонок
-1) icon and Executable
- 2) hwind
- 3) uID
- 4) Callback.msg
- 5) State

По горизонтали же были 13 одинаковые строчки, заполненные соответственно колонкам так:
-1) c:\windows\explorer.exe
-2) 197286
-3) -4
-4) 0(0x0)

-5) Hidden


О программах, иконки которых реально находились в трее сказано ничего не было.
_____________________________________________________________
Ночь хороша тем, что после неё приходит рассвет-

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.12.2004 (Вс) 16:05

lilak писал(а):А сейчас пару слов о твоей программе NewTray.rar
Она не моя, она оловянниковская. У меня она тоже не работает ;-)

Ещё, плз проверьте её кто-нибудь на Win98, а?
Изображение

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 12.12.2004 (Вс) 23:07

В XP падает при попытке послать сообщение трею TB_GETBUTTONINFOA, т.е. при попытке получить информацию о конкретном значке.. Но самое интересное не это, перезагружаюсь в savemode - все работет, даже меню определеят :shock:
"Ничего не понимаю" (c) :?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.12.2004 (Пн) 1:01

tyomitch писал(а):Ещё, плз проверьте её кто-нибудь на Win98, а?

Вот, я сейчас проверил. Не работает :-((
Позор на седины Оловянникова.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.12.2004 (Пн) 4:19

Он, видимо, не виноват...
Я тоже долго пытался слать этому тулбару всякие правильные мессаги, и ничё не получал хорошего.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.02.2005 (Пн) 14:09

Мож это поможет?
Вытаскивай RARом добавляй объектом к своей форме и работай...
Вложения
IconInTray.ace
Контрол!
(7.54 Кб) Скачиваний: 28
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.02.2005 (Пн) 14:10

Sorry! Комп глюконуло...
Последний раз редактировалось Memfivosfey 21.02.2005 (Пн) 18:36, всего редактировалось 1 раз.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.02.2005 (Пн) 14:11

Sorry! Комп глюконуло...
Последний раз редактировалось Memfivosfey 21.02.2005 (Пн) 18:35, всего редактировалось 1 раз.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.02.2005 (Пн) 18:29

Memfivosfey, ты б хоть топик прочитал, прежде чем одно и то же трижды постить.
Изображение

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 22.02.2005 (Вт) 0:18

Возможно я что-то не допонял... :oops: Но если интересно, то можно загнать иконку в TRAY и так... :? Это работает, у меня проблем не вызывало...

Добавьте на форму PictureBox и введите следующий код
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

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 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 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

Dim IconData As NOTIFYICONDATA

Private Sub Form_Load()
Picture1.Visible = False
IconData.cbSize = Len(IconData)
' События, связанные с иконкой будут отображаться в
' Picture1_MouseMove
IconData.hWnd = Picture1.hWnd
IconData.ucallbackMessage = WM_MOUSEMOVE
' Изображение иконки
IconData.hIcon = Form1.Icon
IconData.uId = 1&
IconData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
' Текст подсказки
IconData.szTip = "Пример помещения иконки в трей" & Chr$(0)
' Добавляем иконку в трей
Shell_NotifyIcon NIM_ADD, IconData
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Удаляем иконку из трея
IconData.cbSize = Len(IconData)
IconData.hWnd = Picture1.hWnd
IconData.uId = 1&
Shell_NotifyIcon NIM_DELETE, IconData
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
' События, связанные с иконкой можно узнать по координате X
If X / Screen.TwipsPerPixelX = WM_LBUTTONDOWN Then _
MsgBox "Нажата левая кнопка мыши"
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.02.2005 (Вт) 3:53

Александр80, не допонял. Обсуждалась не на тысячу раз уже пережёванная тема "как засунуть иконку в трей", а противоположная - "как узнать, что туда уже засунуто".
Изображение


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

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

Сейчас этот форум просматривают: Google-бот и гости: 44

    TopList