Перейти к основному содержимому
Версия: 7.0

Активность (ACTIVE)

Оператор активности создаёт свойство либо действие, возвращающее информацию об активном элементе формы. В качестве элемента может выступать:

  • Свойство — возвращает TRUE, если фокус находится на заданном свойстве (или действии) на форме; NULL в остальных случаях, в том числе если форма не открыта.
  • Закладка — возвращает TRUE, если заданная закладка активна в панели закладок; NULL в остальных случаях.
  • Форма — записывает в локальное свойство TRUE, если у пользователя активна заданная форма или форма, расширяющая её, и FALSE в противном случае.
  • Объекты — возвращает текущее значение указанного объекта в группе объектов формы (ACTIVE formObjectId).

Для закладки, свойства и объектов оператор создаёт обычное свойство; платформа автоматически обновляет его значение при изменении фокуса / переключении закладок / изменении текущего объекта, что позволяет использовать его в выражениях (в частности, для отсечения вычислений на неактивных вкладках через IF или SHOWIF). Активность формы, напротив, определяется состоянием пользовательской сессии и реализуется через действие, которое записывает результат проверки в локальное свойство isActiveForm[].

Язык

Все формы активности реализуются единым оператором ACTIVE: ACTIVE TAB (активность закладки), ACTIVE PROPERTY (активность свойства), ACTIVE FORM (активность формы — создаёт действие), ACTIVE formObjectId (значение активного объекта в группе).

Примеры

//Форма с двумя закладками
FORM tabbedForm 'Форма с табами'
OBJECTS u = CustomUser
PROPERTIES(u) name

OBJECTS c = Chat
PROPERTIES(c) name
;

DESIGN tabbedForm {
NEW tabPane FIRST {
tabbed = TRUE;
NEW contacts {
caption = 'Контакты';
MOVE BOX(u);
}
NEW recent {
caption = 'Последние';
MOVE BOX(c);
}
}
}

//Активна ли закладка 'Последние'
recentActive() = ACTIVE TAB tabbedForm.recent;
FORM users
OBJECTS c = CustomUser
PROPERTIES(c) name, login;

activeLogin = ACTIVE PROPERTY users.login(c);
EXTEND FORM users
PROPERTIES() activeLogin;
FORM exampleForm;
testActive {
ACTIVE FORM exampleForm;
IF isActiveForm() THEN MESSAGE 'Example form is active';
}