Director中非常有用的一个Xtra是MUI Dialog Xtra,这是D自代的对话框生成器。在6.0版本中就有这个Xtra了,但是很奇怪大多开发者都只应用了它最基本的特性,如果他们能否充分利用MUI Xtra的话,那么,你就可以自己定义个完全响应的对话框,而不是去用很废内存和磁盘空间的MIAW来实现。你可以去任意定制它,并且你可以完全根据你或者你的客户的需要来定义这个对话框如何去响应。可以说,你可以完全定制自己所需要的对话框,只有少数例外,那么这篇文章就来教你如何开始。
(你可以使用这些Lingo程序来生成特定平台的对话框)
对话框种类
你可以用MUI Xtra来产生两种对话框:“标准”对话框和“常规应用”对话框。“标准”类对话框由标准警告框、打开和保存对话框组成。Macromedia已经将这种对话框成为“系统对话框”,他们还添加了一个输入URL的对话框。毫无疑问,我们开发人员都会经常使用这种标准对话框,因为它们是已经完全定义好了的。我们只需要定义很少的一些参数,很少的几行lingo程序就可以创建他们,你只需要定义个属性列表来配置一下对话框,就可以用alert(),fileopen(),filesave(),getURL()方法来调用。关于使用标准警告对话框请参考
Multimedia Handyman artical。
如果这四种对话框都不能满足你的要求的话,你就需要创建一个“常规应用”的对话框。这种对话框为开发者提供了更为广泛的控制,包括内容,版式设计,方法。如果你所需要的对话框包含一组单选按钮(radio buttons)、多选按钮(checkboxes)、弹出列表框、文本输入框、文本标签、滑块、按钮或者图形,那你就需要用“常规应用”对话框来定制。当然,你可能要花费一定时间来创建他们,这由你的对话框复杂程度决定。所用的Lingo语言也很直观。
(为你的程序添加一个选项对话框)
你可以这么想,用MUI Xtra来创建一个“标准”对话框就好像应用MUI的第一层,而创建“常规应用”对话框就好像应用MUI的第二层,稍微费力一些,但是仍然需要“第一层”应用的基础。
MUI 第二层:为对话框定制数据库
几年前我用Excel的宏语言和对话框编辑器来为我的第一个程序创建对话框,当我看到它运行的时候,我觉得,用一个由数字和字符串组成的数据库来描述对话框,是很不错的主意(翻译可能有错)。我所做的就是为对话框写一些描述信息,然后嵌入我的程序中,而对话框就是由这些数据来驱动的。
MUI Xtra也允许你这么做:建一个数据库来描述对话框,然后在程序中运行,Lingo中能实现这个功能的就是属性列表,完全不需要那种由横线和竖线组成的表格。本质上来讲,你要做的就是写一个属性列表来描述对话框,然后告诉MUI Xtra来显示它。
OK,下面这些就是你大概要做的步骤:
1,创建一个MUI Xtra实例。
2,建立一个属性列表来描述对话框窗口。
3,建立一个属性列表来描述对话框内容。
4,显示对话框。
你可以将这些步骤全部写在一个电影脚本的句柄里。下面我们逐个步骤来讲。
第一步:建立MUI实例
这一步是应用Xtra最普通的步骤,但是在这里,你应该将这个MUI实例声明为全局变量,用new()方法来创建一个实例,然后用objectp()来检查是否创建成功:
-- 1. Create a MUI Xtra instance
global oDialog
if not( objectP( oDialog )) then
oDialog = new( xtra "MUI" )
if not( objectP( oDialog )) then
oDialog = 0
alert "ERROR: Xtra instance failure."
exit
end if
end if
如果失败的话,可能是因为你的Xtras文件夹中没有这个Xtra,从你的Director Xtras目录中拷贝一个放在你的Xtras目录中,就OK了。
当你创建实例之后,它自己会创建一些默认的属性列表来描述你的对话框。你可以用getWintuLaoShi.comdowProplist(),getItemproplist(),getWidgetlist()来获得这些列表。这些方法每次返回的列表都是相同的,你所需要做的就是根据你的需要来改变这些列表。我们马上开始。
第二步:设置窗口属性。
告诉MUI你所需要的对话框窗口是一个简单的、分两部分的。第一部分,需要包含一个用getWindowPropList()获得默认的窗口的属性列表。这部分是所有对话框都相同的,但是第二部分将根据具体对话框来改变一些属性。在第二部分,你需要根据你的需要来改变第一部分那个属性列表:
lsWindow = oDialog.getWindowPropList()
After this line is executed, the value of lsWindow is
[ #type: #normal,
#name: "window",
#callback: "nothing",
#Mode: #Data,
#xPosition: 100,
#yPosition: 120,
#width: 200,
#height: 210,
#modal: 1,
#toolTips: 0,
#closeBox: 1,
#canZoom: 0 ]
再重申一次,getWindowProplist()方法每次都得到相同的结果,如果你不想改,就不需要改。你可以用getWindowPropList()很容易的获得窗口的默认状态,所以你不需要每次都重新建立这个列表。现在,你所以需要的就是根据你的需要更新这个列表。
lsWind