主题:  RAV Ware MUI Maker测试报告

medianumen

职务:普通成员
等级:1
金币:1.0
发贴:133
#12000/11/19 13:52:33
RAV Ware MUI Maker概述
RAV Ware MUI Make是一个很接近现代程序设计习惯的可视化XTRA,它可以轻松的为Drector设计出对话框,在对话框里包含了Push Button(命令按钮),Radio Button(选项按钮),Toggle Box(复选框),Lable(标签框),Edit Text(可编辑文本),Popup List(下拉列表),Slider(滑动条)。可以在设计阶段随意的重设这些部件的大小和它们在对话框中的位置。在对话框中选中其中的一个部件,你就可以利用这个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、    属性区域:里面有三个标9、    签选项,10、    可以设置对话框和部件的属性,11、    在Lingo标12、    签里可以看到生成的代码。
下面重点讲述一下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”文本之间切换当他们每一次被点击的时候。
(由于时间的关系,我也没来的及很仔细的测试,但以上的方法我都测试了,我做描述的是基于联机帮助的基础上的,因为我觉得里面的东西比较的有代表性,这样也节约了不少的时间。关于以上的叙述是我的个人理解,肯定有错的地方,望各位读者指正,谢谢!)
Medianumen