|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Пока возился с треем и тултипами, понял что хорошо бы добавить в приложение Tray Notifications В принципе вызвать такой Ballon Notification не проблема: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Какого размера иконки туда втыкать и какие (стандартные или свои) - с этим я думаю разберусь. Но я сперва хочу понять логику. Трей посылает приложению сообщения. В целом ловлю их без проблем. NIN_BALLOONSHOW -тултип появился - это понятно NIN_BALLOONHIDE -??? Вопрос #1: пользователь щелкает по сообщению Код: vbnet 1.
Если у меня несколько типов сообщений. Щелчок по каждому типу предполагает различные действия. Причем один и тот же тип может иметь разные параметры. Например: Получен новый файл failo1.txt. Щелкните по сообщению чтоб посмотреть. Получен новый файл FIAILO2.txt. Щелкните по сообщению чтоб посмотреть. Отправлен файл FAIL_OUT_1.txt. Щелкните по сообщению чтоб посмотреть лог. Т.е. получив NIN_BALLOONUSERCLICK приложение должно исполнить РАЗНЫЕ действия. А вот как я пойму какое именно? Код выше не снабжает Ballon Notification "индивидуальной начинкой" (кроме текстов и картинки), а NIN_BALLOONUSERCLICK вроде как не дает информации о том по какому именно типу Ballon Notification и с каким параметром стукнули. Я могу напр. задавать какие-то глобальные параметры приложения при вызове Ballon Notification, но это думаю дурной подход: если только одно приложение посылает уведомления в трей, то новое сразу заменит предыдущее, а вот если в трее висит уведомление от ДРУГОГО приложения, то уведомления от моего выстроятся в очередь и будут последовательно появляться только как закрою чужое Notification. Т.е. предложенная логика не сработает. Как правильно сделать? Вопрос #2: Код: vbnet 1.
Такое ощущение что таймаут этот работает "через одно место". Не хочет оно само закрываться. Вопрос #3: Сообщение в трей типа. Вам звонит абонент такой-то. Простой вариант: "Щелкните по Notification чтобы ответить на вызов". А как сделать вожможность выбора 2 варианта : ответить/сбросить вызов ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2013, 22:50 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Что никто не знает? Я не знаю. Попробую пояснить. Если приложение выводит Notification TYPE#1 Код: vbnet 1. 2. 3. 4. 5. 6.
То щелкнув по этому Notification (когда именно оно вылезло в трей) Я хочу вывести сообщение Код: vbnet 1. 2.
----- Если приложение выводит Notification TYPE#2 Код: vbnet 1. 2. 3. 4. 5. 6.
То щелкнув по этому Notification (когда именно оно вылезло в трей) Я хочу вывести сообщение Код: vbnet 1. 2.
Постановка вопроса упрощена и более чем ясна. Разные Notification -> Разные действия. ни NIN_BALLOONSHOW ни NIN_BALLOONUSERCLICK не дают ответа на вопрос к какому именно сообщению они относятся. М.б. поиграться с .uCallbackMessage? Но сдается мне что это переназначит .uCallbackMessage ГЛОБАЛЬНО для данной трей-иконки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 00:23 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
NOTIFYICONDATA в NIN_BALLOONUSERCLICK получить можешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 00:34 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
А хотя не надо. UINT uID; The application-defined identifier of the taskbar icon. The Shell uses either (hWnd plus uID) or guidItem to identify which icon to operate on when Shell_NotifyIcon is invoked. You can have multiple icons associated with a single hWnd by assigning each a different uID. If guidItem is specified, uID is ignored. uCallbackMessage ... HIWORD(lParam) contains the icon ID. Смысл в том, что можно попробовать добавить несколько иконок, но всем, кроме одной, сделать NIS_HIDDEN и проставить uID, по которому и различать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:03 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyNOTIFYICONDATA в NIN_BALLOONUSERCLICK получить можешь? Смотри. === NOTIFYICONDATA structure When the uVersion member is either 0 or NOTIFYICON_VERSION, the wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred. This identifier can be 32 bits in length. The lParam parameter holds the mouse or keyboard message associated with the event. For example, when the pointer moves over a taskbar icon, lParam is set to WM_MOUSEMOVE. When the uVersion member is NOTIFYICON_VERSION_4, applications continue to receive notification events in the form of application-defined messages through the uCallbackMessage member, but the interpretation of the lParam and wParam parameters of that message is changed as follows: •LOWORD(lParam) contains notification events, such as NIN_BALLOONSHOW, NIN_POPUPOPEN, or WM_CONTEXTMENU. •HIWORD(lParam) contains the icon ID. Icon IDs are restricted to a length of 16 bits. •GET_X_LPARAM(wParam) returns the X anchor coordinate for notification events NIN_POPUPOPEN, NIN_SELECT, NIN_KEYSELECT, and all mouse messages between WM_MOUSEFIRST and WM_MOUSELAST. If any of those messages are generated by the keyboard, wParam is set to the upper-left corner of the target icon. For all other messages, wParam is undefined. •GET_Y_LPARAM(wParam) returns the Y anchor coordinate for notification events and messages as defined for the X anchor. === У меня на XP either 0 or NOTIFYICON_VERSION, на >=Виста NOTIFYICON_VERSION_4 Пока что на XP пытаюсь соображать (без Version 4) Код такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
NIN_BALLOONUSERCLICK==LOWORD(lParam) я ловлю. при этом у меня дебаг пишет (см. код выше): Код: vbnet 1. 2. 3.
чего значит wparam=1 я не знаю. В описании не сказано как получить NOTIFYICONDATA Надо вызывать какую то еще ф-цию? В принципе информацию можно получать и запоминать из NIN_BALLOONSHOW (ballon всегда один) и запоминать, но там не лучше. Почему не могу сразу запоминать в CommandBallon_Click понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:14 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Ну так а что насчет uID? HIWORD(lParam) = 0 вижу, но еще вижу .uID = vbNull в первом посте. В CommandBallonType2_Click отправляешь, в HIWORD(lParam) ловишь, тем и определяешь тип сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:31 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Чтобы уж было совсем понятно, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:37 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Antonariy......HIWORD(lParam) contains the icon ID. Смысл в том, что можно попробовать добавить несколько иконок, но всем, кроме одной, сделать NIS_HIDDEN и проставить uID, по которому и различать. Не забывай что HIWORD(lParam) contains the icon ID относится к version 4, а логика должно работать и на XP тоже Чего-то меня такой подход в принципе (логически) смущает, хотя я на этот uID тоже пялился. >>несколько(!!!) иконок Это если сообщений 2-3 типа. Но в данном типе сообщения может быть параметр(возможно скрытый, т.е. его нет в тексте тултипа): имя-путь к конкретному файлу, номер телефона, ID вызова (я еще не продумывал, исследую возможности). По логике очереди из сообщений не нужно, так можно и юзера задолбать. Логично показывать крайнее сообщение (из тех что сочту нужным выводить), а предыдущее убивать(если таковое имеется). И если с треем работает только моя прога, то оно так и будет. Т.е. условно Private Sub CommandBallon_Click() вытеснит то что было раньше. И я в CommandBallon_Click могу полностью запомнить ТИП СООБЩЕНИЯ и ПАРАМЕТРЫ. Но, если в текущий момент система отображает "Обновления для вашего Виндоус готовы" и прочую ересь, то если нажать CommandBallon_Click (или ей подобные) несколько раз, то пока я не закрою чужой Notify, я не увижу ничего. А когда закрою, то последовательно получу ВСЕ свои CommandBallon_Click, и каждое надо последовательно закрывать или кликать. Во первых, я не уверен что хочу этого. А во-вторых, я таким методом помню только ТИП СООБЩЕНИЯ и ПАРАМЕТРЫ которые от последнего нажатия CommandBallon_Click. Т.е. проблема с "Очередью". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:44 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
А я тут в десктоп на дотнете вляпался. Там все это делается так быстро . Работу, на которую на VB6 у меня ушла бы неделя, я сделал за два дня. И это при том, что на VB6 у меня куча наработок, а дотнетовским десктопом занялся почти с нуля. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:51 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyЧтобы уж было совсем понятно,... Счас попробую еще поиграться. У тебя VB6 живой есть? Если есть желание попробовать Вот этот мой тест проект, там есть кнопка "Ballon Notify". Помогите со стилем Tooltip "на Висте" (картинка+Title+Text но не Ballon) http://www.sql.ru/forum/actualfile.aspx?id=14342056 +вот эти константы. Там могут быть не все. Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 01:57 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Antonariyна дотнете... Не трави душу. Сам давно хочу поиграться в эти неты. Просто есть цель дописать программу. Эти Notification надеюсь последний штрих. Правда еще инсталлятор, help, сайт и и т.п. -волком уже вою, но доделать то надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:09 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77 Не забывай что HIWORD(lParam) contains the icon ID относится к version 4, а логика должно работать и на XP тожеПо-моему ты путаешь uID с guidItem. На uID нет ограничений. Дмитрий77 По логике очереди из сообщений не нужно, так можно и юзера задолбать.По логике юзера задолбаешь как раз без очереди. Сразу все выкидываешь и имеешь именно эту картину: А когда закрою, то последовательно получу ВСЕ свои CommandBallon_Click, и каждое надо последовательно закрывать или кликать. Дмитрий77 Логично показывать крайнее сообщение (из тех что сочту нужным выводить), а предыдущее убивать(если таковое имеется).Тогда останется одно крайнее, а остальных юзер даже не увидит. И вот тут-то как раз нужна очередь. Добавлять в коллекцию новые сообщения и брать из нее первое сообщение (удаляя) и не показывать следующее, пока юзер не кликнет тултип. Хотя по большому счету для юзера разницы нет, будут ли они появляться одно за другим или одно из-под другого. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:15 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77AntonariyЧтобы уж было совсем понятно,... Счас попробую еще поиграться. У тебя VB6 живой есть? Если есть желание попробоватьПопробовал бы, но нет желания собирать все эти фрагменты в одну кучу, да и аттач развесистый. Было бы все в одном спойлере/паре модулей, без вопросов. ВБ живой есть, как раз поставил его с мыслью, а не слабать ли этот десктоп на нем. Перед этим что-то успел сделать на дотнете, а когда на ВБ дошел до половины сделанного и осознал, что потратил времени в два раза больше, то вернулся к первому варианту. Ни для чего, кроме portable и activex exe, вб больше не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:32 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyИ вот тут-то как раз нужна очередь. Добавлять в коллекцию новые сообщения и брать из нее первое сообщение (удаляя) и не показывать следующее, пока юзер не кликнет тултип. Хотя по большому счету для юзера разницы нет, будут ли они появляться одно за другим или одно из-под другого.Если действовать таким образом, то не нужны все эти пляски с uID. Сообщение из очереди не удалять, а смотреть его параметры при клике на тултипе, выполнять соответствующее действие, и тогда уже удалять. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:43 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyДмитрий77 Не забывай что HIWORD(lParam) contains the icon ID относится к version 4, а логика должно работать и на XP тожеПо-моему ты путаешь uID с guidItem. На uID нет ограничений. На uID когда его назначаешь, ограничений м.б. и нет. Но на то что имеем в uCallbackMessage очень даже есть: When the uVersion member is either 0 or NOTIFYICON_VERSION wParam parameter of the message contains the identifier of the taskbar icon in which the event occurred. When the uVersion member is NOTIFYICON_VERSION_4, HIWORD(lParam) contains the icon ID. Если на XP Код: vbnet 1. 2. 3.
то на Висте v.4 Код: vbnet 1. 2. 3.
Ну, в принципе это соответствует. Только у меня на .uID 2, 3, 4 вообще не реагирует. Хотя догадываюсь почему. наверно NIM_ADD надо неск. раз делать с разными .uID ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:50 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyПопробовал бы, но нет желания собирать все эти фрагменты в одну кучу, да и аттач развесистый. Было бы все в одном спойлере/паре модулей, без вопросов. Там всего то из сути 1) Form1->CommandBallon_Click() 2) ModuleWinProc-> Public Function NewFormMeWindowProc( _ Case WM_MySysTrayNotify 'уведомления Tray -вместо WM_MOUSEMOVE 3) ModuleTrayIcon Все как раз собрано и сразу запускается. А на остальное в свете тек. вопроса можно не смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 02:57 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
AntonariyAntonariyИ вот тут-то как раз нужна очередь. Добавлять в коллекцию новые сообщения и брать из нее первое сообщение (удаляя) и не показывать следующее, пока юзер не кликнет тултип. Хотя по большому счету для юзера разницы нет, будут ли они появляться одно за другим или одно из-под другого.Если действовать таким образом, то не нужны все эти пляски с uID. Сообщение из очереди не удалять, а смотреть его параметры при клике на тултипе, выполнять соответствующее действие, и тогда уже удалять. Я кажется понял что ты хочешь сказать. Мы про разные очереди говорим. Если выкидывать сообщение в лоб, то два "автоматических" варианта развития событий. 1) Наиболее вероятный. Юзер видит сообщение. Если вдруг поступает новое сообщение, то оно вытесняет предыдущее. Если юзер например "потянулся нажать на то что видит", а тут пришло новое, то он и нажать то не успеет. Нехорошо как-то. 2) Если "трей занят чужим сообщением", то все мои попадают в ОБЩУЮ ОЧЕРЕДЬ ТРЕЯ (вне моего приложения). И это НЕУПРАВЛЯЕМО.Т.е. все сообщения будут показаны и приложение не в состоянии их идентифицировать. Если например идет ВХОДЯЩИЙ ТЕЛЕФОННЫЙ ВЫЗОВ, а юзер 2 минуты читал сообщения про обновления виндоуса и акробата, то когда он прочтет что надо ответить на телефон, то это сообщение уже будет вообще не актуально. Я говорил именно про эту СИСТЕМНУЮ ОЧЕРЕДЬ. Ты предлагаешь создать ОЧЕРЕДЬ-БУФЕР ВНУТРИ САМОГО ПРИЛОЖЕНИЯ. Так? В принципе это разумно. Это будет управляемая очередь. 1) Я могу расставить приоритеты, выводить более важное сообщение вне зависимости от поступления. Например "ВХОДЯЩИЙ ВЫЗОВ" важнее чем "Доступно обновление моей программы" 2) Я могу удалить сообщение из буфера не показывая его. Или заменить. Ну например, тот же "ВХОДЯЩИЙ ВЫЗОВ" бесполезно показывать если понятно что он уже упущен и т.п. А чтоб понять что сообщение отработано и переходить к следующему (если есть к чему) у меня есть два рабочих сообщения: Код: vbnet 1. 2.
Выяснять что за сообщение не надо, оно одно и моя программа об этом знает. Короче логику думаю надо продумывать на базе этой идеи ВНУТРЕННЕЙ ОЧЕРЕДИ. == Не совсем понял с таймерами. На XP похоже плюет на .uTimeoutAndVersion (может висеть бесконечно), хотя при каком-то действии (то ли мышкой поелозил, то ли в носу поковырялся - чего именно не понял) таймаут "наконец-то срабатывает". А Висте похоже вообще плевать - четко 9 секунд и убирается. Об этом кажется в MSDN как раз написано. Если говорить о вышеупомянутом "ВХОДЯЩИЙ ВЫЗОВ", его логично например показывать на протяжении всего вызова (пока телефон звонит). На счет XP, кажется понял. Таймаут срабатывает тогда когда поковырявшийся в носу юзер начал "работать" (т.е. мучить мышку и клавиатуру) - и тогда таймер начинает отсчет - ну, это разумно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 04:06 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77 2) Если "трей занят чужим сообщением", то все мои попадают в ОБЩУЮ ОЧЕРЕДЬ ТРЕЯЯ так понимаю, под очередью ты подразумеваешь обычный оконный z-order. По идее новые тултипы должны появляться поверх старых. Дмитрий77 И это НЕУПРАВЛЯЕМО.Зато обходимо — достаточно выводить свои уведомленя не в нижнем правом углу у трея, а верхнем правом. Или находить полоску окна своего приложения в таксбаре и выводить на ней, что более эстетично. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 11:35 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Antonariy...выводить свои уведомленя не в нижнем правом углу у трея, а верхнем правом. Или находить полоску окна своего приложения в таксбаре и выводить на ней, что более эстетично. Извини, ты о чем рассуждаешь? Речь сейчас (и с самого начала топика) идет о стандартных Notifications, без всякой кастомизации: Notifications A notification informs users of events that are unrelated to the current user activity, by briefly displaying a balloon from an icon in the notification area . AntonariyДмитрий77 2) Если "трей занят чужим сообщением", то все мои попадают в ОБЩУЮ ОЧЕРЕДЬ ТРЕЯЯ так понимаю, под очередью ты подразумеваешь обычный оконный z-order. По идее новые тултипы должны появляться поверх старых.. Под очередью (той о которой говорил изначально я, а не той которую предложил ты) я подразумеваю: NOTIFYICONDATA structure Remarks ... No more than one balloon notification at a time can be displayed for the taskbar. If an application attempts to display a notification when one is already being displayed, the new notification is queued and displayed when the older notification goes away . Т.е. сообщения буферизуются "системой" (приложение уже давно отправило команду его показать) и когда предыдущее закрыто, система показывает следующее (не "поверх" а вместо в том порядке в кот. они были is queued ). И эта очередь управляется СИСТЕМОЙ а не приложением. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 15:35 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77 Речь сейчас (и с самого начала топика) идет о стандартных Notifications, без всякой кастомизации:Да, это я не о том подумал. Позиционирования нет же. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 17:39 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Antonariy, Но идея твоей очереди (внутри приложения) мне очень понравилась. === Сейчас пока воюю с иконкой Если делать так Код: vbnet 1. 2. 3. 4. 5.
то Notification вообще не выводится (ни на Висте на 4 версии, ни на XP). Выводится только если делать так: Код: vbnet 1. 2. 3. 4. 5.
NOTIFYICONDATA structure dwInfoFlags Type: DWORD Windows 2000 and later. Flags that can be set to modify the behavior and appearance of a balloon notification. The icon is placed to the left of the title. If the szInfoTitle member is zero-length, the icon is not shown. NIIF_NONE (0x00000000) 0x00000000. No icon. NIIF_INFO (0x00000001) 0x00000001. An information icon. NIIF_WARNING (0x00000002) 0x00000002. A warning icon. NIIF_ERROR (0x00000003) 0x00000003. An error icon. NIIF_USER (0x00000004) 0x00000004. Windows XP SP2 and later. •Windows XP: Use the icon identified in hIcon as the notification balloon's title icon. •Windows Vista and later: Use the icon identified in hBalloonIcon as the notification balloon's title icon. ... NIIF_LARGE_ICON (0x00000020) 0x00000020. Windows Vista and later. The large version of the icon should be used as the notification icon. Смотри, NIIF_USER+.hicon -на XP работает NIIF_LARGE_ICON+NIIF_USER+.hicon -на Висте работает (иконка 32х32) В обоих случаях NIIF_USER выводит ту же иконку что в трее. Если я правильно понимаю написанное, то На XP я могу показывать либо стандартные иконки NIIF_INFO, NIIF_WARNING ..., либо иконку что у меня в трее NIIF_USER (но не произвольную - а хотелось бы для разных сообщений разные!!!) - причем размер всегда 16х16 На Вистах если верить MSDN, я могу задать в .hBalloonIcon ПРОИЗВОЛЬНУЮ индивидуальную для данного сообщения иконку. (но как только добавляешь в структуру этот .hBalloonIcon , Notifications перестают выводиться вообще). Либо я могу использовать .hicon, но тогда произвольную уже не задашь (тот же набор что и в XP). Ну, 32х32 выводятся - это да. По хорошему код такой должен быть Код: vbnet 1. 2. 3.
на XP естественно Notifications выводятся, но на висте все равно нет (как только разрешил последний член структуры). Полная структура такая: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Нигде не ошибся? При наличии последнего элемента hBalloonIcon As Long (к которому у меня нездоровый интерес как раз), Notification вообще не выводится. ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2013, 18:53 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77 Код: vbnet 1. 2.
Нигде не ошибся? При наличии последнего элемента hBalloonIcon As Long (к которому у меня нездоровый интерес как раз), Notification вообще не выводится. ??? Короче нигде я в структуре не ошибся. Но сделал 2 других ошибки. 1. Я поленился сделать иконку 32 размера, наивно полагая что моя 48 "отформатируется автоматически". С NIIF_USER+ .hIcon этот фокус проходит, а с .hBalloonIcon -не проходит Т.е. по хорошему надо делать вообще так (если хочу большую иконку): Код: vbnet 1. 2. 3. 4. 5. 6.
Ну а если устраивает маленькая, то делать ее 16х16 (ну или через метрики) и убирать NIIF_LARGE_ICON. Т.е. эта фича вольностей не прощает. 2. Ну и тупо ошибся с константой Увидел x000020 и забабахал NIIF_LARGE_ICON = &H14 (=20 надо ж было так лохануться) Естественно огреб кучу глюков. А правильно Код: vbnet 1.
На XP видимо придется довольствоваться стандартными восклицательными знаками, ну а на Вистах можно выводить 32-е иконки на вкус и цвет. Т.е. правильный код примерно такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Т.е. я на XP обрезаю структуру и вывожу стандартный восклицательный знак NIIF_INFO А на вистах я использую полную структуру и большую картинку, которую произвольно задаю в hBalloonIcon Так что все работает с этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2013, 03:03 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Кстати еще один недостаток системной очереди. Если я использую разные .hBalloonIcon и понапихал несколько сообщений в системную очередь, наивно полагая что картинки будут разные, я получу последний .hBalloonIcon во всех сообщениях. Опять же в пользу того, чтобы очередь контролировалась внутри приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2013, 03:13 |
|
Хочу понять логику "уведомлений в трей".
|
|||
---|---|---|---|
#18+
Дмитрий77, пытаюсь запустить Ваш в код в средах компилирующих VB. Однако, получаю ошибки. Конечная цель - организовать уведомление в облаке. Как именно это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2014, 22:54 |
|
|
start [/forum/topic.php?fid=60&msg=38295264&tid=2156372]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 462ms |
0 / 0 |