Кибор » Кибор - Интегрированная среда разработки ботов » Тестирование Кибор » Новый Визуальный редактор

Страниц (18): В начало « ... 5 6 7 8 [9] 10 11 12 13 ... » В конец
 

81. Kibor - 25 Апреля, 2021 - 11:05:38 - перейти к сообщению
Обновил архив.
В нем 4 демонстрационных блока.

Визуальный редактор генерирует полностью исполняемый код.
Логика (связи) пока не рассчитываются.
Так же нет циклов, глобальных пользовательских переменных и прочего.

Тест на генерирование кода.
Должны корректно работать все блоки в шаблонах.

Код строится по такой первоочередности:

1 - #define в блоке [GLOBAL_SINGLE_CODE]
2 - #include в блоке [GLOBAL_SINGLE_CODE]
3 - Глобальные переменные, объявленные в блоке [GLOBAL_VAR]
4 - external в блоке [GLOBAL_SINGLE_CODE]
5 - Глобальный код в блоке [GLOBAL_SINGLE_CODE]
6 - Глобальный код в блоке [GLOBAL_REPEAT_CODE]
7 - Вызов функций (пока без логической связи)
8 - Тело вызываемых функций (если прописано в блоке [FUNCTION_BODY])

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

Не должно быть повторов переменных и кода, который повторяться не должен.
На данный момент не должно быть одноименных переменных в разных блоках.

В блоке FindImage есть #include. Его надо закомментировать после получения кода, так как такого файла нет и будет ошибка. Это для теста.

Получаемый код (Отобразить)


Используемые шаблоны:
FindHeapcolor (Отобразить)


FindImage (Отобразить)


MessageBoxA (Отобразить)


OpenProcess (Отобразить)






Есть какие то предложения? Или задачи, которые нельзя реализовать данным методом?
82. Kibor - 25 Апреля, 2021 - 14:52:12 - перейти к сообщению
Пример блока распознавания текста, который позволяет выбирать и использовать любую на выбор базу, отключая не нужные и подключая используемую.

Выбор символов NUM | RU | EN | MARK осуществляется галками (так же как и другие побитовые операции).

CODE:
[INTERFACE]
DIALOG, "Диалог", 469, 140;
STATIC, "База", 8, 8, 36, 20;
EDIT, 52, 8, 292, 20, string base;
BUTTON_FILE, "Выбрать файл", 356, 8, 100, 20, base;
CHECK, "Рус", 8, 36, 40, 20, int G1;
CHECK, "En", 52, 36, 36, 20, int G2;
CHECK, "Цифры", 92, 36, 56, 20, int G3;
CHECK, "Знаки", 152, 36, 52, 20, int G4;
STATIC, "Текст будет в", 8, 64, 76, 20;
EDIT, 92, 64, 112, 20, string T;
BUTTON_OK, "Принять", 248, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 356, 88, 100, 20;
[END]

[ASSOC_NUMBER]
base
[END]

[ASSOC_VAR]
base="C:\basetext.sib";
G1 = 1;
G2 = 0;
G3 = 0;
G4 = 0;
text = #Text;
T = Text;
[END]

[GLOBAL_VAR]
string Text;
[END]

[GLOBAL_REPEAT_CODE]
loadsymbolbase (~base~);
[END]

[FUNCTION_BODY]
function (string base, string #text, int g1, int g2, int g3, int g4)
{
disablesymbolbase(ALL);
enablesymbolbase(base);
int G=0;
if (g1)G=G+RU;
if (g2)G=G+EN;
if (g3)G=G+NUM;
if (g4)G=G+MARK;
readtext (G, #text, 8, 1, -1, -1, -1, -1, -1, 0, -1, 73, 78, 77, 81, -1);
}
[END]

[FUNCTION_CALL]
(base, text, G1, G2, G3, G4)
[END]


Генерируемый код, который использует две разные базы и выводит MessageBoxA с распознанным текстом.
CODE:
#define NULL 0

string Text;

external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");

loadsymbolbase("C:\basetext.sib");
loadsymbolbase("C:\basetext2.sib");

ReadText("C:\basetext.sib", #Text, 0, 0, 1, 0);
MessageBoxA(NULL, Text, "Заголовок", NULL);
ReadText("C:\basetext2.sib", #Text, 1, 0, 0, 0);

function ReadText(string base, string #text, int g1, int g2, int g3, int g4)
{
disablesymbolbase(ALL);
enablesymbolbase(base);
int G=0;
if (g1)G=G+RU;
if (g2)G=G+EN;
if (g3)G=G+NUM;
if (g4)G=G+MARK;
readtext (G, #text, 8, 1, -1, -1, -1, -1, -1, 0, -1, 73, 78, 77, 81, -1);
}
83. Zireael - 25 Апреля, 2021 - 15:24:32 - перейти к сообщению
Блок FindImage, если изменить #X_Kib и #Y_Kib на #X_Kib1 и #Y_Kib1, то вызов функции сгенерируется верно:
CODE:
if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib1[0], #Y_kib1[0], 0)>0){}

но массивы будут объявлены без изменений:
CODE:
int X_Kib[1000];
int Y_kib[1000];
84. Kibor - 25 Апреля, 2021 - 15:28:39 - перейти к сообщению
Zireael ,
Это еще не реализовано. Подразумевалось что при изменение переменных пользователь будет сам их объявлять, но думаю сделаю их довыделение автоматом.
85. Kibor - 26 Апреля, 2021 - 01:39:48 - перейти к сообщению
 Zireael пишет:
Блок FindImage, если изменить #X_Kib и #Y_Kib на #X_Kib1 и #Y_Kib1, то вызов функции сгенерируется верно:
CODE:
if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib1[0], #Y_kib1[0], 0)>0){}

но массивы будут объявлены без изменений:
CODE:
int X_Kib[1000];
int Y_kib[1000];


Обновил архив.
Устранил баг, который не давал видеть имя глобальной переменной если оно начиналось с ~

В архиве есть блок ReadText

В нем есть поле
"Текст будет в"
и Edit с именем переменной.

Если пользователь меняет в этом поле имя, будет объявлена глобальная переменная с этим именем и эта копия блока будет работать с этой переменной.
В разных блоках ReadText можно таким образом переименовывать переменные и они будут автоматически объявляться.

Реализация:


 Цитата:
[INTERFACE]
DIALOG, "Диалог", 469, 140;
STATIC, "База", 8, 8, 36, 20;
EDIT, 52, 8, 292, 20, string base;
BUTTON_FILE, "Выбрать файл", 356, 8, 100, 20, base;
CHECK, "Рус", 8, 36, 40, 20, int G1;
CHECK, "En", 52, 36, 36, 20, int G2;
CHECK, "Цифры", 92, 36, 56, 20, int G3;
CHECK, "Знаки", 152, 36, 52, 20, int G4;
STATIC, "Текст будет в", 8, 64, 76, 20;
EDIT, 92, 64, 112, 20, string T;
BUTTON_OK, "Принять", 248, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 356, 88, 100, 20;
[END]

[ASSOC_VAR]
base="C:\basetext.sib";
G1 = 1;
G2 = 0;
G3 = 0;
G4 = 0;
text = #~T~;
T = Text;
[END]

[GLOBAL_VAR]
string ~T~;
[END]

[FUNCTION_CALL]
(base, text, G1, G2, G3, G4)
[END]




Полный код ReadText

ReadText (Отобразить)

(Добавление)
С указателями на переменные это тоже работает, но надо немного доработать, так как переменная объявляется с #.

Или оставить как есть..

Тогда пользователю не надо будет ставить # что бы указать что это указатель на переменную..

На примере FindImage так можно изменить переменную K_kib.

CODE:
[ESCAPE_CHAR]
^
[END]

[INTERFACE]
DIALOG, "Поиск изображения", 499, 139;
BUTTON_OK, "Принять", 284, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 388, 88, 100, 20;
STATIC, "Путь к файлу", 8, 8, 100, 20;
EDIT, 116, 8, 276, 20, string Path;
BUTTON_FILE, "Путь к файлу", 396, 8, 92, 20, Path;
STATIC, "Сколько искать", 8, 32, 100, 20;
EDIT, 116, 32, 52, 20, int Kol;
COMBO, "Мышь клик" "Мышь нажать" "Мышь отпустить", 172, 32, 220, 80, int M;
STATIC, "Количество", 8, 56, 100, 20;
EDIT, 116, 56, 52, 20, int K;
STATIC, "X", 176, 56, 24, 20;
STATIC, "Y", 288, 56, 24, 20;
EDIT, 208, 56, 72, 20, int X;
EDIT, 320, 56, 72, 20, int Y;
[END]


[ASSOC_NUMBER]
Path
[END]

[ASSOC_VAR]
Path="C:\Image_0.bmp";
Kol = 1;
X = #X_Kib;
Y = #Y_kib;

tK = #~K~;
K = K_kib;
M = 0;
Image = #Image~*~;
[END]

[GLOBAL_VAR]
int ~K~, X_Kib[1000], Y_kib[1000];
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];
[END]


[GLOBAL_SINGLE_CODE]
#define WM_COMMAND 0x111
#include "C:\Program Files (x86)\Kibor\liba.txt" //Это для демонстрации (Будет ошибка, так как нет файла) ЗАКОММЕНТИРОВАТЬ в полученном коде
external(INT, "MessageBoxA", "MessageBoxA", "UseR32.dlL");
messagebox ("Будет использоваться FindImage");
beep (1000, 100);
[END]

[GLOBAL_REPEAT_CODE]
loadimage(#Image~*~[0][0], ~Path~);
[END]

[FUNCTION_BODY]
function (int #image, int kol, int #mK, int #mX, int #mY, int Mouse)
{
mK=findimage(kol, #image[0][0], -1, #mX[0], #mY[0], 0, 0, 1024, 768, -1);
if (mK<0)MessageBoxA(0, "Ошибка", "Окно", 0);
if (Mouse==0)mouse(LEFT, mX[0], mY[0]);
if (Mouse==1)mousedown(LEFT, mX[0], mY[0]);
if (Mouse==2)mouseup(LEFT, mX[0], mY[0]);
return mK;
}
[END]

[FUNCTION_CALL]
(Image[0][0], Kol, tK, X[0], Y[0], M)
[END]


[FUNCTION_LOGIC]
>0
[END]

86. Zireael - 26 Апреля, 2021 - 03:38:30 - перейти к сообщению
 Цитата:
Или оставить как есть..
Тогда пользователю не надо будет ставить # что бы указать что это указатель на переменную..

Оставить как есть, большинство не знает что такое указатель.
87. ivantu - 26 Апреля, 2021 - 05:02:51 - перейти к сообщению
Побыстрей бы редактор диалогов-новый да не для визуального редактора )))
(Добавление)
Просто руки опускаются уже в ручную подгонять каждый контрол , я фанат визуального окна для бота, и у меня много кнопочек и т.д ... и бывает частно что то добавить нужно , а для этого нужно все смещать.. так на это несколько дней уходит, проще говоря жду с нетерпением этого чуда )
88. Kibor - 26 Апреля, 2021 - 06:39:14 - перейти к сообщению
ivantu , А каким кодом окна создаете?
89. Zireael - 26 Апреля, 2021 - 06:43:56 - перейти к сообщению
Добавить возможность присвоить результат переменой:
 Цитата:
int count = FindImage(...);
90. Kibor - 26 Апреля, 2021 - 07:11:32 - перейти к сообщению
Это есть
Для этой переменной надо создать Edit
EDIT_WRITE_RETURN

То что будет прописано в нем будет вставлено в виде
Var =
После него будет вызов функции.
Var = Fun();

Если это Edit не заполнить, будет просто
Fun();

EDIT_WRITE_RETURN не совместим с блоком FUNCTION_LOGIC

Пример как это работает есть в архиве в OpenProcess

Powered by ExBB FM 1.0 Final