Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Digitals.pdf
Скачиваний:
73
Добавлен:
28.06.2022
Размер:
9.86 Mб
Скачать

Управление ходом выполнения

@if условие then действие_если_правда else действие_если_ложь @if условие действие_если_правда

условие может проверять содержимое неких переменных скрипта с помощью операций сравнения, часто в сочетании с логическими операциями and (логическое И) и or (логическое ИЛИ). Например:

@If ($I>0) and ($I<=$Count) then $I=$I+1 else @Goto %Start

Управление ходом выполнения

Скрипт можно выполнять нелинейно. Для этого в языке предусмотрены простейшие средства управления ходом выполнения команд, знакомые по школьным урокам информатики, а именно метки и оператор перехода. Метка должна располагаться в отдельной строке. Ее имя должно быть уникальным и начинаться с символа % (процент). Оператор перехода выглядит так: @Goto %имя_метки.

Операторы перехода обычно используются в комбинации с условным оператором @if. Например:

@If $I<=$Count @Goto %Start

- если содержимое переменной I меньше или равно содержимому переменной Count, то перейти к метке

%Start.

Для прерывания выполнения скрипта доступен оператор @Break. Например:

@If $C=0 @Break Список параметров пуст

- здесь после @Break присутствует сообщение, которое будет выведено пользователю при прерывании скрипта.

Подпрограммы

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

Чтобы вызвать внешний скрипт, используется команда @ExecuteScript, о которой немного ниже в разделе «Библиотека скриптов».

События

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

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

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

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

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

343

Приложение D. Введение в Digitals Script

имя события, которое обрабатывается в настоящий момент в скрипте, можно использовать функцию

@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

Вызывается при запуске программы.

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

Чтобы почувствовать события “на вкус”, создайте кнопку и скопируйте в нее текст следующего скрипта:

@Dialog.InfoBox 3000 Активизация скрипта обработки событий

%Events.OnCollect $S=@EventObject

@If $S=0 then @Break $S=@Map.Object[$S].Parameter[-5] @Dialog.InfoBox 3000 Сбор объекта||$S

;

344