Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Примеры скриптов

Работа с шаблонами

Пред. Вверх След. Еще

К объектам внутри шаблона/шаблонного окна нельзя обратиться напрямую через скрипты, т.к. шаблон и объекты в нем не являются реальными объектами. Только после запуска проекта, на основе шаблона будет создано множество реальных объектов. А на основе шаблонных окон будет создано множество реальных окон. До запуска проекта эти объекты не существуют. Ниже будут рассмотрены способы работы с объектами внутри шаблона.

1. Управление объектом шаблона по значению переменной связанной с объектом.

Если требуется изменять свойство объекта шаблона(например цвет, видимость, прозрачность и т.д.) при изменении значения связанной с ним переменной, то для этого нужно использовать универсальные скрипты назначенные на событие OnDataChange/OnDataChangeEx требуемого объекта шаблона. Ознакомиться с примерами различных универсальных скриптов можно в разделе "Примеры скриптов".

 

2. Работа с объектами шаблона в скриптах.

Рассмотрим шаблон, в котором расположено только одно изображение (Image1). Нужно скрыть изображение если пользователь кликнул по нему. Т.к. изображение является объектом шаблона, мы не можем напрямую обратиться к нему. Например, этот код (назначенный на событие OnClick изображения) во время компиляции вызовет ошибку "Undeclared identifier Image1":

begin
  Image1.Visible := False;  
end.

 

Есть два способа решить задачу, первый - использовать универсальный скрипт. По возможности, следует всегда стараться использовать универсальные скрипты. Если применить универсальный скрипт для решения задачи нельзя, то можно воспользоваться вторым способом описанным ниже.

begin
  // скрыть объект, который вызвал скрипт
  Sender.Visible := False;  
end

 

Второй способ - обратиться к объекту, используя функцию GetTemplateObject:

var
  aImage: TM_Image;
begin
  // ищем среди всех объектов шаблона объект с именем Image1 и 
  // записываем результат в локальную переменную aImage
  aImage := GetTemplateObject('Image1'as TM_Image;
 
  // скрываем изображение
  aImage.Visible := False;  
end.

 

3. Инициализации шаблона.

Каждый шаблон/шаблонное окно имеет событие OnInit. Скрипт назначенный на это событие будет выполнен один раз, после создания шаблона/шаблонного окна. Данное событие удобно использовать для "настройки" шаблона. Рассмотрим простой пример: есть множество однотипных насосов. Одни относятся к группе А, другие к группе B. Насосы в группе А отображаются с зеленым заголовком и с полем оборотов насоса. Насосы в группе B отображаются с красным заголовком, а поле с оборотами у них отсутствует:

Для удобного тиражирования можно было бы создать два разных шаблона. Первый для насосов из группы А (с зеленым заголовком и с полем оборотов), а второй для насосов группы B (с красным заголовком и без поля). Но есть и другой способ: создать один шаблон и по событию OnInit, в зависимости от значения группы, менять цвет заголовка и скрывать поле оборотов. Применим данный способ. Для этого, создадим шаблон, разместим в нем компонент текст с именем "txtPumpTitle" для заголовка. Текст заголовка заменим подстановкой "Заголовок насоса". Поле оборотов насоса назовем "fldPumpFreq". Далее, разместим объекты на основе шаблона на мнемосхеме и заполним подстановки. У первого шаблонного объекта подстановку "Заголовок насоса" назначим "А1", у второго "А2", затем "B1" и "B2".

Затем, на событие OnInit шаблона назначим скрипт с таким кодом:

var
  aTitle: TM_Text;
  aField: TM_Field;
begin
  // ищем среди всех объектов шаблона текст заголовка и поле оборотов насоса
  aTitle := GetTemplateObject('txtPumpTitle'as TM_Text;
  aField := GetTemplateObject('fldPumpFreq'as TM_Field;
 
  // если первый символ заголовка равен "А"
  if aTitle.Text[1] = 'A' then
  begin
    aTitle.Color := clGreen;  // зеленый цвет фона заголовка 
    aField.Visible := True;   // показать поле оборотов насоса
  end else
    // если первый символ заголовка равен "B"
    if aTitle.Text[1] = 'B' then
    begin
      aTitle.Color := clMaroon; // красный цвет фона заголовка 
      aField.Visible := False;  // скрыть поле оборотов насоса
    end;
end.

 

Запустим проект - скрипт инициализации сработал правильно, заголовки выделены цветами, а поля с оборотами насоса не видны в группе B: