Мигание значка 1С на панели задач


Часто пользователи просят, чтобы 1С, будучи свернутой в значок, как-то оповещала о каком-нибудь событии, требующем внимания пользователя. В Windows есть встроенный механизм "мигания" значка на панели задач. Но просто так этот механизм не активировать средствами 1С.
В данной публикации предлагаю:
для обычного приложения — обработку, которая инкапсулирует все необходимые махинации с СОМ-объектами.
для управляемого приложения — cf-файл с необходимыми объектами.

Создано на основе публикации http://infostart.ru/public/267819/

Основная идея разработки — это один раз инициализировать систему, а затем вызывать мигание, когда это необходимо.

Для обычного приложения.

Решение основано на дополнительной обработке «Мигание значка на панеле задач», которую необходимо вставить в конфигурацию. Алгоритм внедрения:

1. Добавить в конфигурацию новую обаботку «Мигание значка на панеле задач».

2. В модуле обычного приложения, в разделе объявления переменных добавить:

Перем ОбработкаМиганияЗначка Экспорт;

3. В модуле обычного приложения в начале процедура «ПриНачалеРаботыСистемы» добавить:

 

Процедура ПриНачалеРаботыСистемы()
//объекты для вызова "мигания" окна
ОбработкаМиганияЗначка=обработки.МиганиеЗначкаНаПанелеЗадач.Создать();
ОбработкаМиганияЗначка.Инициализировать();

//.........
КонецПроцедуры

После этого достаточно в том месте программы, в котором необходимо уведомить пользователя, вставить:

//Вызвать мигание окна, если оно не активно
ОбработкаМиганияЗначка.Мигнуть();

Для управляемого приложения.

 Для управляемого приложения все несколько усложняется в виду того, что модуль обработки исполняется на сервере, а «мигать» надо на клиенте. Кроме того, управляемое приложение может иметь множество окон и охота выбирать, каким окном мигать. 

Решение для управляемого приложения предлагается в виде мини-конфигурации, содержащей только необходимые объеты. Для ее внедрения необходимо выполнить сравнение и объединение. ВНИМАНИЕ! При сравнении и объединении лучше снимите галочки с ветки «Свойства», чтобы не потерять данные своих модулей.

Если вы хорошо понимаете, как проходят процессы сравнения и объединения, то может вручную настроить объединение только моудля управляемого приложения. Остальные модули в прилагаемой конфигурации пусты.

В конфигурации содержатся:

1. Модуль управляемого приложения

2. Подсистема «МиганиеОкон»

3. Общие модули «МиганиеКлиент» и «МиганиеСервер»

4. Общий макет «DynamicWrapper32».

 

После объединения конфигураций убедитесь, что в модуле управляемого приложения в разделе объявления переменных у вас есть:

//Переменны для управления миганием окон
Перем ApiFunctions Экспорт;
Перем НомерОкна1с Экспорт;
Перем НомерОкнаМигания Экспорт;
//

В начале процедуры «ПриНачалеРаботыСистемы»:

 //Инициализация компонент
МиганиеКлиент.Инициализировать();

После этого можно сохранять конфигурацию.

 

Для управляемого приложения предусмотрено две экспортные процедуры общего модуля «МиганиеКлиент»:

1. МигатьЭтимОкном() — позволяет установить текущее окно тем, которое будет мигать на панеле задач при вызове процедуры «Мигнуть()»;

1. Мигнуть() — начинает мигать окном, для которого было вызвано МигатьЭтимОкном(). Если это окно не существует или было не задано, то мигает основное окно 1С.


Пример использования:

&НаКлиенте
Процедура ПолучитьСписокФайлов(Команда)
МиганиеКлиент.МигатьЭтимОкном();
ПолучитьСписокФайловНаСервере();
МиганиеКлиент.Мигнуть();
КонецПроцедуры

Всем успехов!


 

10 Comments

  1. ezhik_2000

    Зачем так заморачиваца, подобную проблему решили очень просто…

    В 1с:Документооборот при появлении новой задачи выходило модальное окно

    и если 1с была свернута то она начинала мигать…

    Reply
  2. glassman

    (1) ezhik_2000, Изначально задача стояла не для докуметооборота ) И модальные окна выводить не охота.

    Reply
  3. ruziya

    что-то не работает мигание 🙁

    имею документооборот 1.4.11.2

    на платформе 8.3.5.1517

    скачал Вашу конфигурацию. объединил как написано. проверил модуль управ-го приложения. там нужных абзацев не было.

    я их дописал.

    сохранил конф-ию. зашёл под двумя разными пользователями. создал процесс ознакомления. отправил. у другого пользователя ни одно окно/значок не замигал.

    в чём моя ошибка?

    Reply
  4. glassman

    (3) ruziya, проверьте на отладчике, регистрируется ли у вас компонента?

    Reply
  5. ruziya

    а где это можно увидеть в отладчике?

    не очень ориентируюсь.

    Reply
  6. ruziya

    подскажите где в отладчике смотреть, пожалуйста

    Reply
  7. ruziya

    процедура инициализации не проходит.

    нет регистрации

    что делать?

    Reply
  8. androgin

    Платформа умеет сама мигать своим значком…

    Reply
  9. gPaskal

    Кхм…

    WshShell = Новый COMОбъект(«Wscript.Shell»);

    WshShell.AppActivate(«1С:Предприятие»);

    Reply
  10. zawinulo

    ПанельЗадачОС.СигнализироватьИконкой(3);

    Reply

Leave a Comment

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