Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Не меняется цвет линий  (Прочитано 3753 раз)

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Не меняется цвет линий
« : 02 Августа 2016, 11:41:33 »
Добрый день!
В проекте присутствует множество элементов типа Линия. Есть необходимость подсвечивать их в зависимости от состояния бита переменной. Добавляю линию, назначаю ей переменную, пишу скрипт, но в итоге цвет не меняется при изменении бита переменной. В чем может быть причина?
Такая же история с цветом кнопки.

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Не меняется цвет линий
« Ответ #1 : 02 Августа 2016, 14:16:38 »
На смену цвета линий переписал скрипт, все заработало. С кнопками не могу разобраться. Как их подсветить?

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Не меняется цвет линий
« Ответ #2 : 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.

Нужно только создать любой элемент сделать его скрытым и присвоить ему переменную отвечающию за состояние кнопок.
Вновь созданному элементу присвоить выше изложенный скрипт.
« Изменён: 02 Августа 2016, 16:10:48 от deldemo »

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Не меняется цвет линий
« Ответ #3 : 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.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
Re: Не меняется цвет линий
« Ответ #4 : 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.
« Изменён: 03 Августа 2016, 15:49:00 от Simple-Scada »

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Не меняется цвет линий
« Ответ #5 : 03 Августа 2016, 15:46:35 »
Так стало намного понятней!