Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Izergill от 02 Августа 2016, 11:41:33

Название: Не меняется цвет линий
Отправлено: Izergill от 02 Августа 2016, 11:41:33
Добрый день!
В проекте присутствует множество элементов типа Линия. Есть необходимость подсвечивать их в зависимости от состояния бита переменной. Добавляю линию, назначаю ей переменную, пишу скрипт, но в итоге цвет не меняется при изменении бита переменной. В чем может быть причина?
Такая же история с цветом кнопки.
Название: Re: Не меняется цвет линий
Отправлено: Izergill от 02 Августа 2016, 14:16:38
На смену цвета линий переписал скрипт, все заработало. С кнопками не могу разобраться. Как их подсветить?
Название: Re: Не меняется цвет линий
Отправлено: deldemo от 02 Августа 2016, 15:57:54
Пример скрипта для работы с битами

Изменение параметров кнопки

Код
begin
  // если нулевой бит равен 1
  if GetBit(DWORD.Value, 0) then // DWORD - это переменная с которой нужно работать а 0 - номер бита этой переменной
    begin // меняем свойства кнопки в отпущенном состоянии
    Button.States[0].Color  := RGB(0,95,88);  // цвет кнопки
    Button.States[0].BorderColor := RGB(0,95,88); // цвет бордюра кнопки
    Button.States[0].FontStep := 0; // выстовляем интервал между симолами
    Button.States[0].Caption := 'Авто вкл.';  // пишем надпись на кнопке
    Button.States[0].Icon := 69;  // выбираем иконку
    end
  else
    // если нулевой бит равен 0
    begin // меняем свойства кнопки в отпущенном состоянии
       Button.States[0].Color  := RGB(60,70,80);  // цвет кнопки
       Button.States[0].BorderColor := RGB(60,70,80); // цвет бордюра кнопки
       Button.States[0].FontStep := 3; // выстовляем интервал между симолами
       Button.States[0].Caption := 'Авто';  // пишем надпись на кнопке
       Button.States[0].Icon := 0;  // выбираем иконку
    end;
end.

Нужно только создать любой элемент сделать его скрытым и присвоить ему переменную отвечающию за состояние кнопок.
Вновь созданному элементу присвоить выше изложенный скрипт.
Название: Re: Не меняется цвет линий
Отправлено: Izergill от 03 Августа 2016, 14:30:30
Указанным способом удалось сделать смену цвета, но пришлось для каждой кнопки создавать объект, прописывать скрипт.
Не знаю почему, но обойтись одним скриптом для группы объектов не удалось. Может я что-то не так делал. Вот код:
begin
if GetBit(tr302_h1.Value, 4) then
  tr3021_stt_btn.States[0].Color:=clGreen
else
  tr3021_stt_btn.States[0].Color:=RGB(92,92,92)
end.
if NOT GetBit(tr302_h3.Value, 3) AND NOT GetBit(tr302_h3.Value, 4) then
  begin
  tr302_stp_btn1.States[0].Color:=clIndianRed;
  tr302_stp_btn2.States[0].Color:=clIndianRed;
  end
else
  begin
  tr302_stp_btn1.States[0].Color:=RGB(92,92,92);
  tr302_stp_btn2.States[0].Color:=RGB(92,92,92);
  end
end.
end.
Название: Re: Не меняется цвет линий
Отправлено: Simple-Scada от 03 Августа 2016, 14:53:27
Izergill, цвет кнопки, как и цвет границы кнопки меняются для каждого состояния отдельно, т.к. кнопка в разных состояниях может принимать разные цвета. Универсальный скрипт для смена цвета кнопки будет выглядеть так:

Код
var
  aButton: TM_Button;
begin
  if Sender is TM_Button then      // убедились, что скрипт вызван объектом Кнопка (TM_Button)
  begin
    aButton := TM_Button(Sender);  // берём в aButton объект Sender приведённый к типу кнопки
   
    { меняем цвет границы нулевого состояния в зависимости от значения 4 бита переменной, с которой связана кнопка }
    if GetBit(aButton.ValueAsInt, 4) then
      aButton.States[0].BorderColor := clGreen
    else
      aButton.States[0].BorderColor := RGB(92, 92, 92);
  end;
end.
Название: Re: Не меняется цвет линий
Отправлено: Izergill от 03 Августа 2016, 15:46:35
Так стало намного понятней!