007wan |
Отправлено: 31 Марта, 2017 - 19:50:43
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Помогите реализовать эту задумку, конечно, я не первый, кто придумал это, но все же...
Есть 4 галки, назовем их так:галка1,галка2,галка3, а состояние галки назовем "крестиком"(что бы не повторялось типа, "в галке1 стоит галка")
суть:
расскажу на примере, если ставим на галку1 крестик, то все остальные галки будут обнулены(т.е галка 2 и галка3)или же если поставим крестик на галку2, то остальные буду обнулены, таким образом пользователю даем право поставить крестик в ЛЮБУЮ ОДНУ галку.
Если не понятно, то в качестве реального примера можно взять в программе KIBOR--->Настройки--->Запись действий. Там стоят 3 галки и можно поставить крест в одну из трех галок. |
|
|
Kibor |
Отправлено: 01 Апреля, 2017 - 11:09:57
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Не все конечно за деньги. Этот раздел помощь. Тот заказы. Там за деньги. Тут вопросы.
Помощь сложно оказывать когда требуется писать код, а не помогать советом как написать..
idcco правильно дал ссылку. Так в примере реализовано это.
Вот таким планом это можно реализовать.
CODE:int pos_size_check0[3][4];
string text_check0[3];
int flag_check0[3];
pos_size_check0[0][0]=20; pos_size_check0[0][1]=18; pos_size_check0[0][2]=60; pos_size_check0[0][3]=20;
pos_size_check0[1][0]=91; pos_size_check0[1][1]=18; pos_size_check0[1][2]=60; pos_size_check0[1][3]=20;
pos_size_check0[2][0]=167; pos_size_check0[2][1]=18; pos_size_check0[2][2]=60; pos_size_check0[2][3]=20;
text_check0[0]="Галка 0"; text_check0[1]="Галка 1"; text_check0[2]="Галка 2";
flag_check0[0]=1; flag_check0[1]=0; flag_check0[2]=0;
//////////
createdialog(0, CHECK, #pos_size_check0[0][0], #text_check0[0], #flag_check0[0]);
//////////
showdialog(0, "Диалог", 558, 234, 250, 90, 1, 1);
//////////
int t_flag_check0[3];
for (int n=0; n<3; n++)t_flag_check0[n]=flag_check0[n];
enabletimer(0);
loop() sleep(10);//Убрать после теста
CREATE_TIMER(0, 100)//Номер таймера, выполнение таймера через мсек.
{
if (flag_check0[0]==1 && t_flag_check0[0]!=flag_check0[0])
{flag_check0[1]=0; flag_check0[2]=0; t_flag_check0[1]=0; t_flag_check0[2]=0; t_flag_check0[0]=flag_check0[0];}
if (flag_check0[1]==1 && t_flag_check0[1]!=flag_check0[1])
{flag_check0[0]=0; flag_check0[2]=0; t_flag_check0[0]=0; t_flag_check0[2]=0; t_flag_check0[1]=flag_check0[1];}
if (flag_check0[2]==1 && t_flag_check0[2]!=flag_check0[2]){
flag_check0[0]=0; flag_check0[1]=0; t_flag_check0[0]=0; t_flag_check0[1]=0; t_flag_check0[2]=flag_check0[2];}
if (flag_check0[0]==0 && flag_check0[1]==0 && flag_check0[2]==0)
{
if (t_flag_check0[0]!=flag_check0[0]){flag_check0[0]=1;t_flag_check0[0]=flag_check0[0];}
if (t_flag_check0[1]!=flag_check0[1]){flag_check0[1]=1;t_flag_check0[1]=flag_check0[1];}
if (t_flag_check0[2]!=flag_check0[2]){flag_check0[2]=1;t_flag_check0[2]=flag_check0[2];}
}
}
(Добавление)
Ну а вообще для такого стоит использовать список.. |
|
|
idcco |
Отправлено: 01 Апреля, 2017 - 11:44:53
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2017
Репутация: 5
|
CODE:int x, y;
//объявляем галки
int pos_size_check[4][4];//4 галки
string text_check[4];
int flag_check[4];
//ставим позиции, размеры, названия галок, и флаги (показаны или нет)
pos_size_check[0][0]=10; pos_size_check[0][1]=10; pos_size_check[0][2]=50; pos_size_check[0][3]=20;
flag_check[0]=1;
text_check[0]="Check1";
pos_size_check[1][0]=60; pos_size_check[1][1]=10; pos_size_check[1][2]=50; pos_size_check[1][3]=20;
flag_check[1]=0;
text_check[1]="Check2";
pos_size_check[2][0]=110; pos_size_check[2][1]=10; pos_size_check[2][2]=50; pos_size_check[2][3]=20;
flag_check[2]=0;
text_check[2]="Check3";
pos_size_check[3][0]=160; pos_size_check[3][1]=10; pos_size_check[3][2]=50; pos_size_check[3][3]=20;
flag_check[3]=0;
text_check[3]="Check4";
//создаем диалог
createdialog(0, CHECK, #pos_size_check[0][0], #text_check[0], #flag_check[0]);
getdisplay(32, x, y);
showdialog(0, "4 галки", x/2-110, y/2-30, 220, 60, 1, 0);
//дублируем флаги для отслеживания
int t_flag_check[4];
for (int n=0; n<4; n++)
t_flag_check[n]=flag_check[n];
enabletimer(0);
//запускаем основной цикл
loop() sleep(20);
//прописываем принцип переключателя галок
function checker()
{
if (flag_check[0]==1 && t_flag_check[0]!=flag_check[0]) //если в галке 1 стоит крестик и он был изменен
{
flag_check[1]=0; //отключаем остальные
flag_check[2]=0;
flag_check[3]=0;
t_flag_check[1]=0; //фиксируем изменения в дублирующих переменных
t_flag_check[2]=0;
t_flag_check[3]=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;
flag_check[3]=0;
t_flag_check[0]=0;
t_flag_check[2]=0;
t_flag_check[3]=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;
flag_check[3]=0;
t_flag_check[0]=0;
t_flag_check[1]=0;
t_flag_check[3]=0;
t_flag_check[2]=flag_check[2];
}
if (flag_check[3]==1 && t_flag_check[3]!=flag_check[3])
{
flag_check[0]=0;
flag_check[1]=0;
flag_check[2]=0;
t_flag_check[0]=0;
t_flag_check[1]=0;
t_flag_check[2]=0;
t_flag_check[3]=flag_check[3];
}
if (flag_check[0]==0 && flag_check[1]==0 && flag_check[2]==0 && flag_check[3]==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 (t_flag_check[2]!=flag_check[2])
{
flag_check[3]=1;
t_flag_check[3]=flag_check[3];
}
}
}
//отслеживаем события
CREATE_TIMER(0, 50)
{
//отслеживаем изменения галок
checker();
}
(Добавление)
Хах... То же самое почти ))) |
|
|
007wan |
Отправлено: 01 Апреля, 2017 - 16:29:19
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Kibor пишет: Не все конечно за деньги. Этот раздел помощь. Тот заказы. Там за деньги. Тут вопросы.
Помощь сложно оказывать когда требуется писать код, а не помогать советом как написать..
idcco правильно дал ссылку. Так в примере реализовано это.
Вот таким планом это можно реализовать.
CODE:int pos_size_check0[3][4];
string text_check0[3];
int flag_check0[3];
pos_size_check0[0][0]=20; pos_size_check0[0][1]=18; pos_size_check0[0][2]=60; pos_size_check0[0][3]=20;
pos_size_check0[1][0]=91; pos_size_check0[1][1]=18; pos_size_check0[1][2]=60; pos_size_check0[1][3]=20;
pos_size_check0[2][0]=167; pos_size_check0[2][1]=18; pos_size_check0[2][2]=60; pos_size_check0[2][3]=20;
text_check0[0]="Галка 0"; text_check0[1]="Галка 1"; text_check0[2]="Галка 2";
flag_check0[0]=1; flag_check0[1]=0; flag_check0[2]=0;
//////////
createdialog(0, CHECK, #pos_size_check0[0][0], #text_check0[0], #flag_check0[0]);
//////////
showdialog(0, "Диалог", 558, 234, 250, 90, 1, 1);
//////////
int t_flag_check0[3];
for (int n=0; n<3; n++)t_flag_check0[n]=flag_check0[n];
enabletimer(0);
loop() sleep(10);//Убрать после теста
CREATE_TIMER(0, 100)//Номер таймера, выполнение таймера через мсек.
{
if (flag_check0[0]==1 && t_flag_check0[0]!=flag_check0[0])
{flag_check0[1]=0; flag_check0[2]=0; t_flag_check0[1]=0; t_flag_check0[2]=0; t_flag_check0[0]=flag_check0[0];}
if (flag_check0[1]==1 && t_flag_check0[1]!=flag_check0[1])
{flag_check0[0]=0; flag_check0[2]=0; t_flag_check0[0]=0; t_flag_check0[2]=0; t_flag_check0[1]=flag_check0[1];}
if (flag_check0[2]==1 && t_flag_check0[2]!=flag_check0[2]){
flag_check0[0]=0; flag_check0[1]=0; t_flag_check0[0]=0; t_flag_check0[1]=0; t_flag_check0[2]=flag_check0[2];}
if (flag_check0[0]==0 && flag_check0[1]==0 && flag_check0[2]==0)
{
if (t_flag_check0[0]!=flag_check0[0]){flag_check0[0]=1;t_flag_check0[0]=flag_check0[0];}
if (t_flag_check0[1]!=flag_check0[1]){flag_check0[1]=1;t_flag_check0[1]=flag_check0[1];}
if (t_flag_check0[2]!=flag_check0[2]){flag_check0[2]=1;t_flag_check0[2]=flag_check0[2];}
}
}
(Добавление)
Ну а вообще для такого стоит использовать список..
[size=24][/size]Спасибо вам большое, буду знать
(Добавление)
Kibor пишет: Ну а вообще для такого стоит использовать список..
Список знаю как но у меня уже бот со списком и там 4-5 строки в списке, это не совсем красиво, да и еще не могли бы вы объяснить как сделать, что бы было 2 кнопки и одна работала с одним скриптом, другая с другим скриптом, и они не зависели друг от друга?(Отредактировано автором: 01 Апреля, 2017 - 16:30:19) |
|
|
|