Трей-мессенджер: Native ВK для 8.х

Иконка 1С в трее с popup-mеnu, баллуны, оповещения, обратная связь.
Выполнена по технологии Native, не требует регистрации в реестре и особых прав пользователя. Имеет обратную связь с 1С через генерацию внешних событий. Имеет popup-menu на иконке в трее для управления окном 1С (закрыть, скрыть, показать+ 2 пункта генерации событий). Есть возможность убрать кнопку главного окна из панели задач.

Многоуважаемый и не менее многословый O-Planet 06.09.2013 опубликовал

Tray Informer с такой беллетристикой, что аж завидно сталоLaughing.

По результатам тестирования оказалось:

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" Тогда
Сообщить("Событие: "+Событие+"; Данные: "+Данные);
КонецЕсли;
КонецПроцедуры

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *