[ESCAPE_CHAR]
Позволяет указать экранирующий символ.
Если блок отсутствует, по умолчанию экранирующим символом будет ^
============================================================================================
[APPEARANCE] - Задает цвет и размерность блока. Размер делает кратным 2 в сторону увеличения.
CODE:[APPEARANCE]
COLOR = 50, 50, 150;
SIZE_X = 12;
SIZE_Y =8;
[END]
Размер задается в шаге редактора. При отсутствие создается Блок фиксированного цвета и размера.
============================================================================================
[INTERFACE]
Описывает диалоговое окно настройки, которое появляется при выборе свойства Блока виз редактора.
DIALOG - создает окно.
BUTTON_OK - создает кнопку, при нажатие на которую все изменения применяются.
BUTTON_CANCEL - создает кнопку, при нажатие на которую диалог закрывается без сохранения изменений.
STATIC - вставляет статичный текст
EDIT - создает поле для ввода однострочного текста. К нему надо указать переменную, в которую будет записан введенный текст после нажатия кнопки
BUTTON_OK.
Может принимать любой тип данных, имена переменных, вызв других функций и тд. Если это текст string или char, надо брать в двойные или одинарные кавычки.
EDIT_WRITE_RETURN - создает поле для ввода однострочного текста. Предназначен для указания имени переменной в которую будет записан результат выполнения функции. К нему надо указать переменную, в которую будет записан введенный текст после нажатия кнопки
BUTTON_OK.
EDIT_MULTILINE - создает поле для ввода многострочного текста. К нему надо указать переменную, в которую будет записан введенный текст после нажатия кнопки
BUTTON_OK.
Может принимать только текст. Текст в кавычки брать не надо, но при использование данного текста он будет находится в кавычках. Использовать для инициализации переменных и тд.
EDIT_CODE - создает поле для ввода многострочного текста. К нему надо указать переменную, в которую будет записан введенный текст после нажатия кнопки
BUTTON_OK.
Может принимать любые текстовые данные. Текст в кавычки брать не надо, и при использование данного текста он не будет находится в кавычках. Использовать для вставки частей кода. Для блоков кода, объявления переменных и тд.
CHECK - создает галку. К нему надо указать переменную типа int, в которой будет 0 или 1 после нажатия кнопки
BUTTON_OK.
COMBO - создает выпадающий список. К нему надо указать переменную типа int или string, в которой будет номер выбранного пункта или текст пункта после нажатия кнопки
BUTTON_OK.
BUTTON_FILE - создает кнопку, при нажатие на которую откроется диалоговое окно для выбора файла. К нему надо указать переменную (без указания типа), которая привязана к
EDIT, в который после выбора файла вставится текст в кавычках, содержащий путь к выбранному файлу.
BUTTON_PATH создает кнопку, при нажатие на которую откроется диалоговое окно для выбора папки. К нему надо указать переменную (без указания типа), которая привязана к
EDIT, в который после выбора файла вставится текст в кавычках, содержащий выбранный путь.
============================================================================================
[ASSOC_NUMBER] - в этом блоке указываем имена переменных с блока
[INTERFACE], уникальность значений которых будет нумеровать генерируемые данные. Или наоборот, если Блоки виз реактора имеют одинаковые значения этих переменных, то у них будут одинаковые номера.
Подробнее ниже.
============================================================================================
[ASSOC_VAR] - предназначен для ассоциации переменных в блоке
[INTERFACE] и имен переменных в блоке
[CALL] с указанными данными после =.
Пояснение:
Цитата:
[INTERFACE]
DIALOG, "Диалог", 250, 90;
EDIT, 8, 8, 228, 20, string D_Var;
BUTTON_OK, "Принять", 32, 36, 100, 20;
BUTTON_CANCEL, "Закрыть", 136, 36, 100, 20;
[END]
[ASSOC_VAR]
D_Var = Var;
[END]
[GLOBAL_VAR]
string D_Var;
[END]
[CALL]
(D_Var)
[END]
При открытие диалогового окна в переменную
D_Var будет записано то, что идет после равно в блоке
[ASSOC_VAR]
То есть в
D_Var будет записан текст
Var и показан в EDIT, к которому привязана переменная
D_Var.
После редактирования пользователем этого поля и нажатие кнопки BUTTON_OK в
D_Var запишется новый текст.
В блоках [GLOBAL_VAR] и [CALL]
D_Var заменится на значение, которое в нем находится.
Пример с использованием нумерации:
Нумерация предназначена для объявления и использования уникальных имен переменных, когда в этом есть необходимость.
К примеру мы указали что в функции findimage ищем другой файл изображения.
Для него надо объявить уникальный двухмерный массив, в который загрузим это изображение.
Пример без возможности изменить имя переменной:
Цитата:
[INTERFACE]
DIALOG, "Диалог", 250, 90;
EDIT, 8, 8, 228, 20, string D_Var;
BUTTON_OK, "Принять", 32, 36, 100, 20;
BUTTON_CANCEL, "Закрыть", 136, 36, 100, 20;
[END]
[ASSOC_NUMBER]
D_Var
[END]
[ASSOC_VAR]
D_Var = Var;
C_Var = Var~*~;
[END]
[GLOBAL_VAR]
string Var~*~;
[END]
[CALL]
(C_Var)
[END]
При уникальности значения переменной, имя которой (можно указывать несколько переменных) указано в блоке
[ASSOC_NUMBER], вместо
~*~ будет вставлен уникальный номер.
И наоборот, если значение переменной в блоке
[ASSOC_NUMBER] равно значению в другом Блоке виз редактора (такого же типа), то номер у них будет одинаков.
На данном примере при открытие диалога в D_Var будет записан текст после = (Var). После изменения в EDIT и нажатия BUTTON_OK, то что после = будет изменено на новое значение. И в D_Var попадет то что ввел пользователь.
В блоке
[ASSOC_VAR] в C_Var будет записан текст Var, к которому прибавится номер вместо
~*~.
Так же само в блоке [GLOBAL_VAR] будет и с string Var
~*~;
То есть string Var
~*~; преобразуется в string Var0; или string Var1; и тд.
В блоке
[CALL] вместо C_Var будет то, что записано в C_Var в блоке [ASSOC_VAR]. То есть Var0 или Var1 и тд.
Пример с возможностью пользователю изменить имя переменной (в этом случае будет объявлена новая переменная с этим именем):
Цитата:
[INTERFACE]
DIALOG, "Диалог", 250, 90;
EDIT, 8, 8, 228, 20, string D_Var;
BUTTON_OK, "Принять", 32, 36, 100, 20;
BUTTON_CANCEL, "Закрыть", 136, 36, 100, 20;
[END]
[ASSOC_NUMBER]
D_Var
[END]
[ASSOC_VAR]
D_Var = Var;
C_Var = ~D_Var~~*~;
[END]
[GLOBAL_VAR]
string ~D_Var~~*~;
[END]
[CALL]
(C_Var)
[END]
Все так же само как и выше, но вместо
~D_Var~ вставится значение, которое оно содержит.
То есть после ввода в поле пользователем и нажатия кнопки BUTTON_OK, в D_Var запишется введенный текст. Им будет заменено все что
~D_Var~
Соответственно
C_Var =
~D_Var~~*~; станет
C_Var = новое_значение0;
string
~D_Var~~*~; станет
string новое_значение0;
и в
[CALL] будет
(новое_значение0)
Что бы в
[CALL] указать указатель на переменную надо ее указать в C_Var = #
~D_Var~~*~;
Если необходимо сгенерировать нужные данные (к примеру выделить двухмерный массив для загрузки изображения, то надо выделять массив размерностью этого изображения), то необходимо воспользоваться функцией
GET
Пример:
~
GET(
imagewidth(~Path~))~
преобразуется в
~GET(imagewidth("То что находится в Path"))~, к примеру там находится путь к изображению
~GET(imagewidth("C:\Image_0.bmp"))~
Затем вместо ~GET(imagewidth("C:\Image_0.bmp"))~ будет вставлено число равное ширине этого изображения.
Еще пример использования функции GET
~
GET(
amtelement(~D_Color~))~
Вернет количество элементов, которые находятся в D_Color разделенных запятыми.
К примеру D_Color = 0,5, 7
~GET(amtelement(0,5, 7))~ вернет 3, которое вставится вместо GET
Еще пример использования функции GET для регулярного выражения:
Возвращает часть строки согласно условиям регулярного выражения.
Пример:
CODE:~GET(regexsearch("C:\Image_0.bmp", "(?<=\\)(.*)+(?=\.)"))~
Первый параметр функции
regexsearch строка с которой ищем.
Второй - регулярное выражение.
Вместо этой команды вставится
Image_0, поскольку по условиям регулярного выражения будет найдена эта часть строки.
Первый и второй параметры могу быть как в кавычках, так и без.
Если в кавычках - они игнорируются.
-----
Так же может быть третий параметр в
regexsearch.
Число, соответствующее значению одной или сумме значений нескольких констант:
CODE:IGNORECASE=8
SINGLELINE=1
MULTILINE=2
GLOBAL=4
RIGHTTOLEFT=16
EXTENDED=32
Описание констант -
(для просмотра ссылки Вам необходимо авторизоваться)
Пример:
IGNORECASE
CODE:~GET(regexsearch("C:\Image_0.bmp", "(?<=\\)(.*)+(?=\.)", 8))~
IGNORECASE+MULTILINE
CODE:~GET(regexsearch("C:\Image_0.bmp", "(?<=\\)(.*)+(?=\.)", 10))~
============================================================================================
[GLOBAL_VAR] - в этом блоке прописываются объявления глобальных переменных. Правила генерирования пояснены выше.
============================================================================================
[REGEXPLACE_CODE] - в этом блоке прописывается регулярные выражения которые будут выполнены в самом конце генерирования кода.
С помощью них можно произвести замену указанных частей кода на свои.
Команды в этом блоке выполняются в последовательности снизу вверх.
Синтаксис:
Цитата:
Что менять1 = На что менять1 ;
Что менять2 = На что менять2 ;
Пояснение к синтаксису регулярнго выражения в блоке
[REGEXPLACE_CODE]:
CODE:"RESOURCE" ~%13~~%10~"\{"~%13~~%10~ = "RESOURCE"~%13~~%10~"{"~%13~~%10~~Path~~%59~~%13~~%10~;
Символы
CODE:=
;
перенос строки
новая строка
если они не в кавычках надо заменять на команды ~%код_символа~
Данное выражение означает заменить
на
где
~Path~ будет заменено на значение переменной
Path.
Пример:
Есть сгенерированный код:
Если указать в блоке
[REGEXPLACE_CODE] регуоярное выражение:
CODE:[REGEXPLACE_CODE]
"RESOURCE" ~%13~~%10~"\{"~%13~~%10~ = "RESOURCE"~%13~~%10~"{"~%13~~%10~~Path~~%59~~%13~~%10~;
[END]
данный код заменится на
CODE:RESOURCE
{
"C:\Image_0.bmp";
}
[END][/code]
где
"C:\Image_0.bmp" значение переменной
Path
Еще пример:
При наличие такого кода:
CODE:
RESOURCE
{
}
function load_images_RES()
{
}
Команды
CODE:[REGEXPLACE_CODE]
"function load_images_RES\(\)"~%13~~%10~"\{"~%13~~%10~ = "function load_images_RES()"~%13~~%10~"{"~%13~~%10~"unpack("~Path~", tempfolder()+"~%34~~File~~%34~", 1);"~%13~~%10~;
"function load_images_RES\(\)"~%13~~%10~"\{"~%13~~%10~ = "function load_images_RES()"~%13~~%10~"{"~%13~~%10~"loadimage (#Image"~*~"[0][0], tempfolder()+"~%34~~File~~%34~");"~%13~~%10~;
"RESOURCE" ~%13~~%10~"\{"~%13~~%10~ = "RESOURCE"~%13~~%10~"{"~%13~~%10~~Path~~%59~~%13~~%10~;
[END]
сгенерируют такой код:
CODE:RESOURCE
{
"C:\Image_0.bmp";
}
function load_images_RES()
{
unpack("C:\Image_0.bmp", tempfolder()+"Image_0.bmp", 1);
loadimage (#Image0[0][0], tempfolder()+"Image_0.bmp");
}
Вызов функции
load_images_RES()
можно сделать в блоке
CODE:[GLOBAL_REPEAT_CODE]
load_images_RES();
[END]
Так же можно указать между чем и чем использовать замену по указанному регулярному выражению.
Пример:
[REGEXPLACE_CODE]
[<
AAAAA>] "Z"="W"[<
BBBBB>];
[END]
Регуляроное выражение замены Z на W будет использоваться только между AAAAA и BBBBB
То есть такой текст
CODE:aaaZbbb
AAAAA
aaaZbbb
BBBBB
aaaZbbb
Превратится в такой
aaaZbbb
AAAAA
aaaWbbb
BBBBB
aaaZbbb
============================================================================================
[GLOBAL_SINGLE_CODE_TOP] - в этом блоке прописывается глобальный код, выполняемый один раз вверху скрипта.
#define, #include, external и код который не должен меняться, хотя на этот блок действует привило замены ~...~
#define, #include, external отделяются от другого кода.
Если в коде где то есть ~...~, то будет замена и код станет уникальным и вставится повторно.
Данный код должен быть закончен по своему смыслу выполнения.
============================================================================================
[GLOBAL_SINGLE_CODE_BOTTOM] - в этом блоке прописывается глобальный код, вставляемый один раз в самом низу скрипта.
Использовать для создания независимых блоков кода.
К примеру такой код блока
[GLOBAL_SINGLE_CODE_BOTTOM]
CODE:[GLOBAL_SINGLE_CODE_BOTTOM]
RESOURCE
{
}
[END]
вставит в самом низу код:
Затем с помощью команд блока
[REGEXPLACE_CODE] можно вставлять в этот блок кода свои строчки кода.
Данный код должен быть закончен по своему смыслу выполнения.
============================================================================================
[GLOBAL_REPEAT_CODE] - предназначен для глобального кода, выполняемого один раз, который может быть продублирован, если он уникален.
На него действует правило замены ~...~
Использовать для таких функций как
loadimage, loadsymbolbase и тд.
============================================================================================
[FUNCTION_BODY] - не обязательный блок, содержащий тело вызываемой функции.
============================================================================================
[CALL] - В нем прописано как будут заполнятся параметры вызываемой функции.
Имена переменных ассоциируются с именами переменных в блоке [ASSOC_VAR]
============================================================================================
[FUNCTION_LOGIC] - не обязательный блок. В нем прописано условие, по которому с Блока виз редактора можно перейти по зеленой или красной линии.
Если этого блока нет и нет блока
[LOGIC], можно вести только зеленую линию.
Если указан раздел
[FUNCTION_LOGIC] , формирутся код:
Цитата:
if ((то что в блоке [CALL])(условие)) goto ...;
goto ...;
Раздел
[LOGIC] не совместим с разделом
[FUNCTION_LOGIC]
============================================================================================
[LOGIC] - не обязательный блок. В нем указано или с блока можно вести красный переход.
Если этого блока нет и нет блока
[FUNCTION_LOGIC], можно вести только зеленую линию.
Если указан раздел
[LOGIC], а в нем есть параметр:
Цитата:
[LOGIC]
FALSE=1
[END]
формируется код
Цитата:
(то что в блоке [CALL]) goto ...;
goto ...;
Раздел
[LOGIC] не совместим с разделом
[FUNCTION_LOGIC]
============================================================================================
[INFO] - не обязательный блок. Его назначение указать какая информация будет выведена в Блок в Визуальную схему в виде текста.
Данная информация добавляется сразу после названия функции или шаблона, который идет в Блоке по умолчанию.
Синтаксис:
CODE:[INFO]
[ENDL]>>~GET(regexsearch(~Path~, "(?<=\\)(.*)+(?=\.)"))~>>[ENDL]>>Comment
[END]
[ENDL] - Перевод строки.
>> - Разделение параметров.
============================================================================================
[EVENT] Его назначение отслеживать состояние галок, текста и тд при открытом диалоговом окне.
Пример:
CODE:[EVENT]
IF (GT==0)ENABLE(GETID(Col_T), 0);
IF (GT==1)ENABLE(GETID(Col_T), 1);
IF (GF==0)ENABLE(GETID(Col_F), 0);
IF (GF==1)ENABLE(GETID(Col_F), 1);
[END]
IF (GT==0)ENABLE(GETID(Col_T), 0);
IF (GT==0) - условие, где GT это имя переменной, привязанной при создание контрола.
В условиях раздела [EVENT] могут применяться
В шаблоне ReadText это переменная привязана к CHECK
CODE:CHECK, "Учитывать Цвета текста (через запятую)", 4, 268, 240, 20, int GT;
ENABLE(GETID(Col_T), 0); означает что при соблюдение условия контрол к которому привязана переменная Col_T становится не активным (последний параметр 0). При параметре 1 - станет активным.
CODE:EDIT, 4, 292, 252, 20, int Col_T;
----------------
Команды в разделе
[EVENT]
ENABLE(
GETID(Col_T),
0);
Сделать не активным контрол к которому привязана переменная
Col_T
ENABLE(
GETID(Col_T),
1);
Сделать активным контрол к которому привязана переменная
Col_T
---------------------
SENDBUTTON(GETID(
G1),
0);
Выключить галку к которой привязана переменная G1
SENDBUTTON(GETID(
G1),
1);
Включить галку к которой привязана переменная G1
---------------------
SENDBUTTON(GETID(
BB),
"Название");
Переименовать кнопку или галку к которой привязана переменная BB
---------------------
SENDEDIT(GETID(
E),
"Текст");
Ввести текст в EDIT к которому привязана переменная E
---------------------
SENDBUTTON(GETID(
CC),
"Второй пункт");
Выбрать пункт COMBO к которому привязана переменная CC по его названию
---------------------
ENABLELOGIC;
Делает возможным вести от блока переход Ложь.
Необходимо указать раздел
[LOGIC]
FALSE=1
[END]
Пример:
IF (GL==1)ENABLELOGIC; Если галка с переменной GL выделена, есть возможность вести переход Ложь
Иначе такой возможности нет.
Имеет приоритет перед регулиранием данного перехода полем EDIT_WRITE_RETURN. Если установлен режим ENABLELOGIC не зависимо есть что то в том поле или нет, весли Ложь возможно. Переменная в поле EDIT_WRITE_RETURN игнорируется. Ее поле лучше деактивировать для нагляности.
Пример данного механизма в шаблне Call
---------------------
SENDBUTTON(GETID(
CC),
1);
Выбрать пункт COMBO к которому привязана переменная CC по его номеру
---------------------
MESSAGE("Сообщение")
Вывести сообщение.
---------------------
Эти команды доступны после проверки условий:
IF (A==1) ...Команда
IF (B=="Текст") ...Команда
Это дает возможность сделать активными или не активными нужные контролы, в зависимости от состояния других контролов.
---------------------
Так же в блоке
[EVENT] доступны переменные привязанные к выпадающему списку на главном окне визуального редактора, позволяющего выбрать привязку к окну или указателю.
В переменной I_MODE_BIND_WINDOW находится номер выбранной строки выпадающего списка, в котором можно выбрать привязку по умолчанию в главном окне редактора.
В переменной S_MODE_BIND_WINDOW находится текст данного пункта.
Пример раздела [EVENT] Блока FindImage
CODE:[EVENT]
IF (I_MODE_BIND_WINDOW!=0)SENDBUTTON(GETID(EW), S_MODE_BIND_WINDOW);
IF (I_MODE_BIND_WINDOW!=0)SENDEDIT(GETID(W), W_Kib);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(EW), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(W), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(Screen), 0);
[END]
Данные команды означают:
Если выбран не 0 пункт, в настройках Блока в левом верхнем COMBO выбрать пункт с название пункта выбора привязки по умолчанию.
Сделать не активным список в настройках Блока.
Сделать не активным поле для ввода имени переменной win в настройках Блока.
Сделать не активным поле для ввода указателя на скрин в настройках Блока.
Изменить имя переменной win на W_Kib (без кавычек).
============================================================================================
[GLOBAL_SINGLE_CALL_CODE] - Позволяет указывать код, который вставится один раз перед вызововом функции с раздела
[CALL]
При следующих вызовах он вставляться не будет.
Цитата:
__python_sync
#Импорт
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
__end_python
StartBrowser(0, "C:\Program Files (x86)\Mozilla Firefox\Firefox.exe", pathfolder()+"python\webdriver\geckodriver.exe", "Активный режим", 1024, 768);
StartBrowser(0, "C:\Program Files (x86)\Mozilla Firefox\Firefox.exe", pathfolder()+"python\webdriver\geckodriver.exe", "Активный режим", 1024, 768);
StartBrowser(0, "C:\Program Files (x86)\Mozilla Firefox\Firefox.exe", pathfolder()+"python\webdriver\geckodriver.exe", "Активный режим", 1024, 768);
============================================================================================
[INTERACTION] - Описывает будет ди генерировать код блок, если к нему нет линии перехода.
Шаблоны имеющие разделы
[GROUP_BLOCK] с параметрами CONNECTION=0 по умолчани генерируют код, даже если к ним нет переходов.
Если блок не имеет раздела
[GROUP_BLOCK] с параметрами CONNECTION=0
и не имеет раздела
[INTERACTION] с параметром GENERATING_NO_LINK =1, то при отсутствие к этому блоку перехода, его код не будет генерироваться.
В приведенны шаблонах раздел
[INTERACTION] имею шаблоны
Code - позволяет вставить любой код
Mark - создает метку, на которую можно перейти по goto
============================================================================================