Delphi中ScriptControl的高级应用(一)
在我们的Windows系统里提供了一个叫ScriptControl的OCX组件,我们可以用这个组件来实现脚本故事世界的精彩。
1、创建ScriptControl组件服务
首先,我们来看一下该组件都有哪些方法和属性。如图001,002。
图001
图002
接着,我们用Delphi创建组件服务。
从图001可知,该组件的ProgID为“MSScriptControl.ScriptControl.1”。所以我们可以这样创建组件:
Var
sc : OleVariant;
begin
sc := CreateOleObject('MSScriptControl.ScriptControl.1');
//使用Language属性来设定该组件所使用的语言
internet explorer 脚本错误//语言可以为:VbScript、JavaScript(也可缩写为JScript)
//相当于在HTML里用的<Script Language=’JScript’>…</Scirpt>
sc.Language :='JavaScript';
end;
2、用Eval()来实现最简单的数学表达式的计算
Eval()是这个组件中用的最多的一个方法,也是经常被大家用来计算数学表达式的一个方法。
演示
Function calc(const expression : String):Integer;
Var
sc : OleVariant;
begin
//expresion := ‘100+5*3’;
sc := CreateOleObject('MSScriptControl.ScriptControl.1');
sc.Language :='JavaScript';
result := StrtoInt( sc.eval(expression) );
end;
Sample: 115 := calc(‘100+5*3’);
3、实现汉字加密
在JavaScript里有两个函数Escape和Unescape,一般都是用作Html代码里的对Script进行加密时使用,目的是为了防止别人直接查看其脚本,以其乱码形式显示。
图003
加密:
Words := ‘这是一段用escape加密的汉字信息!’;
//Result:%u8FD9%u662F%u4E00%u6BB5%u7528escape%u52A0%u5BC6%u7684%u6C49%u5B57%u4FE1%u606F%uFF01
Result := sc.Eval('escape('''+Words+''')');
解密:
Result := sc.Eval('unescape('''+Words+''')');
4、利用JavaScript的正则表达式来验证IP地址的规范
这里我们需要用到ScriptControl的AddCode方法来添加自定义方法。
IP地址的规则是从0.0.0.0-255.255.255.255。
以下就是验证IP地址的代码:
var
ipreg,script:String;
begin
//IP正则式
ipreg := '^([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.'+
'([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.'+
'([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.'+
'([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$';
//JavaScript自定义函数
script:= 'function IpReg(str){'+
'var re=new RegExp('''+ipreg+''');'+
' st(str);}';
sc.AddCode(script);
//执行函数
if sc.Eval('IpReg('''+Edit1.Text+''')') then
ShowMessage('正确的IP地址个格式!')
else ShowMessage('非法IP地址格式!') ;
end;
----------------------------JoeCom(juwuyi)2005-03-19
脚本控件参考
本章中间的部分将给出脚本控件的参考,包括对象、集合、属性、方法、方法语法和示例。参考之后,这一章将继续讨论一些额外的问题,然后介绍一些可下载的使用脚本控件的Visual Basic 6和VB.NET应用程序。代码和语法示例是基于VB 6的;要获得等效的语法信息,请参考.NET语言(如VB.NET或C#)的文档。从这一章中的VB.NET范例工程中可以获得与.NET相关的指导信息。
21.4.1 对象模型
脚本控件对象模型的描述如图21-1所示。对象及其属性和方法的细节将在后续的章节中详细讨论。
图21-1
21.4.2 对象与集合
脚本控件组件有几个对象和集合(这是一种特殊的多值对象),它们协同工作,提供了大量功能用于在Visual Basic应用程序中添加脚本。对于每个对象和集合,这一节中都给出对象的一般描述,并详细介绍其属性、方法和事件。在适当的时候,给出示例代码。
1. ScriptControl对象
ScriptControl是应用程序启用脚本功能的关键元素。它提供了简单的接口来包含脚本引擎,如VBScript或JScript。所有其他可用的对象都依靠ScriptControl对象的示例。ScriptControl对象可以使用下面三种不同的方法实例化:
● 前期绑定,在表单上进行(使用Components对话框添加)
● 前期绑定,通过代码完成(使用Reference对话框进行)
● 后期绑定(任何时候都可以进行)
声明的语法
声明一个ScriptControl对象的前期绑定变量使用的是VB 6的语法(这也是后期绑定比较常用的语法)。
Dim|Private|Public [WithEvents] objSC As [MSScriptControl.]ScriptControl
下面的语法声明了一个ScriptControl对象的后期绑定变量。后期绑定变量不能处理事件。如果使用后期绑定变量,就不需要在项目中引用脚本控件。
Dim|Private|Public objSC [As Object|Variant]
属性
ScriptControl对象的属性描述如表21-1所示。
表21-1
名 称 | 输入值/返回值 | 访 问 方 式 | 描 述 |
AllowUI | Boolean | 读/写 | 设置或返回一个值,表示是否显示像MsgBox或InputBox这样的可视化元素。如果该属性被设置为False,那么与界面进行可视化交互的唯一方法就是直接通过主应用程序进行 |
Error | Error对象 | 只读 | 返回ScriptControl实例的Error对象的引用 |
Language | String | 读/写 | 设置或返回ScriptControl对象所使用的脚本语言的名称。“VBScript”和“JScript”都是本来就支持的语言。如果安装了其他兼容的脚本语言,就可以使用这些脚本语言的名称。设置这个属性会重置ScriptControl对象及其子对象的所有其它成员 |
Modules | Modules对象 | 只读 | 返回ScriptControl对象的Modules集合的引用 |
Name | String | 只读 | 如果ScriptControl对象附加到一个表单,该属性就返回控件属性页上为其指定的名称 |
Procedure | Procedure对象 | 只读 | 返回默认的“Global”模块的Procedure集合的引用。要访问其它模块的Procedure集合,可以通过Modules集合直接访问该模块,然后使用Module.Procedure属性 |
SitehWnd | Long | 读/写 | 设置或返回用于执行代码的父窗口的“句柄”。当脚本控件被用作ActiveX控件时,它会被放到表单上,那么SitehWnd的默认值就是控件的容器的hWnd,否则,如果脚本控件被用作一个对象(不附加到表单),SitehWnd就是0,这个值对应的是桌面。这个属性会影响到哪个窗口(或控件)具有对脚本控制的UI元素的UI控制权。修改这个属性可以使脚本控件依赖一个具体的窗口,而不是像在某些情况下那样只依赖于桌面(例如,可能想让脚本控件冻结一部分应用程序,而不是桌面)。需要修改这一属性的场合并不多 |
(续表)
名 称 | 输入值/返回值 | 访 问 方 式 | 描 述 |
State | Long(States) | 读/写 | 设置或返回ScriptControl对象的模式,使用States枚举常量。如果这个值被设置为Connected(1),那么ScriptControl对象就能够接收通过AddObject方法添加的对象所产生的事件。这样,对状态的更改使您能够控制对事件的处理过程 |
TimeOut | Long | 读/写 | 设置或返回一个数字,代表以毫秒为单位的时间,表示ScriptControl对象在终止长时间运行的脚本之前需要等待的时间长度。这个属性可以被设置为常量NoTimeout(-1),这样脚本代码的执行就没有时间限制;但是关闭超时机制是比较危险的,因为可能会有人创建一个包含死循环的脚本。默认的值是10 000ms(10s)。超时时间过后,会产生一个Timeout事件(这取决于ScriptControl对象是否能处理事件),同时,如果ScriptControl对象启用了AllowUI属性,就会收到一个对话框警告,允许选择继续执行脚本,否则,脚本将中止执行并产生错误。如果这个属性被设置为0(不推荐这样做),只要脚本停止发送Windows消息超过100ms,就会立即产生Timeout事件 |
UseSafeSubset | Boolean | 读/写 | 设置或返回一个Boolean值,表示脚本控件是否可以运行未被标记为“脚本安全”的组件。例如,一个脚本可能会试图使用脚本运行时对象FileSystemObject,而这不是一个“脚本安全”的对象,因为它允许访问文件系统。如果担心脚本可能在客户端机器上进行危险活动,就可以将这个属性设置为True。如果在要求组件必须是“脚本安全”的宿主(如Internet Explorer)上使用脚本控件,这个属性默认就为True,并且是只读的 |
方法
ScriptControl对象的方法描述如表21-2所示。
表21-2
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论