Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Rudeek on April 07, 2018, 01:47:00 PM
-
Есть у кого-нибудь идеи, как сделать, чтоб количество параметров(переключателей) в radiobox зависело от количества элементов в массиве? Т.е. чтоб с изменением количества элементов в массиве, изменялось и количество переключателей.
-
Это невозможно.
-
Тут костылить по серьезному надо:
-
Попробовал "сочинить" костыль. Проверял только на версии кликера 4.13.011b.
Основной код:STRSEPARATE("1:2:3:4:5",":",$arr)
STRWRITELN("input.txt",0,1)
$str=STRCONCAT("$res = RADIOBOX (",CHAR(34),"Выберите пункт",CHAR(34))
FOR($n=0,$n < ARRSIZE($arr))
$str=STRCONCAT($str,",",CHAR(34),$arr[$n],CHAR(34))
END_CYC
$str=STRCONCAT($str, ")")
TFWRITE("includ.cms",$str,2)
TFDELETE("includ.cms",3)
WAITMS(200)
EXECUTE("includ.cms")
$res=0
WHILE($res=0)
$res=TFREAD("input.txt",1)
WAITMS(100)
END_CYC
PRINT("Вы выбрали: ", $res)
HALT
Второй файл должен лежать рядом с основным и называться includ.cms.
Второй:#autorun
$res = RADIOBOX ("Выберите пункт","1","2","3","4","5")
STRWRITELN("input.txt",$res,1)
HALT(1)
P.S. При первом запуске возможно выскочит ошибка из-за отсутствия файла input.txt, но в дальнейшем всё работает.
P.P.S. Костыль он и есть костыль.
-
Вот с динамическим изменением количества элементов массива:
UNDEFINE($arr)
$rnd=RND(1,9)
FOR($size=0,$size<$rnd)
ARRPUSH($arr,$size+1)
END_CYC
PRINT("Размер массива-",$rnd)
STRWRITELN("input.txt",0,1)
$str=STRCONCAT("$res = RADIOBOX (",CHAR(34),"Выберите пункт",CHAR(34))
FOR($n=0,$n < ARRSIZE($arr))
$str=STRCONCAT($str,",",CHAR(34),$arr[$n],CHAR(34))
END_CYC
$str=STRCONCAT($str, ")")
TFWRITE("includ.cms",$str,2)
TFDELETE("includ.cms",3)
WAITMS(200)
EXECUTE("includ.cms")
$res=0
WHILE($res=0)
$res=TFREAD("input.txt",1)
WAITMS(100)
END_CYC
PRINT("Вы выбрали ",$res)
WAITMS(1000)
-
а вот и мой костыль :D
для начала нужно создать инклуд со свитчем такого вида:
SWITCH(arrsize($arr))
CASE(1)
$res = RADIOBOX("Выберите пункт",$arr[0])
CASE(2)
$res = RADIOBOX("Выберите пункт",$arr[0],$arr[1])
CASE(3)
$res = RADIOBOX("Выберите пункт",$arr[0],$arr[1],$arr[2])
//...........
//...........
//...........
END_SWITCH
делается просто:
TFWRITE ("include.cms", "SWITCH(arrsize($arr))")
FOR($a=1,$a<126) // 125 элементов переключателя
TFWRITE ("include.cms",STRCONCAT ("CASE(",$a,")") )
$str=STRCONCAT("$res = RADIOBOX(",CHAR(34),"Выберите пункт",CHAR(34))
FOR($b=0,$b<$a)
$str = STRCONCAT ($str,",$arr[",$b,"]")
END_CYC
TFWRITE ("include.cms",STRCONCAT ($str,")") )
END_CYC
TFWRITE ("include.cms", "END_SWITCH")
halt
на моем мониторе - 125 элементов для радиобокса это максимум. если больше, то окно залазит за пределы р.стола, и беда :(.
include создан, можно проверить:
UNDEFINE($arr)
UNDEFINE($n)
$rnd = rnd(1,125)
FOR($a=0,$a<$rnd) //рандомное количество элементов массива.
inc($n)
ARRPUSH($arr, STRCONCAT("opt-", $n))
END_CYC
print("Размер массива: ",arrsize($arr))
#include "include.cms"
print("Вы выбрали: ", $res)
wait(1)
20:03:41 Размер массива: 8
20:03:41 Вы выбрали: 8
20:03:59 Размер массива: 26
20:04:02 Вы выбрали: 26
20:04:03 Размер массива: 59
20:04:06 Вы выбрали: 59
20:04:07 Размер массива: 105
20:04:09 Вы выбрали: 105
20:04:10 Размер массива: 2
20:04:13 Вы выбрали: 2
20:04:14 Размер массива: 97
20:04:17 Вы выбрали: 97
20:04:18 Размер массива: 115
20:04:21 Вы выбрали: 115
20:04:22 Размер массива: 75
-
Непонятно одно - зачем увековечивать чужие ошибки в своих комментариях, теперь тему не почистить.
Почисть свои сообщения для старта. open_78 и dramster думаю поправят свои, по крайней мере надеюсь.