Kibor |
Отправлено: 29 Апреля, 2021 - 12:02:57
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
ivantu пишет: выводить имена переменных в поля
Один из вариантов.. Тоже думал так.. Посмотрим.
Обновил архив.
Доработал сортировку логики.
Если поставить галку Без сортировки
Код будет генерировать так с этой каши что на скрине, после каждой строки Goto:
CODE:if (FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y)>0) goto KIB_3;
goto KIB_9;
KIB_1: MessageBoxA(NULL, "Это подключенная Api функция", "Заголовок", NULL); goto KIB_Exit;
KIB_2: Proc=OpenProcess(#win0); goto KIB_11;
KIB_3: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0); goto KIB_8;
KIB_4: Rez=test(#win0); goto KIB_2;
KIB_5: ty(); goto KIB_10;
KIB_6: if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0)>0) goto KIB_9;
goto KIB_11;
KIB_7: Rez=test(#win0); goto KIB_6;
KIB_8: Proc=OpenProcess(#win0); goto KIB_12;
KIB_9: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0); goto KIB_5;
KIB_10: MessageBoxA(NULL, "Это подключенная Api функция", "Заголовок", NULL); goto KIB_4;
KIB_11: ty(); goto KIB_13;
KIB_12: if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0)>0) goto KIB_7;
goto KIB_7;
KIB_13: Proc=OpenProcess(#win0); goto KIB_1;
KIB_Exit:;
Без галки (Будет сортироваться), так. Goto и метки остались там где надо. По возможности код идет по логике выполнения:
CODE:if (FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y)>0) goto KIB_3;
goto KIB_9;
KIB_3: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0);
Proc=OpenProcess(#win0);
FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0);
Rez=test(#win0); goto KIB_6;
KIB_t15: Proc=OpenProcess(#win0);
KIB_11: ty();
Proc=OpenProcess(#win0);
MessageBoxA(NULL, "Это подключенная Api функция", "Заголовок", NULL); goto KIB_Exit;
KIB_6: if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib[0], #Y_kib[0], 0)>0) goto KIB_9;
goto KIB_11;
KIB_9: ReadText("C:\basetext.sib", #Text, 1, 0, 0, 0);
ty();
MessageBoxA(NULL, "Это подключенная Api функция", "Заголовок", NULL);
Rez=test(#win0); goto KIB_t15;
KIB_Exit:;
(Добавление)
Еще надо доработать, после тестов что тут все нормально.
Сделал сохранение. Сохраняет на C:\SAVE_VE.txt
Можно тестировать логику удобнее.
Для открытия сохранения должны быть все шаблоны, с которых делался проект.
Вся информация в них. В сохранение только блок [ASSOC_VAR] и название шаблона.
Сделал рабочее очищение кнопка. |
|
|
Kibor |
Отправлено: 29 Апреля, 2021 - 14:24:43
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Циклов пока нет.
Но покажу, как можно с помощью данных шаблонов создать блок Loop Он есть а папке с программой.
Данный блок будет давать возможность указывать свое, уникальное имя переменной счетчику, которая будет объявляться глобально (для возможности осуществлять вложенные циклы).
Начальное значение переменной.
Конечное значение переменной, при котором выйдет из цикла.
Код блока:
CODE:[APPEARANCE]
COLOR = 0, 0, 0;
SIZE_X = 16;
SIZE_Y =2;
[END]
[INTERFACE]
DIALOG, "Loop", 340, 124;
STATIC, "Начальное значение", 8, 8, 108, 20;
EDIT, 120, 8, 56, 20, int SS;
STATIC, "Менее", 200, 8, 52, 20;
EDIT, 256, 8, 68, 20, int KK;
STATIC, "Переменная цикла", 8, 36, 96, 20;
EDIT, 120, 36, 56, 20, int Var;
BUTTON_OK, "Принять", 112, 64, 100, 24;
BUTTON_CANCEL, "Закрыть", 224, 64, 100, 24;
[END]
[ASSOC_NUMBER]
Var
[END]
[ASSOC_VAR]
Var = N;
SS = 0;
KK = 5;
dVar = #~Var~;
[END]
[GLOBAL_VAR]
int ~Var~=~SS~;
[END]
[FUNCTION_BODY]
function (int #n, int k)
{
n++;
if (n<=k) return 0;
return 1;
}
[END]
[FUNCTION_CALL]
(dVar, KK)
[END]
[FUNCTION_LOGIC]
==1
[END]
Код который генерирует схема на скриншоте (средний MessageBox будет показан столько, сколько итераций цикла):
CODE:#define NULL 0
int N = 0;
external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");
MessageBoxA(NULL, "Начало", "Заголовок", NULL);
KIB_1: if (Loop(#N, 5)==1) goto KIB_3;
MessageBoxA(NULL, "Цикл", "Заголовок", NULL); goto KIB_1;
KIB_3: MessageBoxA(NULL, "Конец", "Заголовок", NULL); goto KIB_Exit;
KIB_Exit:;
function Loop(int #n, int k)
{
n++;
if (n<=k) return 0;
return 1;
}
|
|
|
Kibor |
Отправлено: 30 Апреля, 2021 - 15:23:08
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Обновил архив.
Переименовал блок [FUNCTION_CALL] в [CALL]
Добавил не обязательный блок [GROUP_BLOCK]
При указание этого блока создается кнопка, которая позволяет вставлять Блоки имеющие обозначение {} (В Кибор)
CODE:[GROUP_BLOCK]
START = {
END = }
[END]
После START= идет то что будет означать начало блока.
После END= идет то что будет означать конец блока.
Разделитель - перенос строки.
Указание данного блока дает возможность создавать шаблоны циклов, функций и тд.
Вставленный в виз редактор такой Блок будет иметь свойства изменение размера с помощью мыши и вставки в середину других блоков. Переход в такой блок извне будет запрещен. Выход опционально, указанным в том же блоке GROUP_BLOCK.
С циклов выход возможен. С тела функции нет (хотя в Кибор можно выходить с функции по global goto, поэтому для Кибор с функции в шаблоне можно будет указывать разрешенный выход с тела функции.
Код который будет генерировать такой блок будет обрамлен тем что указано в блоке [GROUP_BLOCK].
Код шаблона цикла 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 = 28;
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 = }
[END]
Данный шаблон позволяет указывать
Имя переменной, которая будет объявлена глобально (если отсутствует), это дает возможность создавать вложенные циклы с разными переменными.
Начальную инициализацию переменной.
Код условия.
Код счетчика.
Пример создаваемого кода:
CODE:int N;
int A;
for(N=0; N<5; N++)
{
}
for(A=50; A<=500; A=A+10)
{
}
goto KIB_Exit;
KIB_Exit:;
На данный момент блоки нельзя еще переносить в тело цикла. |
|
|
|