Здравствуйте, подскажите, буду очень признателен!
Из руководства:
Если необходимо изменять цвет по биту одной переменной, а скорость анимации по биту другой переменной, то нужно указать в свойстве изображения «Переменная» первую переменную, а в свойстве «Доп. переменная» вторую переменную. Далее, нужно написать универсальный скрипт приведенный ниже и установить его на событие OnDataChange и OnDataChangeEx требуемых изображений:
begin
if Sender is TM_Image then // сначала убедимся, что скрипт вызван объектом «Изображение»
with Sender as TM_Image do // далее будем работать с объектом Sender, как с изображением
begin
// меняем цвет изображения по основной переменной
if GetBit(AsInt, 3) = TRUE then
Color := clGreen
else
Color := clRed;
// меняем скорость анимации изображения по доп. переменной «VariableEx»
if GetBit(VariableEx.AsInt, 1) = TRUE then
AnimSpeed := 10
else
AnimSpeed := 0;
end;
end.
Мой случай:
У меня есть две переменные status_36 и status_37, по status_36 по биту 5 сигнал аварии, транспарант( кнопка ) должна гореть красным.
По status_37 по биту 0 приходит сигнал работы, кнопка должна при работе гореть зеленым.
Далее, свойствах кнопки я могу указать основную и доп. переменную, а также могу указать бит и тег, в событиях кнопки есть ondatachange и ondatachangeEx.
Нужно ли в свойствах кнопки вписывать биты, по которым приходит сигнал, если да то как , так как есть одна строка куда указывается бит и одна строка, где указывается тег. А у меня же два бита используются 5 и 0.
Проблема в том , что в свойствах кнопки есть только одно поле «Бит», но у меня два бита в разных переменных. Невозможно указать оба бита в одном поле.
Далее, если я правильно понял ( прошу, дайте знать правильно/неправильно понял)
кнопкой(транспарантом) можно управлять полностью через скрипт, при этом настройка свойствах кнопки будет следующей:
Основная переменная (Variable): status_36
Доп. переменная (VariableEx): status_37
Бит: 0 или оставить пустым (так так как управление полностью через скрипт). Отмечу, что оставить пустым не получается, есть вариант сделать "-1" (что означает не работать с битами). Остается только ставить нуль, но это сомнительно.
Tag: не использую.
Тогда скрипт будет таким:
begin
if Sender is TM_Button then
with Sender as TM_Button do
begin
// Проверяем бит 5 в status_36 (авария)
var alarmBit := 5; // бит для аварии
var workBit := 0; // бит для работы
// Получаем значения переменных
var alarmStatus := GetBit(AsInt, alarmBit); // Основная переменная (status_36)
var workStatus := GetBit(VariableEx.AsInt, workBit); // Доп. переменная (status_37)
// Определяем цвет
if alarmStatus = TRUE then
States[0].Color := clRed // Авария — красный
else if workStatus = TRUE then
States[0].Color := clGreen // Работа — зеленый
else
States[0].Color := clGray; // Ни аварии, ни работы — серый
end;
Основной вопрос заключается в том, а если этих кнопок будет много, то будет ли возможность сделать универсальный скрипт для такого случая ? Чтобы к каждой кнопки не привязывать скрипт, где просто нужно поменять нумера для битов.