TMSScripter工作室开发者向导Word下载.docx
《TMSScripter工作室开发者向导Word下载.docx》由会员分享,可在线阅读,更多相关《TMSScripter工作室开发者向导Word下载.docx(34页珍藏版)》请在冰豆网上搜索。
![TMSScripter工作室开发者向导Word下载.docx](https://file1.bdocx.com/fileroot1/2023-2/3/ac74a41d-9c6f-45e6-bcfd-c18b1b57ddd7/ac74a41d-9c6f-45e6-bcfd-c18b1b57ddd71.gif)
脚本结构
脚本结构用2个主要的块组成:
1、过程和函数声明;
2、主要的块。
两个块是可选择的,但是在脚本中至少要有一个。
主要的块不需要begin...end。
它可以是一个单一的声明。
一些例子:
脚本1:
procedureDoSomething;
begin
CallSomething;
end;
CallSomethingElse;
脚本2:
脚本3:
functionMyFunction;
result:
='
Ok!
'
;
脚本4:
和Pascal一样,声明应该由“;
”结尾。
begin...end块是允许集合一批声明。
标识符
在脚本的标识符名字(变量名字,函数和过程名字,等等。
)跟随Pascal最普通的规则:
应该从一个字符开始(a..z或A..Z),或“_”,和继之以包含数字字母的字符或“_”字符。
不能包含任何别的字符或空格。
有效的标识符:
VarName
_Some
V1A2
无效的标识符:
2Var
MyName
Some-more
This,is,not,valid
赋值声明
赋值语句和Pascal一样,赋值语句是使用“:
=”。
例子:
MyVar:
=2;
Button.Caption:
This'
+'
isok.'
字符串
字符串是同pascal一样使用单引号('
)字符。
双引号("
)不能使用。
你也能使用(#)字符宣布一个字符在一个字符串的内部,不需要使用(+)操作符增加一个字符到一个字符串。
A:
Thisisatext'
Str:
Text'
+'
concat'
B:
StringwithCRandLFcharattheend'
#13#10;
C:
Stringwith'
#33#34'
charactersinthemiddle'
注释
在脚本内能插入注释。
你能使用//字符或(**)或{}。
使用//字符注释只能注释一行。
//ThisisacommentbeforeShowMessage
ShowMessage('
Ok'
);
(*Thisisanothercomment*)
Moreok!
{Andthisisacomment
withtwolines}
Endofokays'
变量
不需要在脚本中声明变数类型。
这样,你宣布变量只需要使用var命令和变量的名字。
如果脚本的OptionExplicit属性被设置为false,那么就不需要声明变量。
在这种情况下,变数是暗示声明。
如果你想要脚本上有更多的控制,设置OptionExplicit属性为true。
如果OptionExplicit属性为true,而在脚本中使用了变量但不进行声明,将会唤醒一个编译错误。
procedureMsg;
varS;
S:
Helloworld!
ShowMessage(S);
脚本2:
varA;
=0;
=A+1;
脚本3:
HelloWorld!
如果脚本属性OptionExplicit被设置为false,那么var声明不需要出现在任何脚本的上方。
索引
字符串,数组和数组属性可以使用索引“[”并且“]”字符。
更多例子:
MyChar:
=MyStr[2];
MyStr[1]:
A'
MyArray[1,2]:
=1530;
Lines.Strings[2]:
Sometext'
数组
脚本支持数组和variant数组,使用方法参考Pascal。
注意:
数组的索引是从0开始的。
NewArray:
=[2,4,6,8];
Num:
=NewArray[1];
//Numreceives"
4"
MultiArray:
=[['
green'
'
red'
blue'
],['
apple'
orange'
lemon'
]];
=MultiArray[0,2];
//Strreceives'
MultiArray[1,1]:
neworange'
If语句
if语句有2种形式:
if..then和if..then..else。
ifJ<
0thenResult:
=I/J;
ifJ=0thenExitelseResult:
0then
Result:
Count:
=Count+1;
end
else
Done:
=True;
While语句
同Pascal。
whileData[I]<
XdoI:
=I+1;
whileI>
0do
ifOdd(I)thenZ:
=Z*X;
I:
=Idiv2;
X:
=Sqr(X);
whilenotEof(InputFile)do
Readln(InputFile,Line);
Process(Line);
repeat语句
repeat
K:
=ImodJ;
=J;
J:
=K;
untilJ=0;
Write('
Enteravalue(0..9):
'
Readln(I);
until(I>
=0)and(I<
=9);
for语句
脚本1:
forc:
=1to10do
a:
=a+c;
fori:
=atobdo
j:
=i^2;
sum:
=sum+j;
case语句
caseuppercase(Fruit)of
lime'
:
ShowMessage('
black'
函数和过程说明
函数和过程的宣告同Delphi的非常相似,唯一的差别只在于不需要指定变量的类型。
函数的返回值是使用暗示的Result变量。
参数传地址也能被使用,只是不需要规定变量类型。
procedureHelloWord;
procedureUpcaseMessage(Msg);
ShowMessage(Uppercase(Msg));
functionTodayAsString;
=DateToStr(Date);
functionMax(A,B);
ifA>
Bthen
=A
=B;
procedureSwapValues(varA,B);
VarTemp;
Temp:
=A;
=Temp;
Basic的语法
TatBasicScripter组件执行Basic语法的脚本。
Basic语法支持:
∙sub..endandfunction..enddeclarations
∙byrefanddimdirectives
∙if..then..else..endconstructor
∙for..to..step..nextconstructor
∙do..while..loopanddo..loop..whileconstructors
∙do..until..loopanddo..loop..untilconstructors
div,mod,xor,shl,shroperators
∙try..exceptandtry..finallyblocks
∙selectcase..endselectconstructor
∙exitstatement
∙accesstoobjectpropertiesandmethods(ObjectName.SubObject.Property)
同Pascal的脚本结构。
SUBDoSomething
CallSomething
ENDSUB
CallSomethingElse
FUNCTIONMyFunction
MyFunction="
"
ENDFUNCTION
同正常Basic一样,所声明的一个单行能由“:
”字符分开。
同Basic,标识符一些例子:
使用“=”字符。
MyVar=2
Button.Caption="
This"
+"
isok."
使用("
A="
Thisisatext"
Str="
Text"
+"
concat"
使用('
)或(REM)字符。
ThisisacommentbeforeShowMessage
ShowMessage("
Ok"
REMThisisanothercomment
Andthisisacomment
withtwolines
Endofokays"
这样,你宣布变量只需要使用DIM命令和变量的名字。
SUBMsg
DIMS
S="
ShowMessage(S)
DIMA
A=0
A=A+1
ShowMessage(A)
如果脚本属性OptionExplicit被设置为false,那么DIM声明不需要出现在任何脚本的上方。
MyChar=MyStr[2]
MyStr[1]="
A"
MyArray[1,2]=1530
Lines.Strings[2]="
Sometext"
脚本支持数组和variant数组,同Pascal脚本的一样。
NewArray=[2,4,6,8]
Num=NewArray[1]//Numreceives"
MultiArray=[["
green"
"
red"
blue"
],["
apple"
orange"
lemon"
]]
Str=MultiArray[0,2]//Strreceives'
MultiArray[1,1]="
neworange"
If声明
if...then..endif和if...then...else..endif。
IFJ<
0THENResult=I/JENDIF
IFJ=0THENExitELSEResult:
=I/JENDIF
0THEN
Result=I/J
Count=Count+1
ELSE
Done=True
ENDIF
While声明
同Basic。
WHILE(Data[I]<
X)I=I+1ENDWHILE
WHILE(I>
0)
IFOdd(I)THENZ=Z*XENDIF
X=Sqr(X)
ENDWHILE
WHILE(notEof(InputFile))
Readln(InputFile,Line)
Process(Line)
Loop声明
支持loop语句,功能同Basic中的loop语句。
可能的语法是:
DOWHILEexprstatementsLOOP
DOUNTILexprstatementsLOOP
DOstatementsLOOPWHILEexpr
DOstatementLOOPUNTILexpr
DO
K=ImodJ
I=J
J=K
LOOPUNTILJ=0
DOUNTILI>
=0
Write("
"
Readln(I)
LOOP
LOOPWHILEJ<
0
DOWHILEI<
For声明
FORc=1TO10STEP2
a=a+c
NEXT
FORI=aTOb
j=i^2
sum=sum+j
Select声明
功能同Basic中的Select语句。
SELECTCASEselectorExpression
CASEcaseexpr1
statement1
…
CASEcaseexprn
statementn
CASEELSE
elsestatement
ENDSELECT
SELECTCASEuppercase(Fruit)
CASE"
lime"
ShowMessage("
black"
函数和过程声明
函数和附属的声明与Basic相似。
函数的返回值是使用暗示的变量,该变量同函数名一样。
参数传地址也能被使用,使用BYREF命令。
一些例子:
SUBHelloWord
SUBUpcaseMessage(Msg)
ShowMessage(Uppercase(Msg))
FUNCTIONTodayAsString
TodayAsString=DateToStr(Date)
FUNCTIONMax(A,B)
IFA>
BTHEN
MAX=A
MAX=B
SUBSwapValues(BYREFA,B)
DIMTEMP
TEMP=A
A=B
B=TEMP
脚本的工作
现在我们讲到了脚本的具体使用方法。
开始
开始脚本,只需要把脚本赋值给TatCustomScripter组件的SourceCode属性,并调用Execute方法。
下面是一个简单的例子:
Scripter.SourceCode.Text:
Scripter.Execute;
现在我们变得灵活一点。
在窗口上放一个Tmemo组件,并把代码改为下面这样:
Scripter.SourceCode:
=Memo1.Lines;
现在你可以在程序运行的时候在Memo组件中输入脚本,并运行它了。
公共任务
在脚本中调用程序中的子程序
如果脚本要直接调用程序中的一个或多个函数和过程,你只要使用ExecuteSubRouti方法就可以了:
Pascal示例
脚本:
procedureDisplayHelloWorld;
procedureDisplayByeWorld;
Byeworld!
Basic示例
subDisplayHelloWorld
ShowMessage(“Helloworld!
”);
endsub
subDisplayByeWorld
ShowMessage(“Byeworld!
代码:
Scripter.ExecuteSubRoutine('
DisplayHelloWorld'
DisplayByeWorld'
上面的代码将显示“Helloword!
”和“Byeworld!
”消息框。
取得脚本返回的值
如果Delphi要取得脚本中的过程或函数返回的值,使用ExecuteSubRoutine方法。
见下例:
functionCalculate;
=(10+6)/4;
functionCalculate
Calculate=(10+6)/4
endfunction
FunctionValue:
=Scripter.ExecuteSubRoutine('
Calculate'
如果Delphi要取得脚本所返回的值。
代码:
=Scripter.Execute;
在Basic中要达到同样的效果,就要使用保留字“MAIN”:
MAIN=(10+6)/4"
。
传递参数到脚本
如果要把Delphi变量的值传递给脚本,还是同样使用ExecuteSubRoutine方法见下例:
functionDouble(Num);
=Num*2;
functionDouble(Num)
Double=Num*2
Endfunction
CODE:
Double'
5);
FunctionValue接收到10。
如果你要传递更多的变量,就要使用一个Variant数组:
functionMaxValue(A,B);