Здравствуйте.
1. В именах объектов нельзя использовать подстановки.
2. Работа с шаблонами в скриптах рассмотрена по ссылке (https://simple-scada.com/help/script/scriptstempl.html).
3. Рекомендуем всегда стараться использовать универсальные скрипты (https://simple-scada.com/help/script/script-types.html).
4. Ознакомьтесь с примерами использования кнопок по ссылке (https://simple-scada.com/help/manual/btnusing.html).
Для описанной Вами задачи можно использовать следующий способ:
1. В шаблоне создать необходимые кнопки с одним состоянием (https://clck.ru/3RCUrS) и задать нужное значение в состоянии для каждой кнопки.
2. В свойство "Тег (https://clck.ru/3RCV3j)" кнопок указать значения, соответствующие значениям, которые должны принимать кнопки при их нажатии.
3. Создать универсальный скрипт (https://simple-scada.com/help/script/universal-event.html) со следующим кодом:
begin
if Sender is TM_Button then // проверяем, что Sender это кнопка
with Sender as TM_Button do // приводим Sender к типу "TM_Button"
if AsInt = Tag then // если значение переменной кнопки равно значению, указанному в свойстве "Тег", то
Color := clGreen // изменить цвет кнопки на зеленый
else // иначе
Color := RGB(109,109,109) // изменить цвет кнопки на серый
end.
4. Назначить скрипт на событие "OnDataChange (https://clck.ru/3RCV4u)" всех кнопок.
5. Готово. Пример проекта во вложении.
Здравствуйте.
Нет необходимости в дублировании значения кнопки в свойство "Тег": if AsInt = States[0].Value then // если значение переменной кнопки равно значению,
Color := {Tag //} clGreen // указанному в свойстве "Значение"(т.е именно она и нажата последней), то изменить цвет кнопки на зеленый
else // иначе
Color := $6D6D6D; // не совсем понятно что делает SetInitialColor с кнопкой; // восстановить исходный цвет кнопки
Что касается исходного цвета кнопки, то оператор SetInitialColor более универсален, чем явное присвоение цвета (но не для кнопки).
Если есть необходимость в различном цвете нажатой кнопки, то для задания цвета можно использовать свойство "Тег".