【叶帆开源区】VBScript脚本运用(脚本程序与宿主程序的交互)

叶帆
博客专家认证
业界专家认证
2004-10-15 03:47:49
做过工控的人都知道,对脚本语言的支持是标准组态软件应具备的一个基本功能(如iFix,组态王等)。如果我们用VB开发类似的功能,能实现吗?
想必大家都知道微软提供了Micrsoft Script Control 1.0 控件,在VB版也见到了大家对这个控件的使用(如用ExecuteStatement方法执行脚本命令 ExecuteStatement("msgbox “你好””)??? )。但最重要的一点,ActiveX脚本与宿主应用程序数据交互与传递,却没有完整的解决方案。
我也是探索了很长一段时间,才摸索出一点数据传递与交互的技巧,现在共享出来,供大家讨论研究。

【程序界面】--------------------------------
http://www.bjjr.com.cn/yefan/pic/VBScriptDemo1.jpg
http://www.bjjr.com.cn/yefan/pic/VBScriptDemo2.jpg
http://www.bjjr.com.cn/yefan/pic/VBScriptDemo3.jpg

【源码下载】--------------------------------
http://blog.csdn.net/yefanqiu 【叶帆源码】[011] VBScript脚本运用

【源码介绍】--------------------------------
http://blog.csdn.net/yefanqiu/archive/2004/10/15/137928.aspx

【部分源码摘要】--------------------------------

'*************************************************************************
'**模 块 名:frmTest
'**说 明:YFsoft 版权所有2004 - 2005(C)
'**创 建 人:叶帆
'**日 期:2004-10-15 11:00:32
'**修 改 人:
'**日 期:
'**描 述:脚本语言运用探索
'**版 本:V1.0.0
'*************************************************************************
Option Explicit

'*************************************************************************
'**函 数 名:chkRun_Click
'**输 入:无
'**输 出:无
'**功能描述:脚本运行控制
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 11:19:31
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub chkRun_Click()
If chkRun.value = 1 Then
tmrRun.Interval = cmbRunTime.Text '运行间隔
tmrRun.Enabled = True '开始运行 以固定间隔循环运行
txtEdit.Enabled = False
Else
tmrRun.Enabled = False '停止运行
txtEdit.Enabled = True
End If
End Sub

'*************************************************************************
'**函 数 名:cmbType_Click
'**输 入:无
'**输 出:无
'**功能描述:操作类型切换
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 12:56:19
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmbType_Click()
cmdSCDemo1_Click
End Sub

'*************************************************************************
'**函 数 名:cmdRun_Click
'**输 入:无
'**输 出:无
'**功能描述:单次运行脚本
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 11:51:29
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdRun_Click()
Call tmrRun_Timer
End Sub

'*************************************************************************
'**函 数 名:cmdSCDemo1_Click
'**输 入:无
'**输 出:无
'**功能描述:参数传递演示
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 11:03:29
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdSCDemo1_Click()
Dim strType As String

'内部变量定义 类似组态王中的数据字典
valMem.Clear
valMem.SetValue "Value1", txtValue(0)
valMem.SetValue "Value2", txtValue(1)
valMem.SetValue "Value3", 0


Select Case cmbType.ListIndex
Case 0:
strType = "+"
Case 1:
strType = "-"
Case 2:
strType = "*"
Case 3:
strType = "/"
End Select

txtEdit = "dim lngValue1" & vbCrLf
txtEdit = txtEdit & "dim lngValue2" & vbCrLf
txtEdit = txtEdit & "dim lngValue3" & vbCrLf
txtEdit = txtEdit & "lngValue1=vm.getvalue(" & Chr(34) & "Value1" & Chr(34) & ")" & vbCrLf
txtEdit = txtEdit & "lngValue2=vm.getvalue(" & Chr(34) & "Value2" & Chr(34) & ")" & vbCrLf
txtEdit = txtEdit & "lngValue3=CInt(lngValue1)" & strType & "CInt(lngValue2)" & vbCrLf
txtEdit = txtEdit & "vm.setvalue " & Chr(34) & "Value3" & Chr(34) & ",lngValue3 " & vbCrLf
End Sub

'*************************************************************************
'**函 数 名:cmdSCDemo2_Click
'**输 入:无
'**输 出:无
'**功能描述:对象操作演示
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 13:41:23
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdSCDemo2_Click()
txtEdit = "dim lngC" & vbCrLf
txtEdit = txtEdit & "lngC=clng(fm.txtdemo.text)" & vbCrLf
txtEdit = txtEdit & "lngC=lngC+10" & vbCrLf
txtEdit = txtEdit & "if lngC>255 then lngC=0" & vbCrLf
txtEdit = txtEdit & "fm.picdemo.backcolor=rgb(lngC,0,0)" & vbCrLf
txtEdit = txtEdit & "fm.txtdemo.text=cstr(lngC)" & vbCrLf
End Sub

'*************************************************************************
'**函 数 名:Form_Load
'**输 入:无
'**输 出:无
'**功能描述:初始化
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 11:13:03
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub Form_Load()

'添加参数运用的 内部可使用的变名 外部实际变量名
scCommand.AddObject "vm", valMem, True

'向脚本添加外部可用的对象
'最后一个参数: True表示它的子类属性方法在脚本中可以操作 false 表示今该对象本身的方法属性可用
scCommand.AddObject "fm", Me, True

'脚本运行间隔设置
cmbRunTime.ListIndex = 0

'参数操作类型
cmbType.ListIndex = 0
End Sub

'*************************************************************************
'**函 数 名:tmrRun_Timer
'**输 入:无
'**输 出:无
'**功能描述:脚本运行
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2004-10-15 11:29:46
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub tmrRun_Timer()
On Error GoTo ToExit '打开错误陷阱
'------------------------------------------------
Dim i As Long

'参数输入
valMem.SetValue "Value1", txtValue(0).Text
valMem.SetValue "Value2", txtValue(1).Text
valMem.SetValue "Value3", 0

'脚本运行
scCommand.ExecuteStatement txtEdit.Text

'参数输出
lstValueOut.Clear
For i = 1 To valMem.Count
lstValueOut.AddItem valMem.GetValue("", i)
Next

'------------------------------------------------
Exit Sub
'----------------
ToExit:
txtError = "错 误 号:" & Err.Number & " 时间:" & Format(Now, "YYYY-MM-DD HH:MM:SS") & vbCrLf
txtError = txtError & "错误信息:" & Err.Description & vbCrLf
txtError = txtError & "错误来源:" & Err.Source
End Sub

【叶帆开源区】其它链接
XP界面窗体制作(可放缩、可缩小到托盘)
http://community.csdn.net/Expert/topic/3387/3387552.xml?temp=.416424
有意思的老人源码
http://community.csdn.net/Expert/topic/3376/3376547.xml?temp=.1939661
VB源码之友
http://community.csdn.net/Expert/topic/3365/3365079.xml?temp=7.926577E-02
定制公用对话框(如photoshop的文件打开对话框)
http://community.csdn.net/Expert/topic/3385/3385386.xml?temp=.2206842
绝对经典的扫雷源码(仿微软扫雷界面)--可以作弊呢!!!
http://community.csdn.net/Expert/topic/3380/3380429.xml?temp=.3048517
MSComm串口通信示例
http://community.csdn.net/Expert/topic/3387/3387736.xml?temp=.2366754
任意透明窗体--运用API实现特异窗体
http://community.csdn.net/Expert/topic/3389/3389796.xml?temp=.8869898





...全文
205 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GGL123 2004-10-16
  • 打赏
  • 举报
回复
dongge2000 2004-10-16
  • 打赏
  • 举报
回复
哈哈^-^
guxizhw 2004-10-15
  • 打赏
  • 举报
回复
我就顶你,你完了,你发的每个贴我都顶……
-_-b

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧