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

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

Автор Тема: Изменение цвета кнопки из скрипта  (Прочитано 3604 раз)

SergioAli

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Добрый день, подскажите как победить проблему?
по нажатию на кнопку открывается окно Window1, на нём есть кнопки, к кнопкам привязан универсальный скрипт по изменению переменной для смены цвета. пробовал разные скрипты, не получается ничего.
Код: (delphi)
begin
  if not (Sender is TM_Object) then
    Exit;
  with (Sender as TM_Object) do
    case AsInt of
      0: Color := clRed;
      1: Color := clGreen;
   // else
   //   Color := clNone;
    end;
end.   
и   такой пробовал
Код: (delphi)
begin
  if Sender is TM_Button then   // проверяем, что Sender это объект
   with Sender as TM_Button do // приводим Sender к типу "TM_Object"
     if Variable.AsBool = true then                   //AsBool = true then         // если значение переменной объекта равно 1, то       
       Color := clGreen       // изменить цвет объекта на зеленый
     else     
       Color := clRed ;
end.     
и такой
Код: (delphi)
begin
  if Sender is TM_Object then   // проверяем, что Sender это объект
    with Sender as TM_Object do // приводим Sender к типу "TM_Object"
      if AsInt = 1 then       
     //if AsBool = true  then         // если значение переменной объекта равно 1, то
        Color := clGreen        // изменить цвет объекта на зеленый
      else                      // иначе
        Color := clRed;         // изменить цвет объекта на красный
end.
в общем когда открываю окно кнопки как были серые, так и остаются таковыми (независимо от текущего состояния привязанной переменной), пока не сделаешь вкл/выкл, нет изначальной информативности по состоянию переменной.
пробовал делать то же самое не в окне, а на другой странице.  индикации нет, пока не переключишь туда-сюда, только тогда появляется индикация. НО когда переходишь на другую  страницу и снова возвращаешься назад, то снова ничего не "подсвечивается"
подскажите пожалуйста как победить? нужен универсальный скрипт, потому что таких переменных около 10000.

использую arOPC без ограничений и simple-scada 2 без огрничений. последняя версия с режимом отладки.
« Изменён: 20 Апреля 2024, 08:58:00 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1408
    • Просмотр профиля
Re: Изменение цвета кнопки из скрипта
« Ответ #1 : 20 Апреля 2024, 10:00:33 »
Здравствуйте.

Кнопка состоит из множества состояний - см. свойство кнопки "Состояние". В каждом состоянии кнопка может иметь разный текст, цвет, прозрачность и т.д. Для описанной задачи использовать скрипты не требуется. Выделите кнопку, в инспекторе объектов нажмите на свойство "Состояние". Настройте нужный цвет, текст и т.д. для каждого состояния кнопки (см. пример во вложении). Привяжите к кнопке требуемую переменную. Ранее созданные скрипты смены цвета кнопки удалите. После этого кнопка будет менять цвет по значению переменной, в соответствии с настроенными состояниями.

Если все же требуется менять цвет кнопки из скрипта, то нужно менять его отдельно для каждого состояния кнопки.
« Изменён: 20 Апреля 2024, 10:35:31 от Simple-Scada »

SergioAli

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Изменение цвета кнопки из скрипта
« Ответ #2 : 20 Апреля 2024, 10:49:55 »
спасибо, проверил.
а я пытался еще вот такой фигнёй заниматься
Код: (delphi)
begin
if Sender is TM_Button then   // проверяем, что Sender это объект
    with Sender as TM_Button do // приводим Sender к типу "TM_Object"
      if AsBool = false then         // если значение переменной объекта равно 1, то
        States[0].Icon := 59                    // 76     77
        //Color := clGreen       // изменить цвет объекта на зеленый
      else
        States[0].Icon := 88;    // иначе

   if Sender is TM_Button then   // проверяем, что Sender это объект
    with Sender as TM_Button do // приводим Sender к типу "TM_Object"
      if AsBool = false then         // если значение переменной объекта равно 1, то
        //States[0].Icon := 43
        Color := clGreen       // изменить цвет объекта на зеленый
      else
        //States[0].Icon := 51;
        Color := clYellow;
        //Button260.States[0].FontColor:=clBlack;

    if Sender is TM_Button then   // проверяем, что Sender это объект
    with Sender as TM_Button do // приводим Sender к типу "TM_Object"
      if AsBool = false then         // если значение переменной объекта равно 1, то
        States[0].FontColor:=clWhite                   // 76     77
        //Color := clGreen       // изменить цвет объекта на зеленый
      else
        States[0].FontColor:=clBlack;
end.           
« Изменён: 20 Апреля 2024, 10:58:51 от Simple_Scada »

SergioAli

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Изменение цвета кнопки из скрипта
« Ответ #3 : 20 Апреля 2024, 12:56:53 »
Подскажите, такой скрипт будет правильно работать?
А то уж очень не хочется миллион кнопок тыкать и свойства состояний им править
Код: (delphi)
begin
   if Sender is TM_Button then
    with Sender as TM_Button do
      if AsBool = false then
        begin
          States[0].FontColor := clBlack;
          States[0].Color := clRed;
        end
      else
        begin
          States[1].FontColor := clYellow;
          States[1].Color := clGreen;
        end;
end.
« Изменён: 20 Апреля 2024, 13:10:11 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1408
    • Просмотр профиля
Re: Изменение цвета кнопки из скрипта
« Ответ #4 : 20 Апреля 2024, 13:19:02 »
Крайне не рекомендуем использовать скрипты там, где это не требуется. Особенно если планируется разработка большого проекта. Вы можете создать несколько типовых кнопок и затем копировать их (Ctrl + C/ Ctrl + V). Настройки состояний при этом будут сохраняться. Также, для работы с множеством однотипных объектов, можно использовать шаблоны.
« Изменён: 20 Апреля 2024, 14:13:03 от Simple-Scada »