Kibor |
Отправлено: 22 Апреля, 2021 - 20:39:21
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Я уже кое что придумал.. Посмотрю как будет..
(Добавление)
Обновил архив.
Сделал сохранение и открытие созданного диалога.
Меню правой кнопки мыши - действия.
Формат файла тот же что и файлы шаблонов.
Для того что бы редактировать какой то шаблон, необходимо открыть его.
Кнопка Редактор [INTERFACE]
На открывшемся диалоге правая кнопка мыши.
В меню Действия - Открыть.
Выбрать любой из шаблонов в папке templates
Будет прочтен выбранный файл и с него возьмется блок [INTERFACE], в соответствие с которым в редакторе диалогов создадутся все контролы для редактирования.
После редактирования можно сохранить под тем же именем или под другим.
При сохранение все блоки будут сохранены как были. А блок [INTERFACE] с изменениями.
(Добавление)
Для корректного выравнивания, координаты контролов и их размеры должны быть кратны 4.
(Добавление)
По поводу сортировки контролов при создание их в виз редакторе.
В папке templates лежит файл FindImage.txt в котором контролы без сортировки.
CODE:[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]
После открытия его в виз редакторе и сохранение этот блок имеет вид
CODE:[INTERFACE]
DIALOG, "Поиск изображения", 499, 139;
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;
EDIT, 208, 56, 72, 20, int X;
STATIC, "Y", 288, 56, 24, 20;
EDIT, 320, 56, 72, 20, int Y;
BUTTON_OK, "Принять", 284, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 388, 88, 100, 20;
[END]
что намного понятнее что к чему относится и за чем идет. |
|
|
Kibor |
Отправлено: 24 Апреля, 2021 - 18:04:43
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Обновил архив.
В нем шаблон блока FindHeapcolor
Пример как запрограммировать блок на генератор такого кода для использования функции findheapcolor
Требуется сгенерировать такой код, в котором есть два разных блока FindHeapcolor
CODE:int Color0[2] = {35356, 255};
int Kol0[2] = {2, 2};
int Color1[3] = {678, 232, 0};
int Kol1[3] = {1, 3, 5};
int X, Y;
if (FindHeapcolor(#Color0[0], #Kol0[0], 2, 2, #X, #Y)>0)
{
messagebox ("есть 0");
}
if (FindHeapcolor(#Color1[0], #Kol1[0], 3, 3, #X, #Y)>0)
{
messagebox ("есть 1");
}
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);
}
Шаблон блока FindHeapcolor
CODE:[ESCAPE_CHAR]
^
[END]
[INTERFACE]
DIALOG, "Поиск findheapcolor", 408, 119;
STATIC, "Цвета", 8, 8, 100, 20;
EDIT, 116, 8, 276, 20, int D_Color;
STATIC, "Количества", 8, 32, 100, 20;
EDIT, 116, 32, 276, 20, int D_Kol;
BUTTON_OK, "Принять", 180, 64, 100, 20;
BUTTON_CANCEL, "Закрыть", 292, 64, 100, 20;
[END]
[ASSOC_NUMBER]
D_Color, D_Kol;
[END]
[ASSOC_VAR]
D_Color = 0, 5;
D_Kol = 2, 2;
V_color = #Color~*~;
V_kol = #Kol~*~;
V_k_color = ~GET(amtelement(~D_Color~))~;
V_k_kol = ~GET(amtelement(~D_Kol~))~;
V_X = #X;
V_Y = #Y;
[END]
[GLOBAL_VAR]
int Color~*~[~GET(amtelement(~D_Color~))~] = {~D_Color~};
int Kol~*~[~GET(amtelement(~D_Kol~))~] = {~D_Kol~};
int X, Y;
[END]
[FUNCTION_BODY]
function (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);
}
[END]
[FUNCTION_CALL]
(V_color[0], V_kol[0], V_k_color, V_k_kol, V_X, V_Y)
[END]
[FUNCTION_LOGIC]
>0
[END]
=========================
~GET(amtelement(~D_Color~))~
Функция GET с параметром amtelement возвращает количество элементов, разделенных запятыми.
В D_Color содержится тест с поля настроек диалогового окна.
К примеру: 0, 5
После преобразования ~GET(amtelement(~D_Color~))~ станет ~GET(amtelement(0, 5))~
Затем ~GET(amtelement(0, 5))~ преобразуется в 2. |
|
|
Kibor |
Отправлено: 24 Апреля, 2021 - 20:14:59
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Пример как вызывать WinApi функции. Или функции Кибор без блока FUNCTION_BODY
external(INT, "MessageBoxA", "MessageBoxA", "User32.dll"); надо прописывать в блоке GLOBAL_SINGLE_CODE. Он предназначен для
Цитата: #define
#include
external
и глобального кода, который не меняется.
Проверки GLOBAL_SINGLE_CODE блока не позволяют повторный вызов любой из этих директив и функций другим блоком, даже при не одинаковом описание.
К примеру
#define WM_COMMAND 273
и
#define WM_COMMAND 0x111
будет считаться одинаковым и дублирования не будет.
Так же как и
external(INT, "MessageBoxA", "MessageBoxA", "user32.dll");
и
external(INT, "MessageBoxA", "MessageBoxA", "USER32.dll");
не будет продублировано.
Но он пока не выводится и поэтому прописано в GLOBAL_REPEAT_CODE, который предназначен для динамичного глобального кода, который тоже не дублируется будучи индентичным.
Блок должен называться MessageBoxA
CODE:[INTERFACE]
DIALOG, "MessageBox", 405, 111;
STATIC, "Заголовок", 8, 8, 100, 20;
EDIT, 116, 8, 276, 20, string Zag;
STATIC, "Текст", 8, 32, 100, 20;
EDIT, 116, 32, 276, 20, string Text;
BUTTON_OK, "Принять", 184, 60, 100, 20;
BUTTON_CANCEL, "Закрыть", 292, 60, 100, 20;
[END]
[ASSOC_VAR]
N1 = 0;
Zag ="aa";
Text = "bbb";
N2 = 0;
[END]
[GLOBAL_REPEAT_CODE]
external(INT, "MessageBoxA", "MessageBoxA", "User32.dll");
[END]
[FUNCTION_CALL]
(N1, Zag, Text, N2)
[END]
|
|
|
|