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
.epf 15,37Kb
15.05.12
214
.epf 15,37Kb 214 Скачать
Режим совместимости с устаревшей технологией WinForms на 1С 8.1
.epf 9,06Kb
15.05.12
27
.epf 9,06Kb 27 Скачать
WPF-панель, построенная в стиле Outlook
.epf 8,32Kb
15.05.12
36
.epf 8,32Kb 36 Скачать

См. также

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

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