rav ware mui make是一個很接近現代程序設計習慣的可視化xtra,它可以輕松的為drector設計出對話框,在對話框里包含了push button(命令按鈕),radio button(選項按鈕),toggle box(復選框),lable(標簽框),edit text(可編輯文本),popup list(下拉列表),slider(滑動條)??梢栽谠O計階段隨意的重設這些部件的大小和它們在對話框中的位置。在對話框中選中其中的一個部件,你就可以利用這個xtra產生相應的lingo代碼,你可以把這些代碼拷貝到你的director的電影腳本中去為你所用。
mui maker是運行在pc上的一個軟件,但是它產生的lingo代碼可以在mac和pc上同時使用,在director運行的時候平臺都可以本地化處理lingo。由于在這個軟件上對話框的設計和代碼的生成是分離的步驟,你的設計的界面可以先存貯,然后在需要的時候再融入到director電影的程序里,這給可以帶來更大的方便,怎么樣???有大體的認識了吧,有吸引力嗎?有的話就讓我們開始吧!
rav ware mui maker應用
首先讓我們認識它的面貌,用過visual系列開發程序的朋友對這個布局已經非常熟悉了。就不需要了解了!
1、 工具條:工具條里所包含的功能基本上是mui maker的功能,
2、 最左邊的按鈕是產生lingo的按鈕,
3、 其余的為設計排版用的按鈕。許多編輯軟件里都有類似的按鈕。在這里就不敘述了。
4、 設計區域:在這里可以展限你的設計才華,
5、 這里的設計就是你將來對話框的樣子。
6、 部件箱:里面有對話框常用的八種部件。
7、 屬性區域:里面有三個標
8、 簽選項,可以設置對話框和部件的屬性, 在lingo標簽里可以看到生成的代碼。
下面重點講述一下rav ware mui maker在director電影中的應用。因為在rav ware mui maker中產生的代碼只可以在director電影中產生相應的實例,我們與對話框實例的交互還要編寫一些必須的lingo代碼。同時這部分也是比較不好理解的。
首先要介紹的就是setup hander:
rav ware mui maker里創建一個你設計好的對話框實例后,你要創建一個全局變量gyourdialogname來存儲這里實例,setup hander的調用必須在其他的句柄之前調用。注意:這個句柄并不能顯示你所創建的dialog實例。如果你一開始要使你設計的dialog是有效的,那么你就要在startmovie里象下面那樣調用setup句柄
on startmovie
setup yourdialogname
end
如果你的setup句柄已經運行,要顯示你設計的對話框的時候,你可以在director的舞臺上設置一個按鈕來引發對話框的顯示,在按鈕上加入以下的lingo:
on mouseup
run yourdialogname
end
如果要關閉這個對話框,直接按對話框上的關閉就可以了,千萬不要在另一個按鈕上寫上stop句柄。
接下來就是怎么和你所設計的對話框中的部件交互的問題了,也是關鍵部分??!
回調句柄能夠從rav ware mui make創建的對話框里收集各個部件的信息,如果用戶用鼠標劃過你所設計的部件的話,回調句柄將收到一個輸入焦點列表,如果用戶輸入在一個文本域里輸入文本的話,回調句柄將返回一個改變信息列表。倘若你要你要捕獲用戶的輸入和對對話框有效的點擊行為的話,你必須把下面的回調句柄加入到一個啟動按鈕,就象下面一樣:
on yourdialognamecallback event, eventdata, itemproplist
-- put event & " : " & eventdata & " : " & itemproplist
當用戶和對話框交互的時候,在mesagge里運行注釋的第一行,我們會看見返回各種各樣的rav ware mui make的信息,就象下面一樣:
-- "windowopening : : "
-- "itemclicked : 2 : [#value: 0, #type: #pushbutton, #attributes: [], #title: "close", #tip: "tip",
#loch: 15, #locv: 24, #width: 157, #height: 52, #enabled: 1]"
-- "itemchanged : 3 : [#value: 1, #type: #radiobutton, #attributes: [], #title: "yes", #tip: "tip",
#loch: 219, #locv: 31, #width: 215, #height: 35, #enabled: 1]"
event參數包含的是關于用戶引發#itemclicked和#itemchanged的各種類型動作的符號,eventdate包含的是產生時間的項目數,itemproplist是一個lingo屬性列表,包含時間產生時刻所對應項目的屬性,可以啟動回調lingo的代碼骨干并捕獲所有的事件,但是事件的結果并不能做任何的事:
on testdialogcallback event, eventdata, itemproplist
-- put event & " : " & eventdata & " : " & itemproplist
if symbolp(event) then
case event of
#itemchanged:
#itemclicked:
#windowopening:
#windowclosed:
#windowzoomed:
#windowresized:
#itementeringfocus:
#itemlosingfocus:
otherwise:
end case
end if
end testdialogcallback
你加lingo代碼到啟動回調句柄去引發用戶基于對話框所做的行為,你可以用從eventdate里的部件代號或itemprolist里的部件屬性#title來確定哪個部件產生的這個事件。部件的代號很容易的應用,但它們非常象director里的角色代碼,容易在應用的時候產生混亂。如果你改變對話框的設計風格,并重新產生它,這個不部件的代碼就會根據新的界面的部件的位置而改變它的代碼,就像你把角色從一個通道搬到另一個通道一樣發生的變化那樣。如果你有不少同標題的部件的話,部件的#title屬性和#type屬性的組合使用,可以使你在代碼里有更多的可靠的標識符來區別不同的部件。下面的代碼是檢測用戶點擊關閉鍵并運行句柄關閉對話框。
on testdialogcallback event, eventdata, itemproplist
put event & " : " & eventdata & " : " & itemproplist
if symbolp(event) then
case event of
#itemchanged:
#itemclicked:
if the title of itemproplist = "close" then
stoptestdialog
end if
#windowopening:
#windowclosed:
#windowzoomed:
#windowresized:
#itementeringfocus:
#itemlosingfocus:
otherwise:
end case
end if
end testdialogcallback
多項目的情況:
更多的情況下你希望檢測一個事件的多個項目,你可以用嵌套case語句的方法檢測哪個項目產生了這個事件。先面的代碼就是檢測用戶是否點擊了"close"、"save"、"print"按鈕,并且在點擊不同的鍵的基礎上采用不同的行為。
on testdialogcallback event, eventdata, itemproplist
-- put event & " : " & eventdata & " : " & itemproplist
if symbolp(event) then
case event of
#itemchanged:
#itemclicked:
case (the title of itemproplist) of
"close": stoptestdialog
"save": savefilehandler
"print": printfilehandler
end case
#windowopening:
#windowclosed:
#windowzoomed:
#windowresized:
#itementeringfocus:
#itemlosingfocus:
otherwise:
end case
end if
end testdialogcallback
存貯一個值:
如果用戶通過在對話框中點擊選項按鈕或者從下拉菜單中選擇選項來作出選擇行為的時候,你可能希望將這一選擇存儲下來,那么你必須存儲一些性的數據為全局變量,以使在對話框關閉后,這些數據還能夠使用,你可以通過檢測這些部件的#value屬性,來判斷用戶做出了怎樣的選擇。舉個例子來說,當用戶通過下拉菜單做出了選擇,他就會產生一個#itemchanged事件,并且下拉菜單的#value屬性值被存貯到菜單選項對應的文本里,下面的代碼就是存貯用戶下拉菜單選項到全局變量。
on testdialogcallback event, eventdata, itemproplist
-- put event & " : " & eventdata & " : " & itemproplist
global popupchoice
if symbolp(event) then
case event of
#itemchanged:
if the type of itemproplist = #popuplist then
set popupchoice = the value of itemproplist
end if
#itemclicked:
#windowopening:
#windowclosed:
#windowzoomed:
#windowresized:
#itementeringfocus:
#itemlosingfocus:
otherwise:
end case
end if
end testdialogcallback
可控的改變項目的屬性
通過應用rav ware mui maker xtra's的temupdate方法,你可以可控的改變菜單項目的屬性,作為用戶行為的結果,temupdate的 語法如下:
itemupdate ( instanceglobal, itemnumber, newpropertylist )
你的對話框的全局變量名可以被叫做yourdialogname,下面的代碼改寫了第二項的文本,就是一個文本標簽去讀"no bad dogs"。
itemupdate ( gtestdialog, 2, [#value: "no bad dogs", #type: #label,
#attributes: [#justification: #left, #textstyle: [#plain]],
#title: "title", #tip: "tip", #loch: 300, #locv: 77, #width: 127,
#height: 10, #enabled: 1] )
下面的句柄是在"go"和"stop"文本之間切換當他們每一次被點擊的時候。
新聞熱點
疑難解答