Блок событий
Блоки событий инструкции FORM
- набор конструкций, управляющих событиями в интерактивном представлении формы.
Синтаксис
EVENTS formEventDecl1, ..., formEventDeclN
Где каждый formEventDecli
имеет следующий синтаксис:
ON eventType eventActionId(param1, ..., paramK) | { eventActionOperator }
Описание
Блок событий позволяет задать обработчики событий формы, которые возникают в результате определенных действий пользователя. В одном блоке можно через запятую указать произвольное количество обработчиков событий. Если для события указывается несколько обработчиков, то они гарантированно будут выполняться в порядке их задания.
Параметры
-
eventType
Тип события формы. Задается одним из следующих ключевых слов:
INIT
OK
OK BEFORE
OK AFTER
APPLY
APPLY BEFORE
APPLY AFTER
CANCEL
CLOSE
DROP
CHANGE objName
- указывает, что действие должно быть выполнено при изменении значения объекта с именемobjName.
QUERYOK
QUERYCANCEL
SCHEDULE PERIOD intPeriod [FIXED]
- создаёт планировщик, выполняющий действие каждыеintPeriod
секунд. Ключевое словоFIXED
указывает на то, что период до следующего действия отсчитывается от старта текущего действия. По умолчанию период отсчитывается от окончания текущего действия.
-
eventActionId
Идентификатор действия, которое будет являться обработчиком события.
-
param1, ..., paramK
Список парам етров действия. Каждый параметр задается именем объекта формы. Имя объекта, в свою очередь, задается простым идентификатором.
-
actionOperator
Контекстно-зависимый оператор-действие. В качестве параметров этого оператора можно использовать имена уже объявленных объектов на форме.
Примеры
showImpossibleMessage() { MESSAGE 'It\'s impossible'; };
posted = DATA BOOLEAN (Invoice);
FORM invoice 'Инвойс' // создаем форму по редактированию инвойса
OBJECTS i = Invoice PANEL // создаем объект класса инвойс
// ... задаем остальное поведение формы
EVENTS
// указываем, что при нажатии пользователем OK должно выполняться действия,
// которое выполнит действия по "проведению" данного инвойса
ON OK { posted(i) <- TRUE; },
// по нажатию кнопки formDrop выдаем сообщение, что такого не может быть, так как эта кнопка
// по умолчанию будет показываться только в форме по выбору инвойса, а эта форма по сути
// является формой редактирования инвойса
ON DROP showImpossibleMessage()
;
CLASS Shift;
currentShift = DATA Shift();
CLASS Cashier;
currentCashier = DATA Cashier();
CLASS Receipt;
shift = DATA Shift (Receipt);
cashier = DATA Cashier (Receipt);
FORM POS 'POS' // объявляем форму для продажи товара покупателю в торговом зале
OBJECTS r = Receipt PANEL // добавляем объект, в котором будет храниться текущий чек
// ... объявляем поведение формы
;
createReceipt () {
NEW r = Receipt {
shift(r) <- currentShift();
cashier(r) <- currentCashier();
SEEK POS.r = r;
}
}
// добавляем свойство через расширение формы, чтобы можно было сделать SEEK к уже созданному объекту на форме
EXTEND FORM POS
EVENTS
// при открытии формы выполняем действие по созданию нового чека, которое заполняет смену,
// кассира и прочую информацию
ON INIT createReceipt()
;