Исходный текст
Option Explicit
USE CMD_TEST
Call TestExeScript()
'==============================================================================
' Примеры использования функции ExecuteScript и вызова процедур из другого модуля
' (сохраненная команда "CMD_TEST")
'==============================================================================
Sub TestExeScript()
Dim cmd, res, ObjRes
'Получить ссылку на команду "CMD_TEST"
Set cmd = ThisApplication.Commands("CMD_TEST")
'В качестве аргумента методу ExecuteScript передать объект cmd.
'В результате будет выполнено тело команды, а именно строка
'ThisScript.RetValue = ThisApplication.WorkFolder
res = ThisApplication.ExecuteScript(cmd)
MsgBox res, , "Путь к рабочей папке" 'Сообщает путь к рабочей папке
'В качестве аргумента методу ExecuteScript можно передать текстовое представление
'команды (с помощью свойства TDMSCommand.Script)
res = ThisApplication.ExecuteScript(cmd.Script)
'Результат такой же, как в предыдущем вызове ExecuteScript
MsgBox res, , "Путь к рабочей папке"
'Можно передать методу ExecuteScript строку, содержащую скрипт. Единственное
'условие - она должна завершаться символом перевода строки vbNewLine
ThisApplication.ExecuteScript("MsgBox ThisApplication.WorkFolder" & vbNewLine)
'Выполнить процедуру ShowInfo, которая находится в скрипте команды "CMD_TEST".
'Передать ей два аргумента и сообщить значение, возвращенное процедурой
res = ThisApplication.ExecuteScript("CMD_TEST", "ShowInfo", "String parameter", ThisObject)
MsgBox res, , "Значение, возвращенное процедурой ShowInfo" 'Выводит сообщение "Success"
'Выполнить функцию RetObject, которая находится в скрипте команды "CMD_TEST".
Set ObjRes = ThisApplication.ExecuteScript("CMD_TEST", "RetObject", 1)
'Выводит описание объекта, который был возвращен функцией
MsgBox ObjRes.Description, , "Объект, возвращенный функцией RetObject"
'Самый простой способ вызвать именованную процедуру из другого модуля - поместить
' в область глобальных объявлений инструкцию USE MODULE_SYSID. После этого можно
'обращаться к процедурам этого модуля просто по имени:
Call ShowInfo("SomeString", ThisObject)
End Sub
'==============================================================================
'Тело команды с системным именем CMD_TEST. Фактически команда состоит из одной строки
'ThisScript.RetValue = ThisApplication.WorkFolder и двух процедур, которые при
'запуске команды обычным образом (на объекте или с панели инструментов) выполнены не будут.
'= CMD_TEST ===================================================================
'Это собственно команда. Она просто устанавливает значение, возвращаемое скриптом
ThisScript.RetValue = ThisApplication.WorkFolder
'Процедура, которая сообщает значения переданных ей аргументов и устанавливает
'возвращаемое значение (строка "Success")
Sub ShowInfo(strArg, objArg)
MsgBox strArg & Chr(13) & objArg.Description, , "Аргументы, переданные в ShowInfo"
ThisScript.RetValue = "Success"
End Sub
'Функция возвращает объект, полученный по индексу с Рабочего стола. Индекс передается
'функции в качестве аргумента
Function RetObject(ObjIndex)
Set RetObject = ThisApplication.Desktop.Objects(ObjIndex)
End Function
'==============================================================================