Кнопка по двум переменным

> [HTML Version](buttondbl.html)

Важно\! Перед работой с кнопками ознакомьтесь [с примерами их использования](https://simple-scada.com/help/manual/btnusing.html).

Допустим требуется кнопка, которая переключает режим работы механизма (переменная "Select", тип "Boolean"), а также меняет свой цвет в зависимости от состояния механизма (переменная "Sost", тип "Integer"). Создадим [кнопку](https://simple-scada.com/help/manual/button.html) с типом "с фиксацией". В свойстве "Переменная" кнопки укажем переменную "Select", а в свойстве "Доп. переменная" укажем переменную "Sost":

_(./images/script_recommendations_9.png)_

Далее [создадим скрипт по событию](by-obj-event.md) "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.

````
Этот скрипт также универсальный и его можно применить для любой кнопки.