`

我才知道的VB6宝贝

阅读更多

今天主要是看了这篇文章VB-Helper:坚守脚本,之所以看这篇文章,主要是在维护以前开发的系统中,我被各种原先丑陋的设计搞得心烦,但是在下一个版本Release之前,这个产品还要维护下去,而且如果我们从头来重做一个,短期内也是不现实的。


Microsoft Script 控件允许用户为任意 Script 引擎编写和运行 Script。Script 控件提供 VBScript 和 Jscript(TM) 两种 Script 引擎。此外,您可向 Script 控件添加任何 Automation 对象的对象模型。添加后,Script 引擎可使用 Automation 对象的公用方法和属性。把应用程序的对象模型与 Script 引擎相结合,可以创建 Script 应用程序,运行宏来控制该应用程序。

创建 Script 控件实例

Microsoft Script 控件可作为控件或独立的 Automation 对象创建。此特性允许任何宿主应用程序以任意 Script 语言使用 Script 控件。
以下示例可放置于任意窗体中。注意,没有声明变量 sc 为 ScriptControl 类型,因为没有也不必在工程中引用控件。只要 Script 控件存在并已注册,以下代码就能正常运行:

 1Private Sub Command1_Click()Sub Command1_Click()
 2 Dim sc 
 3 Dim strProgram As String
 4 strProgram = "Sub Main" & vbCrLf & _
 5 "MsgBox ""嗨,你好!""" & vbCrLf & _
 6 "End Sub"
 7 Set sc = CreateObject("ScriptControl")
 8 sc.language = "VBScript"
 9 sc.addcode strProgram
10 sc.run "Main"
11End Sub

如果您在工程引用中对 Script 控件进行了显式的引用。就可以使用下列的代码创建该 Script 控件的实例:

Dim sc As ScriptControl

显示用户界面元素

AllowUI 属性决定是否允许 Script 引擎显示用户界面元素。可应用于 Script 控件自身,如控制超时信息的显示,也可应用于使用 ActiveX(TM) 编写界面的 Script 引擎。例如,在试图显示“Hello World”消息框时,以下代码将产生错误:

1ScriptControl1.AllowUI = False
2Dim strX As String
3strX = "Sub Hello" & vbCrLf & _
4"MsgBox ""Hello World""" & vbCrLf & _
5"End Sub"
6ScriptControl1.AddCode strX
7ScriptControl1.Run "Hello" ' 不允许使用 UI !


创建 Script 代码

Microsoft Script 控件允许您创建运行 Script 语言(如 VBScript 或 Jscript 语言)的应用程序。假设,例如在窗体中有一个按钮,并且当您按下该按钮时希望执行某段 VBScript 代码。该按钮的名称为 Run NameMe,并且您希望脚本代码执行一个名为 NameMe 的过程。方法是当用户单击“运行 NameMe”按钮时,VBScript Script 引擎执行NameMe 过程。

运行 NameMe”按钮用 Script 控件的 Run 方法运行 Script。下面的代码应该出现在 Run NameMe 按钮的 Click 事件中:

'该 Script 控件的名称是 ScriptControl1。

1Private Sub RunNameMe_Click()Sub RunNameMe_Click()
2 ScriptControl1.Run "NameMe"
3End Sub


要创建此 Script 所需的其余代码,请选择一种 Script 语言,添加代码,然后运行该过程。

1 选择 Script 语言

第一步是为 Script 控件设置正确的 Script 语言。Script 控件被创建为一个页面上的控件时,Language 属性自动地被初始化为"VBScript"。当 Script 控件被创建为一个 Automation 对象时, Language 属性则没有被初始化,并且必需有代码编写者来设定。要设置 Language 属性为 Jscript,请使用“Properties”窗口。也可在代码中使用 Language 属性,如下所示:

ScriptControl1.Language = "JScript"

Script 控件也可使用其他 Script 语言。

2 向过程添加代码

请先使用 AddCode 方法向 Script 控件添加完整的过程,然后运行 NameMe 过程。如您添加的过程不完全(没有 End Sub 或 End Function),将发生错误。以下是向 Script 控件添加过程代码示例: 

 1' 当 ScriptRun app 加载时,以下代码向 Control
 2' 添加 NameMe 过程。
 3Private Sub Form_Load()Sub Form_Load()
 4 Dim strCode As String
 5 strCode = _
 6   "Sub NameMe()" & vbCrLf & _
 7 " Dim strName " & vbCrLf & _
 8 " strName = InputBox(""姓名?"")" & vbCrLf & _
 9   " MsgBox ""您的姓名是:"" & strName" & vbcrLf & _
10 "End Sub"
11 ScriptControl1.AddCode strCode
12End Sub

 另外,您可从 TextBox 控件添加过程代码:

1Private Sub Form_Load()Sub Form_Load()
2 ' 此代码包含在 frmScript 窗体里名为 txtScript 的文本框中。
3 ScriptControl1.AddCode frmScript.txtScript.Text
4End Sub

您可向过程或函数添加参数。

 1Private Sub EvalFunc()Sub EvalFunc()
 2 ' 创建函数。
 3 Dim strFunction As String
 4 strFunction = _
 5 "Function ReturnThis(x, y)" & vbCrLf & _
 6 " ReturnThis = x * y" & vbCrLf & _
 7 "End Function"
 8 ' 添加代码,然后运行此函数。
 9 ScriptControl1.AddCode strFunction
10 MsgBox ScriptControl1.Run("ReturnThis"325)
11End Sub

3 运行过程

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

1ScriptControl1.Run "FindName"
2ScriptControl1.Run "AddName"
3ScriptControl1.Run "Quit"

执行 Script 语句和计算结果

可以使用 ExecuteStatement 方法执行一个脚本语句。您可使用 Eval 方法计算 Script 代码行。

在下列代码中,ExecuteStatement 方法用于把 100 赋给变量 x。后面的两行代码使用 Eval 方法测试 x = 100 和 x = 100/2。第二行代码返回 True;第三行代码返回 False。

 

1Private Sub TryThis()Sub TryThis()
2    ScriptControl1.ExecuteStatement "x = 100"
3    MsgBox ScriptControl1.Eval("x = 100")  ' 结果为 True
4    MsgBox ScriptControl1.Eval("x = 100/2")  ' 结果为 False
5End Sub

使用 Error 属性

Script 控件错误有两个来源:Script 控件自身或 Control 正要运行的 Script。要调试 Script 代码,请使用 Error 属性,它返回 Error 对象的引用。Script 控件可用 Error 对象返回错误编号和描述信息,以及 Script 中出现错误的行号。

请运行以下代码显示一个示例。此示例中,Script 控件使用 Error 属性显示错误信息:

 1Private Sub MyError()Sub MyError()
 2 ' 以下 Script 代码产生被零除的错误。
 3 Dim strCode As String
 4 strCode = _
 5 "Sub DivideByZero()" & vbCrLf & _
 6 "Dim prime" & vbCrLf & _
 7 "prime = 3" & vbCrLf & _
 8 "MsgBox prime/0" & vbCrLf & _
 9 "End Sub"
10 On Error GoTo scError
11 With ScriptControl1
12  .AddCode strCode
13  .Run "DivideByZero"
14 End With
15 Exit Sub
16scError:
17 ' 用 Error 对象通知用户所出现的错误以及该错误所在的行。
18 Debug.Print ScriptControl1.Error.Number & _
19
20":" & ScriptControl1.Error.Description & _
21 "行号:" & ScriptControl1.Error.Line
22 Exit Sub
23End Sub

ScriptControl的确是一个简单的解决办法,这种方式给程序提供了简单的脚本定制功能,因此可以将一些业务规则封装到单个模块中,通过动态加载的方式,轻松实现了业务逻辑的变化,因此我觉得还是不错,只是以前把这块给忽略了。

其实VB6的确已经被淘汰了,但是有些时候它偏偏就留下很多好的东西,而这些恰恰是我不知道的。

分享到:
评论

相关推荐

    魔力宝贝VB登陆器工程源码

    【标题】"魔力宝贝VB登陆器工程源码"揭示了这是一个使用Visual Basic(VB)编程语言开发的游戏登录器项目,特别针对“魔力宝贝”这款游戏。VB是Microsoft开发的一种面向对象的编程语言,常用于创建图形用户界面(GUI...

    仿VB登录器源码_魔力宝贝_VB_

    6. **多线程**:如果登录器需要同时处理多个并发连接,可能需要用到VB的多线程技术,如Thread类,以确保程序的高效性和稳定性。 总的来说,这个"仿VB登录器源码"是一个很好的学习和实践VB网络编程以及游戏客户端...

    魔力看血小工具VB源代码

    《魔力看血小工具VB源代码》是一个专为游戏《魔力宝贝》设计的辅助程序,主要用于查看游戏中怪物的血量。这个程序的核心亮点在于它提供了VB(Visual Basic)的源代码,使得用户不仅可以利用这个工具进行实际的游戏...

    VB6.0封装EXCEL2010功能区菜单

    窗体与控件" />这些是调用内置的功能,大家要记得是用idMso,如果是自定义的就用id,还要注意区分大 小写,可能有的会员会问,我们怎样知道这些内置控件和功能的名称呢,我这里有一个工作薄,控件列表,也是微软网站...

    VB源码600例

    高达600余例的VB程序代码库,备有详细的说明和实例,其中大部分可以变通用于ACCESS <P><P>非常非常感谢楚狐兄找到这个宝贝并贡献出来,这种无私的精神值得敬佩。我加了一个查询的功能,支持模糊查询,只需按F2就可以...

    VB通讯采用API实现的串口通讯

    下面是基于VB6的示例代码,展示如何使用API实现串口通讯: - **打开串口**:通过`CreateFile`函数指定串口号(本例中为“COM4”),并设置访问模式为读写。 - **获取和设置串口状态**:使用`GetCommState`获取...

    vb.net科幻桌面源码,数字时钟+天气+蜂巢等元素桌面

    不可多得的桌面源码,主要具有以下功能: 1.数字时钟,2.天气桌面,3.蜂巢等元素桌面。4.科幻桌面 ...压缩包文件5M,源码里包括n个非常好的类及模块,非常值得学习,记得打好评哦,这可是压仓底的宝贝源码。

    vb.net日语文章

    在VB.NET编程环境中,开发日语应用程序涉及到一系列特定的技术和概念。VB.NET是Microsoft .NET框架的一部分,它提供了一个强大的编程环境,支持多种语言,包括日语。本篇文章将深入探讨如何在VB.NET中处理日语字符和...

    Photoshop for 脚本生成插件(JS/VB/C#)

    生成的代码是JS和VB的。涉及图形处理开发的小伙伴,PS有多强大,你们懂的;但是关于文档却一直没有详细的注解。PS的内置命令更是看不懂;有了这个...看要学什么命令;直接操作一遍,代码全部生成。然后...嘿嘿嘿。宝贝...

    爱上魔力登陆器vb源代码

    【爱上魔力登陆器vb源代码】是一款专为游戏《魔力宝贝》设计的登录器,采用Visual Basic(VB)编程语言开发。VB是微软公司推出的一种面向对象的、事件驱动的编程工具,适合快速构建用户界面友好、功能丰富的应用程序...

    唯有魔力看血工具及其源码

    《唯有魔力看血工具及其源码》是一个针对经典网络游戏《魔力宝贝》设计的辅助工具,由C++编程语言在Visual Studio 2005环境下开发,并在Windows XP操作系统下运行良好。此工具的核心功能是查看游戏内角色的生命值...

    获取淘宝宝贝信息_未完成

    6. **异步处理**:尝试将长时间运行的操作或大体积数据的加载异步化,以避免阻塞UI线程,造成界面无响应。 7. **使用代理服务**:如果问题源于淘宝网站本身,可以考虑通过API接口而不是直接浏览网页来获取宝贝信息...

    魔力日志图片生成源代码

    6. **数据结构与算法**:在处理日志图片的生成过程中,可能需要使用到各种数据结构(如列表、字典)来存储信息,以及算法(如排序、搜索)来优化处理过程。 7. **文件操作**:源代码需要能够读取和保存用户的数据,...

    看血小工具_magic_魔力看血工具_魔力看血_魔力_

    6. **安全性**:使用第三方软件可能带来的安全风险,包括病毒感染、个人信息泄露等,因此开发者需要确保工具的安全性,同时用户也应注意安装来源的可信度。 7. **反作弊机制**:游戏开发商可能会设置反作弊系统来...

    宝贝挑选器1.0

    本软件采用VB制作,操作简易,是大家购物的好帮手,请大家分享,谢谢使用!

    易淘-桌面淘宝软件绿色版,全新的淘宝模式

    易淘-桌面淘宝软件特色 一键预览 创新的商品预览模式,宝贝浏览更轻松 搜索更智能 ...快车下载:flashget://W0ZMQVNIR0VUXWh0dHA6Ly91bmlvbi44NjBrLmNvbS9kb3dubG9hZC5hc3A/aWQ9MDExMzMwW0ZMQVNIR0VUXQ==

    Pokemon-Engine:宣威的神奇宝贝引擎

    6. **战斗系统**: 神奇宝贝的核心在于其独特的战斗机制。引擎需要实现回合制战斗逻辑,包括选择技能、计算伤害、触发特殊效果等。此外,战斗动画和视觉反馈也是提升用户体验的关键。 7. **资源管理**: 游戏中的图像...

Global site tag (gtag.js) - Google Analytics