Вызов скрипта (кнопки пользовательской панели) из другого скрипта и контекстного менюПри редактировании скрипта, в списке функций теперь доступны другие скрипты, что дает возможность их програмного вызова (запуска) с передачей и возвратом параметров. Вызов скриптов выполняется аналогично вызову встроенных функций.
Существующие скрипты в списке имеют следующий вид -
%Script.Имя_панели.Имя_кнопкиГде
Имя панели это имя пользовательской панели (tlb-файла) в котором содержится кнопка со скриптом, а
Имя кнопки, это имя кнопки скрипта, присвоенное через контекстное меню
Название. Кнопки для которых название не присвоено, получают автоматические имена вида Button1, Button2, и т.д. по их порядковому номеру на панели. Вызывать можно скрипты, которые расположены как на видимых, так и на скрытых панелях.
При вызове, можно передать вызываемому скрипту строку с входными параметрами, а также получить строку с результатом. Для этого, в вызываемом скрипте необходимо использовать зарезервированные переменные
$PARAMETERS и
$RESULT. Таким образом можно организовывать процедуры и функции, выполняющие типовые действия как это принято в полноценных языках программирования.
Пример взаимодействия скриптов с передачей параметров;Текст основного скрипта (первая кнопка)$S=%Script.Sample.Button2 Входные параметры
@Dialog.Message $S;Текст вызываемого скрипта (вторая кнопка)@Dialog.Message $Parameters
$Result=Возвращаемый результатВложение:
Sample.tlb [192 байт]
Скачиваний: 3298
Любая поданная на вход скрипта строка, внутри него становится доступной в переменной $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.Имя_панели.Имя_кнопки.