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

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

Автор Тема: Изменение цвета кнопки по значению доп. переменной  (Прочитано 4799 раз)

Серега

  • Старожил
  • ****
  • Сообщений: 281
    • Просмотр профиля
Добрый день!
Есть кнопка с 2 положениями и привязана к соответствующей переменной.
В свойстве "доп. переменная" прописана переменная, которая отвечает за обратную связь, типа команда прошла.
В настройках кнопки мы можем настроить цвета для фона, границы и текста, которые будут меняться в зависимости от значения основной переменной.
Скриптом через Button1.States[0].Color можно организовать нужные цвета в соответствующих состояниях.
И данный скрипт повесить на OnDataChangeEx ...
В общем у меня не получается добиться нужного мне результата.
Можете сказать как правильно это сделать?
И можно ли так делать?

« Изменён: 20 Ноября 2023, 17:57:37 от Simple_Scada »

Серега

  • Старожил
  • ****
  • Сообщений: 281
    • Просмотр профиля
Как говориться работа проделана огромная результат на лицо.  ;D
Возможно кому то понадобиться.
Универсальный скрипт:
Код: (delphi)
begin
if Sender is TM_Button then
  with Sender as TM_Button do
    begin
    if (VariableEx.AsBool = TRUE) AND (ActiveState = 0) then
      States[0].Color := $008000;

    if (VariableEx.AsBool = FALSE) AND (ActiveState = 0) then
      States[0].Color := $003030;
    end;
end.
« Изменён: 21 Ноября 2023, 10:30:14 от Simple-Scada »

Серега

  • Старожил
  • ****
  • Сообщений: 281
    • Просмотр профиля
В дополнение.
Концепция:
1. Нажали на кнопку. 2 состояния для отображения чтобы диспетчер понимал, что он нажал на кнопку (см. рис. ButtonCmd и ButtonCmdOn).
2. Флажок. 2 состояния, чтобы диспетчер понимал, что система приняла команду (см. рис. ButtonSystemAccepredCmd).
3. Изменение фона кнопки, чтобы диспетчер понял, что команда выполнена (см. рис. ButtonSystemExecutedCmd).
Так скрипты.
Для кнопки для OnDataChangeEx (в Тег указываем нужный бит для доп. переменной):
Код: (delphi)
begin
if Sender is TM_Button then
  with Sender as TM_Button do
    begin
    if (GetBit(VariableEx.AsInt, Tag) = TRUE) AND (ActiveState = 0) then
    begin
      States[0].Color       := RGB(0,72,24);
      States[0].BorderColor := RGB(32,160,60);
      States[0].FontColor   := RGB(64,200,120);
    end;

    if (GetBit(VariableEx.AsInt, Tag) = FALSE) AND (ActiveState = 0) then
    begin
      States[0].Color       := RGB(0,48,48);
      States[0].BorderColor := RGB(16,120,120);
      States[0].FontColor   := RGB(32,240,234);
    end;
    end;
end.

для флажка для OnDataChange:
Код: (delphi)
begin
if Sender is TM_CheckBox then
  with Sender as TM_CheckBox do
    begin
    if GetBit(Variable.AsInt, BitNumber) then
    begin
      Color := RGB(32,160,60);
      Alpha := 255;
    end
    else
    begin
      Color := RGB(16,120,120);
      Alpha := 128;
    end;
    end;
end.

Пару вопросов к разработчикам.
1. Решение будет работать больше чем на одном клиенте? А то в некоторых темах такое упоминается.
2. Флажок можно как то сделать по центру, а то минимум можно только геометрию сделать ш40хв32 для красивости?
3. Для кнопки можно сделать смещения текста надписи влево\по центру\вправо - да\нет в ответе достаточно.

Жду ответов и предложений.
« Изменён: 21 Ноября 2023, 10:30:32 от Simple-Scada »

Серега

  • Старожил
  • ****
  • Сообщений: 281
    • Просмотр профиля
Забыл еще для флажка нюанс один.
Не совсем понятно как цвет флажка формируется. То есть на фоне кнопки тот же цвет смотреться как темнее.
Возможно чисто мое субъективное мнение.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1378
    • Просмотр профиля
Здравствуйте.

Цитировать
Решение будет работать больше чем на одном клиенте?
Изменение любых свойств объекта через скрипты будет отображаться на всех клиентах.

Цитировать
Флажок можно как то сделать по центру, а то минимум можно только геометрию сделать ш40хв32 для красивости?
Можно изменить свойство "Положение подписи" на "сверху" – тогда флажок будет отображаться по центру, при условии, что размер компонента 40х40px или выше.

Цитировать
Для кнопки можно сделать смещения текста надписи влево\по центру\вправо - да\нет в ответе достаточно.
Нет.

Цитировать
Забыл еще для флажка нюанс один. Не совсем понятно как цвет флажка формируется. То есть на фоне кнопки тот же цвет смотреться как темнее. Возможно чисто мое субъективное мнение.
Это зависит от прозрачности фона флажка и цвета объекта, над которым он расположен.
« Изменён: 22 Ноября 2023, 12:33:59 от Simple-Scada »