![]() |
Библиотека Интернет Индустрии I2R.ru |
||
![]() ![]() |
Как скриптуются приложения. Акт второй.В прошлой статье я обещал рассказать о более простом способе подключения обработчика скриптов в приложения. Особенно актуален этот вопрос для начинающих программистов, или же если ваши решения созданы на Visual Basic. Спустя некоторое время после выпуска Scripting Engine, дела изменились и Microsoft предоставила разработчикам Script ActiveX Control. Помимо переноса функциональности в удобную для Visual Basic компонентную оболочку, были также реализованы некоторые ценные для организации кода и данных скрипта функции. Неслучайно, во второй статье этой темы, все примеры я буду приводить на Visual Basic. Скрипт-компонент можно добавить совершенно стандартным методом VB: из диалогового окна Components. Если же такого пункта в списке нет, то достаточно найти его на диске при помощи Browse. Поместив скрипт-компонент на какую-нибудь форму программы (от сего места будем звать его ScriptControl1), вы обнаружите, что сам компонентик-то не так уж и много свойств имеет: AllowUI, Language и Timeout. Свойство AllowUI позволяет определить, может ли скрипт показывать свои диалоговые окна, такие как сообщения об ошибках, различные MsgBox и InputBox. Свойство Language по умолчанию установлено в VBScript, но с равным успехом может содержать имя JScript. Свойство TimeOut задает максимальный интервал, после которого скрипт будет принудительно завершен. Это полезно в том случае, если скрипт "нечаянно" зациклился. Теперь можно обратиться к внутренностям компонента, при этом обнаружив некоторые функции, позволяющие уже что-то запускать, без мучительной подготовки: Eval и ExecuteStatment. Как нетрудно догадаться, первая вычисляет выражение, введенное в виде строки, а вторая выполняет завершенный оператор. Вычисляться могут любые выражения: в целых числах, строковые, логические, возврат функций. Результат возвращается в виде VARIANT переменной, которая, как известно, может содержать все. Вряд ли взявшись за освоение Script Control, можно удовлетвориться единственной обрабатываемой строчкой. Метод AddCode позволяет добавить несколько строчек, которые потом можно запустить методом Run. Если функция принимает на вход параметры, то эти параметры можно также передать через Run. Код, который передается в качестве параметра методу AddCode должен быть корректным и содержать одну или несколько процедур или функций. В случае, если код, добавляемый при помощи AddCode некорректен, компонент выбрасывает исключение. Задача разработчика - перехватить эту ошибку и дать пользователю понять, что задача пользователя - писать скрипты грамотнее. Вообще говоря, у Script Control имеется свойство Error и одноименное событие Error, которое вызывается в случае ошибки. В случае ошибок времени выполнения лучше всего воспользоваться именно этим свойством, поскольку оно несет больше информации об ошибке, чем стандартный вариант с Err. Что касается внутренних объектов программы, то их экспортирование в пространство имен скрипта гораздо проще, чем в Visual C++. Метод AddObject позволяет расширять количество доступных скрипту объектов. Для этого нужно создать Class Module и объявить внутри него необходимые функции и public свойства. Теперь внутри скрипта можно совершенно спокойно обращаться к объявленному Object1. Таким образом, можно организовать некий proxy-объект для доступа к элементам управления в свой программе. Например, можно в YourClassModule создать функцию, добавляющую какую либо строчку в список, toolbar или меню. Следует учитывать, что если нужно передать какую либо внутреннюю переменную скрипта на обработку в ваш ClassModule, то работать придется только с переменными типа Variant. Возможности становятся поистине безграничными, если выдавать через свойства YourClassModule какие-нибудь внутренние компоненты. Напрмер, Form. Итак, путей для творческого поиска предостаточно, но прежде всего рекомендую обратиться за полной документацией, а заодно и за последней версией Script Control на http://msdn.microsoft.com/scripting/. |
|
![]() |
![]() |
2000-2008 г. Все авторские права соблюдены. |
![]() |
![]() |
![]() |
![]() |