在多樣化的時代里,各種各樣的需求也越來越多樣化,為了滿足客戶能在運行環境下開發腳本的需求,紫金橋軟件提供了“腳本編輯”和“腳本編譯”組件。
腳本由腳本名稱、腳本內容和腳本說明三個部分構成。我們編譯或執行一段腳本之前,必須知道要編譯或執行的腳本名稱。腳本說明是對腳本進一步的說明,它是可有可無的,具體情況依據需求而定。
要想動態的生成腳本,首先需要一個編輯腳本的環境,這時用到“腳本編輯”組件;編寫完腳本之后,需要編譯和執行腳本,這時用到“腳本編譯”組件。
一.腳本編輯
“腳本編輯”組件可以在“腳本編輯”組件內編寫代碼,在編寫的過程中會提示腳本信息,如下圖所示。

“腳本編輯”組件提供了一個屬性,名稱為Text,通過該屬性可以設置和獲取腳本內容。
二.腳本編譯
“腳本編譯”組件實現了在工程運行環境下對指定腳本進行編譯的功能,該組件在運行環境下不顯示。由“腳本編譯”組件生成的腳本,是以腳本名稱作為編譯及執行的唯一標識的。因此,由同一個“腳本編譯”組件生成的腳本名稱必須不同;而由不同的“腳本編譯”組件生成的腳本,其腳本名稱可以相同。
“腳本編譯”組件進行編譯和執行腳本的過程如下:
1.使用Compile/ CompileEx函數對給定的表達式或程序進行編譯。
Compile函數:bool Compile(string
Name,string Text)
CompileEx函數:bool CompileEx(string
Name,string Comment,string Text)
其中Name:腳本名稱;Comment:腳本說明;Text:腳本內容。
2.若Compile/ CompileEx函數返回的值是0,說明編譯失敗,這時可以使用GetError函數得到錯誤信息;若Compile/ CompileEx函數返回的值是非0,說明編譯成功。
3.編譯成功后,使用Execute函數去執行Compile/ CompileEx函數編譯產生的執行碼。
Execute函數:bool Execute(string Name)
其中Name:腳本名稱。
除此之外,還可以通過GetComment函數得到腳本的說明。如果腳本中有表達式,可以使用GetResultInt/GetResultReal/GetResultText函數去獲得表達式的值,例如腳本中的代碼如下:
#w_rect.GetObjHeight()*#w_rect.GetObjWidth()//計算矩形面積
可以使用GetResultInt函數得到矩形面積。
“腳本編譯”組件還可以將生成的腳本保存到文件中,同時也可以從文件中讀取已保存的腳本。將生成的腳本保存到文件中有兩種用法:一種是保存到其所在窗口文件中,另一種是保存為DAT格式的文件。
1.保存到其所在窗口文件中
雙擊“腳本編譯”組件會彈出其屬性設置框,將“負責保存腳本與編譯結果”項勾選上,如下圖所示。

在工程運行環境下,“腳本編譯”組件就可以將生成的腳本保存到窗口文件中,但若要永久保存以待下次調用,需將窗口文件保存,可以使用窗口的Save函數將窗口文件保存。
2.保存為DAT格式的文件
使用“腳本編譯”組件的Save函數將生成的腳本保存到DAT格式的文件中,例如:
#w_compile.Save("F:\a.dat");// w_compile是腳本編譯組件的名稱
然后使用Load函數從文件中讀取所保存的腳本,例如:
#w_compile.Load("F:\a.dat");
三.示例
本示例簡單的展現如何在運行環境下編寫腳本,初始畫面如下圖所示。

矩形對象的名稱是w_rect。
“編譯”按鈕里的代碼:
string text;
if
!#w_compile.CompileEx("a","這是個示例。",#w_script.Text) then
#w_compile.GetError(text);//w_compile是腳本編譯組件的名稱。
text
= text + "------編譯失敗!";
MsgBoxEx(text,"編譯結果提示框",0);//彈出只有確定功能的提示框。
else
MsgBoxEx("編譯成功!","編譯結果提示框",0);
endif
“執行”按鈕里的代碼:
#w_compile.Execute("a");//a是腳本名稱。
“獲得運算結果”按鈕里的代碼:
#w_compile.Execute("a");
#w_edtReturn.Val =
#w_compile.GetResultInt();
當腳本是表達式時,可以點擊此按鈕去獲取表達式運算的結果。在此以GetResultInt函數為例子去獲取表達式運算的整型值,如果想要獲得實型值或字符型結果,可以使用GetResultReal或GetResultText函數。注意GetResultInt函數使用時必須和Execute函數在同一個函數體內。
準備工作已經就緒,現在開始實現在運行環境下動態編寫腳本、編譯和執行腳本的功能。
1.在運行環境下改變矩形對象的顏色和位置
在“腳本編輯”組件內編寫代碼如下:
#w_rect.FillColor
= 0;//改變矩形對象填充色為紅色
#w_rect.Y
= #w_rect.Y*2;//改變矩形對象的位置
點擊“編譯”按鈕,會彈出提示框,如下圖所示。

提示框的提示信息說明編譯成功,然后點擊“執行”按鈕,執行結果如下圖所示。

2.在運行環境下計算矩形面積
在“腳本編輯”組件內編寫代碼如下:
#w_rect.GetObjHeight()*#w_rect.GetObjWidth()//計算矩形面積
點擊“編譯”按鈕,提示編譯成功,然后點擊“獲得運算結果”按鈕,“獲得運算結果”按鈕前的文本框中會顯示矩形面積,執行效果如下圖所示。

函數的具體用法可以參考紫金橋軟件的幫助手冊。