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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

99 Comments

  1. Душелов

    Снова почитал комменты http://infostart.ru/projects/1747/?p=3#comm50

    и решил написать свою компоненту…

    Reply
  2. vip

    Давно пишу такой же активикс, да все не допишу.

    Василий, развивать дальше будешь?

    Если нет, буду дописывать свой, если да, попробую твой. ;))

    GDI+ действительно используешь или название прихватизировал просто?

    Однозначно плюс.

    Reply
  3. Душелов

    (2) Реально его использую. В понятии .NET я сделал обертку для пространства имен System.Drawning;

    Развивать в целом — да. Есть еще ряд того, чего я не успел сегодня сделать 🙂

    Reply
  4. Abadonna

    за активикс-то вроде как плюс, но вопросик мучает — а на фига?

    Reply
  5. vip

    (3) Гуд.

    С удовольствием потестю, и, с разрешения, попробую применить.

    С хотелками и ошибками куда обращаться?

    Reply
  6. vip

    (4) Уж ты то в курсе, зачем он мне ;))

    И первому активиксу ты меня научил.

    Reply
  7. Душелов

    (4) Ну к примеру можешь комменты почитать в (1) ссылка.

    Что-то рисовать, графики какие-то.

    Reply
  8. Abadonna

    (6) Да я не про актив-икс. Хоть убей не могу понять ЗАЧЕМ рисовать через одно место внутри 1С

    (7) Опять таки не понимаю — ЗАЧЕМ рисовать

    Reply
  9. Душелов

    (8) Видно, иногда кому-то надо 🙂 Какое-нибудь визуально представление чего-нибудь :))))

    Reply
  10. vip

    (8) Если рисунок рисуется по данным 1С или наоборот, данные берутся из рисунка, то через то место получается как раз, когда рисуешь ВНЕ 1С.

    Reply
  11. vip

    (9) Скажу, зачем это мне.

    Голубая мечта — конфа для производителей изделий ПВХ.

    Рынок не тронут, работы хватит до конца жизни.

    Reply
  12. Abadonna

    (11) Т.е ты хочешь сказать, что если я добавлю в Miracle рисование прямо но форме отчета — это будет зашибись? Там добавить — даже проще чем два байта остослать…

    Reply
  13. vip

    (12) Будет. И было уже у тебя.

    Только рисование рисованию рознь.

    Reply
  14. vip

    (12) И то, что это активикс, тоже хорошо. Можно наделать примитивов на нескольких экземплярах АХ и складывать их мышей, как кубики.

    Reply
  15. Abadonna

    Ну лана, рисуйте;) Мне бы ваши заботы :))))))))))

    Reply
  16. vip

    (15) И скорость отрисовки на уровне пикселей при использовании GDI+ должна быть высокой.

    > Мне бы ваши заботы

    Стареешь, блин ;))

    Reply
  17. Душелов

    На самом деле можно добавить и визуальное рисование, да оно не надо.

    Как вариант — добавить шейпы, которые предварительно описаны и двигать их мышкой.

    Reply
  18. GSoft

    (17) было бы очень полезно

    Reply
  19. Душелов

    (18) Ага, что-то типа MS Visio получится :))

    Reply
  20. GSoft

    а одним только формексом обойтись низя?

    (18) ну в каком то усеченном варианте да

    Reply
  21. Душелов

    (20) На сколько я знаю, 1С++ создает объект АктивХ, а формэкс пользуется ради «ПослеОткрытия».

    Reply
  22. GSoft

    Василь а можешь сделать компоненту которая просто таскает картинки по форме + пару полигонов, типа линии, прямоугольника и круга?

    Reply
  23. Душелов

    (22) Думаю, да.

    Reply
  24. GSoft

    общая идея: справочник картинок, оттуда выбираем ее и таскаем по форме

    а потом сохраняем все это или в файл конфигураций,или в подчиненные справочники(в зависимости от необходимой реализации)

    Reply
  25. Душелов

    Сохраняем итоговую картинку? Или набор шейпов?

    Reply
  26. GSoft

    лучше второй вариант, готовая картинка как довесок

    чтобы при повторном открытии можно было редактировать дальше

    Reply
  27. MrDen

    отличная идея!

    Reply
  28. kolyada

    (11)

    Насчет голубой мечты в ПВХ:

    с графикой в 1С8 прекрасно справляется VML (граф. язык встроенный в IE и заодно в соотв. объект 1С). На одной фирме (ООО «Промаокна» в Москве, если кому интересно) я так и реализовывал расчет изделий ПВХ. Всё элементарно и безо всяких доп. ухищрений типа активикс. Довольно небольшой код позволял интерактивно рисовать (визуально результат выглядел не хуже чем в специализированных ппрограммах) и обсчитывать как прямоугольные конструкции, так и арочные, треугольные и т.п. Единственно ОЧЕНЬ сильно пришлось вспоминать математику с её синусами и косинусами.

    Reply
  29. venger

    (0) Василий, (просто не успел качнуть еще, не пробовал) а для игр динамических как, пойдет? Я ж думаю когда-нибудь сделать прохождение лабиринтов с трехмерным видом изнутри ( я про это http://infostart.ru/projects/3474/ ). Просто эта http://infostart.ru/projects/1747/ мне немного не подошла, т.к. обновлять целиком надо файл, а потом его заново отображать, или я не доразобрался с ней… Как думаешь?

    Reply
  30. CheBurator

    Да! и чтобы еще к графическому примитиву можно было привязывать некий «описатель» 1Совский — типа «Расшифровки» — а туда уже можно запихнуть какой-хочешь 1Совский объект — хоть СЗ, хоть ТЗ, хоть описательную строку… — вот такая у мну хотелка

    Reply
  31. Душелов

    (29) Возможно. Просто закрашиваешь старое цветом фона и все.

    А трехмерный вид изнутри это как? 🙂

    (30) Это уже не к этой компоненте.

    Reply
  32. roman

    БОЛЬШОЙ +. Василий, будете в Вильнюсе, милости просим в гости — с меня пиво, сам хотел писать подобное

    Reply
  33. venger

    (31) > А трехмерный вид изнутри это как? 🙂

    Ну типа как в 3D-бродилках (тот же Doom), только попроще, без теней и крутой графики;-) В общем, не спрашивай лучше, сам боюсь;)

    Reply
  34. Душелов

    (33) Это лучше мой 3Д склад использовать :))

    Reply
  35. Душелов

    (32) Ну как буду в Вильнюсе — напомню 😉

    Reply
  36. vladsol

    Рисовать действительно бывает нужно, поэтому +.

    (11)(28) Я тоже сталкивался с этой проблемой в ПВХ (производство окон), тогда я пошел через использование PHP. Программно по заданным пользователям установкам генерился скрипт, выполнялся и в 1с возвращалась картинка. Жалко у меня тогда не было этой компоненты, жизнь была бы легче.

    Reply
  37. maljaev

    (36) vladsol, а ты бы поиском по сайту воспользовался. У меня уж год подобная штука лежит (правда не моя), только у Душелова она выполнена в виде ActiveX-контрола, что конечно же удобно, но до функционала Gflax не дотягивает. Конечно Дужелов и не будет дотягивать контрол до gflax, он просто скорее всего сделает тот функционал которого там нету — например векторные сплайны, анимацию, градиенты. Ну а в случае с ПВХ хватило бы и Gflax, по крайней мере с PHP бы не извращался.

    Душелов, даёшь мощную векторную графику!!! 🙂

    Reply
  38. vip

    (28)(37) Насчет рисования изделий ПВХ.

    На самом деле особая графическая мощь тут не нужна.

    При массовом производстве 99% изделий состоят из простых элементов — рама, створки, импосты.

    Я пошел таким путем.

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

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

    Изменение размеров/положения (опять-таки при помощи FormEx) делается мышей (или вводом размера).

    На экране изделие отображается с пропорциональными размерами, что важно для понимания, как будет выглядеть готовое изделие.

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

    При открытии формы документа, картинка рисуется заново.

    Чем не векторная графика? ;))

    Так что использовать компоненту Василия пока погожу.

    Все равно большое спасибо ему, натолкнул на некоторые мысли :))

    Reply
  39. kolyada

    (38) в том то и дело, что считать нестандарт ПВХ (арки, трапеции и т.п.) на примитивах никак нельзя. И они точно составляют больше 1% при массовом производстве (если конечно не сидеть на заказах новостроек) — заказчик ныне пошёл привиредливый. Так что векторная графика в 1С нужна и автор пусть дальше развивает контрол.

    Reply
  40. vip

    (39) Конечно, пусть развивает.

    А я буду развивать свой :))

    Все больше склоняюсь к мысли, что нестандарт можно посчитать и на бумажке ;))

    Не стоит овчинка выделки.

    Reply
  41. kolyada

    (40) ну смотря какого размера фирма и требования к персоналу расчитывающему изделия. На той фирме где я работал изделия расчитывали менеджеры (не конструктора) и результат расчета они должны были сказать сразу вне зависимости от сложности. Научить даже одного менеджера правильно расчитать нестандарт — утопия. А их на фирме было 50 человек в офисе + куча в регионах и на точках по всей Москве.

    Reply
  42. elkpro

    Не могу заставить работать из под 1С 7.7.

    Код такой

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

    //***************************************************************

    Процедура ПослеОткрытия()

    Кисти_ = СоздатьОбъект(«АктивИкс»);

    Кисти_.УстановитьАтрибут(Форма, «АктХ»);

    Кисти_.СоздатьЭУ(«Душелов.GDI»);

    Кисти_.УстановитьФокус();

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

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

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

    выдает ошибку Поле агрегатного объекта не обнаружено (НоваяКартинка).

    Почему так?

    Reply
  43. Ёпрст

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

    Reply
  44. elkpro

    Спасибо. Заработало.

    Reply
  45. Душелов
  46. alekseineputin

    Уверен, что хорошая разработка. Плюс.

    Reply
  47. vladimir-boy

    Отличная разработка! Просто жесть!!! Автору большой плюс и признание!

    Но к сожаленью так и не смог ничего нарисовать в семёрке, так как нет реального живого примера например элементарной обработки или отчётика, где реализован весь етот шедевр!!!

    У меня к примеру(42) выдаёт ошибку: «Неудачная попытка создания объекта (АктивИкс)»

    Напишите пожалуйста например обрабоку с кодом построения точки, линии на форме!

    А вообще огромное человеческое спасибо!!!

    Reply
  48. Ёпрст

    (47) Установите 1с++ для начала, раз ругается на объект АктивИкс…

    Reply
  49. vladimir-boy

    (48) Спасибо ЁПРСТ! Забыл ЗагрузитьВнешнююКомпоненту, но после загрузки проблема не исчезла снова новая ошибка: «Неверный идентификатор атрибута»

    Ребята кто-нить может выложить пример.ert, чтоб было наглядно понятно как и что? Заранее огромное пасибо!!!

    Reply
  50. Душелов

    Добавил пример работы с компонентой из 7.7

    Reply
  51. vladimir-boy

    (50)Пример — суперсила!!! Большое пребольшое спасибо!!!

    Reply
  52. MadRabbit

    Знатная штука! С разрешения автора попользуюсь немного. Вот если бы кто-нибуть подсказал как такое написать :)) с добавлением Drag&Drop… или может ссылочку какую-нибуть полезную кинул… то с меня пиво!

    Reply
  53. Душелов

    (52) А зачем Drag&Drop ?

    Reply
  54. MadRabbit

    (53) Надо пользователюкартинки по форме перетаскивать, а мне — отслеживать, и при масштабировании, смене ориентации страницы и т.д. учитывать. А как пока не пойму…

    Reply
  55. Душелов

    (54) Данная компонента исключительно для программного рисования. Никаких юзерабилити действий.

    Для «перетаскиваний» есть соседняя разработка.

    Reply
  56. MadRabbit

    (55) «[VectorDrawing] — Векторная графика в 1С»? Смотрел, можно было бы использовать, есть перетаскивание, можно сделать масштабирование, группировку — все замечательно, но пункт контекстного меню «О компоненте» не дает мне возможности ее использовать в своих разработках. Что, по моему, вполне естественно. По этому хотелось бы все-таки самому попробовать разобраться и написать собственную ВК. Кроме того, все-таки хочеться самому чему-нибуть научиться, а не тупо таскать с ИС чужие разработки.

    Reply
  57. Душелов
  58. MadRabbit

    (57) Сэнкс, а то я уже полез за покрывшимся пылью диском с Delphi. Хотя, как говорится, давно не брал я в руки шашку, так что или вспонинать Delphi или изучать .net — одно и тоже :))

    Reply
  59. rboy

    Счас ковыряюсь с Душелов.GDI на восьмерке,

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

    Точки = Рис.СоздатьМассивТочек(4);

    Рис.УстановитьТочкуВМассив(Точки, 0, Рис.СоздатьТочку(X+40, 10));

    Рис.УстановитьТочкуВМассив(Точки, 1, Рис.СоздатьТочку(X+40, 40));

    Рис.УстановитьТочкуВМассив(Точки, 2, Рис.СоздатьТочку(X+30, 30));

    Рис.УстановитьТочкуВМассив(Точки, 3, Рис.СоздатьТочку(X+30, 20));

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

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

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

    Такое впечатление что функция ЗаполнитьМногоугольник может вызываться ограниченное количество раз

    Reply
  60. rboy

    причем если вызываю этот цикл в процедуре «ПриОткрытии» документа, то вс нормально, если вызываю из обработчика нажатия кнопки в форме того же документа, то на определенном номере фигуры выпрыгивает ошибка.

    Reply
  61. Душелов

    (60) Может передаешь несуществующие координаты?

    Сделай обработку с примером, где эта ошибка показывается….

    Reply
  62. rboy

    Сейчас сделаю, куда выложить?… я недавно на этом сайте.

    Reply
  63. Душелов
  64. rboy

    ну вот обработочка

    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С то глюк увидишь после первого нажатия на кнопку «Выполнить»

    Reply
  65. Душелов

    Изменено:

    — СоздатьКисть(r, g, b); //создает объект типа «Кисть» заданного цвета

    //r, g, b — числа

    Добавлено:

    — ОчиститьПамять();

    Reply
  66. Душелов

    (64) Скачивай обновление.

    В своей обработке в процедуре рисования квадратиков добавь очистку памяти

    Рис = ЭлементыФормы.GDI;

    Рис.ОчиститьПамять();

    Рис.НоваяКартинка(700, 700);

    Ну и перепиши создание кистей.

    Reply
  67. rboy

    Вроде заработало после того как поменял СоздатьКисть(r, g, b); даже Рис.ОчиститьПамять(); не использовал.

    Reply
  68. Душелов

    (67) Если часто будете пользоваться перерисовкой, то память стоит очищать, дабы в 1С-ке не было утечки памяти.

    Reply
  69. rboy

    Кстати функция ОчиститьПамять() не работает.

    {Форма.Форма1(70)}: Ошибка при вызове метода контекста (ОчиститьПамять): Произошла исключительная ситуация (Dushelov.GDI): Method not found: ‘System.GCNotificationStatus System.GC.WaitForFullGCComplete()’.

    Рис.ОчиститьПамять();

    по причине:

    Произошла исключительная ситуация (Dushelov.GDI): Method not found: ‘System.GCNotificationStatus System.GC.WaitForFullGCComplete()’.

    Reply
  70. rboy

    а нельзя ли воткнуть процесс очистки памяти поместить в функцию НоваяКартинка(), а то запаришся каждому объяснять для чего она нужна.

    Reply
  71. Душелов

    (70) При новой картинке она не нужна.

    Reply
  72. rboy

    Не смотрел ошибку (69) ?

    Reply
  73. Душелов

    (72) У меня ее нет.

    Поставь себе SP1 для фреймворка, видимо этот метод был добавлен позже.

    Reply
  74. rboy

    Вот такой фреймворк пойдет?

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

    просто у тебя в ридмишке дана ссылка на фреймворк без всяких сервиспаков, я его и ставил.

    Спрашиваю прежде чем качать, потму что инет у меня не очень анлим и качать все подряд не очень охота.

    Reply
  75. Душелов

    (72) Обновил, пробуй.

    Добавил еще сглаживание.

    Reply
  76. Душелов

    Добавлены события:

    — ПриНажатииКнопкиМышки(Кнопка, X, Y);

    — ПриДвиженииМышкой(Кнопка, X, Y);

    — ПриОтжатииКнопкиМышки(Кнопка, X, Y);

    — ПриШелчкеМышкой(Кнопка, X, Y);

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

    Reply
  77. rboy

    Вот про эти как раз события я и хотел намекнуть. Они как раз нужны в задаче которую я решаю. Спасибо.

    Reply
  78. rboy

    Новый косяк

    Рис = ЭлементыФормы.GDI;

    ЦветФона=Рис.ПолучитьЦвет(255, 251, 240);

    Рис.НоваяКартинка(700, 700);

    Рис.Очистить(ЦветФона);

    Получаем:

    {Документ.XXX.Форма.ФормаДокумента(130)}: Метод объекта не обнаружен (ПолучитьЦвет)

    ЦветФона=Рис.ПолучитьЦвет(255, 251, 240);

    Reply
  79. rboy

    (78) Забираю свои слова обратно ошибки нет, просто объект ActiveX надо было удалить и вставить новый.

    Reply
  80. rboy

    События

    — ПриНажатииКнопкиМышки(Кнопка, X, Y);

    — ПриДвиженииМышкой(Кнопка, X, Y);

    — ПриОтжатииКнопкиМышки(Кнопка, X, Y);

    — ПриШелчкеМышкой(Кнопка, X, Y);

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

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

    но Рис.ОчиститьПамять(); — заработала на новой длл-ке без обновлений фреймворка

    Reply
  81. Душелов

    (80) Обнови до SP1 и события будут ловиться. Да и проверь, подписаны ли эти события у компоненты (после того, как удалил/добавил) они у тебя, скорее всего пустые, не подписанные.

    Reply
  82. Alex_Sun

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

    Reply
  83. MAXXL

    Подскажите, как в 7.7 использовать события ПриНажатииКнопкиМышки ?

    Reply
  84. Душелов

    (83)

    v7: Использовать 1С++ и FormEx
    Reply
  85. MAXXL

    (84) Про 1С++ это понятно,я имел в виду события от этой компоненты. Или они для чего предназначены?

    Reply
  86. Душелов

    Ну вот в 1С++ подписываться на эти события и их обрабатывать.

    Reply
  87. zk96

    Можно ли в катинку на форме скопировать картину из памяти? Обе картинки объекты типа Душелов.GDI.

    Reply
  88. asdfgcom

    Процедура КнопкаВыполнитьНажатие(Кнопка)

    КрасноеПеро = Рис.СоздатьПеро(Рис.ПолучитьЦвет(255, 0, 0), 1);

    Рис.РисоватьЛинию(КрасноеПеро,1, 1, 100, 100);

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

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

    Reply
  89. asdfgcom
    Процедура КнопкаВыполнитьНажатие(Кнопка)

    КрасноеПеро = Рис.СоздатьПеро(Рис.ПолучитьЦвет(255, 0, 0), 1);

    Рис.РисоватьЛинию(КрасноеПеро,1, 1, 100, 100);

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

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

    Отвечаю сам себе:

    Рис.Refresh();

    Уважаемый Dushelov. Control на 5 баллов. То, что нужно, спасибо. Только хотелось бы более подробного описания функций. Трудновато до всего доходить методом тыка…

    Reply
  90. zk96

    Подскажите, как загрузить картинку из памяти, IPicture.

    Reply
  91. zk96

    Эта ветка жива?

    Reply
  92. aegoncharov

    А как нарисвать точку? Специальной процедуры нет, а при рисовании линии с совпадающим концом и началом не рисуется ничего.

    Reply
  93. quadro3

    Под Windows 7 не фурычит.

    Видимо из-за встроенного там NET 3.5 ((

    При установке не находит ngen

    Есть лекарство?

    Reply
  94. dvv_mail

    Поддерживаю предыдущего оратора. Какие перспективы работы компоненты по Win7

    Reply
  95. Tria

    А что на счет полос прокрутки? Нарисовал большой прямоугольник, он выходит за рамки элемента, но просмотреть все нет возможности.

    Reply
  96. Душелов

    (95) Основная идея — программно рисовать. Отображать можно в стандартном 1С-овском поле картинки

    Reply
  97. Tria

    да вот отображать надо именно в Вашей компоненте. Задача в следующем: нарисовать таблицу (большую или нет зависит от пользователя), в некоторых ячейках нарисовать цветные квадратики, некоторые ячейки соединить дугами, и дат пользователю возможность перемещать эти квадратики. А для перемещения надо отслеживать события нажатие кнопки мыши, движение курсора и отжатие кнопки. Поэтому рисовать картинку, сохранять в файл и загружать в поле картинки не подходит.

    Reply
  98. Tria

    Нашёл выход: на форме разместить панель, отключить свойство «использовать только видимую область», на ней разместить актив-икс и у него указать ширину и высоту большие, тогда полосы прокрутки будут у панели и много места для рисования! Спасибо за компоненту!

    Reply
  99. GSA3D

    (3) Пространство имен System.Drawning; это тут?

    А как заставить их работать в 1С?

    Reply

Leave a Comment

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