Многоуважаемый и не менее многословый O-Planet 06.09.2013 опубликовал
Tray Informer с такой беллетристикой, что аж завидно стало.
По результатам тестирования оказалось:
1. Компонента требует наличия в системе BORLNDMM.DLL (устанавливается вместе со средой программирования)
2. Пункт 1 еще не очень печально, печально то, что там еще необходима CC3280MT.DLL, которая требует регистрации в реестре, что создает проблемы для пользователей с ограниченными правами.
Комментарии (70), (72), (74)
3. Обратной связи с 1С нет.
Настоящая ВК не требует ничего, кроме самой себя, выполнена по технологии Native, т.е. не требует регистрации в реестре и особых прав пользователя. Имеет обратную связь с 1С через генерацию внешних событий. Имеет popup-menu на иконке в трее для управления окном 1С (закрыть, скрыть, показать). Есть возможность убрать кнопку главного окна из панели задач.
Подключение компоненты:
ПодключитьВнешнююКомпоненту(ПолноеИмяФайлаВК,"TrayMessenger",AddInType.Native);
При подключении иконка из ресурса ВК сразу помещается в трей, устанавливается хинт по умолчанию: "1С-Предприятие",
инциализируется popup-menu.
Создание экземпляра класса:
Трей = Новый("AddIn.TrayMessenger.V8TrayMessenger") // слева - любая переменная
Методы ВК:
Баллун(Текст,Заголовок,ТипИконки,ВремяПоказа) - выводит стандартный баллун иконки трея на время=ВремяПоказа (сек)
ТипИконки - число; 0-нет иконки, 1-информация, 2-предупреждение,3-ошибка
При клике на баллуне он закрывается и генерирует внешнее событие. Событие=ТекущийЗаголовокБаллуна,
Данные=ТекущийТекстБаллуна
Оповещение(Заголовок,Текст,ИмяФайлаКартинки,ВремяПоказа) - выводит окно оповещения в нижнем правом углу экрана.
При клике на поле оповещения генерируется внешнее событие и окно закрывается.
Практически аналогично ПоказатьОповещениеПользователя, но
никаких "Показывает окно, по умолчанию располагающееся внизу экрана,
которое постепенно затухает и исчезает с экрана". Будет показываться сколько надо.
Если имя файла картинки не указано, или указанный файл не существует, выводится картинка из ресурса ВК
Примечание: файл картинки - только BMP!
Иконка(ИмяФайлаИконки) - устанавливает указанную иконку в трей
Если ИмяФайлаИконки не указано или такой файл не существует используется иконка из ресурса ВК
Примечание: не понравилось мне как смотрится в трее круглая иконка, поэтому в ресурсе - несколько модифицированная.
Хинт(ТекстХинта) - устанавливает новый хинт к иконке трея
УбратьИзПанелиЗадач() - без параметров, убирает кнопку главного окна из панели задач, т.е.останется только трей-иконка
Popup-Menu - вызывается правой кнопкой на иконке трея,
пункты: Закрыть 1С, Спрятать окно 1С, Показать окно 1С
Двойной клик по иконке разворачивает и выталкивает окно 1С на передний план.
Примечание: на рисунке "Вид общий" иконка в трее и картинка в оповещении из ресурсов ВК
Тестировалось на:
Windows Server 2008 R2 Standard х 64, база SQL
Windows 7 Ultimate х 32, база файловая
Версия 1.1.0.3
Доработано по комментариям 1-20.
В метод Оповещение добавлен параметр ПоЦентру, если Истина, то окно оповещения выводится по центру экрана.
По умолчанию - Ложь (правый нижний угол).
Дополнительные пояснения по окну оповещения: окно имеет стиль StayOnTop, т.е. всегда поверх всех окон.
Если ВремяПоказа=0 - будет "торчать" на экране 24 часа или до закрытия пользователем, т.е. хочет-не хочет, а окно увидит.
Версия 1.1.0.5
Для удобства руления пользователями решил добавить еще пару пунктов popup-menu на иконке в трее:
Внешнее событие 1 и Внешнее событие 2. При нажатии генерируют соответственно события EXT_MESSAGE1_CLICK и
EXT_MESSAGE2_CLICK.
Обработать надо, разумеется, уже в 1С на предмет, что делать дальше
Пример:
Если Источник="TRAY_MESSENGER" Тогда
Если Событие="EXT_MESSAGE1_CLICK" Тогда
Трей.Оповещение("АДМИНИСТРАТОР","Прошу выйти из 1С до особого сообщения","",60,ИСТИНА);
Константы.ЗавершитьРаботу.Установить(Истина);
КонецЕсли;
Если Событие="EXT_MESSAGE2_CLICK" Тогда
// придумать чего-нибудь ;)
КонецЕсли;
КонецЕсли;
Версия 1.0.0.7
Приделал доп. пункты меню, и задумался.. а как простые юзвери начнут их жать, а я, например, хочу к одному из них выгонялку приделать, доступную только мне?
Поэтому добавил пару свойств:
ПоказыватьМеню (Истина/Ложь) и ПоказыватьДополнительныеПунктыМеню(Истина/Ложь)
Пример:
Трей.ПоказыватьМеню=Ложь;// отключаем меню исконки полностью
Трей.ПоказыватьМеню=Истина; // включаем меню исконки полностью
Трей.ПоказыватьДополнительныеПунктыМеню=Ложь; // отключаем доп. пункты
Трей.ПоказыватьДополнительныеПунктыМеню=Истина; // включаем доп. пункты
Версия 1.0.0.9
По просьбе в комментарии (60) добавлен параметр в метод Оповещение - ТекстВнешнегоСобытия
Параметр номер 6, по умолчанию равен пусто. Если пусто, то Данные внешнего события=Текст, иначе ТекстВнешнегоСобытия.
Оповещение(Заголовок,Текст,ИмяФайлаКартинки,ВремяПоказа,ПоЦентру,ТекстВнешнегоСобытия)
При нажатии на поле Оповещения окно 1С разворачивается и выталкивается на передний план
Версия 1.0.0.11
Добавлен метод
ОбновитьОповещение(Заголовок,Текст) - обновляет заголовок и текст уже существующего окна Оповещения.
Заодно добавлены методы:
Убить1С() - без параметров, как крайнее средство выгнать пользователя (убивает текущий процесс 1С)
Задержка(ВремяЗадержки) - в мс, необязательный, по умолчанию 50 миллисекунд
Версия 1.0.0.15
Добавлены методы:
УстановитьГлавныйТаймер(Интервал) - таймер на главное окно 1С. Интервал в миллисекундах, по умолчанию 60000
При срабатывании генерирует внешнее событие MAIN_TIMER_EVENT (данные - интервал таймера)
Каждая новая установка таймера отменяет предыдущую.
ОтключитьГлавныйТаймер() - без параметров, отключает (разрушает) ранее установленный таймер
УстановитьОбратныйТаймер(Интервал) - одноразовый таймер на главное окно 1С.
При срабатывании генерирует внешнее событие BACK_TIMER_EVENT (данные - интервал таймера) и саморазрушается.
Примерный код в 1С:
//--- модуль обычного приложения---
Перем Трей Экспорт;
Функция КаталогИБ() Экспорт
КаталогИБ = СтрокаСоединенияИнформационнойБазы();
КаталогИБ = Сред(КаталогИБ,7,СтрДлина(КаталогИБ)-8) + "\";
Возврат КаталогИБ;
КонецФункции
Процедура ПриНачалеРаботыСистемы()
ФайлВК=КаталогИБ()+"TrayMessenger.dll";
Файл= Новый Файл(ФайлВК);
Если Файл.Существует() Тогда
//-- подключение компоненты--
ПодключитьВнешнююКомпоненту(ФайлВК,"TrayMessenger",AddInType.Native);
// Примечание: при подключении иконка СРАЗУ помещается в трей,
// устанавливается хинт по умолчанию: "1С-Предприятие",
// инциализируется popup-menu
//-- создание экземпляра класса--
Трей = Новый("AddIn.TrayMessenger.V8TrayMessenger");
//---- вывод баллуна------
Заголовок="Всем! Всем! Всем!";
Текст="Прошу выйти из 1С";
ТипИконки=2; //0-нет иконки, 1-информация, 2-предупреждение,3-ошибка
ВремяПоказа=5;
//Трей.Баллун(Текст,Заголовок,ТипИконки,ВремяПоказа);
//---- вывод оповещения------
Заголовок="Всем! Всем! Всем!";
Текст="Прошу выйти из 1С";
ИмяФайлаКартинки=""; // пусто - из ресурса ВК
ВремяПоказа=25;
//Трей.Оповещение(Заголовок,Текст,ИмяФайлаКартинки,ВремяПоказа);
// убираем иконку 1С из Панели Задач
Трей.УбратьИзПанелиЗадач();
Иначе
Сообщить("Не обнаружен файл ВК, скопируйте ""TrayMessenger.dll"" в КаталогИБ "
+ФайлВК,СтатусСообщения.Информация);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник="TRAY_MESSENGER" Тогда
Сообщить("Событие: "+Событие+"; Данные: "+Данные);
КонецЕсли;
КонецПроцедуры