在多樣化的時(shí)代里,各種各樣的需求也越來越多樣化,為了滿足客戶能在運(yùn)行環(huán)境下開發(fā)腳本的需求,紫金橋軟件提供了“腳本編輯”和“腳本編譯”組件。
腳本由腳本名稱、腳本內(nèi)容和腳本說明三個(gè)部分構(gòu)成。我們編譯或執(zhí)行一段腳本之前,必須知道要編譯或執(zhí)行的腳本名稱。腳本說明是對腳本進(jìn)一步的說明,它是可有可無的,具體情況依據(jù)需求而定。
要想動態(tài)的生成腳本,首先需要一個(gè)編輯腳本的環(huán)境,這時(shí)用到“腳本編輯”組件;編寫完腳本之后,需要編譯和執(zhí)行腳本,這時(shí)用到“腳本編譯”組件。
一.腳本編輯
“腳本編輯”組件可以在“腳本編輯”組件內(nèi)編寫代碼,在編寫的過程中會提示腳本信息,如下圖所示。
 
“腳本編輯”組件提供了一個(gè)屬性,名稱為Text,通過該屬性可以設(shè)置和獲取腳本內(nèi)容。
二.腳本編譯
“腳本編譯”組件實(shí)現(xiàn)了在工程運(yùn)行環(huán)境下對指定腳本進(jìn)行編譯的功能,該組件在運(yùn)行環(huán)境下不顯示。由“腳本編譯”組件生成的腳本,是以腳本名稱作為編譯及執(zhí)行的唯一標(biāo)識的。因此,由同一個(gè)“腳本編譯”組件生成的腳本名稱必須不同;而由不同的“腳本編譯”組件生成的腳本,其腳本名稱可以相同。
“腳本編譯”組件進(jìn)行編譯和執(zhí)行腳本的過程如下:
1.使用Compile/ CompileEx函數(shù)對給定的表達(dá)式或程序進(jìn)行編譯。
Compile函數(shù):bool Compile(string Name,string Text)
CompileEx函數(shù):bool CompileEx(string Name,string Comment,string Text)
其中Name:腳本名稱;Comment:腳本說明;Text:腳本內(nèi)容。
2.若Compile/ CompileEx函數(shù)返回的值是0,說明編譯失敗,這時(shí)可以使用GetError函數(shù)得到錯(cuò)誤信息;若Compile/ CompileEx函數(shù)返回的值是非0,說明編譯成功。
3.編譯成功后,使用Execute函數(shù)去執(zhí)行Compile/ CompileEx函數(shù)編譯產(chǎn)生的執(zhí)行碼。
Execute函數(shù):bool Execute(string Name)
其中Name:腳本名稱。
除此之外,還可以通過GetComment函數(shù)得到腳本的說明。如果腳本中有表達(dá)式,可以使用GetResultInt/GetResultReal/GetResultText函數(shù)去獲得表達(dá)式的值,例如腳本中的代碼如下:
#w_rect.GetObjHeight()*#w_rect.GetObjWidth()//計(jì)算矩形面積
可以使用GetResultInt函數(shù)得到矩形面積。
“腳本編譯”組件還可以將生成的腳本保存到文件中,同時(shí)也可以從文件中讀取已保存的腳本。將生成的腳本保存到文件中有兩種用法:一種是保存到其所在窗口文件中,另一種是保存為DAT格式的文件。
- 保存到其所在窗口文件中
雙擊“腳本編譯”組件會彈出其屬性設(shè)置框,將“負(fù)責(zé)保存腳本與編譯結(jié)果”項(xiàng)勾選上,如下圖所示。
 
在工程運(yùn)行環(huán)境下,“腳本編譯”組件就可以將生成的腳本保存到窗口文件中,但若要永久保存以待下次調(diào)用,需將窗口文件保存,可以使用窗口的Save函數(shù)將窗口文件保存。
- 保存為DAT格式的文件
使用“腳本編譯”組件的Save函數(shù)將生成的腳本保存到DAT格式的文件中,例如:
#w_compile.Save("F:\a.dat");// w_compile是腳本編譯組件的名稱
然后使用Load函數(shù)從文件中讀取所保存的腳本,例如:
#w_compile.Load("F:\a.dat");
三.示例
本示例簡單的展現(xiàn)如何在運(yùn)行環(huán)境下編寫腳本,初始畫面如下圖所示。
 
矩形對象的名稱是w_rect。
“編譯”按鈕里的代碼:
string text;
if !#w_compile.CompileEx("a","這是個(gè)示例。",#w_script.Text) then
#w_compile.GetError(text);//w_compile是腳本編譯組件的名稱。
text = text + "------編譯失敗!";
MsgBoxEx(text,"編譯結(jié)果提示框",0);//彈出只有確定功能的提示框。
else
MsgBoxEx("編譯成功!","編譯結(jié)果提示框",0);
endif
“執(zhí)行”按鈕里的代碼:
#w_compile.Execute("a");//a是腳本名稱。
“獲得運(yùn)算結(jié)果”按鈕里的代碼:
#w_compile.Execute("a");
#w_edtReturn.Val = #w_compile.GetResultInt();
當(dāng)腳本是表達(dá)式時(shí),可以點(diǎn)擊此按鈕去獲取表達(dá)式運(yùn)算的結(jié)果。在此以GetResultInt函數(shù)為例子去獲取表達(dá)式運(yùn)算的整型值,如果想要獲得實(shí)型值或字符型結(jié)果,可以使用GetResultReal或GetResultText函數(shù)。注意GetResultInt函數(shù)使用時(shí)必須和Execute函數(shù)在同一個(gè)函數(shù)體內(nèi)。
準(zhǔn)備工作已經(jīng)就緒,現(xiàn)在開始實(shí)現(xiàn)在運(yùn)行環(huán)境下動態(tài)編寫腳本、編譯和執(zhí)行腳本的功能。
- 在運(yùn)行環(huán)境下改變矩形對象的顏色和位置
在“腳本編輯”組件內(nèi)編寫代碼如下:
#w_rect.FillColor = 0;//改變矩形對象填充色為紅色
#w_rect.Y = #w_rect.Y*2;//改變矩形對象的位置
點(diǎn)擊“編譯”按鈕,會彈出提示框,如下圖所示。
 
提示框的提示信息說明編譯成功,然后點(diǎn)擊“執(zhí)行”按鈕,執(zhí)行結(jié)果如下圖所示。
 
- 在運(yùn)行環(huán)境下計(jì)算矩形面積
在“腳本編輯”組件內(nèi)編寫代碼如下:
#w_rect.GetObjHeight()*#w_rect.GetObjWidth()//計(jì)算矩形面積
點(diǎn)擊“編譯”按鈕,提示編譯成功,然后點(diǎn)擊“獲得運(yùn)算結(jié)果”按鈕,“獲得運(yùn)算結(jié)果”按鈕前的文本框中會顯示矩形面積,執(zhí)行效果如下圖所示。
 
函數(shù)的具體用法可以參考紫金橋軟件的幫助手冊。
|