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

Блок событий

Блоки событий инструкции 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()
;