//转自:http://www.cnblogs.com/GFantasy/archive/2010/03/05/1678917.html
package{
import mx.containers.Panel;
import mx.controls.Button;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.DisplayObject;
import mx.effects.Resize;
import mx.controls.Alert;
import mx.controls.Label; [Event(name="restore")]
[Event(name="maximize")] public class FlexPanel extends Panel{
private var state:int = 0; private var restoreBtn: Button;
private var minBtn: Button;
private var closeBtn: Button; [Embed("../assets/minICON.png")] // 这里我自定义了按钮外观
private var minIcon:Class;
[Embed("../assets/minOverICON.png")]
private var minOverIcon:Class; [Embed("../assets/restoreICON.png")]
private var restoreIcon:Class;
[Embed("../assets/restoreOverICON.png")]
private var restoreOverIcon:Class; [Embed("../assets/closeICON.png")]
private var closeIcon:Class;
[Embed("../assets/closeOverICON.png")]
private var closeOverIcon:Class; private var resize: Resize;
private var effectTime: Number = 400; private static var _instance: FlexPanel; public function FlexPanel(){
super();
_instance = this;
} public override function initialize():void{
super.initialize();
this.maxHeight = this.height;
initEffect();
} private function setState(state:int):void{
this.state=state;
if (state==0){
this.dispatchEvent(new Event('restore'));
} else {
this.dispatchEvent(new Event('maximize'));
}
}
/* ************************************************* */
protected override function createChildren(): void {
super.createChildren(); this.titleBar.addEventListener(MouseEvent.MOUSE_DOWN, doDrag);
this.titleBar.addEventListener(MouseEvent.MOUSE_UP, doDrop); restoreBtn = new Button();
restoreBtn.addEventListener("click",doRestore);
restoreBtn.setStyle("overIcon",restoreOverIcon);
restoreBtn.setStyle("downIcon",restoreIcon);
restoreBtn.setStyle("upIcon",restoreIcon);
restoreBtn.visible=false;
rawChildren.addChild(restoreBtn); minBtn = new Button();
minBtn.addEventListener("click",doMin);
minBtn.setStyle("overIcon",minOverIcon);
minBtn.setStyle("downIcon",minIcon);
minBtn.setStyle("upIcon",minIcon);
minBtn.visible = true;
rawChildren.addChild(minBtn); closeBtn = new Button();
closeBtn.addEventListener("click",doClose);
closeBtn.setStyle("overIcon",closeOverIcon);
closeBtn.setStyle("downIcon",closeIcon);
closeBtn.setStyle("upIcon",closeIcon);
closeBtn.visible = true;
rawChildren.addChild(closeBtn); }
/* ************************************************** */
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
} private function doMin(event:Event):void{
setState(1);
minBtn.visible= false;
restoreBtn.visible= true;
minEffect();
//Alert.show(this.verticalScrollBar.toString());
} private function doRestore(event:Event) :void{
setState(0);
minBtn.visible= true;
restoreBtn.visible= false;
restoreEffect();
} private function doClose(event:Event) :void{
this.visible = false;
this.parent.removeChild(this);
} private function doDrag(event:Event):void{
this.startDrag();
} private function doDrop(event:Event):void{
this.stopDrag();
}
/* ********************************************************************************* */
protected override function layoutChrome(unscaledWidth: Number, unscaledHeight:Number):void {
super.layoutChrome(unscaledWidth, unscaledHeight); var margin:int = 0;
var pixelsFromTop:int = 6;
var pixelsFromRight:int = 12;
var buttonWidth:int = 18;
var buttonHeight:int = 17;
var distance:int = 7;
var x:Number = this.width - buttonWidth*2 - distance - pixelsFromRight;
var y:Number = pixelsFromTop; restoreBtn.setActualSize(buttonWidth, buttonHeight);
restoreBtn.move(x,y); minBtn.setActualSize(buttonWidth, buttonHeight);
minBtn.move(x,y); closeBtn.setActualSize(buttonWidth, buttonHeight);
closeBtn.move(this.width - buttonWidth - pixelsFromRight,y); }
/* ********************************************************************************* */
private function initEffect():void{
resize = new Resize(_instance);
resize.heightTo = this.titleBar.height;
resize.duration = effectTime;
} private function minEffect():void{
resize.heightTo = this.titleBar.height;
resize.end();
resize.play();
} private function restoreEffect():void{
resize.heightTo = this.maxHeight;
resize.end();
resize.play();
}
}
}

Flex:在PANEL的title上加一个button[转]的更多相关文章

  1. 2016.8.19 在dialog上增加一个button出现错误:failed to execute setAttribute on Element...

    目标:想要在dialog上多加一个button. 语法来自: http://api.jqueryui.com/dialog/#option-buttons   可见新增在dialog上的button要 ...

  2. java日期在今天的基础上加一个月。并计算时间相差天数

    Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); ...

  3. 在Extjs 的 TabPanel在 title标题栏上加按扭button

    如何在tabPanel的 标题栏的右侧添加操作按扭,效果如图,我总结了两种实现的方案: 第一种方案: 使用tabPanel的tabPbar: Ext.define("CisApp.view. ...

  4. iOS 给UITextView加一个placeholder

    苹果并没有为UITextView提供placeholder功能.我们可以通过两种办法实现. 方法一: 思路:设置默认显示的文字,颜色设置为灰色.代理方法监听textView点击. 缺点:如果点击到文字 ...

  5. iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)

    //直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...

  6. mysql日期加一个天数获得新的日期

    原文地址:https://476057266-qq-com.iteye.com/blog/2047671 在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE( ...

  7. 各位客官!鼠标点击一个Button之后究竟发生了什么?您知道么?(C#)

    在谈论主题之前,让我们先简单回顾下事件的基础知识吧! 我们知道事件有发出(raises)事件的源,即event sender,也有接收事件通知(notifications)的接收者,即event re ...

  8. Flex利用titleIcon属性给Panel容器标题部添加一个ICON图标

    Flex利用titleIcon属性,给Panel容器标题部添加一个ICON图标. 让我们先来看一下Demo(可以右键View Source或点击这里察看源代码): 下面是完整代码(或点击这里察看): ...

  9. 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上

    小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使 ...

随机推荐

  1. Handler发送Message

    用Handler更新UI package activity.cyq.handlermessage; import android.content.res.Resources; import andro ...

  2. MyFragment

    手机横竖屏自动切换不同的View: Landscape-Horizontal-横屏 Portrait-Vertical-竖屏 package com.example.shad_fnst.myfragm ...

  3. IOS显示九宫格列表

    //总列数 ; CGFloat appW = ; CGFloat appH = ; //间隙 CGFloat maginX = (self.view.frame.size.width - totalC ...

  4. hexo资源--theme等

    Hexo (https://github.com/hexojs/hexo) [3]hexo你的博客(http://ibruce.info/2013/11/22/hexo-your-blog/) [4] ...

  5. php操作mysql总结

    01  <?php02    $dbhost='localhost';03    $dbuser='root';04    $dbpass='123456';05    $dbname='pro ...

  6. AutoLayout的三种设置方式之——NSLayoutConstraint代码篇

    AutoLayout是从IOS 6开始苹果引入来取代autoresizing的新的布局技术,该技术有三种设置方式,等下我来为大家一一叙述一下. 在说三种设置方式前,我们先简单的说一下autolayou ...

  7. iOS中关于.pch的新建与配置问题

    以前版本的Xcode新建一个项目都会自动生成.pch,这个文件的好处是,里面添加的东西会自动添加到每个类中,也就是说我们可以把要用的宏定义,和多个头文件等放到.pch中,这样我们就不需要重复的在每个类 ...

  8. UI2_QQ折叠-UITableViewController

    // CustomUITableViewController.h // UI2_QQ折叠-UITableViewController // // Created by zhangxueming on ...

  9. 20140912-关于.NET技术体系的思维导图

    逛园子时看到的. 关于.NET技术体系的思维导图

  10. (转)mongoDB 禁用大内存页面 transparent_hugepage=never

    最近在学mongoDB,安装倒没什么困难,有yum仓库.不过接入ctl后的一条warning倒挺让人烦心的. 1 2 2015-03-22T09:27:00.222+0800 I CONTROL  [ ...