定制能够随意拖动的MIAW
|
|
|
作者:佚名
来源:InterNet 加入时间:2005-2-7 |
我们经常想要创建一个具有以下属性的MIAW(Movie In A Window,窗口中的影片):
1. 没有标准的标题栏。
2. 在以窗口模式运行的放映机中,能够被用户在舞台范围内外自由拖动。
看起来好像很容易,可是许多开发者发现,即使给windowType指定了有效值,最终的MIAW仍然带有标题栏,且仅能在舞台范围内拖动,或者虽然没有标题栏,但位于舞台范围内,且根本无法拖动。作为一个Director开发者,你也许根本不需要这些功能(因此也不需要知道windowType究竟该如何取值),你也许一直苦于无法算出给windowType赋予何值才能够得到满意的结果。本文阐述的技巧很好地解决了这一问题,将其用在Director程序中非常容易。此外,这项技巧已经通过测试,在MAC和PC上都能够工作的很好。
做法很简单,只需两步:
1. 选择合适的windowType值,此处必须令windowType=2。
2. 给一个“伪造”的标题栏添加Lingo代码,以便鼠标能够随意拖动这个MIAW。
为什么在这个MIAW中,必须令windowType=2呢?简单地说,是因为一个取值为2的“窗口”实际上根本就不是窗口,而是一个对话框。真正的窗口(windowType取其他的有效值)必须在当前舞台环境的父窗口边界内,这不是Director的特性,这是所有视窗操作系统的一个基本概念。通过令windowType=2,实际上创建了一个“对话框中的影片”,而对话框能够存在于桌面上的任何地方,且与创建它的主窗口的大小和位置都没有关系。因此只要能够在预期的位置用Lingo在一个对话框(windowType=2)中打开影片,那么随后就可以在运行时用Lingo改变它的位置。
首先,在MIAW的“热点”上添加相应的Lingo代码,以便当鼠标按下时跟踪其位置,并相应地调整窗口(实际上是对话框)的rect值。
将下面的代码粘贴到Script Window中,并确保将其设置成Movie Script。
on DragWindow dWhichMIAW tell the stage set mPt to point(the mouseH,the mouseV) set origRect to the rect of dWhichMIAW repeat while the mouseDown set newPt to point(the mouseH, the mouseV) set deltaPt to newPt - mPt set newRect to offset(origRect,getAt(deltaPt,1), ? getAt(deltaPt,2)) set the rect of dWhichMIAW to newRect tell dWhichMIAW to updateStage updateStage end repeat end tell end
正如你看到的那样,这个带有参数(dWhichMIAW)的剧本被MIAW引用,同时根据传递的参数值运行。可是从哪里调用剧本呢?很简单,你的MIAW看起来可能像下图那样,注意我是如何使用一个Director中的Shape演员来“伪造”标题栏的。
其次,将下面的剧本放在“伪造”的标题栏上。
global gVideoPlayer - the global reference to your MIAW
on mouseDown repeat while the mouseDown tell the stage to DragWindow(gVideoPlayer) end repeat end
这就是要做的一切。当你打开这个MIAW时,没有标题栏,点击“伪造的标题栏”能够在屏幕上任意拖动MIAW而不受舞台尺寸和边界的限制。
虽然这项技巧很简单,但在Director开发中,确实为定制能够随意拖动的影片打开了创造性的大门。
[文章录入员:nancy] |
|
|
|
|