Kibor |
Отправлено: 12 Мая, 2021 - 23:35:37
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Обновил.
Сделал правильное создание кода в блоках {}
Временно убрал сортировку и в коде много Гото и меток, но код в блоках {} генерируется правильно и вполне рабочий.
Имена переменных можно изменять по своему усмотрению в диалоговых окнах настроек блоков и он будут объявлены автоматически. Можно использовать разные имена для разных блоков.
Такая схема найдет указанное количество изображений и в цикле for перещелкает их.
Код который на данный момент генерирует:
CODE:#define NULL 0
int K_kib;
int X_Kib[1000];
int Y_kib[1000];
int Image0[12][14];
int N;
external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");
loadimage(#Image0[0][0], "C:\Image_0.bmp");
KIB_0: if (FindImage(#Image0[0][0], 3, #K_kib, #X_Kib[0], #Y_kib[0], 20, 20, 1024, 768)>0) goto KIB_1;
goto KIB_3;
KIB_1: for(N=0; N<K_kib; N++)
{
goto KIB_2;
KIB_2: Mouse(0, 20+X_Kib[N], 20+Y_kib[N], 0, 1000); goto KIB_C1;
KIB_C1:;
}
goto KIB_Exit;
KIB_3: MessageBoxA(NULL, "Не найдено", "Заголовок", NULL); goto KIB_Exit;
KIB_Exit:;
function FindImage(int #image, int kol, int #mK, int #mX, int #mY, int ex1, int ey1, int ex2, int ey2)
{
mK=findimage(kol, #image[0][0], -1, #mX[0], #mY[0], ex1, ey1, ex2, ey2, -1);
return mK;
}
function Mouse(int p1, int x, int y, int m, int p2)
{
pause(p1);
if (m==0)mouse(LEFT, x, y);
if (m==1)mousedown(LEFT, x, y);
if (m==2)mouseup(LEFT, x, y);
pause(p2);
}
Допускается любая комбинация вложенных блоков {}
К примеру такая схема должна генерировать правильный, запускаемый код:
Шаблон for
CODE:[INTERFACE]
DIALOG, "for", 619, 109;
STATIC, "Имя переменной", 8, 4, 92, 20;
EDIT, 108, 4, 100, 20, int Var;
STATIC, "Начальное значение", 8, 28, 108, 20;
EDIT, 120, 28, 72, 20, int Init;
STATIC, "Условие", 200, 28, 44, 20;
EDIT, 248, 28, 232, 20, int Cond;
STATIC, "Счетчик", 488, 28, 44, 20;
EDIT, 536, 28, 72, 20, int Counter;
BUTTON_OK, "Принять", 400, 56, 100, 20;
BUTTON_CANCEL, "Закрыть", 508, 56, 100, 20;
[END]
[APPEARANCE]
COLOR = 0, 0, 0;
SIZE_X = 48;
SIZE_Y =28;
[END]
[ASSOC_VAR]
Var = N;
Init = 0;
Cond = N<5;
Counter = N++;
cInit = ~Var~=~Init~;
[END]
[GLOBAL_VAR]
int ~Var~;
[END]
[CALL]
(cInit; Cond; Counter)
[END]
[GROUP_BLOCK]
START = {
END = }
ENTER_EXIT =1
CONNECTION=1
[END]
Шаблон while
CODE:[INTERFACE]
DIALOG, "while", 306, 81;
STATIC, "Условие", 8, 4, 44, 20;
EDIT, 64, 4, 232, 20, int Cond;
BUTTON_OK, "Принять", 88, 32, 100, 20;
BUTTON_CANCEL, "Закрыть", 196, 32, 100, 20;
[END]
[APPEARANCE]
COLOR = 0, 0, 0;
SIZE_X = 18;
SIZE_Y =22;
[END]
[ASSOC_VAR]
Cond = 1==1;
[END]
[CALL]
(Cond)
[END]
[GROUP_BLOCK]
START = {
END = }
[END]
Шаблон loop
CODE:[INTERFACE]
DIALOG, "loop", 299, 80;
STATIC, "Циклов", 8, 4, 92, 20;
EDIT, 108, 4, 176, 20, unknown Loop;
BUTTON_OK, "Принять", 76, 32, 100, 20;
BUTTON_CANCEL, "Закрыть", 184, 32, 100, 20;
[END]
[APPEARANCE]
COLOR = 0, 0, 0;
SIZE_X = 100;
SIZE_Y =46;
[END]
[ASSOC_VAR]
Loop=;
[END]
[CALL]
(Loop)
[END]
[GROUP_BLOCK]
START = {
END = }
[END]
Шаблон Function
CODE:[INTERFACE]
DIALOG, "Функция", 525, 116;
STATIC, "Имя функции", 8, 8, 72, 20;
EDIT, 88, 8, 424, 20, string Fun;
STATIC, "Параметры", 8, 36, 72, 20;
EDIT, 88, 36, 424, 20, unknown Par;
BUTTON_OK, "Принять", 304, 64, 100, 20;
BUTTON_CANCEL, "Закрыть", 412, 64, 100, 20;
[END]
[APPEARANCE]
COLOR = 193, 97, 0;
SIZE_X = 48;
SIZE_Y =28;
[END]
[ASSOC_VAR]
Fun = NameFun;
Fun_V= function ~%32~ ~Fun~;
Par=int~%32~A,~%32~int~%32~B;
[END]
[CALL]
Fun_V ( Par )
[END]
[GROUP_BLOCK]
START = {
END = }
ENTER_EXIT =0
CONNECTION=0
[END]
|
|
|
Kibor |
Отправлено: 13 Мая, 2021 - 04:04:01
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Немного оптимизировал.
Теперь генерирует такой код:
CODE:if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0, 0, 1024, 768)>0) goto KIB_1;
goto KIB_3;
KIB_1: for(N=0; N<K_kib; N++)
{
Mouse(0, 20+X_Kib[N], 20+Y_Kib[N], 0, 1000);
}
goto KIB_Exit;
KIB_3: MessageBoxA(NULL, "Íå íàéäåíî", "Çàãîëîâîê", NULL); goto KIB_Exit;
KIB_Exit:;
Вместо такого
CODE:KIB_0: if (FindImage(#Image0[0][0], 3, #K_kib, #X_Kib[0], #Y_kib[0], 20, 20, 1024, 768)>0) goto KIB_1;
goto KIB_3;
KIB_1: for(N=0; N<K_kib; N++)
{
goto KIB_2;
KIB_2: Mouse(0, 20+X_Kib[N], 20+Y_kib[N], 0, 1000); goto KIB_C1;
KIB_C1:;
}
goto KIB_Exit;
KIB_3: MessageBoxA(NULL, "Не найдено", "Заголовок", NULL); goto KIB_Exit;
KIB_Exit:;
С этой схемы получает такой код
CODE:FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y);
loop(5)
{
goto KIB_15;
KIB_7: FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y);
KIB_8: MessageBoxA(NULL, "Это функция", "Заголовок", NULL); goto KIB_C5;
KIB_15: for(A=0; A<5; A++)
{
goto KIB_16;
KIB_12: if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0, 0, 1024, 768)>0) goto KIB_4;
goto KIB_8;
KIB_4: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0); goto KIB_C15;
KIB_16: while(1==1)
{
Proc=OpenProcess(#win0);
Rez=test(#win0);
}
goto KIB_12;
KIB_C15:;
}
goto KIB_13;
KIB_C5:;
}
goto KIB_18;
KIB_13: while(2==2)
{
FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0, 0, 1024, 768);
}
goto KIB_7;
KIB_18: Rez=test(#win0); goto KIB_Exit;
KIB_Exit:;
function NameFun(int A, int B)
{
goto KIB_3;
KIB_17: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0); goto KIB_C11;
KIB_3: for(B=0; B<5; B++)
{
goto KIB_10;
KIB_2: Rez=test(#win0); goto KIB_C3;
KIB_10: while(3==3)
{
Rez=test(#win0);
}
goto KIB_2;
KIB_C3:;
}
goto KIB_17;
KIB_C11:;
KIB_Exit:;
} |
|
|
Kibor |
Отправлено: 13 Мая, 2021 - 16:01:41
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Обновил.
Доработал генератор кода.
Теперь код вполне себе читабелен.
Гото не так много. В блоках {} код сортируется вполне прилично.
Такой код получается с такой схемы. (все блоки расставлены хаотично и созданы не по порядку)
Полный генерируемый код:
CODE:#define NULL 0
int Color0[2] = {0,5};
int Kol0[2] = {2,2};
int X;
int Y;
win win0 = window("Калькулятор","CalcFrame",-1);
int Proc;
int B;
string Text;
int K_kib;
int X_Kib[1000];
int Y_kib[1000];
int Image0[12][14];
int Rez;
int A;
win win1 = window("Кор","Ca",-1);
int AAAAA;
external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");
loadsymbolbase("C:\basetext.sib");
loadimage(#Image0[0][0], "C:\Image_0.bmp");
FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y);
loop(5)
{
goto KIB_15;
KIB_21: Rez=test(#win0);
KIB_8: MessageBoxA(NULL, "Это функция", "Заголовок", NULL);
while(55==55)
{
Proc=OpenProcess(#win0);
}
goto KIB_C5;
KIB_15: for(A=0; A<5; A++)
{
goto KIB_16;
KIB_4: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0);
goto KIB_C15;
KIB_16: while(1==1)
{
Proc=OpenProcess(#win0);
Rez=test(#win0);
}
if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0, 0, 1024, 768)>0) goto KIB_4;
goto KIB_8;
KIB_C15:
}
while(2==2)
{
FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0, 0, 1024, 768);
}
if (FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y)>0) goto KIB_21;
goto KIB_8;
KIB_C5:
}
AAAAA=test(#win1);
goto KIB_Exit;
KIB_Exit:;
function NameFun(int A, int B)
{
for(B=0; B<5; B++)
{
while(3==3)
{
Rez=test(#win0);
}
test(#win0);
}
ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0);
goto KIB_Exit;
KIB_Exit:;
}
function FindHeapcolor(int #col, int #kol, int k_col, int k_kol, int #x, int #y)
{
return findheapcolor(1, #col[0], #kol[0], k_col, k_kol, #x, #y, 15, 15, 50, 50, 0, 0, 1000, 1000, -1);
}
function OpenProcess(win #w)
{
return openprocess(w);
}
function test(win #w)
{
return openprocess(w);
}
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);
}
function FindImage(int #image, int kol, int #mK, int #mX, int #mY, int ex1, int ey1, int ex2, int ey2)
{
mK=findimage(kol, #image[0][0], -1, #mX[0], #mY[0], ex1, ey1, ex2, ey2, -1);
return mK;
}
|
|
|
sedoi |
Отправлено: 13 Мая, 2021 - 22:55:20
|
Наблюдатель
Покинул форум
Сообщений всего: 47
Дата рег-ции: Апр. 2016
Репутация: 1
|
Программа пока не готова к конкретному использованию, так как не описана полностью структура данных. Они могут меняться. Поэтому то что сейчас напишите и сохраните возможно потребуется корректировать. Хотя это не сложно сделать с таким форматом сохранения.
Пока что ищутся баги) Которых достаточно) Ну и юзабилити оценивается..
Понял, после выхода релиза, вообще будет огонь прога. Все супер, удобно в разы, не нужно больше переписывать блоки при переносе не нужно снова делать связи и прочие мелочи, которые в старом забирали уйму времени, надеюсь и собираться код будет намного быстрее чем в старом редакторе, маленькие проги норм собирались, а вот более или менее проги нужно было минут по 10 ждать пока код соберет. |
|
|
|