Zireael |
Отправлено: 08 Декабря, 2019 - 03:16:57
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
https://drive.google.com/open?id...u6lmS4cXIdDYzaFJ
В архиве длл и примеры использования. Саму длл закинуть в папку с кибор.
Длл позволяет рисовать на экране некоторые фигуры и текст.
Все объекты выводятся поверх всех окон. Отображаются в порядке их первого вызова, т. е. если сначала вывели текст, а поверх него нарисовали прямоугольник, то текста не будет видно, потому что текст будет закрашен.
Функции достаточно вызвать 1 раз, они будут работать до их отключения. Можно вызывать их повторно, если требуется изменить какие-то параметры.
Остановка скрипта кибор не приведёт в отключению вывода, убрать с экрана нарисованные объекты можно:
1. Вызвать функцию disable_item(), потом можно включить отключенные объекты.
2. Вызвать функцию end_paint(), все объекты уничтожаются.
3. Нажать Ctrl+Alt+Z, тоже самое что вызов end_paint().
4. Закрыть кибор.
Функции:
begin_paint - начать рисовать
end_paint - закончить рисовать
rectangle - нарисовать на экране прямоугольник
circle - нарисовать окружность
ellipse - нарисовать эллипс
line - нарисовать линию
textout - вывести текст
image - вывести картинку из bmp файла
enable_item - включить отображение объекта
disable_item - отключить отображение объекта
Параметры функций:
CODE:begin_paint(); // вызывается без параметров
end_paint(); // вызывается без параметров
CODE:rectangle(0, 100, 10, 250, 100, 0, 5, 255, 16633191, 0, 0); // прямоугольник
1 - порядковый номер от 0 до 999
2-5 - координаты, левый верхний угол и правый нижний
6 - тип линии контура: 0 - сплошная, 1 - тире, 2 - точки, 3 - чередующиеся тире и точки, 4 - чередующиеся тире и две точки, 5 - невидимый
7 - толщина контура
8 - цвет контура
9 - цвет фона, если -1, то фон будет прозрачным
10 - 11 - ширина и высота радиусов углов
CODE:circle(0, 100, 100, 40, 0, 5, 255, 16633191); // окружность
1 - порядковый номер от 0 до 999
2 - центр окружности по X
3 - центр окружности по Y
4 - радиус окружности
5 - тип линии контура (см. описание rectangle)
6 - толщина контура
7 - цвет контура
8 - цвет фона, если -1, то фон будет прозрачным
CODE:ellipse(0, 100, 100, 180, 160, 0, 4, 255, 16633191); // эллипс
1 - порядковый номер от 0 до 999
2-5 - координаты, левый верхний угол и правый нижний
6 - тип линии контура
7 - толщина контура
8 - цвет контура
9 - цвет фона, если -1, то фон будет прозрачным
CODE:line(0, 100, 20, 300, 20, 0, 4, 255); // линия
1 - порядковый номер от 0 до 999
2-5 - координаты, левый верхний угол и правый нижний
6 - тип линии контура
7 - толщина линии
8 - цвет линии
CODE:Textout(3, 100, 350, "Текст Text", 65280, 255, "Arial", -24, 0,0,0,0,1,0,0); // текст
1 - порядковый номер от 0 до 999
2 - координата X
3 - координата Y
4 - текст
5 - цвет текста
6 - цвет фона, если -1, то фон прозрачный
7 - имя шрифта
8 - размер шрифта
9 - расстояние между символами
10 - угол наклона текста
11 - хз за что отвечает, см. описание CreateFontA winapi
12 - толщина символов, от 0 до 900
13 - курсив, 0|1
14 - подчёркнутый, 0|1
15 - зачёркнутый, 0|1
CODE:image(0, 200, 50, 200, "C:\123.bmp", -1); // изображение
1 - порядковый номер от 0 до 999
2 - координата X
3 - координата Y
4 - масштаб в процентах
5 - путь к изображению в формате bmp, функция вернёт -1 если изображение не найдено
6 - цвет, который считается прозрачным. Если -1, то выводит картинку как есть.
CODE:disable_item("rectangle", 2); // отключение отображения объекта
1 - какой объект не требуется отображать: "rectangle", "circle", "ellipse", "line", "textout", "image".
2 - порядковый номер объекта. Если -1, то отключит отображение всех объектов указанного типа.
CODE:enable_item("rectangle", 2); // включение отображения объекта
1 - какой объект требуется отобразить, если ранее он был отключен: "rectangle", "circle", "ellipse", "line", "textout", "image".
2 - порядковый номер объекта. Если -1, то включит отображение всех, ранее отключенных, объектов указанного типа.
Если будут баги или надо что-то изменить/добавить, пишите может доделаю. |
|
|
Zireael |
Отправлено: 23 Января, 2020 - 15:18:11
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
https://drive.google.com/open?id..._dS7Ii7iHbOKg3bO
Исправил передачу параметров с виде string.
Теперь все функции возвращают INT, а не VOID.
CODE:external(INT, "begin_paint", "begin_paint", pathfolder()+"Draw.dll");
external(INT, "Textout", "textout", pathfolder()+"Draw.dll");
string s="Tahoma";
begin_paint();
Textout(0, 50, 0, "Остановить скрипт Ctrl+Shift+Z", 16000000, 65280, "Arial", -28, 0,0,0,0,0,0,0);
Textout(1, 50, 40, "Отключить вывод текста Ctrl+Alt+Z", 255, 65280, "Arial", -28, 0,0,0,0,0,0,0);
int x=0;
loop()
{
Textout(2, 100, 170, s+" "+format(x), 255, 65279, s, -24, 0,0,0,0,0,0,0);
x++;
sleep(50);
} |
|
|
Kutuz_off |
Отправлено: 05 Февраля, 2020 - 19:45:25
|
Наблюдатель
Покинул форум
Сообщений всего: 47
Дата рег-ции: Окт. 2016
Репутация: 0
|
Теперь натолкнулся на следующую проблему: не обрабатываются вводные переменные типа double.
пример:
rectangle(254, S_X0+GSf_cbTX0+12*s_d, S_Y0+GSf_cbTY0+15*s_d, S_X0+GSf_cbTX0 +120*s_d, S_Y0+GSf_cbTY0 +40*s_d, 0, 1, 772211, -1, 0, 0);
- функция ничего не выводит, пока не убрать *s_d. Файл поменял, VOID сменил на INT. - не помогло. (s_d типа double)(Отредактировано автором: 05 Февраля, 2020 - 20:00:28) |
|
|
Zireael |
Отправлено: 05 Февраля, 2020 - 20:19:24
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: s_d типа double
Функции принимают int.
CODE:int S_X0 = 10;
int GSf_cbTX0 = 10;
double s_d = 5.2;
messagebox(S_X0+GSf_cbTX0+12*s_d);
Нужно так:
CODE:int S_X0 = 10;
int GSf_cbTX0 = 10;
double s_d = 5.2;
int result=S_X0+GSf_cbTX0+12*s_d; // присвоить результат переменной int
messagebox(result); // потом передавать в функцию |
|
|
Kutuz_off |
Отправлено: 06 Февраля, 2020 - 11:10:52
|
Наблюдатель
Покинул форум
Сообщений всего: 47
Дата рег-ции: Окт. 2016
Репутация: 0
|
Кажется, не хватает расширить буфер под цвет. Не съедает самые яркие тона.
Не работает:
rectangle(248, _LO_X0, _LO_Y0, _LO_X1, _LO_Y1, 0, 1, 15790320, -1, 0, 0); // показать обл поиска
(цвет брал пипеткой кибора)
Работает:
rectangle(248, _LO_X0, _LO_Y0, _LO_X1, _LO_Y1, 0, 1, 14790320, -1, 0, 0); // показать обл поиска
...
Хотя нет... - остальные работают. Цвет невидимости что ли?)
(это серый цвет, взят с краешка окна кибора)(Отредактировано автором: 06 Февраля, 2020 - 11:19:57) |
|
|
Zireael |
Отправлено: 06 Февраля, 2020 - 11:24:54
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 15790320
Это системный цвет фона диалога при стандартной теме винды. rgb(240, 240,240).
Цитата: COLOR_3DFACE - Face color for three-dimensional display elements and for dialog box backgrounds.
Рисование происходит на диалоге, который поверх всех окон. Да, этот цвет прозрачный. |
|
|
Denci |
Отправлено: 08 Июня, 2021 - 13:02:24
|
Прохожий
Покинул форум
Сообщений всего: 15
Дата рег-ции: Март 2015
Репутация: 0
|
Помогите, пожалуйста. Что я делаю не так? Требуется следующее: нужно выделить мышкой по диагонали с верхнего левого угла область с рисованием прямоугольника (область нужна для определения в ней чего-либо). Появились две проблемы. Первая - при работе скрипта в самом Киборе, начинаются какие-то лаги (черный экран несколько секунд, нехватка ОЗУ и т.п.). Вторая - при запуске exe-файла данного скрипта, программа вылетает, хотя draw.dll в папке есть (там где лежит exe-файл). Или как можно решить данную задачу как-то по-другому (штатными средствами Кибор, или без применения данной библиотеки)?
CODE:external(VOID, "begin_paint", "begin_paint", pathfolder()+"Draw.dll");
external(VOID, "end_paint", "end_paint", pathfolder()+"Draw.dll");
external(VOID, "rectangle", "rectangle", pathfolder()+"Draw.dll");
int x,y,x1=0,y1=0,x2=0,y2=0,flag=0;
povtor:
if (getkeystate(LBUTTON)==1){//если нажата ЛКМ
getmouse(x, y);//получить текущие координаты мыши
if (flag==0){x1=x;y1=y;flag=1;}//получить начальные координаты прямоугольника
else{x2=x;y2=y;}//конечные координаты прямоугольника (изменяются при перемещении мыши)
begin_paint(); //начать отрисовку прямоугольника
rectangle(0, x1, y1, x2, y2, 0, 3, 255, -1, 0, 0);
pause(50);}
else {flag=0;end_paint();} //завершить отрисовку
goto povtor;
//далее нужно записать координаты в текстовый файл,
//чтобы можно при следующем запуске программы их считать |
|
|
|