Скрипт можно привязать не только к кнопке на панели инструментов, но и связать его с определенным событием внутри программы. Событие это своего рода переключатель, который срабатывает при определенных действиях в карте. Скрипт, связанный с событием, принято называть обработчиком события.
Скрипт события можно разместить в кнопке пользовательской панели инструментов, в слое (пункт Менеджера слоев), либо в карте ( > ). Скрипт слоя будет вызваться при изменениях, связанных с данным слоем.
в контекстном менюКнопка, в которой присутствует обработчик события, запоминает свое состояние (нажата или отжата). Нажатие активизирует обработчик, а отжатие отключает его. Это позволяет, при необходимости, запрограммировать и использовать несколько режимов с разными обработчиками. Если необходимо выполнить какие-то действия непосредственно в момент нажатия кнопки (например, установить какие-нибудь настройки), то эти команды нужно поместить в начало текста скрипта - до первой метки определяющей обработчик события.
Скрипт события должен начинаться с метки %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 | Вызывается при запуске программы. |