Adomb |
Отправлено: 01 Августа, 2015 - 15:15:11
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Здравствуйте.
Вот код.
код (Отобразить)CODE:int pos_size_check0[15][4];
string text_check0[15];
int flag_check0[15];
pos_size_check0[0][0]=43; pos_size_check0[0][1]=53; pos_size_check0[0][2]=60; pos_size_check0[0][3]=20;
pos_size_check0[1][0]=120; pos_size_check0[1][1]=53; pos_size_check0[1][2]=60; pos_size_check0[1][3]=20;
pos_size_check0[2][0]=197; pos_size_check0[2][1]=53; pos_size_check0[2][2]=60; pos_size_check0[2][3]=20;
pos_size_check0[3][0]=43; pos_size_check0[3][1]=95; pos_size_check0[3][2]=60; pos_size_check0[3][3]=20;
pos_size_check0[4][0]=121; pos_size_check0[4][1]=95; pos_size_check0[4][2]=60; pos_size_check0[4][3]=20;
pos_size_check0[5][0]=197; pos_size_check0[5][1]=94; pos_size_check0[5][2]=60; pos_size_check0[5][3]=20;
pos_size_check0[6][0]=43; pos_size_check0[6][1]=139; pos_size_check0[6][2]=60; pos_size_check0[6][3]=20;
pos_size_check0[7][0]=120; pos_size_check0[7][1]=137; pos_size_check0[7][2]=60; pos_size_check0[7][3]=20;
pos_size_check0[8][0]=198; pos_size_check0[8][1]=140; pos_size_check0[8][2]=60; pos_size_check0[8][3]=20;
pos_size_check0[9][0]=42; pos_size_check0[9][1]=181; pos_size_check0[9][2]=60; pos_size_check0[9][3]=20;
pos_size_check0[10][0]=119; pos_size_check0[10][1]=183; pos_size_check0[10][2]=60; pos_size_check0[10][3]=20;
pos_size_check0[11][0]=199; pos_size_check0[11][1]=182; pos_size_check0[11][2]=60; pos_size_check0[11][3]=20;
pos_size_check0[12][0]=40; pos_size_check0[12][1]=219; pos_size_check0[12][2]=60; pos_size_check0[12][3]=20;
pos_size_check0[13][0]=122; pos_size_check0[13][1]=221; pos_size_check0[13][2]=60; pos_size_check0[13][3]=20;
pos_size_check0[14][0]=207; pos_size_check0[14][1]=221; pos_size_check0[14][2]=60; pos_size_check0[14][3]=20;
text_check0[0]="Галка 0"; text_check0[1]="Галка 1"; text_check0[2]="Галка 2"; text_check0[3]="Галка 3"; text_check0[4]="Галка 4"; text_check0[5]="Галка 5"; text_check0[6]="Галка 6"; text_check0[7]="Галка 7"; text_check0[8]="Галка 8"; text_check0[9]="Галка 9"; text_check0[10]="Галка 10"; text_check0[11]="Галка 11"; text_check0[12]="Галка 12"; text_check0[13]="Галка 13"; text_check0[14]="Галка 14";
flag_check0[0]=0; flag_check0[1]=0; flag_check0[2]=0; flag_check0[3]=0; flag_check0[4]=0; flag_check0[5]=0; flag_check0[6]=0; flag_check0[7]=0; flag_check0[8]=0; flag_check0[9]=0; flag_check0[10]=0; flag_check0[11]=0; flag_check0[12]=0; flag_check0[13]=0; flag_check0[14]=0;
//////////
createdialog(0, CHECK, #pos_size_check0[0][0], #text_check0[0], #flag_check0[0]);
//////////
enabletimer(98);
CREATE_TIMER(1, 2000)
{
beep(2500, 400);
}
CREATE_TIMER(2, 2100)
{
beep(2500, 400);
}
CREATE_TIMER(3, 2200)
{
beep(2500, 400);
}
CREATE_TIMER(4, 2300)
{
beep(2500, 400);
}
CREATE_TIMER(5, 2400)
{
beep(2500, 400);
}
CREATE_TIMER(6, 2500)
{
beep(2500, 400);
}
CREATE_TIMER(7, 2600)
{
beep(2500, 400);
}
CREATE_TIMER(8, 2700)
{
beep(2500, 400);
}
CREATE_TIMER(9, 2800)
{
beep(2500, 400);
}
CREATE_TIMER(10, 2900)
{
beep(2500, 400);
}
CREATE_TIMER(11, 3000)
{
beep(2500, 400);
}
CREATE_TIMER(12, 3100)
{
beep(2500, 400);
}
CREATE_TIMER(13, 3200)
{
beep(2500, 400);
}
CREATE_TIMER(14, 3300)
{
beep(2500, 400);
}
CREATE_TIMER(15, 3400)
{
beep(2500, 400);
}
showdialog(0, "Диалог", 227, 234, 410, 300, 1, 1);
hidedialog(0);
showdialog(0, "Диалог", 227, 234, 410, 300, 1, 1);
CREATE_TIMER(98, 2000) //управление
{
if (flag_check0[0]>0)enabletimer(1); else disabletimer(1);
if (flag_check0[1]>0)enabletimer(2); else disabletimer(2);
if (flag_check0[2]>0)enabletimer(3); else disabletimer(3);
if (flag_check0[3]>0)enabletimer(4); else disabletimer(4);
if (flag_check0[4]>0)enabletimer(5); else disabletimer(5);
if (flag_check0[5]>0)enabletimer(6); else disabletimer(6);
if (flag_check0[6]>0)enabletimer(7); else disabletimer(7);
if (flag_check0[7]>0)enabletimer(8); else disabletimer(8);
if (flag_check0[8]>0)enabletimer(9); else disabletimer(9);
if (flag_check0[9]>0)enabletimer(10); else disabletimer(10);
if (flag_check0[10]>0)enabletimer(11); else disabletimer(11);
if (flag_check0[11]>0)enabletimer(12); else disabletimer(12);
if (flag_check0[12]>0)enabletimer(14); else disabletimer(14);
if (flag_check0[13]>0)enabletimer(13); else disabletimer(13);
if (flag_check0[14]>0)enabletimer(15); else disabletimer(15);
}
lo:
Ppause(5600);
goto lo;
function Ppause(int pp)
{
int tim=gettime();
a: if (gettime()-tim>pp)return;
sleep(5);goto a;
}
Не получается нормально управлять, таймеры не включаются, кроме первых шести. Что я делаю не так?
(Добавление)
Так же, если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз, то есть то пустая, то включённая загружается в диалог.(Отредактировано автором: 01 Августа, 2015 - 15:15:30) |
|
|
Kibor |
Отправлено: 01 Августа, 2015 - 16:21:36
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Adomb пишет: Не получается нормально управлять, таймеры не включаются, кроме первых шести. Что я делаю не так?
Дело в том, что в таймере 98 каждые 2000 мсек вызываются enabletimer для таймеров которым галки стоят.. а при вызове enabletimer обнуляется время отсчета таймера.
получаем...
таймер 9 имеет задержку 2800.. при включение галки таймера его время обнулили и должно пройти 2800 пока он не сработает. а оно не может пройти потому что через 2000 (98 тайм) опять вызовет enabletimer(9) и время обнулит..
enabletimer надо вызывать один раз для включения, так как при втором вызове она обнулит время..
Сделать эт можно так в таком как тут случае..
В начало кода перед createdialog
CODE:
int flag[16];
for (int n=1; n<16; n++) flag[n]=flag_check0[n-1];
В таймер 98.. пример одной строки..
CODE:if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
else {disabletimer(9); flag[9]=0;}
Adomb пишет: если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз
Есть такое.. Это в самом Кибор запомнились значения прошлого запуска и переключает.. надо исправить.
Если сейчас просто собрать в EXE и запускать один раз как EXE то будет нормально..
(Добавление)
В таймер 98 лучше так поставить код..
CODE:CREATE_TIMER(98, 2000) //óïðàâëåíèå
{
/*
if (flag_check0[0]>0)enabletimer(1); else disabletimer(1);
if (flag_check0[1]>0)enabletimer(2); else disabletimer(2);
if (flag_check0[2]>0)enabletimer(3); else disabletimer(3);
if (flag_check0[3]>0)enabletimer(4); else disabletimer(4);
if (flag_check0[4]>0)enabletimer(5); else disabletimer(5);
if (flag_check0[5]>0)enabletimer(6); else disabletimer(6);
if (flag_check0[6]>0)enabletimer(7); else disabletimer(7);
if (flag_check0[7]>0)enabletimer(8); else disabletimer(8);
if (flag_check0[8]>0)enabletimer(9); else disabletimer(9);
if (flag_check0[9]>0)enabletimer(10); else disabletimer(10);
if (flag_check0[10]>0)enabletimer(11); else disabletimer(11);
if (flag_check0[11]>0)enabletimer(12); else disabletimer(12);
if (flag_check0[12]>0)enabletimer(14); else disabletimer(14);
if (flag_check0[13]>0)enabletimer(13); else disabletimer(13);
if (flag_check0[14]>0)enabletimer(15); else disabletimer(15);
*/
for (int g=0; g<14; g++)
{
if (flag_check0[g]==1)
{
if (flag[g+1]==0)enabletimer(g+1);
flag[g+1]=1;
}
else {disabletimer(g+1); flag[g+1]=0;}
}
} |
|
|
Adomb |
Отправлено: 01 Августа, 2015 - 18:51:42
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Kibor, циклом for мы каждой переменной flag присваиваем состояние flag_check0`ов на момент запуска, 0 или1. А затем уже, при обработке таймером управления состояния галочек в диалоге, используем flag`и, чтобы программа понимала "трогать" нужный таймер или нет.
А так не правильно цикл будет написать?
CODE:int flag[14];
for (int n=0; n<15; n++) flag[n]=flag_check0[n];
flag`ов 15 штук получается, по количеству flag_check0` ов.
И ещё вопрос.
Без этого цикла, по идее же строки
CODE:if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
else {disabletimer(9); flag[9]=0;}
тоже в итоге будут работать? Присвоится flag`ам единица , а на второй-третий проход подхватит управление, так сказать. Верно?
(Добавление)
Adomb пишет: А так не правильно цикл будет написать?
CODE:int flag[15];
for (int n=0; n<15; n++) flag[n]=flag_check0[n];
поправил int flag[14]; на int flag[15]; |
|
|
Adomb |
Отправлено: 01 Августа, 2015 - 19:48:59
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Ясно
Тогда с комбо, к примеру, так будет правильно?
CODE:int n=10 //количество комбо в диалоге
int flag[n-1];
if (flag_combo0[0]==0)
{
if (flag[0]!=0){disabletimer(1);disabletimer(2);}
flag[0]=0;
}
if (flag_combo0[0]==1)
{
if (flag[0]!=1){enabletimer(1);disabletimer(2);}
flag[0]=1;
}
if (flag_combo0[0]==2)
{
if (flag[0]!=2){enabletimer(2);disabletimer(1);}
flag[0]=2;
}
...
(Добавление)
Kibor пишет: по умолчанию переменные не 0 а мусор
Но при проходе
CODE:if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
всё равно инициализируются ведь, а при следущих проходах - подхватятся, разве не так?
(Добавление)
если таймер считывает с диалога состояния чекбоксов каждые 2 секунды к примеру, то ведь не критично |
|
|
Adomb |
Отправлено: 01 Августа, 2015 - 19:56:26
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Kibor пишет: возможно, но все равно не правильно. а если второго подхода не будет? может это не таймер будет а функция? или таймер отключат.
надо инициализировать.
Ну это я понимаю ))
Как тогда быть с комбо, потому, что я выше написал про комбо, получается не красиво. )(Отредактировано автором: 01 Августа, 2015 - 19:57:30) |
|
|
Adomb |
Отправлено: 01 Августа, 2015 - 20:01:01
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Kibor пишет: уже не правильно. ошибка. только числа.
хорошо, понял.
Kibor пишет: и будет правильно или нет будет видно после полного кода. с контролами
ну при условии, что таймер считывания состояния диалога не отключается пока работает скрипт и считывает каждые 2 секунды, то с комбо можно так устроить логику. |
|
|
Kibor |
Отправлено: 01 Августа, 2015 - 20:02:54
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Adomb пишет: Так же, если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз, то есть то пустая, то включённая загружается в диалог.
пока это можно решить присваивая флаги после создания диалога
CODE:pause(100);
flag_check0[0]=1; flag_check0[1]=0; flag_check0[2]=0; flag_check0[3]=0; flag_check0[4]=0; flag_check0[5]=0; flag_check0[6]=0;
flag_check0[7]=0; flag_check0[8]=0; flag_check0[9]=0; flag_check0[10]=0; flag_check0[11]=0; flag_check0[12]=0; flag_check0[13]=0; flag_check0[14]=0;
|
|
|
|