gifts2017

[GDI+] - Рисуем программно в 1С

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

ActiveX-компонента для рисования в 1С.

*** Для работы компоненты потребуется установленный Microsoft .NET Framework 2.0, который можно скачать отсюда.

и зарегистрировать компоненту в Windows - запустить reg.bat
(для удаления информации о компоненте в Windows - запустить unreg.bat)

*** Добавление на форму 1С:

v7: Использовать 1С++ и FormEx
v8: Меню "Форма" - "Вставить ActiveX..." - Выбрать элемент "Душелов.GDI"

*** Методы:
 
  *** Основные:
  
  - НоваяКартинка(Ширина, Высота); //создает новую картинку с заданной шириной и высотой
  - Очистить(Цвет); //Очищает всю поверхность рисования и выполняет заливку поверхности указанным цветом фона.
  - СкопироватьСЭкрана(ИсточникХ, ИсточникY, НазначениеХ, НазначениеY, Размер); //Выполняет передачу данных о цвете блоками битов с экрана на поверхность рисования объекта. 
  //Размер - объект типа "Размер"
  - ЗагрузитьКартинку(Файл);
  - СохранитьКартинку(Файл, ФорматФайла); //ФорматФайла - строка (bmp, emf, exif, gif, icon, jpg, memorybmp, png, tiff)
  - ОчиститьПамять();


  *** Создание элементов:

  - СоздатьПеро(Цвет, Ширина); //создает объект типа "Перо". 
  //Цвет - объект типа "Цвет"  
  - СоздатьКисть(r, g, b); //создает объект типа "Кисть" заданного цвета
  //r, g, b - числа
  - СоздатьШрифт(Название, Размер, Стиль); //создает объект типа "Шрифт". 
  //Название - имя шрифта, размер - число, стиль - строка с описанием шрифта, разделенные "|" (bold, italic, strikeout, underline) 
  - ПолучитьЦвет(r, g, b); //создает объект типа "Цвет". 
  //r, g, b - числа
  - СоздатьТочку(х, у); //создает объект типа "Точка". 
  //х, н - координаты
  - СоздатьМассивТочек(Размер); //создает объект типа "Точки". 
  //Размер - число, размер массива
  - УстановитьТочкуВМассив(Точки, Индекс, Точка); //
  //Точки - объект типа "Точки", Индекс - число, Точка - объект типа "Точка"
  - СоздатьИконку(Файл); //создает объект типа "Иконка" из файла
  - СоздатьКартинку(Файл); //создает объект типа "Картинка" из файла
  - СоздатьПрямоугольник(х, у, Ширина, Высота); //создает объект типа "Прямоугольник". 
  - СоздатьРазмер(Ширина, Высота); //создает объект типа "Размер". 

  *** Рисование:

  - РисоватьЛинию(Перо, х1, у1, х2, у2); //Рисует линию между двух точек
  - РисоватьЛинии(Перо, Точки); //Рисует набор сегментов линии, которые соединяют массив точек
  - РисоватьДугу(Перо, Прямоугольник, НачальныйУгол, Угол); //Рисует дугу, которая является частью эллипса, заданного прямоугольником
  //НачальныйУгол - Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая начальной точкой дуги.
  //Угол - Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра НачальныйУгол и заканчивая конечной точкой дуги. 
  - РисоватьКривуюБезье(Перо, x1, y1, x2, y2, x3, y3, x4, y4); //Строит кривую Безье, определяемую четырьмя упорядоченными парами координат, которые представляют собой точки.
  - РисоватьКривыеБезье(Перо, Точки); //Рисует последовательность кривых Безье из массива точек
  - РисоватьСтроку(Строка, Шрифт, Кисть, х, у); //Создает указываемую текстовую строку в заданном месте
  - РисоватьМногоугольник(Перо, Точки); //Рисует многоугольник, определяемый массивом точек
  - РисоватьЗамкнутуюКривую(Перо, Точки); //Строит замкнутую фундаментальную кривую, определяемую массивом точек
  - РисоватьКривую(Перо, Точки); //Строит фундаментальную кривую через точки указанного массива точек
  - РисоватьЭллипс(Перо, Прямоугольник); //Рисует эллипс, определяемый ограничиваемым прямоугольником
  - РисоватьИконку(Иконка, х, у); //Формирует изображение, представленное указанным объектом Icon, расположенным по указанным координатам.
  - РисоватьИконкуБезРастягивания(Иконка, Прямоугольник); //Формирует изображение, представленное указанным объектом Иконка без его масштабирования.
  - РисоватьКартинку(Картинка, х, у); //Рисует заданное изображение, используя его исходный фактический размер, в месте, задаваемом парой координат.
  - РисоватьКартинкуБезМасштабирования(Картинка, Точка); //Рисует заданное изображение в заданном месте, используя его исходный фактический размер.
  - РисоватьКартинкуБезМасштабированияСОбрезанием(Картинка, Прямоугольник); //Рисует заданное изображение без масштабирования и при необходимости обрезает его, чтобы оно вмещалось в указываемом прямоугольнике.
  - РисоватьСектор(Перо, Прямоугольник, НачальныйУгол, Угол); //Рисует сектор, определяемый эллипсом, заданным структурой Rectangle и двумя радиальными линиями.
  //НачальныйУгол - Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
  //Угол - Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра НачальныйУгол и заканчивая второй стороной сектора
  - РисоватьПрямоугольник(Перо, Прямоугольник); //Рисует прямоугольник

  *** Заливка:

  - ЗаполнитьЗамкнутуюКривую(Кисть, Точки); //Заполняет внутреннюю часть замкнутой фундаментальной кривой, определяемой массивом точек
  - ЗаполнитьЭллипс(Кисть, Прямоугольник); //Заполняет внутреннюю часть эллипса, определяемого ограничивающим прямоугольником
  - ЗаполнитьСектор(Кисть, Прямоугольник, НачальныйУгол, Угол); //Заполняет внутреннюю часть сектора, определяемого эллипсом, который задан прямоугольником, и двумя радиальными линиями.
  //НачальныйУгол - Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
  //Угол - Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра НачальныйУгол и заканчивая второй стороной сектора
  - ЗаполнитьМногоугольник(Кисть, Точки); //Заполняет внутреннюю часть многоугольника, определяемого массивом точек
  - ЗаполнитьПрямоугольник(Кисть, Прямоугольник); //Заполняет внутреннюю часть прямоугольника

*** События:

  - ПриНажатииКнопкиМышки(Кнопка, X, Y);
  - ПриДвиженииМышкой(Кнопка, X, Y);
  - ПриОтжатииКнопкиМышки(Кнопка, X, Y);
  - ПриШелчкеМышкой(Кнопка, X, Y);
  - ПриДвойномШелчкеМышкой(Кнопка, X, Y);

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

Наименование Файл Версия Размер Кол. Скачив.
-
.1241528369 19,58Kb
26.02.13
851
.1241528369 19,58Kb 851 Бесплатно
Пример работы с компонентой из 1С 7.7
.1243615943 7,00Kb
26.02.13
161
.1243615943 7,00Kb 161 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Василий Демидов (Душелов) 05.05.09 17:02
Снова почитал комменты http://infostart.ru/projects/1747/?p=3#comm50
и решил написать свою компоненту...
vladimir-boy; +1 Ответить 1
2. vip (vip) 05.05.09 17:11
Давно пишу такой же активикс, да все не допишу.
Василий, развивать дальше будешь?
Если нет, буду дописывать свой, если да, попробую твой. ;))
GDI+ действительно используешь или название прихватизировал просто?

Однозначно плюс.
3. Василий Демидов (Душелов) 05.05.09 17:13
(2) Реально его использую. В понятии .NET я сделал обертку для пространства имен System.Drawning;

Развивать в целом - да. Есть еще ряд того, чего я не успел сегодня сделать :)
4. Аркадий Кучер (Abadonna) 05.05.09 17:15
за активикс-то вроде как плюс, но вопросик мучает - а на фига?
5. vip (vip) 05.05.09 17:16
(3) Гуд.
С удовольствием потестю, и, с разрешения, попробую применить.
С хотелками и ошибками куда обращаться?
6. vip (vip) 05.05.09 17:18
(4) Уж ты то в курсе, зачем он мне ;))
И первому активиксу ты меня научил.
7. Василий Демидов (Душелов) 05.05.09 17:20
(4) Ну к примеру можешь комменты почитать в (1) ссылка.
Что-то рисовать, графики какие-то.
8. Аркадий Кучер (Abadonna) 05.05.09 17:22
(6) Да я не про актив-икс. Хоть убей не могу понять ЗАЧЕМ рисовать через одно место внутри 1С
(7) Опять таки не понимаю - ЗАЧЕМ рисовать
9. Василий Демидов (Душелов) 05.05.09 17:26
(8) Видно, иногда кому-то надо :) Какое-нибудь визуально представление чего-нибудь :))))
krasavcheg; +1 Ответить 1
10. vip (vip) 05.05.09 17:28
(8) Если рисунок рисуется по данным 1С или наоборот, данные берутся из рисунка, то через то место получается как раз, когда рисуешь ВНЕ 1С.
11. vip (vip) 05.05.09 17:30
(9) Скажу, зачем это мне.
Голубая мечта - конфа для производителей изделий ПВХ.
Рынок не тронут, работы хватит до конца жизни.
vitaliy.ermolenko; +1 Ответить 3
12. Аркадий Кучер (Abadonna) 05.05.09 17:30
(11) Т.е ты хочешь сказать, что если я добавлю в Miracle рисование прямо но форме отчета - это будет зашибись? Там добавить - даже проще чем два байта остослать...
13. vip (vip) 05.05.09 17:32
(12) Будет. И было уже у тебя.
Только рисование рисованию рознь.
14. vip (vip) 05.05.09 17:35
(12) И то, что это активикс, тоже хорошо. Можно наделать примитивов на нескольких экземплярах АХ и складывать их мышей, как кубики.
15. Аркадий Кучер (Abadonna) 05.05.09 17:37
Ну лана, рисуйте;) Мне бы ваши заботы :))))))))))
16. vip (vip) 05.05.09 17:39
(15) И скорость отрисовки на уровне пикселей при использовании GDI+ должна быть высокой.
> Мне бы ваши заботы
Стареешь, блин ;))
17. Василий Демидов (Душелов) 05.05.09 22:49
На самом деле можно добавить и визуальное рисование, да оно не надо.
Как вариант - добавить шейпы, которые предварительно описаны и двигать их мышкой.
18. GSoft. (GSoft) 05.05.09 23:49
19. Василий Демидов (Душелов) 05.05.09 23:54
(18) Ага, что-то типа MS Visio получится :))
20. GSoft. (GSoft) 06.05.09 00:01
а одним только формексом обойтись низя?

(18) ну в каком то усеченном варианте да
21. Василий Демидов (Душелов) 06.05.09 00:04
(20) На сколько я знаю, 1С++ создает объект АктивХ, а формэкс пользуется ради "ПослеОткрытия".
22. GSoft. (GSoft) 06.05.09 00:12
Василь а можешь сделать компоненту которая просто таскает картинки по форме + пару полигонов, типа линии, прямоугольника и круга?
23. Василий Демидов (Душелов) 06.05.09 00:13
24. GSoft. (GSoft) 06.05.09 00:15
общая идея: справочник картинок, оттуда выбираем ее и таскаем по форме
а потом сохраняем все это или в файл конфигураций,или в подчиненные справочники(в зависимости от необходимой реализации)
25. Василий Демидов (Душелов) 06.05.09 00:17
Сохраняем итоговую картинку? Или набор шейпов?
26. GSoft. (GSoft) 06.05.09 00:21
лучше второй вариант, готовая картинка как довесок

чтобы при повторном открытии можно было редактировать дальше
27. mrden (MrDen) 06.05.09 01:39
28. Юрий Коляда (kolyada) 06.05.09 02:54
(11)
Насчет голубой мечты в ПВХ:
с графикой в 1С8 прекрасно справляется VML (граф. язык встроенный в IE и заодно в соотв. объект 1С). На одной фирме (ООО "Промаокна" в Москве, если кому интересно) я так и реализовывал расчет изделий ПВХ. Всё элементарно и безо всяких доп. ухищрений типа активикс. Довольно небольшой код позволял интерактивно рисовать (визуально результат выглядел не хуже чем в специализированных ппрограммах) и обсчитывать как прямоугольные конструкции, так и арочные, треугольные и т.п. Единственно ОЧЕНЬ сильно пришлось вспоминать математику с её синусами и косинусами.
29. Александр Венгер (venger) 06.05.09 12:59
(0) Василий, (просто не успел качнуть еще, не пробовал) а для игр динамических как, пойдет? Я ж думаю когда-нибудь сделать прохождение лабиринтов с трехмерным видом изнутри ( я про это http://infostart.ru/projects/3474/ ). Просто эта http://infostart.ru/projects/1747/ мне немного не подошла, т.к. обновлять целиком надо файл, а потом его заново отображать, или я не доразобрался с ней... Как думаешь?
30. Сhe Burashka (CheBurator) 06.05.09 13:14
Да! и чтобы еще к графическому примитиву можно было привязывать некий "описатель" 1Совский - типа "Расшифровки" - а туда уже можно запихнуть какой-хочешь 1Совский объект - хоть СЗ, хоть ТЗ, хоть описательную строку... - вот такая у мну хотелка
31. Василий Демидов (Душелов) 06.05.09 16:24
(29) Возможно. Просто закрашиваешь старое цветом фона и все.
А трехмерный вид изнутри это как? :)

(30) Это уже не к этой компоненте.
32. Roman (roman) 06.05.09 16:33
БОЛЬШОЙ +. Василий, будете в Вильнюсе, милости просим в гости - с меня пиво, сам хотел писать подобное
33. Александр Венгер (venger) 06.05.09 16:54
(31) > А трехмерный вид изнутри это как? :)

Ну типа как в 3D-бродилках (тот же Doom), только попроще, без теней и крутой графики;-) В общем, не спрашивай лучше, сам боюсь;)
34. Василий Демидов (Душелов) 06.05.09 16:59
(33) Это лучше мой 3Д склад использовать :))
35. Василий Демидов (Душелов) 06.05.09 16:59
(32) Ну как буду в Вильнюсе - напомню ;)
36. vladsol c (vladsol) 06.05.09 22:57
Рисовать действительно бывает нужно, поэтому +.
(11)(28) Я тоже сталкивался с этой проблемой в ПВХ (производство окон), тогда я пошел через использование PHP. Программно по заданным пользователям установкам генерился скрипт, выполнялся и в 1с возвращалась картинка. Жалко у меня тогда не было этой компоненты, жизнь была бы легче.
37. Александр Маляев (maljaev) 07.05.09 00:42
(36) vladsol, а ты бы поиском по сайту воспользовался. У меня уж год подобная штука лежит (правда не моя), только у Душелова она выполнена в виде ActiveX-контрола, что конечно же удобно, но до функционала Gflax не дотягивает. Конечно Дужелов и не будет дотягивать контрол до gflax, он просто скорее всего сделает тот функционал которого там нету - например векторные сплайны, анимацию, градиенты. Ну а в случае с ПВХ хватило бы и Gflax, по крайней мере с PHP бы не извращался.

Душелов, даёшь мощную векторную графику!!! :)
38. vip (vip) 07.05.09 09:17
(28)(37) Насчет рисования изделий ПВХ.
На самом деле особая графическая мощь тут не нужна.
При массовом производстве 99% изделий состоят из простых элементов - рама, створки, импосты.

Я пошел таким путем.
При использовании моего активикса рисование створки, например, выглядит примерно так: ЗакуячитьСтворкуЛевуюПоворотноОткидную(Ширина,Высота). Вся математика зашита в активиксе.

На форме при помощи FormEx динамически создается нужное число контейнеров для активикса. Каждый экземпляр это ПВХ-примитив (рама, створка и т.д.). И из них собирается изделие.
Изменение размеров/положения (опять-таки при помощи FormEx) делается мышей (или вводом размера).
На экране изделие отображается с пропорциональными размерами, что важно для понимания, как будет выглядеть готовое изделие.

Таким образом, в документе я храню только вид и координаты ПВХ-примитивов.
При открытии формы документа, картинка рисуется заново.
Чем не векторная графика? ;))

Так что использовать компоненту Василия пока погожу.
Все равно большое спасибо ему, натолкнул на некоторые мысли :))
39. Юрий Коляда (kolyada) 07.05.09 14:32
(38) в том то и дело, что считать нестандарт ПВХ (арки, трапеции и т.п.) на примитивах никак нельзя. И они точно составляют больше 1% при массовом производстве (если конечно не сидеть на заказах новостроек) - заказчик ныне пошёл привиредливый. Так что векторная графика в 1С нужна и автор пусть дальше развивает контрол.
40. vip (vip) 07.05.09 14:47
(39) Конечно, пусть развивает.
А я буду развивать свой :))

Все больше склоняюсь к мысли, что нестандарт можно посчитать и на бумажке ;))
Не стоит овчинка выделки.
41. Юрий Коляда (kolyada) 07.05.09 15:32
(40) ну смотря какого размера фирма и требования к персоналу расчитывающему изделия. На той фирме где я работал изделия расчитывали менеджеры (не конструктора) и результат расчета они должны были сказать сразу вне зависимости от сложности. Научить даже одного менеджера правильно расчитать нестандарт - утопия. А их на фирме было 50 человек в офисе + куча в регионах и на точках по всей Москве.
42. Pavels Ruhmans (elkpro) 08.05.09 10:05
Не могу заставить работать из под 1С 7.7.

Код такой

Перем Кисти_;

//***************************************************************
Процедура ПослеОткрытия()
Кисти_ = СоздатьОбъект("АктивИкс");
Кисти_.УстановитьАтрибут(Форма, "АктХ");
Кисти_.СоздатьЭУ("Душелов.GDI");
Кисти_.УстановитьФокус();

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

На этом этапе все нормально, но потом на форме пытаюсь сделать

Кисти_.НоваяКартинка(400,200);

выдает ошибку Поле агрегатного объекта не обнаружено (НоваяКартинка).
Почему так?
43. Епрст (Ёпрст) 08.05.09 10:06
(42) Кисти_.Объект.НоваяКартинка(400,200);
44. Pavels Ruhmans (elkpro) 08.05.09 10:27
45. Василий Демидов (Душелов) 08.05.09 23:55
46. Алексей . (mamanelli) 12.05.09 15:54
Уверен, что хорошая разработка. Плюс.
47. Vladimir (vladimir-boy) 29.05.09 17:16
Отличная разработка! Просто жесть!!! Автору большой плюс и признание!
Но к сожаленью так и не смог ничего нарисовать в семёрке, так как нет реального живого примера например элементарной обработки или отчётика, где реализован весь етот шедевр!!!
У меня к примеру(42) выдаёт ошибку: "Неудачная попытка создания объекта (АктивИкс)"
Напишите пожалуйста например обрабоку с кодом построения точки, линии на форме!
А вообще огромное человеческое спасибо!!!
48. Епрст (Ёпрст) 29.05.09 17:22
(47) Установите 1с++ для начала, раз ругается на объект АктивИкс...
vladimir-boy; +1 Ответить 1
49. Vladimir (vladimir-boy) 29.05.09 18:34
(48) Спасибо ЁПРСТ! Забыл ЗагрузитьВнешнююКомпоненту, но после загрузки проблема не исчезла снова новая ошибка: "Неверный идентификатор атрибута"
Ребята кто-нить может выложить пример.ert, чтоб было наглядно понятно как и что? Заранее огромное пасибо!!!
50. Василий Демидов (Душелов) 29.05.09 20:52
Добавил пример работы с компонентой из 7.7
vladimir-boy; +1 Ответить 1
51. Vladimir (vladimir-boy) 01.06.09 11:13
(50)Пример - суперсила!!! Большое пребольшое спасибо!!!
52. MadRabbit (MadRabbit) 22.06.09 11:38
Знатная штука! С разрешения автора попользуюсь немного. Вот если бы кто-нибуть подсказал как такое написать :)) с добавлением Drag&Drop... или может ссылочку какую-нибуть полезную кинул... то с меня пиво!
53. dushelov (Душелов) 22.06.09 11:52
54. MadRabbit (MadRabbit) 22.06.09 11:54
(53) Надо пользователюкартинки по форме перетаскивать, а мне - отслеживать, и при масштабировании, смене ориентации страницы и т.д. учитывать. А как пока не пойму...
55. dushelov (Душелов) 22.06.09 11:56
(54) Данная компонента исключительно для программного рисования. Никаких юзерабилити действий.

Для "перетаскиваний" есть соседняя разработка.
56. MadRabbit (MadRabbit) 22.06.09 12:19
(55) "[VectorDrawing] - Векторная графика в 1С"? Смотрел, можно было бы использовать, есть перетаскивание, можно сделать масштабирование, группировку - все замечательно, но пункт контекстного меню "О компоненте" не дает мне возможности ее использовать в своих разработках. Что, по моему, вполне естественно. По этому хотелось бы все-таки самому попробовать разобраться и написать собственную ВК. Кроме того, все-таки хочеться самому чему-нибуть научиться, а не тупо таскать с ИС чужие разработки.
Душелов; +1 Ответить 1
58. MadRabbit (MadRabbit) 22.06.09 13:34
(57) Сэнкс, а то я уже полез за покрывшимся пылью диском с Delphi. Хотя, как говорится, давно не брал я в руки шашку, так что или вспонинать Delphi или изучать .net - одно и тоже :))
59. Spout Rboy (rboy) 22.06.09 16:28
Счас ковыряюсь с Душелов.GDI на восьмерке,

запускаю вот такой фрагмент кода в цикле

Точки = Рис.СоздатьМассивТочек(4);
Рис.УстановитьТочкуВМассив(Точки, 0, Рис.СоздатьТочку(X+40, 10));
Рис.УстановитьТочкуВМассив(Точки, 1, Рис.СоздатьТочку(X+40, 40));
Рис.УстановитьТочкуВМассив(Точки, 2, Рис.СоздатьТочку(X+30, 30));
Рис.УстановитьТочкуВМассив(Точки, 3, Рис.СоздатьТочку(X+30, 20));

Рис.ЗаполнитьМногоугольник(Кисть, Точки);
Рис.РисоватьМногоугольник(ЧерноеПеро, Точки);

тут в цикле изменяется только "X". В результате появляется ругатня на функцию "ЗаполнитьМногоугольник", типо исключительная ситуация, Parameter is not valid.

Такое впечатление что функция ЗаполнитьМногоугольник может вызываться ограниченное количество раз
60. Spout Rboy (rboy) 22.06.09 16:32
причем если вызываю этот цикл в процедуре "ПриОткрытии" документа, то вс нормально, если вызываю из обработчика нажатия кнопки в форме того же документа, то на определенном номере фигуры выпрыгивает ошибка.
61. dushelov (Душелов) 22.06.09 16:41
(60) Может передаешь несуществующие координаты?

Сделай обработку с примером, где эта ошибка показывается....
62. Spout Rboy (rboy) 22.06.09 17:08
Сейчас сделаю, куда выложить?... я недавно на этом сайте.
64. Spout Rboy (rboy) 22.06.09 17:30
ну вот обработочка

http://narod.ru/disk/10148525000/%D0%92%D0%BD%D0%B5%D1%88%D0%BD%D1%8F%D1%­8F%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B01.epf.html

Нажми на кнопку "выполнить" 2 раза и получишь результат.
Кроме того если попробуешь открыть эту обработку второй раз не закрывая 1С то глюк увидишь после первого нажатия на кнопку "Выполнить"

65. dushelov (Душелов) 22.06.09 20:06
Изменено:

- СоздатьКисть(r, g, b); //создает объект типа "Кисть" заданного цвета
//r, g, b - числа

Добавлено:

- ОчиститьПамять();
66. dushelov (Душелов) 22.06.09 20:08
(64) Скачивай обновление.
В своей обработке в процедуре рисования квадратиков добавь очистку памяти

Рис = ЭлементыФормы.GDI;
Рис.ОчиститьПамять();
Рис.НоваяКартинка(700, 700);

Ну и перепиши создание кистей.
67. Spout Rboy (rboy) 23.06.09 12:31
Вроде заработало после того как поменял СоздатьКисть(r, g, b); даже Рис.ОчиститьПамять(); не использовал.
68. dushelov (Душелов) 23.06.09 12:35
(67) Если часто будете пользоваться перерисовкой, то память стоит очищать, дабы в 1С-ке не было утечки памяти.
69. Spout Rboy (rboy) 23.06.09 12:41
Кстати функция ОчиститьПамять() не работает.

{Форма.Форма1(70)}: Ошибка при вызове метода контекста (ОчиститьПамять): Произошла исключительная ситуация (Dushelov.GDI): Method not found: 'System.GCNotificationStatus System.GC.WaitForFullGCComplete()'.
Рис.ОчиститьПамять();
по причине:
Произошла исключительная ситуация (Dushelov.GDI): Method not found: 'System.GCNotificationStatus System.GC.WaitForFullGCComplete()'.
70. Spout Rboy (rboy) 23.06.09 12:45
а нельзя ли воткнуть процесс очистки памяти поместить в функцию НоваяКартинка(), а то запаришся каждому объяснять для чего она нужна.
71. dushelov (Душелов) 23.06.09 13:06
(70) При новой картинке она не нужна.
72. Spout Rboy (rboy) 23.06.09 17:22
73. dushelov (Душелов) 23.06.09 17:31
(72) У меня ее нет.
Поставь себе SP1 для фреймворка, видимо этот метод был добавлен позже.
74. Spout Rboy (rboy) 23.06.09 22:02
Вот такой фреймворк пойдет?

http://www.microsoft.com/downloads/details.aspx?FamilyID=5b2c0358-915b-4eb5-9b1d-10e506da9d0f&DisplayLang=ru

просто у тебя в ридмишке дана ссылка на фреймворк без всяких сервиспаков, я его и ставил.
Спрашиваю прежде чем качать, потму что инет у меня не очень анлим и качать все подряд не очень охота.
75. dushelov (Душелов) 25.06.09 22:15
(72) Обновил, пробуй.
Добавил еще сглаживание.
76. dushelov (Душелов) 26.06.09 11:03
Добавлены события:

- ПриНажатииКнопкиМышки(Кнопка, X, Y);
- ПриДвиженииМышкой(Кнопка, X, Y);
- ПриОтжатииКнопкиМышки(Кнопка, X, Y);
- ПриШелчкеМышкой(Кнопка, X, Y);
- ПриДвойномШелчкеМышкой(Кнопка, X, Y);
Sudareva; +1 Ответить
77. Spout Rboy (rboy) 26.06.09 14:04
Вот про эти как раз события я и хотел намекнуть. Они как раз нужны в задаче которую я решаю. Спасибо.
78. Spout Rboy (rboy) 26.06.09 14:09
Новый косяк

Рис = ЭлементыФормы.GDI;
ЦветФона=Рис.ПолучитьЦвет(255, 251, 240);
Рис.НоваяКартинка(700, 700);
Рис.Очистить(ЦветФона);

Получаем:

{Документ.XXX.Форма.ФормаДокумента(130)}: Метод объекта не обнаружен (ПолучитьЦвет)
ЦветФона=Рис.ПолучитьЦвет(255, 251, 240);
79. Spout Rboy (rboy) 26.06.09 14:16
(78) Забираю свои слова обратно ошибки нет, просто объект ActiveX надо было удалить и вставить новый.
80. Spout Rboy (rboy) 26.06.09 14:25
События
- ПриНажатииКнопкиМышки(Кнопка, X, Y);
- ПриДвиженииМышкой(Кнопка, X, Y);
- ПриОтжатииКнопкиМышки(Кнопка, X, Y);
- ПриШелчкеМышкой(Кнопка, X, Y);
- ПриДвойномШелчкеМышкой(Кнопка, X, Y);

не работают даже в твоем примере!!!

но Рис.ОчиститьПамять(); - заработала на новой длл-ке без обновлений фреймворка
81. dushelov (Душелов) 26.06.09 14:34
(80) Обнови до SP1 и события будут ловиться. Да и проверь, подписаны ли эти события у компоненты (после того, как удалил/добавил) они у тебя, скорее всего пустые, не подписанные.
82. Alex_Sun (Alex_Sun) 05.10.09 08:42
А эта компонента позволяет програмно узнать текущий цвет какой либо определенной точки рисунка?
83. MAXXL (MAXXL) 17.10.09 11:15
Подскажите, как в 7.7 использовать события ПриНажатииКнопкиМышки ?
84. dushelov (Душелов) 17.10.09 14:14
(83)

v7: Использовать 1С++ и FormEx
85. MAXXL (MAXXL) 17.10.09 17:01
(84) Про 1С++ это понятно,я имел в виду события от этой компоненты. Или они для чего предназначены?
86. dushelov (Душелов) 17.10.09 22:35
Ну вот в 1С++ подписываться на эти события и их обрабатывать.
87. Ваня (zk96) 04.12.09 15:21
Можно ли в катинку на форме скопировать картину из памяти? Обе картинки объекты типа Душелов.GDI.
88. Евгений Абдуразаков (asdfgcom) 07.02.10 17:15
Процедура КнопкаВыполнитьНажатие(Кнопка)
КрасноеПеро = Рис.СоздатьПеро(Рис.ПолучитьЦвет(255, 0, 0), 1);
Рис.РисоватьЛинию(КрасноеПеро,1, 1, 100, 100);
КонецПроцедуры


линия не выводится на форму, пока не свернешь/развернешь окно. Как устроить обновление изображения или что-то в этом роде?
89. Евгений Абдуразаков (asdfgcom) 07.02.10 18:09
Процедура КнопкаВыполнитьНажатие(Кнопка)
КрасноеПеро = Рис.СоздатьПеро(Рис.ПолучитьЦвет(255, 0, 0), 1);
Рис.РисоватьЛинию(КрасноеПеро,1, 1, 100, 100);
КонецПроцедуры

линия не выводится на форму, пока не свернешь/развернешь окно. Как устроить обновление изображения или что-то в этом роде?


Отвечаю сам себе:
Рис.Refresh();

Уважаемый Dushelov. Control на 5 баллов. То, что нужно, спасибо. Только хотелось бы более подробного описания функций. Трудновато до всего доходить методом тыка...
90. Ваня (zk96) 01.05.10 19:26
Подскажите, как загрузить картинку из памяти, IPicture.
91. Ваня (zk96) 07.05.10 15:09
92. Александр Гончаров (aegoncharov) 29.07.10 06:12
А как нарисвать точку? Специальной процедуры нет, а при рисовании линии с совпадающим концом и началом не рисуется ничего.
93. quadro3 (quadro3) 21.09.10 11:53
Под Windows 7 не фурычит.
Видимо из-за встроенного там NET 3.5 ((
При установке не находит ngen
Есть лекарство?
94. Владимир Д (dvv_mail) 28.10.10 19:21
Поддерживаю предыдущего оратора. Какие перспективы работы компоненты по Win7
95. Алексей Апанасевич (Tria) 30.12.10 15:57
А что на счет полос прокрутки? Нарисовал большой прямоугольник, он выходит за рамки элемента, но просмотреть все нет возможности.
96. Василий Демидов (Душелов) 30.12.10 22:01
(95) Основная идея - программно рисовать. Отображать можно в стандартном 1С-овском поле картинки
97. Алексей Апанасевич (Tria) 31.12.10 15:38
да вот отображать надо именно в Вашей компоненте. Задача в следующем: нарисовать таблицу (большую или нет зависит от пользователя), в некоторых ячейках нарисовать цветные квадратики, некоторые ячейки соединить дугами, и дат пользователю возможность перемещать эти квадратики. А для перемещения надо отслеживать события нажатие кнопки мыши, движение курсора и отжатие кнопки. Поэтому рисовать картинку, сохранять в файл и загружать в поле картинки не подходит.
98. Алексей Апанасевич (Tria) 10.01.11 15:42
Нашёл выход: на форме разместить панель, отключить свойство "использовать только видимую область", на ней разместить актив-икс и у него указать ширину и высоту большие, тогда полосы прокрутки будут у панели и много места для рисования! Спасибо за компоненту!
wanderer-miass; Душелов; +2 Ответить
99. KIA KIA (xKIA) 25.04.11 08:54
Alex_Sun пишет:

А эта компонента позволяет програмно узнать текущий цвет какой либо определенной точки рисунка?

Поддерживаю. Требуется сделать свой фильтр, как в фотошопе, для этого надо получать триаду цветов изображения, как это можно сделать?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа