gifts2017

1C.Net:Предприятие – использование богатых графических возможностей .Net Framework

Опубликовал Сергей Карташев (Elisy) в раздел Программирование - Работа с интерфейсом

Windows Presentation Foundation (WPF) – презентационная система нового поколения для построения клиентских приложений Windows с ошеломляющими возможностями. Технология WPF основана на независимой от разрешения системе визуализации, построенной на векторной графике и использующей преимущества современного графического оборудования. В составWPF входят следующие средства: язык описания Extensible Application Markup Language (XAML), элементы управления, механизм привязки данных, средства разметки, 2d- и 3d-графика, анимация, стили, шаблоны, документы, медиа-элементы, текст и средства оформления текста. Презентационная система входит в состав .Net framework и доступна для использования внутри 1С:Предприятие средствами Elisy .Net Bridge, начиная с версии 3.2. Windows Presentation Framework полностью заменяет и многократно превосходит устаревающую технологию WinForms.

Статус 1С Совместимо

Windows Presentation Foundation (WPF) – презентационная система нового поколения для построения клиентских приложений Windows с ошеломляющими возможностями. Технология WPF основана на независимой от разрешения системе визуализации, построенной на векторной графике и использующей преимущества современного графического оборудования. В составWPF входят следующие средства: язык описания Extensible Application Markup Language (XAML), элементы управления, механизм привязки данных, средства разметки, 2d- и 3d-графика, анимация, стили, шаблоны, документы, медиа-элементы, текст и средства оформления текста. Презентационная система входит в состав .Net framework и доступна для использования внутри 1С:Предприятие средствами Elisy .Net Bridge, начиная с версии 3.2. Windows Presentation Framework полностью заменяет и многократно превосходит устаревающую технологию WinForms.

1С:Предприятие содержит всё необходимое для реализации простейших интерфейсов для пользователя. Расширение возможностей происходило долгое время традиционно – через ActiveX. Кто разрабатывал ActiveX на C++ знают, насколько это долгое и неблагодарное дело. Со временем программисты научились эффективнее писать компоненты, пользуясь тем, что .Net-технология WinForms реализует все необходимые COM-интерфейсы для ActiveX. Но все традиционные подходы буквально меркнут по сравнению с технологией WPF, вошедшей в состав .Net framework 3.0. До этого момента использование WFP внутри 1С оставалось для нас несбыточной мечтой, ограничиваясь созданием отдельных окон параллельно с 1С-приложением. Сейчас есть возможность вставки WPF-контролов внутрь форм 1С.

Пример подключения WPF-контрола к 1С:Предприятие

WPF в 1С начинается традиционно – через вставку ActiveX Elisy.HwndHost на форму. Elisy.HwndHost.dll- это небольшая библиотека, реализующая 2 события Created, SizeChanged и 1 свойство Hwnd. Created событие срабатывает в момент создания ActiveX, и с этого момента становится доступным Hwnd – специальный указатель окна, который пригодится в дальнейшем. Дело в том, что указатель окна является единственным связующим звеном при состыковке обычных приложений с WPF-технологией. SizeChanged событие вызывается каждый раз, когда размер окна изменяется для того, чтобы изменить размер WPF-контрола.

Всю остальную работу по загрузке сборки, подготовке параметров инициализации, созданию WPF-контрола и управлению его размерами выполнит Elisy.NetBridge.dll. Код 1С подключения небольшой – всего 10 строк. На основе его можно подключить произвольный элемент управления WPF. Размер кода примера статьи немного больше, так как пример создавался еще для одной цели: показать, как можно поставлять сборки внутри конфигураций 1С и внешних обработок, сведя к минимуму файлы на диске. Но это отдельная тема, затрагивающая также защиту конфигураций 1С.

Как подключить WPF-контрол на форму 1С:Предприятие:

  1. Зарегистрировать Elisy.HwndHost.dll в реестре (команда: regsvr32 Elisy.HwndHost.dll).
  2. В обработчике Created в форме создать IntPtr-объект на основе значения Hwnd.
  3. Создать объект HwndSourceParameters на основе IntPtr и проинициализировать его другие свойства, если нужно.
  4. На основе HwndSourceParameters создать объект HwndSource, который отвечает за согласование формы 1С и элемента управления WPF.
  5. Создать WPF-контрол.
  6. Присвоить свойству RootVisual ссылку на WPF-контрол.

Достоинства WPF и описанного способа подключения:

  • WPF несет в себе наибольший набор возможностей из предоставляемых возможностей других средств разработки ActiveX. Доступны, например, анимация и 3d-графика.
  • Разработка элементов на основе .Net framework – это более экономичный способ (экономия кода и времени до 80%), чем, например, на основе С++.
  • Легкий способ подключения WPF к 1С в 10 строк кода.
  • Нет необходимости написания специальной «обертки» (враппера), как в случае с WinForms для установки атрибута ProgId или ClassInterface.
  • Передаваемые данные из/в WPF-контрол не ограничены простейшими (число, строка), как в случае с ActiveX. Типы – любые классы и перечисления из .Net framework.
  • Нет необходимости предварительной регистрации каждой сборки WPF. (Примечание: в ранних версиях требуется зарегистрировать Elisy.HwndHost.dll)
  • Нет необходимости в файле на диске со сборкой WPF. Сборка может быть помещена внутрь конфигурации или внешней обработки.

Файлы для скачивания

 

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

Наименование Файл Версия Размер
Простой пример WPF 1С 8.1 214
.epf 15,37Kb
15.05.12
214
.epf 15,37Kb Скачать
Режим совместимости с устаревшей технологией WinForms на 1С 8.1 27
.epf 9,06Kb
15.05.12
27
.epf 9,06Kb Скачать
WPF-панель, построенная в стиле Outlook 36
.epf 8,32Kb
15.05.12
36
.epf 8,32Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Андрей (boozin) 19.05.10 08:42
А как саму компоненту скачать ? По ссылке из топика скачивание недоступно.
2. Сергей Карташев (Elisy) 19.05.10 08:45
(1) Специально для Инфостарт компонент выложен в публикации:
Elisy .Net Bridge - подключите .Net Framework к 1C
В статьи дана ссылка на форум, где лежат все версии .Net Bridge и доступны для скачивания зарегистрированным пользователям.
3. Михаил Ражиков (tango) 19.05.10 12:04
можно было просто ссылку опубликовать :)
http://www.gotdotnet.ru/blogs/elisy/7859/
4. Михаил Ражиков (tango) 19.05.10 12:22
(0)
Зарегистрировать Elisy.HwndHost.dll в реестре (команда: regsvr32 Elisy.HwndHost.dll).
vs
Нет необходимости предварительной регистрации каждой сборки WPF. (Примечание: в ранних версиях требуется зарегистрировать Elisy.HwndHost.dll)
5. Михаил Ражиков (tango) 19.05.10 12:24
(0) SizeChanged событие вызывается каждый раз, когда размер окна изменяется для того, чтобы изменить размер WPF-контрола.

не возникнет ли коллизии между обработчиком этого события и отработкой привязок формы 1сом?
6. Сергей Карташев (Elisy) 19.05.10 12:26
(3)В прошлый раз ссылку на Инфостарт опубликовал - получил 5 минусов :)
7. Михаил Ражиков (tango) 19.05.10 12:28
минус - это не по морде дали
8. Сергей Карташев (Elisy) 19.05.10 12:35
(4) Имеется ввиду следующее:
Elisy.HwndHost.dll не является сборкой - это ActiveX-компонент. Регистрация в реестре этой библиотеки необходимо, чтобы положить на форму 1С. Рассматривается в будущем вариант оформления ее в виде ВК для 1С. Тогда в случае ЗагрузитьВнешнююКомпоненту регистрацию выполнит 1С сама при загрузке.
Сборки, содержащие WPF-контролы, не требуют регистрации, как в случае традиционного подключения WinForms. Т.е. можно подключить бесконечное число сборок, зарегистрировав только Elisy.HwndHost.dll.
9. Сергей Карташев (Elisy) 19.05.10 12:51
(5)Коллизии не заметил. Последовательность следующая:
1. Пользователь изменяет размер
2. Форма изменяет размер ActiveX Elisy.HwndHost.dll согласно привязке
3. Elisy.HwndHost.dll отправляет событие на форму
4. Форма изменяет размер элемента управления WPF, который "прикреплен" к ActiveX Elisy.HwndHost.dll
Цепь не замыкается
10. Сергей Карташев (Elisy) 20.05.10 12:59
Добавлен пример построения Wpf-панели в стиле Outlook. Внизу статьи смотрите, как он выглядит.
11. dushelov (Душелов) 25.05.10 18:00
Да, делал я подобное, только для винформс: http://infostart.ru/public/15912/
С отслеживанием всех событий. Только мало кому надо :)
12. Сергей Карташев (Elisy) 26.05.10 12:08
(11) Время должно пройти, чтобы оценили .Net framework. Хотя уже начали появляться коммерческие проекты, дополняющие Нетом 1С. Например:
http://infostart.ru/public/70859/
13. Сергей (Che) Коцюра (CheBurator) 30.05.10 17:42
Озвучьте самое главное: подключается/используется ПОЛНЫЙ ФУНКЦИОНАЛ? компонента - платная/бесплатная?
14. Сергей Карташев (Elisy) 31.05.10 07:10
(13) Компонента платная. Демонстрационная версия включает весь функционал.
15. Евгений Стоянов (quick) 09.06.10 10:49
интересно как все это в терминале будет работать...
16. dushelov (Душелов) 09.06.10 11:42
(15) Нормально все будет работать.
17. Сергей Карташев (Elisy) 09.06.10 14:33
(15) В случае работы с WPF в терминале может потребоваться дополнительная оптимизация. Она состоит в слеюующем:
Использовать как можно меньше анимации (особенно градиентной), специальных эффектов (BitmapEffects / Effects / ShaderEffects, blurs & drop shadows with large radii) и 3д-графики
18. Сергей Карташев (Elisy) 23.07.10 14:29
19. Дмитрий (deemaa) 15.05.12 14:42
(0).нет это хорошо, но в свете выхода клиента по линух как-то не очень "кроссплатформенно" (mono упоминать не будем)
20. Oleg (Air777) 16.05.12 17:05
В табличном документе можно использовать эти красоты? В частности интересует наложение картинки с частичной прозрачностью на другую картинку
21. Сергей Карташев (Elisy) 17.05.12 07:31
(20) Для табличного документа эксперименты не делались