gifts2017

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

Опубликовал Аркадий Кучер (Abadonna) в раздел Программирование - Внешние компоненты

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Версия 1.0.0.17
.zip 321,48Kb
28.09.16
233
.zip 1.0.0.17 321,48Kb 233 Бесплатно
Версия 1.0.0.11
.zip 320,91Kb
28.09.16
49
.zip 1.0.0.11 320,91Kb 49 Бесплатно

См. также

Автор запретил комментарии