Имеется кнопка "без фиксации", которая переключает режим работы механизма (переменная "Select", тип "Boolean"), а также меняет свой цвет в зависимости от состояния механизма (переменная "Sost", тип "Integer"). В основной переменной кнопки укажем "Select", а в дополнительной "Sost":
Далее создадим скрипт по событию "OnDataChangeEx" (изменилось значение доп. переменной):
Универсальный скрипт (можно применить к любой кнопке):
begin
if Sender is TM_Button then // проверяем, что Sender это кнопка
with Sender as TM_Button do // приводим Sender к типу "TM_Button"
case VariableEx.AsInt of // если значение доп. переменной кнопки равно
0 : States[0].Color := clGray; // изменить цвет на серый
1 : States[0].Color := clGreen; // изменить цвет на зеленый
2 : States[0].Color := clRed; // изменить цвет на красный
end;
end.
Теперь кнопка будет управлять значением переменной "Select" и менять свой цвет в зависимости от доп. переменной "Sost". Рассмотрим случай, когда необходимо брать состояния кнопки из битов доп. переменной:
begin
if Sender is TM_Button then // проверяем, что Sender это кнопка
with Sender as TM_Button do // приводим Sender к типу "TM_Button"
{если нулевой бит доп. переменной равен True, то }
if GetBit(VariableEx.Value, 0) = True then
States[0].Color := clGray // изменить цвет на серый
else // иначе…
States[0].Color := clGreen; // изменить цвет на зеленый
end.
Этот скрипт также универсальный и его можно применить для любой кнопки.