31. Kibor - 08 Апреля, 2021 - 11:39:15 - перейти к сообщению
Обновил архив. Была описка в коде, которая блокировала перемещения по одной оси.
32. ivantu - 09 Апреля, 2021 - 00:17:21 - перейти к сообщению
Жаль что при уменьшения масштаба теряется производительность, при чем это сильно заметно, нужно уже сейчас это исправлять, т.к. дальше тяжелее будет.
33. Kibor - 09 Апреля, 2021 - 01:15:16 - перейти к сообщению
ivantu пишет:
Жаль что при уменьшения масштаба теряется производительность, при чем это сильно заметно, нужно уже сейчас это исправлять, т.к. дальше тяжелее будет.
Ну там вполне понятная причина.
Обновил архив. Причину убрал.
В правом верхнем углу информация сколько секунд затрачено на операцию.
Операция - это от момента отпускания кнопки до окончания прорисовки обновленной графики.
34. Kibor - 10 Апреля, 2021 - 13:19:36 - перейти к сообщению
Приступил к реализации принципа работы редактора.
Протестировать можно нажав на кнопку ТЕСТ в правом верхнем углу. В папке с редактором лежит файл Блок.txt, который можно редактировать.
Данный редактор не будет содержать в себе готовые блоки. Все блоки будут подключаться с файлов, которые пользователь сможет создавать сам и импортировать в редактор для дальнейшего использования. Или использовать созданные другими пользователями.
При импорте в редакторе будет на панели соответствующая этому блоку кнопка.
Созданные таким образом блоки будут содержать в себе весь функционал, который присутствует в старом редакторе.
То есть диалоговое окно настроек, тело функции, вызов функции, глобальный код, возвращаемые значения, выбор переходов Истина Ложь.
Все это можно будет создавать и корректировать созданные блоки по своему усмотрению.
По сути сам редактор будет просто универсальным движком, снабдив который соответствующей библиотекой блоков, можно будет создавать код на любом языке.
Файл созданного блока выглядит таким образом:
В нем содержится вся нужная информация от диалогового окна настроек (какой появляется при выборе свойства блока в старом редакторе), до кода, который он будет генерировать.
Пояснение:
BUTTON_CANCEL - Закрывает окно настроек не применив изменения.
BUTTON_OK - Закрывает окно настроек применив изменения.
Данные кнопки не имеют своих переменных и могут быть созданы только по одной.
Далее могут быть созданы в нужном количестве:
STATIC - Статичный текст. Не имеет переменной.
EDIT - Однострочный текст. Имеет переменную. Может принимать тип string, int, double, char, win, или переменную любого типа.
EDIT_MULTILINE - Многострочный текст. Может принимать тип string.
CHECK - Галка. Имеет переменную типа int, которая соответствует 0 или 1.
COMBO - Выпадающий список. Может возвращать string (текст пункта) или номер пункта в зависимости от указанного типа переменной. string или int.
BUTTON_FILE - Кнопка вызывающая диалоговое окно для выбора файла. Не имеет своей переменной. Указывается переменная типа string EDIT или EDIT_MULTILINE. После выбора файла в соответствующее поле к которому привязана переменная будет введен выбранный путь.
BUTTON_PATH - Кнопка вызывающая диалоговое окно для выбора пути. Все аналогично BUTTON_FILE.
Диалоговые окна свойств блоком являются не модальными и могут быть одновременно открыты и использованы для разных блоков схемы.
Протестировать можно нажав на кнопку ТЕСТ в правом верхнем углу. В папке с редактором лежит файл Блок.txt, который можно редактировать.
Данный редактор не будет содержать в себе готовые блоки. Все блоки будут подключаться с файлов, которые пользователь сможет создавать сам и импортировать в редактор для дальнейшего использования. Или использовать созданные другими пользователями.
При импорте в редакторе будет на панели соответствующая этому блоку кнопка.
Созданные таким образом блоки будут содержать в себе весь функционал, который присутствует в старом редакторе.
То есть диалоговое окно настроек, тело функции, вызов функции, глобальный код, возвращаемые значения, выбор переходов Истина Ложь.
Все это можно будет создавать и корректировать созданные блоки по своему усмотрению.
По сути сам редактор будет просто универсальным движком, снабдив который соответствующей библиотекой блоков, можно будет создавать код на любом языке.
Файл созданного блока выглядит таким образом:
В нем содержится вся нужная информация от диалогового окна настроек (какой появляется при выборе свойства блока в старом редакторе), до кода, который он будет генерировать.
Пояснение:
BUTTON_CANCEL - Закрывает окно настроек не применив изменения.
BUTTON_OK - Закрывает окно настроек применив изменения.
Данные кнопки не имеют своих переменных и могут быть созданы только по одной.
Далее могут быть созданы в нужном количестве:
STATIC - Статичный текст. Не имеет переменной.
EDIT - Однострочный текст. Имеет переменную. Может принимать тип string, int, double, char, win, или переменную любого типа.
EDIT_MULTILINE - Многострочный текст. Может принимать тип string.
CHECK - Галка. Имеет переменную типа int, которая соответствует 0 или 1.
COMBO - Выпадающий список. Может возвращать string (текст пункта) или номер пункта в зависимости от указанного типа переменной. string или int.
BUTTON_FILE - Кнопка вызывающая диалоговое окно для выбора файла. Не имеет своей переменной. Указывается переменная типа string EDIT или EDIT_MULTILINE. После выбора файла в соответствующее поле к которому привязана переменная будет введен выбранный путь.
BUTTON_PATH - Кнопка вызывающая диалоговое окно для выбора пути. Все аналогично BUTTON_FILE.
CODE:
[INTERFACE]
DIALOG, "Диалог настроек", 577, 452;
BUTTON_OK, "Принять", 365, 400, 100, 25;
BUTTON_CANCEL, "Закрыть", 470, 400, 100, 25;
STATIC, "Простой Edit", 10, 10, 90, 18;
STATIC, "Мультитекст", 10, 40, 90, 18;
EDIT, 105, 8, 120, 18, string Edit_S;
EDIT, 255, 80, 120, 18, int Edit_I;
EDIT, 255, 110, 120, 18, double Edit_D;
EDIT_MULTILINE, 105, 38, 120, 108, string Edit_Sm;
CHECK, "Включить опцию", 10, 155, 105, 18, int Check;
COMBO, "Выбор строки 1" "Выбор строки 2" "Выбор строки 3", 10, 180, 212, 200, string Combo_S;
STATIC, "Вернет текст строки", 250, 180, 190, 18;
COMBO, "Выбор числа 1" "Выбор числа 2" "Выбор числа 3", 10, 250, 212, 200, int Combo_I;
STATIC, "Вернет номер строки", 250, 250, 190, 18;
BUTTON_FILE, "Выбрать файл", 255, 10, 200, 25, Edit_S;
BUTTON_PATH, "Выбрать путь", 255, 50, 200, 25, Edit_Sm;
[END]
[GLOBAL]
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int Global_Var;
[END]
[FUNCTION_BODY]
function Fun(string Edit_S, int Edit_I, int Check, string Combo_S)
{
if (Combo_I==1)
{
if (Edit_S==Combo_S)return 1;
}
return 0;
}
[END]
[FUNCTION_CALL]
Fun("C:\", 52, 0, "Выбор строки 2")
[END]
[FUNCTION_RETURN]
ON;
TRUE, 1;
FALSE, 0;
[END]
DIALOG, "Диалог настроек", 577, 452;
BUTTON_OK, "Принять", 365, 400, 100, 25;
BUTTON_CANCEL, "Закрыть", 470, 400, 100, 25;
STATIC, "Простой Edit", 10, 10, 90, 18;
STATIC, "Мультитекст", 10, 40, 90, 18;
EDIT, 105, 8, 120, 18, string Edit_S;
EDIT, 255, 80, 120, 18, int Edit_I;
EDIT, 255, 110, 120, 18, double Edit_D;
EDIT_MULTILINE, 105, 38, 120, 108, string Edit_Sm;
CHECK, "Включить опцию", 10, 155, 105, 18, int Check;
COMBO, "Выбор строки 1" "Выбор строки 2" "Выбор строки 3", 10, 180, 212, 200, string Combo_S;
STATIC, "Вернет текст строки", 250, 180, 190, 18;
COMBO, "Выбор числа 1" "Выбор числа 2" "Выбор числа 3", 10, 250, 212, 200, int Combo_I;
STATIC, "Вернет номер строки", 250, 250, 190, 18;
BUTTON_FILE, "Выбрать файл", 255, 10, 200, 25, Edit_S;
BUTTON_PATH, "Выбрать путь", 255, 50, 200, 25, Edit_Sm;
[END]
[GLOBAL]
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int Global_Var;
[END]
[FUNCTION_BODY]
function Fun(string Edit_S, int Edit_I, int Check, string Combo_S)
{
if (Combo_I==1)
{
if (Edit_S==Combo_S)return 1;
}
return 0;
}
[END]
[FUNCTION_CALL]
Fun("C:\", 52, 0, "Выбор строки 2")
[END]
[FUNCTION_RETURN]
ON;
TRUE, 1;
FALSE, 0;
[END]
Диалоговые окна свойств блоком являются не модальными и могут быть одновременно открыты и использованы для разных блоков схемы.
35. Kibor - 11 Апреля, 2021 - 13:42:45 - перейти к сообщению
Обновил архив.
Доработал создание своих боков. Конкретнее механизм взаимодействия с созданным диалоговым окном.
В архиве код созданного блока:
[ESCAPE_CHAR] отвечает за установку экранирующего символа. По умолчанию им является ^. Если его надо изменить, то этот блок указывается вверху.
Указывают параметры по умолчанию, с какими будет открываться диалоговое окно настроек.
Параметры заполняются в соответствие с параметрами
и устанавливаются значения контролов в соответствие присвоенными им переменными.
При нажатие Принять, все заново введенные параметры считываются и заполняются соответствующие переменные, которые будут записаны в функцию при ее вставке в код.
Доработал создание своих боков. Конкретнее механизм взаимодействия с созданным диалоговым окном.
В архиве код созданного блока:
CODE:
[ESCAPE_CHAR]
^
[END]
[INTERFACE]
DIALOG, "Диалог настроек", 577, 452;
BUTTON_OK, "Принять", 365, 400, 100, 25;
BUTTON_CANCEL, "Закрыть", 470, 400, 100, 25;
STATIC, "Простой Edit", 10, 10, 90, 18;
STATIC, "Мультитекст", 10, 40, 90, 18;
EDIT, 105, 8, 120, 18, string Edit_S;
EDIT, 255, 80, 120, 18, int #Edit_I;
EDIT, 255, 110, 120, 18, double Edit_D;
EDIT_MULTILINE, 105, 38, 120, 108, string Edit_Sm;
CHECK, "Включить опцию", 10, 155, 105, 18, int Check;
COMBO, "Выбор строки 1" "Выбор строки 2" "Выбор строки 3", 10, 180, 212, 200, string Combo_S;
STATIC, "Вернет текст строки", 250, 180, 190, 18;
COMBO, "Выбор числа 1" "Выбор числа 2" "Выбор числа 3", 10, 250, 212, 200, int Combo_I;
STATIC, "Вернет номер строки", 250, 250, 190, 18;
BUTTON_FILE, "Выбрать файл", 255, 10, 200, 25, Edit_S;
BUTTON_PATH, "Выбрать путь", 255, 50, 200, 25, Edit_Sm;
[END]
[GLOBAL]
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int Global_Var;
[END]
[FUNCTION_BODY]
function Fun(string Edit_S, int #Edit_I, double Edit_D, string Edit_Sm, int Check, string Combo_S, int Combo_I)
{
string a="^"[END]";
if (Combo_I==1)
{
if (Edit_S==Combo_S)return 1;
}
return 0;
}
[END]
[FUNCTION_CALL]
Fun("C:\boltalka\Log.txt", #Yk_I, 0.25, "Строка1^r^nСтрока 2", 1, "Выбор строки 2", 2);
[END]
[FUNCTION_RETURN]
ON;
TRUE, 1;
FALSE, 0;
[END]
^
[END]
[INTERFACE]
DIALOG, "Диалог настроек", 577, 452;
BUTTON_OK, "Принять", 365, 400, 100, 25;
BUTTON_CANCEL, "Закрыть", 470, 400, 100, 25;
STATIC, "Простой Edit", 10, 10, 90, 18;
STATIC, "Мультитекст", 10, 40, 90, 18;
EDIT, 105, 8, 120, 18, string Edit_S;
EDIT, 255, 80, 120, 18, int #Edit_I;
EDIT, 255, 110, 120, 18, double Edit_D;
EDIT_MULTILINE, 105, 38, 120, 108, string Edit_Sm;
CHECK, "Включить опцию", 10, 155, 105, 18, int Check;
COMBO, "Выбор строки 1" "Выбор строки 2" "Выбор строки 3", 10, 180, 212, 200, string Combo_S;
STATIC, "Вернет текст строки", 250, 180, 190, 18;
COMBO, "Выбор числа 1" "Выбор числа 2" "Выбор числа 3", 10, 250, 212, 200, int Combo_I;
STATIC, "Вернет номер строки", 250, 250, 190, 18;
BUTTON_FILE, "Выбрать файл", 255, 10, 200, 25, Edit_S;
BUTTON_PATH, "Выбрать путь", 255, 50, 200, 25, Edit_Sm;
[END]
[GLOBAL]
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll");
int Global_Var;
[END]
[FUNCTION_BODY]
function Fun(string Edit_S, int #Edit_I, double Edit_D, string Edit_Sm, int Check, string Combo_S, int Combo_I)
{
string a="^"[END]";
if (Combo_I==1)
{
if (Edit_S==Combo_S)return 1;
}
return 0;
}
[END]
[FUNCTION_CALL]
Fun("C:\boltalka\Log.txt", #Yk_I, 0.25, "Строка1^r^nСтрока 2", 1, "Выбор строки 2", 2);
[END]
[FUNCTION_RETURN]
ON;
TRUE, 1;
FALSE, 0;
[END]
[ESCAPE_CHAR] отвечает за установку экранирующего символа. По умолчанию им является ^. Если его надо изменить, то этот блок указывается вверху.
CODE:
[FUNCTION_CALL]
Fun("C:\boltalka\Log.txt", #Yk_I, 0.25, "Строка1^r^nСтрока 2", 1, "Выбор строки 2", 2);
[END]
Fun("C:\boltalka\Log.txt", #Yk_I, 0.25, "Строка1^r^nСтрока 2", 1, "Выбор строки 2", 2);
[END]
Указывают параметры по умолчанию, с какими будет открываться диалоговое окно настроек.
Параметры заполняются в соответствие с параметрами
CODE:
[FUNCTION_BODY]
function Fun(string Edit_S, int #Edit_I, double Edit_D, string Edit_Sm, int Check, string Combo_S, int Combo_I)
{
.........
function Fun(string Edit_S, int #Edit_I, double Edit_D, string Edit_Sm, int Check, string Combo_S, int Combo_I)
{
.........
и устанавливаются значения контролов в соответствие присвоенными им переменными.
При нажатие Принять, все заново введенные параметры считываются и заполняются соответствующие переменные, которые будут записаны в функцию при ее вставке в код.
36. Zireael - 11 Апреля, 2021 - 16:57:44 - перейти к сообщению
Цитата:
BUTTON_CANSEL
BUTTON_CANСEL
Цитата:
BUTTON_FILE
Лучше вызывать нормальное окно для выбора файла, а не маленькое окошечко, в котором отображается 5 строчек.
CODE:
#define MAX_PATH 260
external(INT, "GetOpenFileName", "GetOpenFileNameA", "Comdlg32.dll");
external(INT, "sprintf_s", "sprintf_s", "msvcrt.dll");
new char path[MAX_PATH]; // сюда путь к файлу получим
path[0]=0;
char ofn[88]; // OPENFILENAMEA structure
initialarray(#ofn[0], 0);
char strFilter[99]; // формат файла
sprintf_s(address(#strFilter[0]), sizearray(strFilter), "%s%c%s%c%s%c%s%c%c",
"Точечный рисунок", 0, "*.bmp", 0,
"Текстовый файл", 0, "*.txt", 0, 0);
new char strInitialDir[MAX_PATH];
strcpy(#strInitialDir[0], pathfolder()); // начальный каталог
char strTitle[99];
strcpy(#strTitle[0], "Открыть файл"); // заголовок диалога
writeaddress(sizearray(ofn), address(#ofn[0]));
writeaddress(address(#strFilter[0]), address(#ofn[12])); // тип файла
writeaddress(address(#path[0]), address(#ofn[28])); // путь к файлу
writeaddress(sizearray(path), address(#ofn[32])); // размер буфера
writeaddress(address(#strInitialDir[0]), address(#ofn[44])); // начальный каталог
writeaddress(address(#strTitle[0]), address(#ofn[48])); // заголовок диалога
int x=GetOpenFileName(address(#ofn[0]));
if(x)messagebox(format(#path[0]));
else messagebox("Ничего не выбрано");
external(INT, "GetOpenFileName", "GetOpenFileNameA", "Comdlg32.dll");
external(INT, "sprintf_s", "sprintf_s", "msvcrt.dll");
new char path[MAX_PATH]; // сюда путь к файлу получим
path[0]=0;
char ofn[88]; // OPENFILENAMEA structure
initialarray(#ofn[0], 0);
char strFilter[99]; // формат файла
sprintf_s(address(#strFilter[0]), sizearray(strFilter), "%s%c%s%c%s%c%s%c%c",
"Точечный рисунок", 0, "*.bmp", 0,
"Текстовый файл", 0, "*.txt", 0, 0);
new char strInitialDir[MAX_PATH];
strcpy(#strInitialDir[0], pathfolder()); // начальный каталог
char strTitle[99];
strcpy(#strTitle[0], "Открыть файл"); // заголовок диалога
writeaddress(sizearray(ofn), address(#ofn[0]));
writeaddress(address(#strFilter[0]), address(#ofn[12])); // тип файла
writeaddress(address(#path[0]), address(#ofn[28])); // путь к файлу
writeaddress(sizearray(path), address(#ofn[32])); // размер буфера
writeaddress(address(#strInitialDir[0]), address(#ofn[44])); // начальный каталог
writeaddress(address(#strTitle[0]), address(#ofn[48])); // заголовок диалога
int x=GetOpenFileName(address(#ofn[0]));
if(x)messagebox(format(#path[0]));
else messagebox("Ничего не выбрано");
37. Kibor - 11 Апреля, 2021 - 17:06:18 - перейти к сообщению
Zireael пишет:
Цитата:
BUTTON_CANSEL
BUTTON_CANСEL
BUTTON_CANSEL
BUTTON_CANСEL
Да уж......)
Обновил архив и исправил примеры.
Zireael пишет:
Лучше вызывать нормальное окно для выбора файла, а не маленькое окошечко, в котором отображается 5 строчек.
Согласен.
38. ivantu - 12 Апреля, 2021 - 00:38:42 - перейти к сообщению
кнопка Тест перестала вызывать Диалог.
39. Kibor - 12 Апреля, 2021 - 00:53:39 - перейти к сообщению
Обновил.
А что показывает кнопка правее кнопок масштаба?
А что показывает кнопка правее кнопок масштаба?
40. ivantu - 12 Апреля, 2021 - 02:06:02 - перейти к сообщению