Каталог решений - МФК: Многофункциональная компонента 1.3.0

МФК: Многофункциональная компонента 1.3.0

МФК: Многофункциональная компонента 1.3.0

В наличии

Работа с изображениями, таймером, буфером обмена, перехватом ввода с клавиатуры и мыши в 1С!

Описание

МФК (многофункциональная компонента) является продолжением компоненты NativeDraw. Решил переименовать, так как название не отражала сути. 

Возможности и характеристики

  1. Данная внешняя компонента сделана по технологии NativeAPI, можно подключать прямо из макета и лишних регистраций.
  2. Отрисовка происходит в памяти, результат получаем в виде двоичных данных, которые можно преобразовать в картинку и встроить куда угодно: на форму или даже на кнопку.
  3. Возможность рисования с учётом полупрозрачности.
  4. Работа с изображениями и буфером обмена.
  5. Возможность задания собственного таймера отрисовки. Будет приходить внешнее событие
  6. Работа с клавиатурой, мышкой.
  7. Доступны открытые исходники, сама отрисовка сделана через библиотеку GDI+, всё структурировано, и можно легко добавлять свои методы.
  8. 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 — Добавлена ф-ия загрузки изображения в компоненту из двоичных данных  Изображение_ИзДвоичныхДанных() без предварительной записи картинки в ФС