`

Flex TitleWindow 拖动范围控制

    博客分类:
  • Flex
阅读更多
关于Flex的TitleWindow拖动,可能拖出主application容器,导致titlewindow无法关闭,只能重新加载application。这个问题Adobe在titleWindow的拖动事件里竟然没有处理,这个算是个bug吧。为什么Adobe一直没有重视!

flex 3中我在网上看到的,是下面这种方式解决的,大家可以试试。
本文参考[url]http://www.cnblogs.com/alala666888/archive/2011/05/05/2038206.htmlFlex Air[/url]

在flex里面TitleWindow的拖动范围默认是不控制的,但是我们经常需要将其约束在整个应用程序的主窗口内,我找了半天也没有找到相关属性设置,只能重写,下面是重写的代码:
public class MyTitleWindow extends TitleWindow
	{
		//拖动相关
		private var regX:Number;
		private var regY:Number;
		
		public function MyTitleWindow()
		{
			super();
		}
		
		override protected function startDragging(event:MouseEvent):void
		{
			regX = event.stageX - x;
			regY = event.stageY - y;
			 
			var sbRoot:DisplayObject = systemManager.getSandboxRoot();
			sbRoot.addEventListener(
				MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
			 
			sbRoot.addEventListener(
				MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
			 
			sbRoot.addEventListener(
				SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
			 
			// add the mouse shield so we can drag over untrusted applications.
			systemManager.deployMouseShields(true);
		}
		 
		protected override function stopDragging():void
		{
			var sbRoot:DisplayObject = systemManager.getSandboxRoot();
			sbRoot.removeEventListener(
				MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
			 
			sbRoot.removeEventListener(
				MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
			 
			sbRoot.removeEventListener(
				SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
			 
			regX = NaN;
			regY = NaN;
			 
			systemManager.deployMouseShields(false);
		}
		 
		private function systemManager_mouseMoveHandler(event:MouseEvent):void
		{           
			event.stopImmediatePropagation();
			 
			if (isNaN(regX) || isNaN(regY))
			{               
				return;
			}
			 
			var x:Number = event.stageX - regX;
			var y:Number = event.stageY - regY;
			var maxX:Number = this.stage.nativeWindow.width - this.width;
			var maxY:Number = this.stage.nativeWindow.height - this.height;
		 
			//超出范围 ,停止移动
			if(x < 0) x = 0;
			if(y < 0) y = 0;
			if(x > maxX) x = maxX;
			if(y > maxY) y = maxY;
			 
			move(x, y);
		}
		 
		private function systemManager_mouseUpHandler(event:MouseEvent):void
		{
			// trace("systemManager_mouseUpHandler: " + event);
			if (!isNaN(regX))
				stopDragging();
		}       
		 
		private function stage_mouseLeaveHandler(event:Event):void
		{
			// trace("stage_mouseLeaveHandler: " + event);
			if (!isNaN(regX))
				stopDragging();
		}
	}

   
需要用到TitleWindow时,就用MyTitleWindow代替原来的TitleWindow。或者不用写上面那个MyTitleWindow控件,直接在自己定义的<mx:TitleWindow>里面重写这两个方法。就ok了。
flex 4的解决方法是这样的:
我们系统是Flex4,TitleWindow的这个问题我是这样解决的,在TitleWindow里加入如下代码(重写titlewindow的拖动方法,包括开始拖动和结束拖动,在拖动时添加范围限制),
override protected function moveArea_mouseDownHandler(event:MouseEvent):void
			{
				startDrag(false, new Rectangle(0, 0, this.parentApplication.width - this.width, this.parentApplication.height - this.height));
				super.moveArea_mouseDownHandler(event);
			}
			
			override protected function moveArea_mouseUpHandler(event:Event):void
			{
				stopDrag();
				super.moveArea_mouseUpHandler(event);
			}

分享到:
评论
3 楼 rogermmjj 2014-01-23  
挺好用的,但是this.stage.nativeWindow好像找不到。
2 楼 luogen33 2013-08-14  
                
1 楼 luogen33 2013-08-14  

相关推荐

    flex TitleWindow自定义最大最小化

    2. **自定义最大化功能**:在Flex中,没有直接的方法来控制TitleWindow的最大化行为。我们可以手动调整TitleWindow的大小来模拟最大化效果。在接收到最大化按钮的点击事件后,获取当前窗口的原始大小,并将其设置为...

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    Flex中支持缩放的TitleWindow

    在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有标题栏和可选边框的弹出窗口。这篇博客文章“Flex中支持缩放的TitleWindow”可能详细讲解了如何在Flex应用程序中实现TitleWindow组件的缩放功能,这对于...

    Flex带最大化最小化按钮可拖动调整窗口大小的TitleWindow

    这个特定的示例是关于如何在Flex中创建一个TitleWindow,该窗口不仅具备基本的窗口操作功能,还允许用户通过拖动来调整窗口大小。 首先,我们来看`MyTitleWindow.as`这个文件。这是ActionScript 3(AS3)源代码文件...

    flex拖拽形成柱状图,点击弹出图片窗口,柱状图用法

    在本文中,我们将深入探讨如何使用Adobe Flex技术创建一个具有拖拽功能的柱状图,以及如何实现点击柱状图后弹出图片窗口的功能。Flex是一个开源的、基于ActionScript的框架,主要用于构建富互联网应用程序(RIA)。...

    flex 模仿WINDOWS窗口

    3. 用户界面组件:Flex 3.0提供了一系列的组件,如Button、TitleWindow、Canvas等,可以轻松构建窗口结构。TitleWindow组件通常用于创建带有标题、可最小化、最大化和关闭功能的窗口,非常适合模仿Windows窗口的外观...

    Flex3界面布局中文教程

    这种容器专门设计用于Flex应用程序的顶部,展示应用级别的控制元素,如菜单、关闭按钮等,通常以水平方向布局。 6. **DividedBox, HDividedBox 和 VDividedBox 布局** 这些布局容器允许你创建可调整大小的面板,...

    可最大化、最小化和关闭的TitleWindow

    TitleWindow在Adobe Flex中是一种常见的用户界面组件,它通常用于创建具有标题栏的自定义窗口。在本场景中,我们讨论的是一个特定的TitleWindow实现,它具备了最大化、最小化和关闭的功能,这对于开发者来说是非常...

    Flex 开发实例( ArcGIS)

    TitleWindow组件是一个可以拖动的窗口,通常用作对话框或者工具窗口。它包含一个标题栏,可以通过标题栏进行拖动操作。 #### 10. ViewStack 组件 ViewStack组件允许开发者在一个容器中切换不同的视图。这通常用于...

    FLEX主要容器关系图

    在探讨"FLEX主要容器关系图"这一主题时,我们深入解析Flex框架中各种容器组件的层次结构与相互关联,这对于理解和应用Flex布局至关重要。Flex,作为Adobe推出的一款用于开发跨平台应用程序的开源框架,其核心优势...

    实现最大化、最小化、缩放功能的TitleWindow

    一个实现最大化、最小化、缩放功能的TitleWindow,是参照其他大虾的代码,然后自己写的一个TitleWindow,并且限制了TitleWindow的拖动区域。里面提供了一个MyTitleWindow.as和一个使用MyTitleWindow的.mxml的文件...

    Flex开发实例.pdf

    它被用来控制Flex应用的行为和数据处理。ActionScript代码通常嵌入在MXML文件中,使用`&lt;mx:Script&gt;`标签包裹: ```xml &lt;![CDATA[ private function onClick(event:MouseEvent):void { trace("Button clicked!");...

    Flex开发实例

    - **AdvancedDataGrid**提供更高级的功能,如拖拽、编辑等。 **21. CSS** - CSS用于定义Flex应用的样式,包括颜色、字体等。 **22. 数据验证** - Flex支持数据验证机制,确保输入数据的有效性。 **23. 打印** ...

    Flex开发实例--学习必备

    - Flex中的 **Splitter** 组件可以帮助创建可拖动的分割线,从而实现动态调整界面布局的功能。 - 使用示例: ```xml ``` #### 7. Panel组件 - **Panel** 是一个带标题栏的容器组件,通常用于组织多个UI元素。 -...

    Flex 开发技巧集

    2. **禁止TitleWindow拖动**:在创建自定义窗口时,通过PopUpManager的配置以及设置`isPopUp`属性为false,可以禁止TitleWindow被用户拖动。 3. **设置TabNavigator的标签文本样式**:通过指定`tabStyleName`属性,...

    Flex3 界面布局教程

    Canvas 是 Flex 中一个非常基础且重要的布局容器,它允许开发者通过精确控制子元素的位置来构建界面。Canvas 容器本身定义了一个矩形区域,可以在此区域内放置其他容器或控件。与大多数其他容器不同,Canvas 不会...

    TitleWidonw

    TitleWindow是Adobe Flex框架中的一个核心组件,它用于创建具有标题栏、边界和操作按钮(如最大化、最小化、还原和关闭)的可自定义窗口。在Flex4中,TitleWindow进行了重写,以提供更丰富的功能和更好的用户体验。...

    Flex Gis 开发

    10. **CSS**:用于控制Flex应用程序的外观和风格,类似于HTML中的CSS。 11. **数据验证**:通过ActionScript实现对用户输入的有效性检查。 12. **打印功能**:允许用户将Flex应用中的内容打印出来。 13. **图表绘制*...

    flex弹出另一个窗体

    Flex提供两种主要的窗口类型:`Application`和`TitleWindow`。`Application`是整个Flex应用的根容器,它包含了所有其他组件,并且在运行时自动创建。`TitleWindow`则是一种带有标题栏和关闭按钮的弹出窗口,通常用于...

    Flex4.0自定义控件

    - 在主程序中,可以通过组件浏览器找到自定义的`CLogin`组件,并将其拖拽到设计面板上使用。 - 示例代码如下: ```xml *"&gt; &lt;![CDATA[ import mx.controls.Alert; private function btnClick():void { ...

Global site tag (gtag.js) - Google Analytics