События

Пример обработчика событий

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

Скрипт события можно разместить в кнопке пользовательской панели инструментов, в слое (пункт Скрипт обработки событий… в контекстном меню Менеджера слоев), либо в карте (Карта > Скрипт обработки событий…). Скрипт слоя будет вызваться при изменениях, связанных с данным слоем.

Кнопка, в которой присутствует обработчик события, запоминает свое состояние (нажата или отжата). Нажатие активизирует обработчик, а отжатие отключает его. Это позволяет, при необходимости, запрограммировать и использовать несколько режимов с разными обработчиками. Если необходимо выполнить какие-то действия непосредственно в момент нажатия кнопки (например, установить какие-нибудь настройки), то эти команды нужно поместить в начало текста скрипта - до первой метки определяющей обработчик события.

Скрипт события должен начинаться с метки %Events, после которой через точку идет имя события. Например: %Events.OnAdd. В рамках одного скрипта можно использовать несколько меток событий, для каждой из которых прописать свой обработчик.

Также можно назначить один обработчик сразу нескольким событиям - для этого нужно перечислить события через запятую. Например: %Events.OnFileNew, OnFileOpen. Чтобы создать обработчик для всех типов событий сразу можно использовать символ звездочки: %Events.*. Чтобы получить имя события, которое обрабатывается в настоящий момент в скрипте, можно использовать функцию @EventName.

Специальная функция @EventObject позволяет получить номер объекта, с которым произошло событие. Например, для события OnCollect это будет номер вновь собранного объекта, а для события OnSelect - номер последнего помеченного. Если помечено несколько объектов, то для их перебора можно использовать функцию @Map.NextSelected.

Для некоторых команд функция @EventObject работает иначе. События и их описания приведены в Табл.D.1.

Таблица D.1. События, применимые в скриптах

СобытиеОписание и особенности применения
OnAddВызывается при вставке объектов в карту, например, из буфера обмена.
OnChangeВызывается при изменении объекта (его геометрии или параметров).
OnCollectВызывается при сборе нового объекта.
OnDeleteВызывается при удалении объекта.
OnFileCloseВызывается при каждом закрытии карты. Для этого события и других OnFile-событий @EventObject будет содержать номер карты.
OnFileNewВызывается при каждом создании новой карты.
OnFileOpenВызывается при каждом открытии карты.
OnFileSaveВызывается перед сохранением карты. Обработчик события может запретить сохранение, присвоив специальной переменной $Result значение 1. В этом случае в скрипте рекомендуется предусмотреть окно с сообщением для пользователя, чтобы объяснить, почему именно карта не сохранена.
OnJoinВызывается при соединении объектов кнопкой Соединить на панели Правка.
OnLayerChangeВызывается при изменении слоя объекта.
OnMergeВызывается при объединении объектов кнопкой Объединение на панели Правка.
OnParametersChangeВызывается при изменении параметров объекта (то есть при редактировании их содержимого в боковой панели Инфо). Для этого события функция @EventParameter возвращает номер измененного параметра (или список номеров, разделенных пробелами).
OnPointCollectВызывается при добавлении каждой точки собираемого объекта (то есть регистрации точки).
OnSelectВызывается при пометке объекта.
OnShutdownВызывается при закрытии программы.
OnStartupВызывается при запуске программы.