МФК (многофункциональная компонента) является продолжением компоненты NativeDraw. Решил переименовать, так как название не отражала сути.
Возможности и характеристики
- Данная внешняя компонента сделана по технологии NativeAPI, можно подключать прямо из макета и лишних регистраций.
- Отрисовка происходит в памяти, результат получаем в виде двоичных данных, которые можно преобразовать в картинку и встроить куда угодно: на форму или даже на кнопку.
- Возможность рисования с учётом полупрозрачности.
- Работа с изображениями и буфером обмена.
- Возможность задания собственного таймера отрисовки. Будет приходить внешнее событие
- Работа с клавиатурой, мышкой.
- Доступны открытые исходники, сама отрисовка сделана через библиотеку GDI+, всё структурировано, и можно легко добавлять свои методы.
- Visual Studio 2022 / C++
Описание методов
[Число ФорматВыводимойКартинки]
0 - BMP
1 - PNG
2 - GIF
3 - JPG
4 - TIFF
5 - ICO
[Строка БуферОбмена]
БуферОбмена
[Строка Цвет]
Красный
Оранжевый
Жёлтый/Желтый
Зелёный/Зеленый
Синий
Фиолетовый
Серый
Белый
Чёрный
[Строка Координаты]
Последовательность из |%04X:%04X|,
где %04X - 4 знаковое HEX число. То есть:
|0001:0002||0064:0064||0100:0101| это
1. X = 1 / Y = 2
2. X = 100 / Y = 100
3. X = 256 / Y = 257
[Число Выравнивание]
0 - Лево / Верх
1 - Центр
2 - Право / Низ
[Строка Шрифт]
Arial
Tahoma
Times New Roman
и др.
[Число СтильШрифта]
0 - Нет
1 - Жирный
2 - Курсив
3 - Жирный + Курсив
4 - Подчёркнутый
8 - Зачёркнутый
[Строка ДействиеКлавиши]
НажатиеКлавиши
ПовторКлавиши
ОтпусканиеКлавиши
[Строка ДействиеМыши]
ДвижениеМыши
НажатиеЛевойКнопкиМыши
ОтпусканиеЛевойКнопкиМыши
ДвойнойКликЛевойКнопкиМыши
НажатиеПравойКнопкиМыши
ОтпусканиеПравойКнопкиМыши
ДвойнойКликПравойКнопкиМыши
НажатиеСреднейКнопкиМыши
ОтпусканиеСреднейКнопкиМыши
ДвойнойКликСреднейКнопкиМыши
НажатиеXКнопкиМыши
ОтпусканиеXКнопкиМыши
ДвойнойКликXКнопкиМыши
ДвижениеКолесаМыши
[Число РежимПерехватаВвода]
0 - Заблокировано, Нет события
1 - Заблокировано, Событие
2 - Не заблокировано, Событие
[Число СовместноНажатыеСМышьюКнопки]
1 - Левая кнопка мыши
2 - Правая кнопка мыши
4 - SHIFT
8 - CTRL
16 - Средняя кнопка мыши
32 - Кнопка мыши X1
64 - Кнопка мыши X2
//Холст (Canvas)
[Строка Холст]
Холст_Создать(Число Ширина, Число Высота, Число ФорматВыводимойКартинки);
[ДвоичныеДанные Картинка]
Холст_ДвоичныеДанные(Строка Холст);
[ДвоичныеДанные Картинка]
Холст_УчастокДвоичныеДанные(Строка Холст, Число X, Число Y, Число W, Число H);
[Булево Результат]
Холст_Удалить(Строка Холст);
//Изображение (Image)
[Строка Изображение]
Изображение_Создать(Строка Холст_Изображение_БуферОбмена_ПутьКФайлу);
[Строка Изображение]
Изображение_ИзДвоичныхДанных(ДвоичныеДанные Картинка);
[Булево Результат]
Изображение_ИзменитьРазмер(Строка Изображение, Число Ширина, Число Высота);
[Булево Результат]
Изображение_Повернуть(Строка Изображение, Число Угол, Булево ИзменятьРазрешение);
[Булево Результат]
Изображение_Отразить(Строка Изображение, Булево X, Булево Y);
[Булево Результат]
Изображение_Обрезать(Строка Изображение, Число X, Число Y, Число W, Число H);
[Булево Результат]
Изображение_ВБуферОбмена(Строка Изображение);
[Число Ширина]
Изображение_Ширина(Строка Изображение);
[Число Высота]
Изображение_Высота(Строка Изображение);
[Булево Результат]
Изображение_Размер(Строка Изображение, Число Ширина, Число Высота);
[ДвоичныеДанные Картинка]
Изображение_ДвоичныеДанные(Строка Изображение, Число ФорматВыводимойКартинки);
[ДвоичныеДанные Картинка]
Изображение_УчастокДвоичныеДанные(Строка Изображение, Число ФорматВыводимойКартинки, Число X, Число Y, Число W, Число H);
[Булево Результат]
Изображение_Удалить(Строка Изображение);
//Рисование (Draw)
[Строка Цвет]
Рисование_СоздатьЦвет(Число A, Число R, Число G, Число B);
[Строка Координаты]
Рисование_ДобавитьТочки(Строка Координаты, Число X, Число Y);
[Процедура]
Рисование_Точка(Строка Холст, Число X, Число Y, Строка Цвет);
[Процедура]
Рисование_Линия(Строка Холст, Число X1, Число Y1, Число X2, Число Y2, Число Толщина, Строка Цвет);
[Процедура]
Рисование_Эллипс(Строка Холст, Число X, Число Y, Число W, Число H, Число Толщина, Строка Цвет);
[Процедура]
Рисование_ЗаполненныйЭллипс(Строка Холст, Число X, Число Y, Число W, Число H, Строка Цвет);
[Процедура]
Рисование_Прямоугольник(Строка Холст, Число X, Число Y, Число W, Число H, Число Толщина, Строка Цвет);
[Процедура]
Рисование_ЗаполненныйПрямоугольник(Строка Холст, Число X, Число Y, Число W, Число H, Строка Цвет);
[Процедура]
Рисование_Треугольник(Строка Холст, Число X1, Число Y1, Число X2, Число Y2, Число X3, Число Y3, Число Толщина, Строка Цвет);
[Процедура]
Рисование_ЗаполненныйТреугольник(Строка Холст, Число X1, Число Y1, Число X2, Число Y2, Число X3, Число Y3, Строка Цвет);
[Процедура]
Рисование_Многоугольник(Строка Холст, Строка Координаты, Число Толщина, Строка Цвет);
[Процедура]
Рисование_ЗаполненныйМногоугольник(Строка Холст, Строка Координаты, Строка Цвет);
[Процедура]
Рисование_Текст(Строка Холст, Строка Текст, Число X, Число Y, Число W, Число H, Число ВертикальноеВыравнивание, Число ГоризонтальноеВыравнивание, Строка Шрифт, Число РазмерШрифта, Число СтильШрифта, Строка Цвет);
[Процедура]
Рисование_Изображение(Строка Холст, Строка Изображение, Число X, Число Y, Число W, Число H, Число Угол, Булево Отразить_X, Булево Отразить_Y);
//Таймер (Timer)
[Строка Таймер]
Таймер_Запустить(Число Период);
[Булево Результат]
Таймер_Остановить(Строка Таймер);
//Ввод (Input)
[Строка Ввод]
Ввод_УстановитьПерехват();
[Булево Результат]
Ввод_УбратьПерехват(Строка Ввод);
[Булево Результат]
Ввод_ЗадатьКлавишу(Строка Ввод, Число VK_KEY, Число РежимПерехватаВвода);
[Булево Результат]
Ввод_УбратьКлавишу(Строка Ввод, Число VK_KEY);
[Булево Результат]
Ввод_ЗадатьДействиеМыши(Строка Ввод, Строка ДействиеМыши, Число РежимПерехватаВвода);
[Булево Результат]
Ввод_УбратьДействиеМыши(Строка Ввод, Строка ДействиеМыши);
[Булево Результат]
Ввод_РазобратьСобытиеКлавиши(Строка ДанныеСобытия, Строка Ввод, Число КодКлавиши);
[Булево Результат]
Ввод_РазобратьСобытие(Строка ДанныеСобытия, Строка Ввод, Число X, Число Y, Число КодМыши, Число ДельтаПрокрутки);
[Булево Результат]
Ввод_РазобратьКнопкиМыши(Число КодМыши, Булево CTRL, Булево SHIFT, Булево ЛКМ, Булево СКМ, Булево ПКМ, Булево XКМ1, Булево XКМ2);
[Булево Результат]
Ввод_НажатаЛиКлавиша(Число VK_KEY);
[Булево Результат]
Ввод_ПозицияМыши(Число X, Число Y);
//Тест (Test)
[Булево Результат]
Тест_ВнешнееСобытие(Строка Источник, Строка Событие, Строка Данные);
// Внешние события
Источник => "МФК"
[Таймер]
Cобытие => "СистемныйТаймер"
Данные => Строка Таймер
[Клавиатура]
Cобытие => Строка ДействиеКлавиши
Данные => [Строка Ввод|0|0|Число КодКлавиши|0]
[Мышь]
Cобытие => Строка ДействиеМыши
Данные => [Строка Ввод|Число X|Число Y|Число СовместноНажатыеСМышьюКнопки|Число ДельтаПрокрутки]
Примеры
Танковый бой!
Игровой движок боя на танках в 1С!
- Хороший структурированный код
- Простенький ИИ
- Механизм столкновений
- Эффекты
- Минимальная версия платформы 8.3.20, обычные формы, конфигурация любая
- Используемые возможности
- Рисование примитивов, изображений, текста.
- Поворот изображений
- Работа с таймером
- Работа с клавиатурой без перехвата
Ввод
Тест компоненты для работы с функциями перехвата ввода
- Хороший структурированный код
- Перехват клавиатуры
- Перехват мыши
- Реализация метода для выделения курсором мыши, пока костыльный вариант
- Обычные формы
Изображения
Тест компоненты для работы с функциями обработки изображений
- Хороший структурированный код
- Обычные формы
- Управляемые формы
Примитивы
Тест компоненты для работы с функциями рисования примитивов
- Хороший структурированный код
- Обычные формы
- Управляемые формы
EAN-13
Отрисовка штрих-кода EAN13. Важно знать, сама компонента не генерирует изображение штрих-кода. Всё сделано средствами 1С, от компоненты было лишь рисование линий и текста
- Обычные формы
Внимание
В файлах-примерах внешняя компонента уже вшита, но не всегда последняя.
Последнюю версию можно скачать отдельным файлом или скомпилировать исходники (они уже заранее скомпилированы).
В файлах-примерах внешняя компонента подгружается из макета. Поставляется в архиве и автоматически выбирает версию x86 и x64 в зависимости от платформы. В тонком клиенте при загрузке из макета сначала нужно компоненту установить соответствующим методом.
История версий
- 1.0.0 - Внутренняя версия. NativeDraw переименована в МФК.
- 1.1.0 - Внутренняя версия. Переделана под многократный вызов. Раньше возможно было вызывать компоненту один раз, двойное использование могло вызывать вылет 1С. Исправлены ошибки.
- 1.2.0 - Внутренняя версия. Вырезаны функции отлова событий окон, так как при обновлении платформы метод больше не работает. Переделаны функции перехвата ввода.
- 1.3.0 - Публичная версия. Добавлены ещё дополнительные функции ввода.
История версий NativeDraw
- 1.0 - Первая публичная версия
- 1.1 - Адаптировано для новых платформ
- 2.0 - Добавлена работа с изображениями, таймеры теперь не часть региона рисования, фиксы, переименование ф-ий
- 2.1 - Фиксы, добавлена работа с буфером обмена (Изображения)
- 2.2 - Добавлена ф-ия Изображение_ИзменитьРазмер(), в DLL-файле теперь прописана версия
- 2.3 - Переделана работа с хуками, добавлена поддержка мыши, добавлены некоторые функции получения окон (для вычисления координат для мыши), переименованы события
- 2.4 - Несколько проверок в коде, тестовая функция для внешнего события
- 2.5 - Переделан немного вывод картинки, добавлено несколько форматов выводимой картинки, добавлены 2 функции для получения двоичных данных сразу с изображений
- 2.5.1 - Исправления
- 2.6 - Переделана архитектура компоненты в части работы с хуками. Хуки теперь не часть ввода. Добавлены функции и события для отлова событий окон. (Пример: Ввод, Хуки, Окна)
- 2.6.1 - Исправлены ошибки в ф-иях буфера обмена
- 2.6.2 - Добавлена отрисовка многоугольников, перекомпиляция для работы с Windows 7
- 2.6.7 - Исправления
- 2.7.0 - Добавлена ф-ия загрузки изображения в компоненту из двоичных данных Изображение_ИзДвоичныхДанных() без предварительной записи картинки в ФС
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 10.3, релизы 10.3.88.3
- Управление торговлей, редакция 11, релизы 11.5.19.60