Render.ru

Создание интерфейса скриптом (функцией) - КАК???

#1
Помогите, плиз! Есть много одинаковых кнопок (елемент button с одинаковыми параметрами), которые отличаются только именем и текстом на самих кнопках и прописывать их все в роллоуте как-то не красиво и муторно. Да и действия on <button_name> pressed do для этих кнопок отличаются только лишь одним параметром, а описывать приходится это для каждой кнопки. Получается слишком много однообразного и нецелессообразного текста в коде скрипта. Может есть какой-нибудь способ создания некоего шаблона, который бы использовался функцией таким образом, чтобы при запуске скрипта просто подставлялись только отличающиеся от других значения (<rollout>.controls=имя_кнопки, <rollout>.controls.text etc.), а все остальные одинаковые параметры (width, height,across,enabled etc.) брались бы из этого шаблона? Не знаю, достаточно ли толково объяснил проблему, но надеюсь на то, что спецы скрипта меня поймут и помогут дельным советом!
Заранее благодарен за помощь.
 
#2
Огромное тебе спасибо, Денис за помощь! Я всё таки решил эту проблему, но несколько другим способом - использовал команду execute :)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#3
Вопревых никто не запрещает тебе подставлять в качестве параметров элементы массива
Либо пользуйся функциями для динамического создания - RolloutCreator Functions
 
#4
Спасибо, Денис. Большая просьба покажи, плиз, на маленьком примере как подставить параметры из массива в элементы интерфейса. О бщем-то я представляю знаю как, но у меня не получается это проделать с элементами интерфейса. Как в явном виде указать в функции конкретный элемент? Пробовал через (rollout).controls, но для этого необходимо, чтобы кнопки были уже прописаны, а ведь они должны создаваться вот этой самой функцией... Вообщем, я что-то не догоняю, просвети меня, пожалуйста, или скинькакой-нибудь примерчик.

Вот более конкретный пример. Нужно чтобы при запуске утилиты создавался ряд кнопок с разными названиями и именами, причём в два ряда (across:2). Название элемента интерфейса и текст на кнопке могут быть одинаковыми и берутся из массива, который в свою очередь создаётся из строк считываемого текстового файла (как это сделать - вопросов нет).

Должно получиться что-то подобное:
------------------------------------
utility myUtil "TestButton"
(

button Red "Red" across:2 width:64 height:18 align:left
button Blue "Blue" width:64 height:18 align:right
button Yellow "Yellow" across:2 width:64 height:18 align:left
button White "White" width:64 height:18 align:right
button Black "Black" across:2 width:64 height:18 align:left
button Gray "Gray" width:64 height:18 align:right

)
ну и так далее... Всего около 20-и кнопок.

--------------------------------

А с RolloutCreator-ом я совсем запутался, попытался применить его в utility так всё время получаю ошибку "Reguired class or function, got:undefined"...:(
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
utility myUtil "TestButton"
(
local bName = #("button1",
"button2",
"button3",
"button4",
"button5",
"button6" )

spinner ind "Index ID" width:68 height:16 range:[0,2,0] type:#integer
button bb1 "bb1" across:2 width:64 height:18 align:#left
button bb2 "bb2" width:64 height:18 align:#right

fn setBtn =
(
bb1.text = bName[1 + ind.value]
bb2.text = bName[2 + ind.value]
)

on myUtil open do setBtn()
on ind changed val do setBtn()
)
 
Сверху