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

Библиотека скриптов

%Events.OnSelect $S=@EventObject

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

;

%Events.OnChange $S=@EventObject

@If $S=0 then @Break $S=@Map.Object[$S].Parameter[-5] @Dialog.InfoBox 3000 Изменение объекта||$S

;

%Events.OnPointCollect $N=@EventObject $C=@Map.Object[$N].Count $C=$C-1

@If $C=0 then $C=1 $P=@Map.Object[$N].Point[$C] @Map.AddObject 0|1|id28|1|0 $P

После нажатия кнопки активируются обработчики событий сбора объекта, его пометки, изменения, а также событие регистрации точки.

Команда @Dialog.InfoBox, используемая в данном скрипте, выводит на экран автоматически убираемое сообщение. Аргументами команды является число милисекунд, в течении которого будет демонстрироваться окно, и текст сообщения.

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

Библиотека скриптов

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

Отправить скрипт в библиотеку можно нажатием соответствующей кнопки в окне, показанном на Рис.D.1. Внешний скрипт хранится в обычном текстовом файле с расширением DSF (Digitals Script File) в папке Library программной папки. При необходимости скрипты можно хранить и в подпапках папки Library, группируя их по функциональности.

Выполнение подпрограммы

Запустить подпрограмму на выполнение можно командой вида

@ExecuteScript Имя_скрипта [Строковый_Параметр]

Здесь квадратные скобки указывают на необязательность передачи параметров в подпрограмму. Имя_скрипта начинается с метки %Library и далее, через точку, имени файла, содержащего скрипт (возможно, с включением имени подпапки, в которой этот скрипт находится). Примеры:

%Library.ReplaceComma 101,32 %Library.MyFolder\MyScript My parameters

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

%Script.Имя_панели.Имя_кнопки [Строковый_Параметр]

345

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

Передача параметров (1-й способ)

В коде вызываемого скрипта (подпрограммы) доступны специальные переменные с именами $PARAMETERS и $RESULT. Первая позволяет передать строку параметров в подпрограмму, а вторая передать результат обратно в вызывающий скрипт.

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

По умолчанию функция @StringPart делит строку на части по пробелам. Таким образом можно передать в подпрограмму в одной строке числа, разделенные пробелом. Но @StringPart можно использовать и с другим разделителем. Допустим, вам нужно передать в подпрограмму пару переменных, содержащих пробелы. Давайте используем в качестве разделителя символ ~ (тильда):

$S1=Первая строка

$S2=Вторая строка

%Library.MyScript $S1~$S2

Тогда внутри подпрограммы мы можем разделить переданную строку на отдельные части таким образом:

$S1=@StringPart 1~$PARAMETERS $S2=@StringPart 2~$PARAMETERS

Для передачи скрипту длинных списков с неизвестным наперед количеством элементов можно использовать массив текстовых строк @Text. Например:

;Вызов скрипта

@Text.Add Первый элемент списка @Text.Add Второй элемент списка

;...

@Text.Add N-ый элемент списка $S=@Text.Text %Library.MyScript $S

;Текст скрипта

@Text.Text $PARAMETERS $C=@Text.Count

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

;обработка строк списка параметров от 1 до $С через @Text.Lines[$I]

Передача результата из подпрограммы выполняется так: $RESULT=Возвращаемая_строка

Передача параметров (2-й способ)

Второй способ передачи параметров неофициальный. Дело в том, что для каждой карты в Digitals существуют глобальные переменные с именами @Map.TempInteger и @Map.TempString. Как понятно из названия, первая переменная может хранить число, а вторая строку. В строке, при желании, можно передать список значений неограниченной длины, воспользовавшись приемом, похожим на тот, что мы видели выше (передача строк с помощью массива @Text).

Пример использования:

;Скрипт 1

$A=ул. Первомайская $B=17

$C=кв. 32

; Добавляем значения трех переменных в текстовый список

Text.Add $A

Text.Add $B

346