Scripter工作室开发者向导
版权2002 Automa tmssoftware.com
概要
Scripter工作室是把脚本能力加到你的应用程序的一套的Delphi/C++Builder部件。Scripter工作室能使你的最终用户使用可视化工具书写和执行自己的脚本。包含的组件有:
TatPascalScripter - 非视觉组件,执行Pascal语法的脚本。
TatBasicScripter - 非视觉组件,执行Basic语法的脚本。
TatPascalFormScripter - 窗口认识Pascal脚本,继承自TatPascalScripter组件。
TatBasicFormScripter - 窗口认识Basic脚本,继承自TatBasicScripter组件。
TatScriptDebugDlg - 脚本高度的对话组件。
TAdvMemo - 语法高亮Memo,在程序运行时编辑脚本。
TatPascalScripter和TatBasicScripter都是从TatCustomScripter组件继承下来的,都使用相同的属性和方法来运行脚本。
脚本有下列特征:
·在运行时间解释Pascal和Basic语言。
·脚本能访问任何Delphi对象,包括属性和方法。
·脚本支持try...except和try...finally异常处理。
·允许脚本读/写Delphi变量和常量。
·允许Delphi代码访问(读/写)脚本变量。
·你能建造(从Delphi代码)你自己的类,包含属性和方法,并在脚本中使用。
·Delphi系统的大多数程序(转化,日期,格式化,字符串操作)已经包括(IntToStr,FormatDateTime,Copy,Delete等等)。
·你能保存/装载编译了的代码,这样你不需要每次运行脚本的时候都需要源代码。
·调试能力(断点,跟踪,运行到光标,暂停,中断,等等)
·安全的线程
·COM(微软普通的对象模型)支持
语言特征
Pascal语法
TatPascalScripter组件执行脚本的Pascal语法。Pascal语法支持:
· begin .. end
· procedure and function
· if .. then .. else
· for .. to .. do .. step
· while .. do
· repeat .. until
· try .. except and try .. finally
· case
· array constructors (x:=[ 1, 2, 3 ];)
· ^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr
· 访问对象属性和方法(ObjectName.SubObject.Property)
脚本结构
脚本结构用2个主要的块组成:
1、过程和函数声明;
2、主要的块。
两个块是可选择的,但是在脚本中至少要有一个。主要的块不需要begin...end。它可以是一个单一的声明。一些例子:
脚本1:
procedure DoSomething;
begin
CallSomething;
end;
begin
CallSomethingElse;
end;
脚本2:
begin
CallSomethingElse;
end;
脚本3:
function MyFunction;
begin
result:='Ok!';
end;
脚本4:
CallSomethingElse;
和Pascal一样,声明应该由“;”结尾。begin...end块是允许集合一批声明。
标识符
在脚本的标识符名字(变量名字,函数和过程名字,等等。)跟随Pascal最普通的规则:
应该从一个字符开始(a..z或A..Z),或“_”,和继之以包含数字字母的字符或“_”字符。
不能包含任何别的字符或空格。
有效的标识符:
VarName
_Some
V1A2
无效的标识符:
2Var
My Name
Some-more
This,is,not,valid
赋值声明
赋值语句和Pascal一样,赋值语句是使用“:=”。例子:
MyVar:=2;
Button.Caption:='This ' + 'is ok.';
字符串
字符串是同pascal一样使用单引号(')字符。双引号(")不能使用。你也能使用(#)字符宣布一个字符在一个字符串的内部,不需要使用(+)操作符增加一个字符到一个字符串。一些例子:
A:='This is a text';
Str:='Text '+'concat';
B:='String with CR and LF char at the end'#13#10;
C:='String with '#33#34' characters in the middle';
注释
在脚本内能插入注释。你能使用//字符或(* *)或{}。使用//字符注释只能注释一行。
//This is a comment before ShowMessage
ShowMessage('Ok');
(* This is another comment *)
ShowMessage('More ok!');
{ And this is a comment
with two lines }
ShowMessage('End of okays');
变量
不需要在脚本中声明变数类型。这样,你宣布变量只需要使用var命令和变量的名字。如果脚本的OptionExplicit属性被设置为false,那么就不需要声明变量。在这种情况下,变数是暗示声明。如果你想要脚本上有更多的控制,设置OptionExplicit属性为true。如果OptionExplicit属性为true,而在脚本中使用了变量但不进行声明,将会唤醒一个编译错误。例子:
脚本1:
procedure Msg;
var S;
begin
S:='Hello world!';
ShowMessage(S);
end;
脚本2:
var A;
begin
A:=0;
A:=A+1;
end;
脚本3:
var S;
S:='Hello World!';
ShowMessage(S);
如果脚本属性OptionExplicit被设置为false,那么