Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 20 Ноября 2023, 17:05:54

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

Название: Re: Изменение цвета кнопки по значению доп. переменной
Отправлено: Серега от 21 Ноября 2023, 08:35:44
Как говориться работа проделана огромная результат на лицо.  ;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.
Название: Re: Изменение цвета кнопки по значению доп. переменной
Отправлено: Серега от 21 Ноября 2023, 10:18:36
В дополнение.
Концепция:
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. Для кнопки можно сделать смещения текста надписи влево\по центру\вправо - да\нет в ответе достаточно.

Жду ответов и предложений.
Название: Re: Изменение цвета кнопки по значению доп. переменной
Отправлено: Серега от 21 Ноября 2023, 10:21:17
Забыл еще для флажка нюанс один.
Не совсем понятно как цвет флажка формируется. То есть на фоне кнопки тот же цвет смотреться как темнее.
Возможно чисто мое субъективное мнение.
Название: Re: Изменение цвета кнопки по значению доп. переменной
Отправлено: Simple_Scada от 22 Ноября 2023, 12:06:33
Здравствуйте.

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

Цитировать
Флажок можно как то сделать по центру, а то минимум можно только геометрию сделать ш40хв32 для красивости?
Можно изменить свойство "Положение подписи (https://simple-scada.com/help/manual/checkbox.html#:~:text=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C%20%D1%84%D0%BB%D0%B0%D0%B6%D0%BA%D0%B0.-,%D0%9F%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%B8,-%D0%9F%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE)" на "сверху" – тогда флажок будет отображаться по центру, при условии, что размер компонента 40х40px или выше.

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

Цитировать
Забыл еще для флажка нюанс один. Не совсем понятно как цвет флажка формируется. То есть на фоне кнопки тот же цвет смотреться как темнее. Возможно чисто мое субъективное мнение.
Это зависит от прозрачности фона флажка (https://simple-scada.com/help/manual/checkbox.html#:~:text=%D0%A6%D0%B2%D0%B5%D1%82%20%D0%B8-,%D0%BF%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C,-%D1%84%D0%BE%D0%BD%D0%B0%20%D1%84%D0%BB%D0%B0%D0%B6%D0%BA%D0%B0.) и цвета объекта, над которым он расположен.