Эта версия пополнила себя немодальными диалоговыми окнами, которые могут оставаться активными во время работы скрипта и позволяют в реальном режиме управлять работой бота с помощью расположенных на них контролах.
Данные диалоги можно как использовать вспомогательно к главному диалогу, вызывая по мере необходимости, так и использовать в качестве главного окна программы.
Они обеспечивают двухстороннюю связь с работающим скриптом. Любые изменения в контролах этих окон сразу попадает в переменные работающей программы и меняют ее работу.
Так же и работающий скрипт может изменить эти переменные и это сразу попадет в диалог.
То есть если мы к примеру нажали на кнопку или выбрали галку или список или ввели текст, в скрипте сразу это попадет в переменные не требуя никаких дополнительных функций. Так же и изменением переменных со стороны скрипта. Сразу отобразится в диалоге изменив свойства контрола, текст и т.д.
Доступные контролы:
Цитата:
BUTTON - кнопка. допускается до 30 кнопок в каждом диалоге..
CHECK - галка. до 30.
EDIT - поле для ввода. до 30..
COMBO - список выпадающий. до 30..
STATIC - статичный текст. до 30..
для создаения диалога необходимо вызвать функцию createdialog с необходимыми параметрами в которые входят описание контролов и номер диалога.
второй - указатель на двухмерный массив int типа int pos_size_button[2][4]; где первый индекс количество кнопок, второй позиции по x y и ширина и высота.
Цитата:
int pos_size_button[2][4];
pos_size_button[0][0]=5; pos_size_button[0][1]=40; pos_size_button[0][2]=110; pos_size_button[0][3]=20;
кнопка в позиции x5 y40, шириной 110, высотой 20.
третий - указатель на одномерный массив string типа string text_button[2]; равный количеству кнопок. в нем названия.
четвертый указатель на массив int равный количеству кнопок типа int flag_button[2];
флаг. с помощью этой переменной скрипт будет узнавать состояние кнопки.
1 - нажали.
0 - не нажали.
как и кнопка параметры.
третий текст в поле. эта переменная меняется сразу с вводом в поле текста. и наобором. в поле текст меняется при записи в переменную.
список выпадающий.
#text_combo[0][0] указатель на двухмерный массив string.. в нем текст списков.
первый индекс массива равный количеству списков, а второй равен самому большрму списку (количеству строк)
Цитата:
string text_combo[3][3];
text_combo[0][0]="строка 0 первого списка"; text_combo[0][1]="строка 1 первого списка";
text_combo[1][0]="строка 0 второго списка"; text_combo[1][1]="строка 1 второго списка"; text_combo[1][2]="строка 2 второго списка";
text_combo[2][0]="строка 0 третьего списка"; text_combo[2][1]="строка 1 третьего списка";
#flag_combo[0] - указатель на массив флагов списков. содержит номер строки которая включена. 0 - самый верх.
после создания диалога необходимо показать его с помощью вызова showdialog
showdialog(0, "заголовок", позицияX, позицияY, ширина, высота, 1, 0);
первый - номер созданного диалога.
седьмой: 0 - при нажатие крестика (закрыть) скрывает окно. вызвать его можно опять только программно. 1 -при нажатие крестика (закрыть) останавливает скрипт. 2 - при нажатие крестика (закрыть) сворачивает окно, 3 - при нажатие крестика закрывает программу, 4 - при нажатие на крестик данное действие игнорируется и можно обработать сообщение WM_CLOSE.
восьмой ... 0 - окно обычное.. 1- находится поверх всех окон..
при необходимости диалог можно скрыть вызвав hidedialog hidedialog(0);
и уничтожить destroydialog(0);
В принципе кибор следит за тем что бы не пропускать ошибки связанные с уничтожением созданием и если не уничтожили и опять создаете под таким номеров уничтожит сам. как и в конце работы скрипта тоже..
gethwnd(0);
Возвращает HWND созданного диалогового окна с помощью createdialog, для использования в WinApi. gethwnd
================================================================================================================================ ========================
как я писал не требуется ничего специально отслеживать. переменные флаги и тестовые переменные будут меняться с любым изменением в диалоге и наоборот.
отдельно о BUTTON. ее флаг изначально установлен в 0. при каждом нажатие он увеличивается на 1. то есть даже если скрипт пропустил нажатия он когда считает переменную узнает сколько кликов было.
для работы с BUTTON надо использовать таймер в котором пишем такой код..
Цитата:
a: if (flag_button[0]>0)//пока не отработает все клики
{
flag_button[0]--;
scrin();//вызов функции которая выполнится при нажатие
goto a;
}
или
Цитата:
if (flag_button[0]>0)//один раз только не зависимо от кликов
{
flag_button[0]=0;// обнуляем
scrin();//вызов функции которая выполнится при нажатие
}
============================================================
пример
CODE:
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
int n=0;
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int col, x, y;
//=================================== кнопки
int pos_size_button[2][4];//две кнопки (позиции и размер)
string text_button[2];//названия кнопок
int flag_button[2];//флаг (нажата не нажата)
//устанавливаем позицию и рамер кнопки 1
pos_size_button[0][0]=5; pos_size_button[0][1]=40; pos_size_button[0][2]=110; pos_size_button[0][3]=20;
text_button[0]="Сохранить скрин в";//название кнопки 1
//устанавливаем позицию и рамер кнопки 2
pos_size_button[1][0]=110; pos_size_button[1][1]=145; pos_size_button[1][2]=129; pos_size_button[1][3]=20;
text_button[1]="Остановить скрипт";//название кнопки 2
//=================================== поля ввода текста
int pos_size_edit[2][4];//два поля ввода текста (позиции и размер)
string text_edit[2];//текст а полях
//устанавливаем позицию и рамер поля ввода текста 1
pos_size_edit[0][0]=5; pos_size_edit[0][1]=115; pos_size_edit[0][2]=70; pos_size_edit[0][3]=20;
text_edit[0]="text";//начальный текст 1
//устанавливаем позицию и рамер поля ввода текста 2
pos_size_edit[1][0]=86; pos_size_edit[1][1]=115; pos_size_edit[1][2]=153 ; pos_size_edit[1][3]=20;
text_edit[1]="editsddgfdfg";//начальный текст 2
//=================================== галки
int pos_size_check[4][4];//4 галки (позиции и размер)
string text_check[4];//названия галок
int flag_check[4];//флаг (зажата не зажата)
//устанавливаем позицию и рамер галки 1
pos_size_check[0][0]=120; pos_size_check[0][1]=40; pos_size_check[0][2]=38; pos_size_check[0][3]=20;
flag_check[0]=1;//флаг галки 1 (зажата не зажата)
text_check[0]="bmp";//название галки 1
//устанавливаем позицию и рамер галки 2
pos_size_check[1][0]=162; pos_size_check[1][1]=40; pos_size_check[1][2]=38; pos_size_check[1][3]=20;
flag_check[1]=0;//флаг галки 2 (зажата не зажата)
text_check[1]="jpg";//название галки 2
//устанавливаем позицию и рамер галки 3
pos_size_check[2][0]=202; pos_size_check[2][1]=40; pos_size_check[2][2]=38; pos_size_check[2][3]=20;
flag_check[2]=0;//флаг галки 3 (зажата не зажата)
text_check[2]="png";//название галки 3
//устанавливаем позицию и рамер галки 4
pos_size_check[3][0]=5; pos_size_check[3][1]=65; pos_size_check[3][2]=215; pos_size_check[3][3]=20;
flag_check[3]=0;//флаг галки 4 (зажата не зажата)
text_check[3]="Сворачивать окно перед скриншотом";//название галки 4
///=================================== список выпадающий
int pos_size_combo[1][4];//один выпадающий список (позиции и размер)
string text_combo[1][2];//текст га два пункта (установить по максимальному списку)
int strok_combo[1];//количество строк
int flag_combo[1];//номер пункта
//устанавливаем позицию и рамер списка
pos_size_combo[0][0]=5; pos_size_combo[0][1]=145; pos_size_combo[0][2]=100; pos_size_combo[0][3]=100;
flag_combo[0]=0;//номер пункта
strok_combo[0]=2;//количество строк
text_combo[0][0]="Остановить скрипт"; text_combo[0][1]="Закрыть программу";//текст строк
//=================================== статичный текст (можно изменять)
int pos_size_static[2][4];//2 статичный текст (позиции и размер)
string text_static[2];//2 статичный текст (текст)
//устанавливаем позицию и рамер текста 1
pos_size_static[0][0]=20; pos_size_static[0][1]=10; pos_size_static[0][2]=200; pos_size_static[0][3]=18;
text_static[0]="";//текст 1
//устанавливаем позицию и рамер текста 2
pos_size_static[1][0]=45; pos_size_static[1][1]=95; pos_size_static[1][2]=150; pos_size_static[1][3]=18;
text_static[1]="Цвет пикселя под курсором";//текст 2
int t_flag_check[3];
for (n=0; n<3; n++)t_flag_check[n]=flag_check[n];
enabletimer(0);//включаем таймер для обработки сообщений от диалога
lop:;//тут основная петля бота
col=getcolor();
text_edit[0]=format(col);
text_edit[1]="R "+format(rvalue(col))+" G "+format(gvalue(col))+" B "+format(bvalue(col));
sleep(20);
goto lop;
er: destroydialog (0);//уничтожение диалог..
function scrin()//скриншот
{
if (flag_check[3]==1){hidedialog(0);sleep(200);}//сворачивать
if (flag_check[0]==1)//bmp
{
savescreen(pathfolder()+"image.bmp", 0, 0, x, y, -1);
sleep(500);
start(pathfolder()+"image.bmp");
}
if (flag_check[1]==1)//jpg
{
savescreen(JPG, pathfolder()+"image.jpg", 0, 0, x, y, -1);
sleep(500);
start(pathfolder()+"image.jpg");
}
if (flag_check[2]==1)//png
{
savescreen(PNG, pathfolder()+"image.png", 0, 0, x, y, -1);
sleep(500);
start(pathfolder()+"image.png");
}
//развернуть если свернутое
if (flag_check[3]==1)showdialog(0, "Немодальный диалог", x/2-125, y/2-110, 250, 220, 1, 0);
}
function perekluchatel_galok()//реализация переключателя галок
{
if (flag_check[0]==1 && t_flag_check[0]!=flag_check[0])
{flag_check[1]=0; flag_check[2]=0; t_flag_check[1]=0; t_flag_check[2]=0; t_flag_check[0]=flag_check[0];}
if (flag_check[1]==1 && t_flag_check[1]!=flag_check[1])
{flag_check[0]=0; flag_check[2]=0; t_flag_check[0]=0; t_flag_check[2]=0; t_flag_check[1]=flag_check[1];}
if (flag_check[2]==1 && t_flag_check[2]!=flag_check[2]){
flag_check[0]=0; flag_check[1]=0; t_flag_check[0]=0; t_flag_check[1]=0; t_flag_check[2]=flag_check[2];}
if (flag_check[0]==0 && flag_check[1]==0 && flag_check[2]==0)
{
if (t_flag_check[0]!=flag_check[0]){flag_check[0]=1;t_flag_check[0]=flag_check[0];}
if (t_flag_check[1]!=flag_check[1]){flag_check[1]=1;t_flag_check[1]=flag_check[1];}
if (t_flag_check[2]!=flag_check[2]){flag_check[2]=1;t_flag_check[2]=flag_check[2];}
}
}
//отлов нажатия кнопки сериншота
if (flag_button[0]>0)
{
flag_button[0]=0;//обнулить флаг нажатия кнопки..
scrin();//скриншот
}
//отлов нажатия кнопки выхода
if (flag_button[1]>0)
{
flag_button[0]=0;//обнулить флаг нажатия кнопки..
if (flag_combo[0]==0)goto er;
if (flag_combo[0]==1){destroydialog (0);close();}
}
//получит время и записать в переменную статичного текста
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
text_static[0]="Время: "+format(Hour)+" часов, "+format(Minute)+" минут, "+format(Second)+" секунд";
if (flag_combo[0]==0)text_button[1]="Остановить скрипт";//меняем текст кнопки
if (flag_combo[0]==1)text_button[1]="Закрыть программу";//меняем текст кнопки
}
пример чата между программами.
собрать эти 2 скрипта в exe......
1 скрипт. собрать в exe и назвать его Prog 1
Цитата:
int col, x,y;
//=================================== кнопки
int pos_size_button[1][4];//две кнопки (позиции и размер)
string text_button[1];//названия кнопок
int flag_button[1];//флаг (нажата не нажата)
//устанавливаем позицию и рамер кнопки 1
pos_size_button[0][0]=5; pos_size_button[0][1]=57; pos_size_button[0][2]=235; pos_size_button[0][3]=20;
text_button[0]="Отправить";//название кнопки 1
//=================================== поля ввода текста
int pos_size_edit[1][4];//два поля ввода текста (позиции и размер)
string text_edit[1];//текст а полях
//устанавливаем позицию и рамер поля ввода текста 1
pos_size_edit[0][0]=5; pos_size_edit[0][1]=35; pos_size_edit[0][2]=235; pos_size_edit[0][3]=20;
text_edit[0]="";//начальный текст 1
//=================================== статичный текст (можно изменять)
int pos_size_static[1][4];//2 статичный текст (позиции и размер)
string text_static[1];//2 статичный текст (текст)
//устанавливаем позицию и рамер текста 1
pos_size_static[0][0]=5; pos_size_static[0][1]=10; pos_size_static[0][2]=235; pos_size_static[0][3]=18;
text_static[0]="";//текст 1
win w=window ("Prog 2");
char ch[512];
lop:
if (w==0)
{
w=window ("Prog 2");
sleep (20);
goto lop;
}
readbuffer(#ch[0], 512, w);//Читаем с буфера программы на которую указывает указатель w
text_static[0]=format(#ch[0]);
sleep(20);
goto lop ;
CREATE_TIMER(0, 50)//выполнение таймера через 50 мсек.
{
if (flag_button[0]>0)
{
flag_button[0]=0;//обнулить флаг нажатия кнопки..
strcpy(#ch[0], text_edit[0]);
writebuffer(#ch[0], 512, w);
}
}
2 скрипт. собрать в exe и назвать его Prog 2
Цитата:
int col, x,y;
//=================================== кнопки
int pos_size_button[1][4];//две кнопки (позиции и размер)
string text_button[1];//названия кнопок
int flag_button[1];//флаг (нажата не нажата)
//устанавливаем позицию и рамер кнопки 1
pos_size_button[0][0]=5; pos_size_button[0][1]=57; pos_size_button[0][2]=235; pos_size_button[0][3]=20;
text_button[0]="Отправить";//название кнопки 1
//=================================== поля ввода текста
int pos_size_edit[1][4];//два поля ввода текста (позиции и размер)
string text_edit[1];//текст а полях
//устанавливаем позицию и рамер поля ввода текста 1
pos_size_edit[0][0]=5; pos_size_edit[0][1]=35; pos_size_edit[0][2]=235; pos_size_edit[0][3]=20;
text_edit[0]="";//начальный текст 1
//=================================== статичный текст (можно изменять)
int pos_size_static[1][4];//2 статичный текст (позиции и размер)
string text_static[1];//2 статичный текст (текст)
//устанавливаем позицию и рамер текста 1
pos_size_static[0][0]=5; pos_size_static[0][1]=10; pos_size_static[0][2]=235; pos_size_static[0][3]=18;
text_static[0]="";//текст 1
if (flag_button0[2]>0)
{
flag_button0[2]=0;
if (STATUS==1)messagebox ("активна");
if (STATUS==0)messagebox ("не активна");
}
sleep(10);//Убрать после теста
}
Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013
Репутация: 2
Грацио!!! Во истину нужная обнова! Теперь есть способ отслеживать переменные скрипта в процессе работы так и ручной подстройки во время выполнения. Запуск любых функций нажатием кнопки. Скрипт станет наглядным. Создание окон возможно в любой части скрипта?
yo1
Отправлено: 19 Марта, 2015 - 13:57:28
Участник
Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2014
Репутация: 0
Только один диалог можно вызвать?
Может ли диалог вызвать другой диалог?
И теперь Кибор кушает почему то почти 500 мб оперативной памяти, раньше вроде было меньше.
Kibor
Отправлено: 19 Марта, 2015 - 14:26:06
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Stanislaw пишет:
Создание окон возможно в любой части скрипта?
да. ограничений нет.
теперь можно делать любые наглядные программы с полноценным интерфейсом реализующие потенциал кибора.
yo1 пишет:
Только один диалог можно вызвать?
Может ли диалог вызвать другой диалог?
И теперь Кибор кушает почему то почти 500 мб оперативной памяти, раньше вроде было меньше.
до 3 одновременно что бы были открыты. а вообще сколько угодно... просто переделывать в createdialog..
при установке стандартных настроек выделения память кибор ест при запуске 125 метров. если увеличить в настройках - больше от установки. так же увеличивается от величены скрипта. а вообще кибор среда... собирать надо в exe после.
с одного диалога можно вызывать другие и наоборот. смотрите параметры showdialog восемь как будут реагировать кнопки закрытия ...
пример одного с другого...
CODE:
int col, x,y;
//диалог 1
int pos_size_button[1][4];
string text_button[1];
int flag_button[1];
pos_size_button[0][0]=5; pos_size_button[0][1]=5; pos_size_button[0][2]=235; pos_size_button[0][3]=40;
text_button[0]="второй вызвать";
//диалог 2
int pos_size_button1[1][4];
string text_button1[1];
int flag_button1[1];
pos_size_button1[0][0]=5; pos_size_button1[0][1]=5; pos_size_button1[0][2]=135; pos_size_button1[0][3]=40;
text_button1[0]="закрыть";
getdisplay(col, x, y);//узнаем разрешение что бы вывести по центру
CREATE_TIMER(0, 50)//выполнение таймера через 50 мсек.
{
if (flag_button[0]>0)
{
flag_button[0]=0;//обнулить флаг нажатия кнопки..
//Визуализируем диалог 1
showdialog(1, "диалог 2", x/2-125+100, y/2-110+100, 150, 120, 0, 1);
}
if (flag_button1[0]>0)
{
flag_button1[0]=0;//обнулить флаг нажатия кнопки..
//Визуализируем диалог 1
hidedialog(1);
}
}
первый как главный. при закрытие завершит скрипт. второй дочерный. когда закрывается просто закрывает окно.
комбинировать как угодно можно. при одновременном открытие не блокируют другие диалоги открытые ранее..
Skycrew
Отправлено: 19 Марта, 2015 - 15:08:37
Мастер
Покинул форум
Сообщений всего: 123
Дата рег-ции: Июль 2014
Репутация: 0
Отличная штука! Давно ждали полноценного интерфеса.. Теперь заживем!))
>> при установке стандартных настроек выделения память кибор ест при запуске 125 метров. если увеличить в настройках - больше от установки. так же увеличивается от величены скрипта. а вообще кибор среда... собирать надо в exe после.
Правильно ли я понял, что собранный в exe бот работает лучше и потребляет меньше оперативки чем запущенный из среды?
Kibor
Отправлено: 19 Марта, 2015 - 15:38:16
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Skycrew пишет:
Правильно ли я понял, что собранный в exe бот работает лучше и потребляет меньше оперативки чем запущенный из среды?
не совсем.
собранный ест столько сколько надо. конечно все равно много, но так устроено...
кибор столько сколько установили настройки. если мало установить долго увеличивает поэтому надо устанавливать с запасом.
ну а вообще собранный лучше и быстрее грузится
Tishe
Отправлено: 19 Марта, 2015 - 17:05:04
Прохожий
Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2015
Репутация: 0
А у меня среда запущеная кушает меньше 80Мб
Skycrew
Отправлено: 19 Марта, 2015 - 17:10:58
Мастер
Покинул форум
Сообщений всего: 123
Дата рег-ции: Июль 2014
Репутация: 0
Kibor пишет:
Skycrew пишет:
Правильно ли я понял, что собранный в exe бот работает лучше и потребляет меньше оперативки чем запущенный из среды?
не совсем.
собранный ест столько сколько надо. конечно все равно много, но так устроено...
кибор столько сколько установили настройки. если мало установить долго увеличивает поэтому надо устанавливать с запасом.
ну а вообще собранный лучше и быстрее грузится
ясно спасибо, значит будем собирать в exe.. Единственная проблема: невозможность установить интервал между нажатием и отпусканием для exe, а по дефолту стоит очень маленький и в моей лагучей игре часто не прокликивает(
Kibor
Отправлено: 19 Марта, 2015 - 17:27:33
Эксперт
Покинул форум
Сообщений всего: 8203
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Tishe пишет:
А у меня среда запущеная кушает меньше 80Мб
зайдите в настройки - трансляция.
первый параметр выделение памяти.
если поставить 10 будет 30 метров, но на большом скрипте тормоз будет пока обработка его происходит.
если быстро обрабатывает не надо увеличивать. если тормозит то надо будет увеличить и есть больше будет. это кибор. exe сам выделит что надо.
Skycrew пишет:
Единственная проблема: невозможность установить интервал между нажатием и отпусканием для exe, а по дефолту стоит очень маленький и в моей лагучей игре часто не прокликивает(
ну добавлю потом в функцию optios... пока можно самому реализовать..
примерно так
Цитата:
mouse_lift(5, 7);
function mouse_lift(int x, int y)
{
mousedown(LEFT, x, y);
sleep(200);
mouseup(LEFT, x, y);
}
Stanislaw
Отправлено: 22 Апреля, 2015 - 11:20:00
Участник
Покинул форум
Сообщений всего: 56
Дата рег-ции: Дек. 2013
Репутация: 2
Изучал демонстрационный скрипт и в конце обнаружил
if (flag_combo[0]==0)text_button[1]="Остановить скрипт";//меняем текст кнопки
if (flag_combo[0]==1)text_button[1]="Закрыть программу";//меняем текст кнопки
}
разве не должно быть так
if (flag_combo[0]==0){text_button[1]="Остановить скрипт";}//меняем текст кнопки
if (flag_combo[0]==1){text_button[1]="Закрыть программу";}//меняем текст кнопки
}
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.