素材图片酷 图酷镜像二 | 壁纸酷 壁纸镜像二 | 写真扫图酷 | Free Wallpaper | 贴图论坛 | ·设为首页 ·加入收藏
您现在的位置: 图酷 >> 自习室 >> 多媒体制作 >> Director >> 教程正文

  没有公告


director使用mui xtra创建对话框
作者: jerrowolf
教程来源: 奥古多媒体
教程等级:         ★★★
教程录入: 烤焦面包
教程审核: 烤焦面包
添加时间: 2004-12-3
点击次数:
字体选择: 【字体:
相关操作: 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门信息:
推荐内容:

        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来显示它。

  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了。

  当你创建实例之后,它自己会创建一些默认的属性列表来描述你的对话框。你可以用getWindowProplist(),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()很容易的获得窗口的默认状态,所以你不需要每次都重新建立这个列表。现在,你所以需要的就是根据你的需要更新这个列表。

lsWindow.name = "My Dialog Box"
lsWindow.callback = "myDialogCallback"
lsWindow.xPosition = -1
lsWindow.yPosition = -1
lsWindow.width = 0
lsWindow.height = 0

  在上面这个例子,通过设置#name来让对话框的标题栏显示"My Dialog Box";设置#xPosition,#yPosition为-1是为了让对话框显示在屏幕中央。设置#width,#height为0是为了自动设置对话框尺寸,具体值由这个对话框所包含的元素决定。设置#callback是要告诉Xtra当在这个对话框上进行交互的时候,响应的句柄名。在第四步时会详细讲解这个句柄。

  注意#type属性有三个可选的值:#normal,#alert,#palette。默认是#normal,我个人从来未发现他们三个之间的区别,无论是在苹果还是在PC上。我相信不是这个Xtra中没有赋予#alert,#palette全部的功能,也许是我还没有努力研究他们的应用吧(自己翻译的,也许不是这个意思)。

  另外还有其他一些属性不起作用,比如#tooltips,还有一些不能通用于所有平台,如#closebox,#canzoom。
  本文不会对这些做任何解释,你可以在MUI的帮助文件中查询,最好自己试一下。

  最后,#mode属性也有3个可选值:#data,#pixel,#dialogunit。这些值决定MUI如何排版对话框,默认的#data模式,MUI将不会做任何排版工作,#pixel模式中会给你提供像素级的排版控制。#dialogunit模式也允许你精确的控制,但是对话框单元会随着系统字体的改变而变化。我发现最简单的就是用#data或者#pixel模式。

第三步:安排对话框内容

  尽管不难,但这是最费时的步骤。当你完成之后,你会发现,在你写描述对话框代码之前先画一个草图会对你很有帮助。




  这是一个几乎包含了所有元素的对话框。

  你应该记得在第二步中,你为窗口定义了一个属性列表叫做lswindow。为了描述对话框的内容,你应该建立一个线性列表,来包含在你的对话框出现的每一个元素。也就是说,你要建一个list列表来描述可见的和不可见的所有组件。

  开始定义一个空的表:

lsDialog = []

  还记得定义lsWindow时的两个部分么?我们在这里也要用相同的方法来定义lsDialog列表。先用getItemPropList()方法获得默认的元素属性列表,然后改变它,然后添加(最好先复制)到一个list列表中。还不明白么?那好,我们现在就添加一个元素,你会发现其实很简单。

formatter = oDialog.getItemPropList()

  这行执行后,formatter的值应该是:
[ #value: 0,
  #type: #checkBox,
  #Attributes: [],
  #title: "title",
  #tip: "tip",
  #locH: 20,
  #locV: 24,
  #width: 200,
  #height: 210,
  #enabled: 1 ]

  你希望第一个组件不是一个复选框,所以你应该改变它的#type属性,然后复制formatter,然后添加到lsDialog中。

formatter.type = #windowBegin
lsDialog.append( formatter.duplicate() )

  恭喜!你已经向你的对话框添加了一个组件了。从这里开始,你就可以用同样的方法添加任何组件,只要你愿意。现在我们来看看要添加所有组件的程序:

-- 添加一个不可编辑的标签
widget = oDialog.getItemPropList()
widget.type = #label
widget.value = "My dialog will display this text."
lsDialog.append( widget.duplic

[1] [2] [3] 下一页

  • 上一篇教程:
  • 下一篇教程:
  • ::版权和投稿说明::
    • 任何媒体、网站或个人转载、链接、转贴或以其他方式复制发表本站文章,在使用时务必注明“稿件来源:图酷”及“www.tucoo.com”字样,多谢。
    • 本站已注明“来源”的文章均为转载稿,本站转载出于传递更多信息之目的。如本站转载稿涉及版权等问题,请来信与本站联系。
    • 如果您有自己原创的作品,请向我们投稿哦!您可以通过Email:gogocat@21cn.com投出自己的作品,赶快行动吧!
    • 如果觉得我们的资源有用,请推荐给朋友,谢谢!
    ::相关教程::
    使用visible时要不要宣告puppetSprite
    如何可以在Director中侦测键盘的输入
    Case指令在Director中的应用
    什麽是Sprite
    Director中几种Scirpt
    Xtra系列--人性助手Msagnet
    MCI指令在DIRECTOR 中的应用
    用面向对象的方法在DIRECTOR中实现滚动条
     
    网友评论:(评论内容只代表网友观点,与本站立场无关!) 发表评论