Здравствуйте. Подскажите пожалуйста как правильно в скрипте обратится к биту переменной по номеру. Дело в том что в переменной типа uint у меня передается массив битов, которые привязаны к кнопкам. При привязке переменной к кнопке имеется поле где можно у казать какой бит переменной использовать, а вот для анимационной картинки (вращающийся вентилятор) такого поля нет, подозреваю что в скрипте как то можно обратится к биту. Для анимации вентилятора использую вот такой скрипт.
begin
case Image6.ValueAsInt of
1: Image6.AnimSpeed :=16;
0: Image6.AnimSpeed :=0;
end;
end.
Здравствуйте!
Такие функции есть в скриптах. Это функция GetBit (для чтения бита), функция SetBit (для изменения бита) и функция InverseBit (меняет значение бита на противоположное). Подробнее об этих скриптах можно прочесть здесь (http://simple-scada.com/scripts_manual?section=global_procedure). Чтобы использовать биты для анимации, нужно писать так:
{ если нулевой бит равен TRUE (1), то запускаем анимацию, иначе останавливаем её }
if GetBit(Image6.ValueAsInt, 0) then
Image6.AnimSpeed := 16
else
Image6.AnimSpeed :=0;
Если у Вас в проекте несколько изображений должны работать с такими скриптами, то рекомендуем сделать один универсальный скрипт и использовать его везде. Он будет выглядеть так:
{ если этот скрипт вызван объектом Изображение }
if Sender is TM_Image then
with Sender as TM_Image do
{ если нулевой бит равен TRUE (1), то запускаем анимацию, иначе останавливаем её }
if GetBit(ValueAsInt, 0) then
AnimSpeed := 16
else
AnimSpeed :=0;
Т.к. Вам необходимо сделать зависимость от разных битов, то придется как-то номера этих битов указывать. И здесь хорошо подойдет свойство Тег, которое есть у всех объектов. Тег - это целочисленное значение, которое пользователь может использовать по своему усмотрению. В Вашем случае можно сделать так... выставьте каждому изображению значение тега равным биту с которым нужно работать. Например, если Image1 должно реагировать на бит номер 3, то выставьте у Image1 свойство тег равным 3. И так для каждого изображения. Затем просто изменить скрипт вот так:
if Sender is TM_Image then
with Sender as TM_Image do
{ если бит (значение зависит от тега) равен TRUE (1), то запускаем анимацию, иначе останавливаем её }
if GetBit(ValueAsInt, Tag) then
AnimSpeed := 16
else
AnimSpeed :=0;
с которым я работал и этот скрипт применяется ко всем изображениям, хотя компилировал я скрипт при разных значениях битов.
В этом и есть преимущество универсальных скриптов. Это один скрипт, который подходит для множества объектов и нет смысла компилировать его с разными значениями, т.к. при компиляции он просто пересоздается.