Вызов скрипта (кнопки пользовательской панели) из другого скрипта и контекстного меню
При редактировании скрипта, в списке функций теперь доступны другие скрипты, что дает возможность их програмного вызова (запуска) с передачей и возвратом параметров. Вызов скриптов выполняется аналогично вызову встроенных функций.
Существующие скрипты в списке имеют следующий вид - %Script.Имя_панели.Имя_кнопки
Где Имя панели это имя пользовательской панели (tlb-файла) в котором содержится кнопка со скриптом, а Имя кнопки, это имя кнопки скрипта, присвоенное через контекстное меню Название. Кнопки для которых название не присвоено, получают автоматические имена вида Button1, Button2, и т.д. по их порядковому номеру на панели. Вызывать можно скрипты, которые расположены как на видимых, так и на скрытых панелях.
При вызове, можно передать вызываемому скрипту строку с входными параметрами, а также получить строку с результатом. Для этого, в вызываемом скрипте необходимо использовать зарезервированные переменные $PARAMETERS и $RESULT. Таким образом можно организовывать процедуры и функции, выполняющие типовые действия как это принято в полноценных языках программирования.
Пример взаимодействия скриптов с передачей параметров
;Текст основного скрипта (первая кнопка)
$S=%Script.Sample.Button2 Входные параметры
@Dialog.Message $S
;Текст вызываемого скрипта (вторая кнопка)
@Dialog.Message $Parameters
$Result=Возвращаемый результат
Sample.tlb (192 Bytes)Любая поданная на вход скрипта строка, внутри него становится доступной в переменной $PARAMETERS. А результат, который вызываемый скрипт присвоит переменной $RESULT, вернется вызывающему скрипту (в данном примере будет присвоен переменной $S).
Если необходимо передать или вернуть несколько параметров, то для этого нужно использовать функцию извлечения подстроки - @StringPart, например следующий скрипт выдаст сообщение со строкой 222:
$S=@StringPart 2 111 222 333
@Dialog.Message $S
По умолчанию StringPart делит строку на части по пробелам, но можно указать любой другой символ, например $S=@StringPart 2~111~222~333
Допустим, в скрипт нужно подать три строковых параметра, которые могут содержать пробелы. Тогда это можно сделать так:
$S1=…
$S2=…
$S3=…
%Library.MyScript $S1~$S2~$S3
А внутри скрипта снова разделить строку параметров на отдельные части:
$S1=@StringPart 1~$PARAMETERS
$S2=@StringPart 2~$PARAMETERS
$S3=@StringPart 3~$PARAMETERS
Аналогично скрипт, может возвращать несколько разных значений в переменной $RESULT.
Для передачи скрипту длинных списков, с неизвестным наперед количеством элементов, можно также использовать объект @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]
Вызов скриптов из контекстого меню пользователя
В пользовательское контекстное меню (Сервис|Наcтройки|Правка|Контекстное меню пользователя) теперь можно добавлять не только вызовы команд основного меню, но и кнопок со скриптами. В списке они доступны с теми же именами вида %Script.Имя_панели.Имя_кнопки.