当前位置: 首页 > 编程笔记 >

MSScriptControl.ScriptControl组件的用法实例

轩辕奕
2023-03-14
本文向大家介绍MSScriptControl.ScriptControl组件的用法实例,包括了MSScriptControl.ScriptControl组件的用法实例的使用技巧和注意事项,需要的朋友参考一下

Microsoft(R) Script 控件使用户可以创建运行任何 ActiveX(R) scripting 引擎,例如 Microsoft(R) Visual Basic (R) Scripting Edition 或Microsoft(R) JScript(TM) 的应用程序。用户可以将任何 Automation 对象的对象模型添加到 Script 控件中,这样该对象的方法和属性就可以为 scripting 引擎所使用。通过将某个应用程序的对象模型和某个scripting 引擎加以综合,用户就可以创建一个结合了两方面优点的 scripting 应用程序。应用程序不但具有 scripting 语言的简单化特点,而且综合了一种更高级、具有完整特性的专业应用程序的对象、方法,以及属性。

创建 Script 控件的实例

Microsoft Script 控件可作为一个控件或者作为一个独立的 Automation 对象创建出来。该特性可以使得用任何语言书写的应用程序都可以用 ScriptControl 宿主任何兼容的 scripting 语言。

下面的示例可使用任意格式。请注意变量 sc 并未声明为类型 ScriptControl,因为该控件不是,也不必要是工程中所引用的。只要 Script 控件出现并进行注册,下面的代码就可正常工作:


Private Sub Command1_Click() 

Dim sc 

Dim strProgram As String 

strProgram = "Sub Main" & vbCrLf & _ 

"MsgBox ""Hello World""" & vbCrLf & _ 

"End Sub" 

Set sc = CreateObject("ScriptControl") 

sc.language = "VBScript" 

sc.addcode strProgram 

sc.run "Main" 

End Sub 

如果用户在自己的工程中的引用中对 Script 控件进行显式引用,那么用户就可以用下面的代码创建 Script 控件的一个

实例:


Dim sc As ScriptControl 

显示用户接口元素 AllowUI 属性决定了 scripting 引擎是否可以显示用户接口元素。这可以应用于 Script 控件本身,例如显示超时消息。

这也可以应用于使用 ActiveX scripting 接口的 scripting 引擎。例如,下面的代码将在试图显示 Hello World 消息框时产生一个错误:


ScriptControl1.AllowUI = False 

Dim strX As String 

strX = "Sub Hello" & vbCrLf & _ 

"MsgBox ""Hello World""" & vbCrLf & _ 

"End Sub" 

ScriptControl1.AddCode strX 

ScriptControl1.Run "Hello" ' 没有允许的 UI! 

创建 Scripting 代码

Microsoft Script 控件使用户可以创建一个运行 scripting 语言,例如 VBScript 或 JScript 的应用程序。例如,假设用户在窗体上有一个按钮,用户希望在按下该按钮时运行某些 VBScript 代码。该按钮称为 Run NameMe,而用户希望scripting 代码运行一个叫 NameMe 的过程。意图是当用户单击 Run NameMe 按钮时,VBScript scripting 引擎执行 NameMe 过程。

这个 Run NameMe 按钮使用 Script Control 的 Run 方法来执行脚本。下面就是应当出现在 Run NameMe 按钮的 Click 事件中的代码:


' Script Control 的名字是 ScriptControl1。 

Private Sub RunNameMe_Click() 

ScriptControl1.Run "NameMe" 

End Sub

为了创建该脚本所需要代码的其余部分,请选择一种 scripting 语言,并将代码添加到某个过程中,然后运行该过程。

选择一种Scripting 语言

第一步是为 Script Control 配置正确的 scripting 语言。当在某页上作为控件创建 Script Control 时,Language 属性就被自动初始化为 "VBScript"。当作为一个 Automation 对象来创建 Script Control 时,则 Language 属性留作未初
始化的状态,而必须由代码作者对其进行设置。

若要将 Language 属性设置为 JScript,可使用 Properties 窗口。用户也可以在代码中使用 Language 属性,如下所
示:


ScriptControl1.Language = "JScript" 


其他 scripting 语言,例如 PERL 和 REXX,都不是由 Microsoft 所提供的,也可以为 Script 控件所用。

将代码添加到某个过程中

在用户运行 NameMe 过程之前,可使用 AddCode 方法将完整的过程添加到 Script 控件中。如果用户试图将一个不完整的过程(一个没有 End Sub 或者 End Function 的过程)添加进去,则将会出错。下面的代码将过程代码添加到 Script
Control 中:


' 当 ScriptRun 应用程序加载时,添加下面的代码 

' 将 NameMe 过程添加到 Control 中。 

Private Sub Form_Load() 

Dim strCode As String 

strCode = "Sub NameMe()" & vbCrLf & _ 

" Dim strName As String" & vbCrLf & _ 

" strName = InputBox(""Name?"")" & vbCrLf & _ 

" MsgBox ""Your name is "" & strName" & vbcrLf & _ 

"End Sub" 

ScriptControl1.AddCode strCode 

End Sub 

另外,用户也可以从某个 TextBox 控件添加过程代码:


Private Sub Form_Load() 

' 该代码包含在名为 frmScript 的窗体上 

' 名为 txtScript 的 Textbox中。 

ScriptControl1.AddCode frmScript.txtScript.Text 

End Sub

用户可以将参数添加到某个过程或者函数中。


Private Sub EvalFunc() 

' 创建函数。 

Dim strFunction As String 

strFunction = _ 

"Function ReturnThis(x, y)" & vbCrLf & _ 

" ReturnThis = x * y" & vbCrLf & _ 

"End Function" 

' 添加代码,然后运行该函数。 

ScriptControl1.AddCode strFunction 

MsgBox ScriptControl1.Run("ReturnThis", 3, 25) 

End Sub

运行过程

Run 方法运行任何已被添加到 Script 控件中的完整过程。下面的代码段运行三个已定义过程:


ScriptControl1.Run "FindName" 

ScriptControl1.Run "AddName" 

ScriptControl1.Run "Quit" 

执行 Scripting 语句,并计算结果,用户可以用 ExecuteStatement 方法执行一条 scripting 语句。用户可以用 eval 方法计算某个表达式值。在下面的示例
中,用 ExecuteStatement 方法将值 100 赋给变量 x。下面的两行用 eval 方法来测试语句 x = 100 和 x = 100/2。第二行返回 True;而第三行则返回 False。

Private Sub TryThis() 

ScriptControl1.ExecuteStatement "x = 100" 

MsgBox ScriptControl1.Eval("x = 100") ' 返回 True 

MsgBox ScriptControl1.Eval("x = 100/2") ' 返回 False 

End Sub

使用 Error 属性

Script 控件错误有两个可能来源:Script 控件自身,或者该控件试图运行的 script。为了对 scripting 代码进行调试,可使用 Error 属性,该属性返回对 Error 对象的引用。利用 Error 对象,Script 控件可以返回错误数目和对它的
描述,以及错误在 script 中出现的行号。

运行下面的代码,查看 Script 控件发现错误的一个示例:


Private Sub MyError() 

' 下面的代码被零除导致 

' 一个错误。 

Dim strCode As String 

strCode = _ 

"Sub DivideByZero()" & vbCrLf & _ 

"Dim prime" & vbCrLf & _ 

"prime = 3" & vbCrLf & _ 

"MsgBox prime/0" & vbCrLf & _ 

"End Sub" 

On Error GoTo scError 

With ScriptControl1 

.AddCode strCode 

.Run "DivideByZero" 

End With 

Exit Sub 

scError: 

' 使用 Error 对象向用户通告 

' 错误,以及出错行。 

Debug.Print ScriptControl1.Error.Number & _ 

":" & ScriptControl1.Error.Description & _ 

" in line " & ScriptControl1.Error.Line 

Exit Sub 

End Sub

 类似资料:
  • 本文向大家介绍MSScriptControl.ScriptControl组件属性、方法、事件介绍,包括了MSScriptControl.ScriptControl组件属性、方法、事件介绍的使用技巧和注意事项,需要的朋友参考一下 MSScriptControl.ScriptControl组件实例对象属性 属性名称 类型 备注 AllowUI BOOL 检测是否允许运行用户的接口元素。如果为False

  • 本文向大家介绍vue使用$emit时,父组件无法监听到子组件的事件实例,包括了vue使用$emit时,父组件无法监听到子组件的事件实例的使用技巧和注意事项,需要的朋友参考一下 vue使用$emit时,父组件无法监听到子组件的事件的原因是$emit传入的事件名称只能使用小写,不能使用大写的驼峰规则命名 以上这篇vue使用$emit时,父组件无法监听到子组件的事件实例就是小编分享给大家的全部内容了,希

  • 本文向大家介绍YII2.0之Activeform表单组件用法实例,包括了YII2.0之Activeform表单组件用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了YII2.0之Activeform表单组件用法。分享给大家供大家参考,具体如下: Activeform 文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList

  • 本文向大家介绍实例讲解Android中ContentProvider组件的使用方法,包括了实例讲解Android中ContentProvider组件的使用方法的使用技巧和注意事项,需要的朋友参考一下 ContentProvider基本使用 为了在应用程序之间交换数据,android提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API,当一个

  • 本文向大家介绍实例解析Android系统中的ContentProvider组件用法,包括了实例解析Android系统中的ContentProvider组件用法的使用技巧和注意事项,需要的朋友参考一下 ContentProvider为Android四大组件之一,主要用来应用程序之间的数据共享,也就是说一个应用程序用ContentProvider将自己的数据暴露出来,其他应用程序通过ContentRe

  • 本文向大家介绍Yii框架应用组件用法实例分析,包括了Yii框架应用组件用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架应用组件用法。分享给大家供大家参考,具体如下: 应用组件 ¶ 应用主体是服务定位器, 它部署一组提供各种不同功能的 应用组件 来处理请求。 例如,urlManager组件负责处理网页请求路由到对应的控制器。 db组件提供数据库相关服务等等。 在同一个应