Типы сообщений в программе

Тип сообщения – это набор параметров, которые необходимо передавать между процессами, используя операции Отправка сообщения и Ожидание сообщения . Тип сообщения, созданный в одном процессе, становится доступен во всех процессах системы.

Параметры – это именованные контейнеры, к которым привязываются контекстные переменные , передаваемые или получаемые в рамках операции. Один параметр, заданный в типе сообщения, может быть сопоставлен с различными типами контекстных переменных в операциях отправки и ожидания сообщений.

Создание и настройка типов сообщений может быть осуществлена несколькими способами:
в операциях Отправка сообщения (рис. 1) и/или Ожидание сообщения .

Создание типа сообщения

Тип сообщения может быть создан несколькими способами. Для этого необходимо:
в редакторе типов сообщений нажать на кнопку Добавить (рис. 1);

Рис. 1. Редактор типов сообщений. Кнопка «Добавить»

Segnetics SMH4 пишем программу управления электромагнитным пускателем с помощью SMS сообщений

в карточке операции Отправка сообщения на вкладке Отправка сообщения (рис. 2) или в карточке операции Ожидание сообщения на вкладке Ожидание сообщения в блоке Тип сообщения нажать на кнопку .

Рис. 2. Настройки операции «Отправка сообщения». Вкладка «Отправка сообщения»

Будет открыто диалоговое окно настройки типа сообщения (рис. 3, 4), в котором необходимо заполнить требуемые поля и нажать на кнопку ОК. Данное окно содержит две вкладки: Общие (рис. 3) и Параметры (рис. 4).

Рис. 3. Создание типа сообщения. Вкладка «Общие».
Рис. 4. Создание типа сообщения.

Вкладка «Параметры».
Вкладка «Общие»

Имя типа сообщения – наименование, отображаемое в настройках операций Отправка сообщения и Ожидание сообщения .

Гарантированная доставка – данная возможность позволяет снять проблему бесследной потери сообщений, если отправитель посылает сообщение (операция Отправка сообщения ) до того, как в процессе-получателе дойдет очередь до Ожидания сообщения .

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

Внимание!

1. Сообщения с гарантированной доставкой могут использоваться только тогда, когда в операции Отправка сообщения в поле Переменная с экземпляром процесса будет выбрана переменная экземпляра-получателя.

Жиза моего детства 😂 #shorts

2. Гарантированная доставка сообщений одновременно в несколько ожидающих блоков не поддерживается.
Описание – текст, поясняющий назначение создаваемого или редактируемого типа сообщения.
Вкладка «Параметры»

На данной вкладке (рис. 4) формируется набор параметров, к которым будут привязываться переменные , передаваемые в сообщении. Для добавления нового параметра необходимо нажать на кнопку Добавить параметр (рис. 4). Откроется окно, представленное на рис. 5.

Рис.5. Диалоговое окно «Настройка параметра»
Диалоговое окно Настройка параметра содержит следующие поля:
Имя параметра – наименование создаваемого параметра.
Описание – текст, поясняющий назначение параметра.

Флажок Контрольный параметр позволяет идентифицировать экземпляр процесса, которому предназначено сообщение. Сообщение будет передано только в тот экземпляр процесса, значению контрольного параметра которого сопоставлено то же значение, что и у экземпляра процесса, отправившего сообщение. Параметр, являющийся контрольным, не должен передаваться с незаполненной контекстной переменной .

Чтобы добавить параметр, нажмите кнопку Добавить. У параметра есть три характеристики: Имя, Описание и признак Контрольный параметр.

Чтобы избежать передачи сообщений с незаполненными контекстными переменными , переменные необходимо пометить обязательными для заполнения в операциях типа Пользовательская задача или настроить их заполнение с помощью сценариев .

Тип сообщения может содержать только одну переменную с установленным флажком Контрольный параметр. Если такой переменной нет, при передаче сообщения будет проверяться только тип сообщения и условие передачи сообщения, заданное в операции Ожидание сообщения .

Для редактирования параметра необходимо нажать на кнопку Редактировать параметр (рис. 4). Откроется окно, аналогичное окну создания параметра (рис. 5).

Для удаления параметра необходимо нажать на кнопку Удалить (рис. 4). Параметр будет удален из системы.

Редактирование типа сообщения

Тип сообщения может быть изменен несколькими способами. Для этого необходимо:
в редакторе типов сообщений нажать на кнопку Редактировать (рис. 1);

в карточке операции Отправка сообщения на вкладке Отправка сообщения (рис. 2) или в карточке операции Ожидание сообщения на вкладке Ожидание сообщения в блоке Тип сообщения нажать на кнопку .

Удаление типа сообщения

Тип сообщения может быть удален несколькими способами. Для этого необходимо:
в редакторе типов сообщений нажать на кнопку Удалить (рис. 1);

в карточке операции Отправка сообщения на вкладке Отправка сообщения (рис. 2) или в карточке операции Ожидание сообщения на вкладке Ожидание сообщения в блоке Тип сообщения нажать на кнопку .

Будет открыто диалоговое окно (рис. 6), в котором требуется подтвердить удаление.

Рис. 6. Диалоговое окно подтверждения удаления типа сообщения

Пример работы процесса с гарантированной доставкой сообщения

В качестве примера рассмотрим ситуацию, описанную на странице Отправка сообщения . Упростим архитектуру процесса в Дизайнере (рис. 7 – рис. 8). В настройках типа сообщения «Данные оборудования» установим флажок в поле Гарантированная доставка (рис. 3), а список параметров оставим прежним.

Читайте также:
Дизайн проект кухни самостоятельно программа

Рис. 7. Операция «Отправка сообщения» в процессе «Заявка на закупку производственного оборудования»

Рис. 8. Операция «Ожидание сообщения» в процессе «Модернизация оборудования на линии»

Запустив процесс «Модернизация оборудования на линии», текущему пользователю поступит задача Задать параметры. Также будет поставлена на исполнение задача Получение данных об оборудовании 1 (рис. 9).

Рис. 9. Подраздел «Мои процессы»

После этого осуществим запуск процесса «Заявка на закупку производственного оборудования» и заполним параметры (рис. 10).

Рис. 10. Задача «Заполнение данных»

В данной задаче (рис. 10) необходимо заполнить параметры, обязательно указав экземпляр процесса-получателя, и нажать на кнопку Передача на производство. После этого введенные данные будут отправлены в указанный экземпляр.

При выполнении задачи Задать параметры процесса из процесса «Модернизация оборудования на линии» пользователю автоматически поступит задача Отражение параметров, в которой отобразятся данные из экземпляра процесса «Заявка на закупку производственного оборудования».

При выполнении вышеописанных действий без гарантированной доставки, после выполнения задачи Задать параметры процесса, в экземпляре процесса будет осуществляться ожидание сообщения. Экземпляр процесса «Модернизация оборудования на линии» будет завершен, если повторно запустить процесс «Заявка на закупку производственного оборудования» с указанием того же экземпляра процесса.

Источник: www.elma-bpm.ru

Уроки Delphi

В этом уроке мы с вами рассмотрим организацию некоторых сообщений в программе.

Сообщения присутствуют повсюду: когда вы пытаетесь закрыть не сохраненный проект, при появлении ошибки, когда программа сообщает о некотором событии.
Сообщения, «вылетающие» при работе программы, можно разделить на те, которые программист предусмотрел, и системные сообщения.
В большинстве случаев второй тип сообщений имеет непонятный для обычного пользователя вид. Как правило, сообщается англоязычный термин, иногда имеется и шестнадцатеричный адрес ошибки. Например, сообщение «I/O Error» говорит программисту или пользователю об ошибке ввода-вывода. Это может быть попытка записи данных в неоткрытый файл, попытка открыть несуществующий файл и т.п.

Если такая ошибка в вашей русскоязычной версии программы имеет место, то, скорее всего данной ситуации программист просто не предусмотрел. В таких случаях, программа может себя повести совершенно непредсказуемо. Ведь вы помните из прошлых уроков, что не проконтролированный кусок программы на присутствие ошибки ведет к моментальному выходу из обрабатываемой процедуры, со всеми вытекающими из этого последствиями.
Но это маленькое отклонение от темы. Идея такова, надо самостоятельно просчитывать все возможные случаи и самостоятельно обрабатывать эти ситуации. Иногда, если надо, предупреждать пользователя об ошибках, может даже сообщать об окончании обработки данных. Вот о таких сообщениях мы и поговорим в этом уроке.

Можно разделить все программные сообщения на: информационные сообщения («Загрузка данных с дискеты завершена») , предупреждающие сообщения («Файл модифицирован. Сохранить?»), сообщения об ошибке («Файл данных программы не найден. Требуется переустановка программы»). Эта разбивка на типы сообщений является, естественно, не полным, его можно продолжать, но об этом немного позже.

Ради экономии своего времени, вы можете всегда, из любого места программы показать пользователю, к примеру, следующее сообщение:

Конечно, сообщение может быть и серьезным, можно подобные окошки использовать и для других целей вывода информации. Дело ваше. Я иногда этот вид сообщений использую для вывода информации о состоянии программы на этапе программирования.
В чем же заключается экономия времени и экономия текста кода программы. Такое сообщение выводится на экран одной строчкой:

Тип данных в скобках — String.
Все довольно просто, мы с вами эту команду неоднократно применяли в прошлых уроках.
На этой команде работа процедуры (не всей программы!) приостанавливается. Пока пользователь не нажмет на кнопку Ok, работа с приложением становится невозможным, т.е. нельзя «добраться» до окна, расположенного позади. Т.е. это сообщение открывается модально.

Как вы заметили, заголовок окна простой. Он содержит в себе текст, который отображен на панели задач. По умолчанию имеет название запускаемого EXE файла. Изначально это Project1, в последствии вы его можете сохранить под другим именем («Save Project As. «), при этом название проекта, вместе с ним название компилируемого EXE файла меняется.
Изменить название запущенной программы в панели задач можно в любом месте программы с помощью команды:

К примеру, вы обрабатываете довольно объемный размер данных (чтение файлов), и хотите показывать процент выполнения задания прямо в панели задач (как это сделано в программе DrWeb). Ведь пользователь не всегда сможет смотреть на ваш 10-минутный процесс обработки данных, а скорее всего переключится на другую, менее трудоемкую операцию (карточный пасьянс), постоянно следя за процессом обработки на панели задач.

Изначально, еще до запуска программы на выполнение, на этапе разработки, вы можете это задать название программы в панели задач с помощью главного меню delphi «Project», дальше пункт «Options. «, в открывшемся окне на вкладке Application указать в поле Title необходимую строку. Эта строка и будет отображена в панели задач. При этом следует помнить, что слишком длинная фраза в кнопке на панели задач полностью не будет показана. При этом она будет обрезана троеточием, а для того, чтобы узнать полное название запущенной программы, нужно будет подвести мышку (всплывающая подсказка Hint вам покажет полное название).

Читайте также:
Команды для пошагового выполнения программы

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

В delphi есть, можно сказать, встроенная команда отображения окна сообщения. Звучит оно так:

Скажу сразу, что к нашим программам мы пока не пишем дополнительно файлов справки, поэтому ИНДЕКС_ПОМОЩИ у нас всегда будет нулевым. Для информации скажу, что если у нас таковой файл имеется, то можно в таком сообщении сделать кнопку «Help». Если пользователь озадачен вопросом или сообщением, то может, не закрывая этого окна, узнать подробнее о дальнейших этапах работы при выборе того или иного пункта.
ТЕКСТ_СООБЩЕНИЯ — строковая величина. Как в предыдущей команде, сообщение показывается внутри окна.
ТИП_СООБЩЕНИЯ — может принимать несколько значений. От этих значений зависит содержимое заголовка и иконка в левом верхнем углу окна.

Тип сообщения Описание Вид окна
mtWarning Можно использовать в предупреждающих сообщениях. Например, «Вы действительно желаете удалить все данные с диска С:»
mtError Обычное окошко вывода сообщения об ошибки. Всем знаком его вид т.к. это наиболее частое окно в windows 🙂
mtInformation Какая-нибудь информация. Например, «Не найден файл настройки, создается заново»
mtConfirmation Это запрос. Запрос на сохранение перед выходом, спрашивает перед удалением параметра, и т.п. На ваш собственный вкус
mtCustom Это сообщение полностью аналогично ShowMessage

КНОПКИ — содержит в себе массив кнопок, которые следует показывать в сообщении.
Даю перечень кнопок.

* mbYes
* mbNo
* mbOK
* mbCancel
* mbHelp
* mbAbort
* mbRetry
* mbIgnore
* mbAll

Рассказывать про каждую кнопку не буду, т.к. все равно ее название нельзя сменить. А если вам англоязычный термин непонятен, то тогда какой смысл ее применять :).
Массив кнопок задается в квадратных кавычках []. Например, нам надо задать три кнопки Yes, No, Cancel. Это делается так [mbYes,mbNo,mbCancel].
Поскольку кнопки в сообщении могут быть разные, то MessageDLG является функцией. Она возвращает результат нажатой кнопки.
Соответственно указанным выше кнопкам результат может принимать следующие значения

* mrNone — окно сообщения закрыто не с помощью кнопки (Alt+F4 или кнопкой «закрыть»)
* mrAbort
* mrYes
* mrOk
* mrRetry
* mrNo
* mrCancel
* mrIgnore
* mrAll

Рассмотрим пример. Нам надо спросить у пользователя о дальнейших действиях перед выходом из программы.
1. Сохранить файл.
2. Не сохранять файл.
3. Продолжить редактирование.

Var R:Word; // переменная, в которой хранится результат
.
R:=MessageDLG(‘Сохранить файл перед выходом?’,mtConfirmation,[mbYes,mbNo,mbCancel],0);
if R=mrYes then // если нажата кнопка Yes
begin
// сохраняем файл и завершаем программу
end;
if R=mrNo then // если нажата кнопка No
begin
// завершаем работу программы без сохранения
end;
if R=mrCancel then // если нажата кнопка Cancel
begin
// продолжаем работу без сохранения
end;

Сообщения

• синхронные сообщения (queued) — сообщения, которые Windows помещает в очередь сообщений программы, и которые извлекаются и диспетчеризуются в цикле обработки сообщений. Отправление : с помощью функции PostMessage – ставится в очередь и немедленно возвращает управление.

Получение : результат пользовательского ввода путем нажатия клавиш (например, WM_KEYDOWN и WM_KEYUP), это символы, введенные с клавиатуры (WM_CHAR), результат движения мыши (WM_MOUSEMOVE) и щелчков кнопки мыши (WM_LBOTTONDOWN). Кроме этого синхронные сообщения включают в себя сообщение от таймера (WM_TIMER), сообщение о необходимости плановой перерисовки (WM_PAINT) и сообщение о выходе из программы (WM_QUIT) • асинхронные сообщения (nonqueued) – сообщения, передающиеся непосредственно окну, когда Windows вызывает оконную процедуру. Отправление: с помощью функции SendMessage – не ставится в очередь, оконная процедура вызывается непосредственно, а возврат управления только после обработки сообщения оконной процедурой. Получение: во всех остальных случаях, не указанных в получении синхронных сообщений, часто являются результатом синхронных сообщений.

Сообщения не похожи на аппаратные прерывания. Во время обработки в оконной процедуре одного сообщения программа не может быть прервана другим сообщением. Только в том случае, если оконная процедура вызвала функцию, которая сама стала источником нового сообщения, то оконная процедура начнет обрабатывать это новое сообщение еще до того, как функция вернет управление программе. Цикл обработки сообщений и оконная процедура работают не параллельно. Когда оконная процедура обрабатывает сообщение, то это результат вызова функции DispatchMessage в WinMain . DispatchMessage не завершается до тех пор, пока оконная процедура не обработала сообщение.

Обработка клавиатурных сообщений

Синхронизация событий клавиатуры. Основанная на сообщениях архитектура Windows идеальна для работы с клавиатурой: 1. приложение узнает о нажатиях клавиш посредством сообщений, которые посылаются оконной процедуре: нажимание и отпускание клавиш. 2. драйвер клавиатуры передает информацию о нажатии клавиш в Windows.

3. Windows сохраняет эту информацию (в виде сообщений) в системной очереди сообщений. 4. передача сообщения клавиатуры, по одному за раз, в очередь сообщений программы, содержащей окно, имеющее фокус ввода (input focus). 5. отправление программой сообщения соответствующей оконной процедуре (с помощью функции DispatchMessage).

Читайте также:
Американская программа сои это

Для отражения различных событий клавиатуры Windows посылает программам восемь различных сообщений. Программы вполне могут игнорировать многие из них. Игнорирование событий клавиатуры.

Приложению не обязательно реагировать на каждое получаемое от клавиатуры сообщение — Windows сама обрабатывает многие сообщения клавиатуры и извещает программу об эффекте, вызванном нажатием той или иной клавиши: • В программах для Windows часто используются быстрые клавиши для быстрого доступа к часто употребляемым пунктам меню. Windows сама преобразует быстрые клавиши в командные сообщения меню, приложению не нужно этого делать явно. • Окна диалога также имеют интерфейс клавиатуры, но обычно программам не нужно отслеживать клавиатурные события, когда активно окно диалога. Интерфейс клавиатуры обслуживается самой Windows, и Windows посылает сообщения программе о действиях, соответствующих нажимаемым клавишам. Понятие фокуса ввода Когда на клавиатуре нажата клавиша, только одна оконная процедура может получить сообщение об этом.

Окно, имеющее фокус ввода – это окно, которое получает это сообщение клавиатуры. Окно, имеющее фокус ввода – это либо активное окно, либо дочернее окно активного окна. Сами по себе дочерние окна никогда не могут быть активными. Если фокус ввода находится в дочернем окне, то активным является родительское окно этого дочернего окна.

Если активное окно минимизировано, то окна с фокусом ввода нет. Windows продолжает слать программе сообщения клавиатуры, но эти сообщения выглядят иначе, чем сообщения, направленные активным и еще не минимизированным окнам.

Обрабатывая сообщения WM_SETFOCUS и WM_KILLFOCUS, оконная процедура может определить, когда окно имеет фокус ввода. • WM_SETFOCUS — окно получило фокус ввода • WM_KILLFOCUS – что окно потеряло фокус ввода В ответ на эти сообщения функция окна не может запретить получение или потерю фокуса ввода, так как эти сообщения носят чисто информирующий характер. GetFocus — позволяет узнать окно, владеющее фокусом ввода; SetFocus – позволяет изменить окно, владеющее фокусом ввода; Категории клавиатурных сообщений: • аппаратные (keystrokes) – нажатие или опускание клавиш, генерирующих значок или клавиши переключения, функциональные, управления курсором и т.д. • символьные (characters) – нажатие клавиш с использованием таких клавиш как , и — сочетание даёт символ, например строчные и прописные буквы. Аппаратные сообщения. Виды аппаратных сообщений: • несистемные– это сообщения WM_KEYDOWN и WM_KEYUP Несистемные сообщения WM_KEYDOWN и WM_KEYUP вырабатываются для клавиш, которые нажимаются и отпускаются без участия клавиши . Приложение использует или не использует эти сообщения клавиатуры. Windows их проигнорирует. • системные — это сообщения WM_SYSKEYDOWN и WM_SYSKEYUP Системные аппаратные сообщения WM_SYSKEYDOWN и WM_SYSKEYUP важны для Windows, а не для приложений. Эти сообщения обычно вырабатываются при нажатии клавиш в сочетании с клавишей . Программы обычно игнорируют сообщения WM_SYSKEYDOWN и WM_SYSKEYUP и передают их в функцию DefWindowProc. case WM_SYSKEYDOWN: MessageBox(hWnd,”Message WM_SYSKEYDOWN”,”Key”,MB_OK); return(DefWindowProc(hWnd,message,wParam,lParam));

Если не передать системные аппаратные сообщения в DefWindowProc. происходит запрет всех операций с клавишей (команды меню, и др.), когда окно программы имеет фокус ввода. Аппаратные сообщения клавиатуры становятся в очередь. Приложение с помощью функции GetMessageTime получить время нажатия и отпускания клавиши относительно старта системы.

32-разрядная переменная lParam, передаваемая в оконную процедуру, состоит из шести полей: • счетчик повторений — число нажатий клавиши; • скан-код OEM (Original Equipment Manufacturer) — код клавиши, генерируемый аппаратурой компьютера; • флаг расширенной клавиатуры — 1, если сообщение клавиатуры появилось в результате работы с дополнительными клавишами расширенной клавиатуры IBM; • код контекста — 1, если нажата клавиша ; • флаг предыдущего состояния клавиши — 0, если в предыдущем состоянии клавиша была отпущена, и 1, если в предыдущем состоянии она была нажата; • флаг состояния клавиши — 0, если клавиша нажимается, и 1, если клавиша отпускается; wParam – содержит виртуальный код клавиши. Виртуальный код клавиши (virtual key code) — идентифицирует нажатую или отпущенную клавишу.

Коды виртуальных клавиш имеют символьные обозначения, определенные в заголовочных файлах Windows, и имеют префикс VK_. Сообщения WM_SYSKEYDOWN и WM_SYSKEYUP адресованы Windows, и приложению не всегда нужно их отслеживать. Если приложение обрабатывает сообщение WM_KEYDOWN, то сообщение WM_KEYUP оно обычно тоже игнорирует. Определение состояния клавиш сдвига и клавиш-переключателей.

Параметры wParam и lParam аппаратных сообщений клавиатуры ничего не сообщают о состоянии клавиш сдвига (, , ) и клавиш-переключателей (, , ). GetKeyState — функция, получающая состояние любой виртуальной клавиши: 1. Отражает состояние клавиатуры на момент, когда последнее сообщение от клавиатуры было выбрано из очереди. 2. Не позволяет получать информацию о клавиатуре независимо от обычных сообщений от клавиатуры — программе необходимо получить сообщение от клавиатуры до того, как GetKeyState сможет определить состояние клавиш. Информация о текущем положении клавиши используется функция GetAsyncKeyState. Символьные сообщения. Виды символьных сообщений: • несистемные – WM_CHAR, WM_DEADCHAR; • системные – WM_SYSCHAR, WM_SYSDEADCHAR;

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru