Показ сообщения (MESSAGE, ASK)
Операторы показа сообщения создают действия, которые показывают пользователю текстовое сообщение. Сообщение задается как некоторое свойство, значение которого и будет использовано в качестве сообщения. Отображение этого сообщения может происходить либо с помощью диалогового окна, либо в системном окне System.log. У диалогового окна также есть заголовок, который может задаваться как некоторое свойство.
Управление потоком
По умолчанию созданное действие останавливает поток выполнения до тех пор, пока пользователь не закроет сообщение. Однако это поведение можно изменить при помощи соответствующей опции - в этом случае созданное действие завершается сразу, а сообщение показывается пользователю при первой возможности (то есть при следующем взаимодействии с пользователем). Первый режим работы оператора называется синхронным, второй - асинхронным.
Тип сообщения
Помимо текста, сообщение может быть нескольких типов. Они различаются тем, как сообщение показывается пользователю — в виде диалогового окна, которое пользователь закрывает, в виде всплывающего уведомления и (или) записи в системном окне System.log, — и тем, несёт ли оно пометку важности: информация, успех, предупреждение или ошибка. По умолчанию сообщение показывается как обычное диалоговое окно, без пометки важности.
Диалоговая форма
Также часто бывает необходимо не просто проинформировать пользователя о чем-либо, а еще и, например, запросить подтверждение на продолжение действия. Для таких случаев в операторе есть возможность вместо просто показа сообщения (с единственной кнопкой OK), задать вопрос с положительным и отрицательным ответами и тем самым осуществить ввод значения. В этом случае положительный ответ означает, что ввод успешно завершен, а отрицательный считается отменой ввода.
Кроме того, при указании YESNO у вопроса появляется отдельная кнопка Отмена, а положительный и отрицательный ответы становятся успешными результатами ввода. В этом случае считается, что результатом ввода будет значение логического класса (Да - TRUE, Нет - NULL). Отменой ввода, как и в первом случае, считается нажатие кнопки Отмена.
Если текст сообщения равен NULL, диалог не показывается, а ввод считается успешно завершенным. Для варианта с логическим результатом это эквивалентно положительному ответу.
Форму оператора, в которой пользователю задается вопрос, называют диалоговой.
Так же как и в остальных операторах ввода значения, в диалоговой форме этого оператора можно задавать основное и альтернативное действия. Первое вызовется, если ввод был успешно завершен, второе - в обратном случае (если ввод был отменен).
Диалоговая форма оператора доступна только в синхронном режиме.
Язык
Для объявления действия, показывающего сообщение, используется оператор MESSAGE. Для показа сообщения в форме диалога используется оператор ASK.
Примеры
message { MESSAGE 'Hello World!'; } // простое текстовое сообщение
isGood = DATA BOOLEAN (Item);
stringData(Item i) {
// в зависимости от того, какой item будет передан действию, будет показываться окно
// с текстом 'Good', либо с текстом 'Bad'
MESSAGE IF isGood(i) THEN 'Good' ELSE 'Bad';
}
// В этом случае пользователю будет выдано пять текстовых сообщений
testMessage() {
LOCAL i = INTEGER();
i() <- 0;
WHILE i() < 5 DO {
i() <- i() + 1;
MESSAGE i();
}
}
// В случае NOWAIT пользователю будет выдано одно текстовое сообщение,
// объединяющее сообщения от пяти вызовов MESSAGE
testMessageNowait() {
LOCAL i = INTEGER();
i() <- 0;
WHILE i() < 5 DO {
i() <- i() + 1;
MESSAGE i() NOWAIT;
}
}
testAsk() {
ASK 'Вы действительно хотите продолжать ?' DO {
MESSAGE 'Вы продолжили';
}
ASK 'Использовать старые значения ?' useOld = YESNO DO {
IF useOld THEN
MESSAGE 'Используем старые значения';
ELSE
MESSAGE 'Используем новые значения';
}
}