VerticalScrollBar复制内容到剪贴板
代码:
package net.purplewind.uicomponents
{/////////////////////////////////////////////////////////////////////////////
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
public class VerticalScrollBar extends ScrollBar
{
//--------------------------------------------
// 視覺效應組成
//--------------------------------------------
/**向上按鈕形狀*/
public var ui_up_normal :Sprite;
public var ui_up_select :Sprite;
public var ui_up_press :Sprite;
/**向下按鈕形狀*/
public var ui_down_normal :Sprite;
public var ui_down_select :Sprite;
public var ui_down_press :Sprite;
/**縱向拖曳按鈕形狀*/
public var ui_drag_normal :Sprite;
public var ui_drag_select :Sprite;
public var ui_drag_press :Sprite;
/**縱向滾動背景圖形形狀*/
public var backShape :Sprite;
/**占位圖形*/
public var hidenShape :Sprite;
//--------------------------------------------
// 參量
//--------------------------------------------
/**非顯示圖形填充色*/
protected var fillColor :Number;
/**非顯示圖形填充透明度*/
protected var fillAlpha :Number;
/**縱向滾動條上邊距*/
protected var dragTop :Number;
/**縱向滾動條下邊距*/
protected var dragBottom :Number;
/**上距*/
protected var _top :Number;
/**左距*/
protected var _left :Number;
/**下距*/
protected var _bottom :Number;
/**右距*/
protected var _right :Number;
/**縱向拖曳條向上可以偏移的單位*/
protected var _upOffset :Number;
/**縱向拖曳條向下可以偏移的單位*/
protected var _downOffset :Number;
/**寬度*/
protected var _w :Number;
/**寬度*/
protected var _h :Number;
public function set w ( value:Number ):void {
_w = value;
}
public function get w ( ):Number {
return _w;
}
public function set h ( value:Number ):void {
_h = value;
}
public function get h ( ):Number {
return _h;
}
public function set top ( value:Number ):void {
_top = value;
align ();
update ();
}
public function get top ( ):Number {
return _top;
}
public function set left ( value:Number ):void {
_left = value;
align ();
update ();
}
public function get left ( ):Number {
return _left;
}
public function set bottom ( value:Number ):void {
_bottom = value;
align ();
update ();
}
public function get bottom ( ):Number {
return _bottom;
}
public function set right ( value:Number ):void {
_right = value;
align ();
update ();
}
public function get right ( ):Number {
return _right;
}
public function set upOffset ( value:Number ):void {
_upOffset = value;
}
public function get upOffset ( ):Number {
return _upOffset;
}
public function set downOffset ( value:Number ):void {
_downOffset = value;
}
public function get downOffset ( ):Number {
return _downOffset;
}
/**覆蓋用戶重設用戶滾動條大小*/
override public function set height ( value:Number ):void {
_h = value;
hidenShape.graphics.clear ();
hidenShape.graphics.beginFill ( fillColor , fillAlpha );
hidenShape.graphics.drawRect ( 0 , 0 , _w , value );
hidenShape.graphics.endFill ();
ui_down_normal.y = value - bottom - ui_down_normal.height;
ui_down_select.y = value - bottom - ui_down_select.height;
ui_down_press.y = value - bottom - ui_down_press.height;
downBtn.y = value - bottom - downBtn.height;
dragTop = ui_up_normal.y + ui_up_normal.height + span - upOffset;
dragBottom = ui_down_normal.y - span + downOffset;
}
override public function get height ():Number {
return height;
}
override public function set width ( value:Number ):void {
_w = value;
align ();
update ();
}
override public function get width():Number {
return width;
}
//--------------------------------------------
// 構造方法
//--------------------------------------------
public function VerticalScrollBar ()
{
super ();
//邊距預設
_top = 0;
_left = 0;
_right = 0;
_bottom = 0;
//拖曳偏移量預設
_upOffset = 0;
_downOffset = 0;
//拖曳條縱向移動范圍預設
dragTop = 0;
dragBottom = 0;
//占位圖形預設
hidenShape = new Sprite ();
_back.addChild(hidenShape);
//非顯示圖形填充設定
fillColor = 0xCCFF00;
fillAlpha = 0;
}
/**
* 填充組件實例
* @return Boolean 是否填充完成
*/
public function fill ():Boolean {
if ( ui_up_normal==null || ui_up_select ==null || ui_up_press ==null
|| ui_down_normal==null || ui_down_select==null || ui_down_press==null
|| ui_drag_normal==null || ui_drag_select==null || ui_drag_press==null )
{
return false;
} else {
dispatchDisplayObjects ();
return true;
}
}
//--------------------------------------------
// 預備區域
//--------------------------------------------
/**
* 屬性刷新
*/
protected function update ():void {
dragTop = ui_up_normal.y + ui_up_normal.height + span - upOffset;
dragBottom = ui_down_normal.y - span + downOffset;
}
/**
* 安排元素位置
*/
protected function align ():void {
ui_up_normal.width = _w - _left - _right;
ui_up_select.width = _w - _left - _right;
ui_up_press.width = _w - _left - _right;
upBtn.width = _w - _left - _right;
ui_down_normal.width = _w - _left - _right;
ui_down_select.width = _w - _left - _right;
ui_down_press.width = _w - _left - _right;
downBtn.width = _w - _left - _right;
ui_drag_normal.width = _w - _left - _right;
ui_drag_select.width = _w - _left - _right;
ui_drag_press.width = _w - _left - _right;
dragBtn.width = _w - _left - _right;
ui_up_normal .x = _left;
ui_up_normal .y = _top;
ui_up_select .x = _left;
ui_up_select .y = _top;
ui_up_press .x = _left;
ui_up_press .y = _top;
//down
ui_down_normal.x = _left;
ui_down_normal.y = hidenShape.height - ui_down_normal.height - bottom;
ui_down_select.x = _left;
ui_down_select.y = hidenShape.height - ui_down_normal.height - bottom;
ui_down_press .x = _left;
ui_down_press .y = hidenShape.height - ui_down_normal.height - bottom;
//drag
ui_drag_normal.x = _left;
ui_drag_normal.y = _top + ui_up_normal.height +span - _upOffset;
ui_drag_select.x = _left;
ui_drag_select.y = _top + ui_up_normal.height +span - _upOffset;
ui_drag_press .x = _left;
ui_drag_press .y = _top + ui_up_normal.height +span - _upOffset;
upBtn .x = _left;
upBtn .y = _top;
//down
downBtn.x = _left;
downBtn.y = hidenShape.height - ui_down_normal.height - bottom;
//drag
dragBtn.x = _left;
dragBtn.y = _top + ui_up_normal.height + span - _upOffset;
}
/**
* 分派圖形顯示 元素
*/
protected function dispatchDisplayObjects ():void {
_w = _left+ui_up_normal.width+_right;
_h = _top+ui_up_normal.height-upOffset-downOffset+ui_drag_normal.height+ui_down_normal.height+_bottom+2*span;
align ();
update ();
hidenShape.graphics.clear();
hidenShape.graphics.beginFill ( fillColor , fillAlpha );
hidenShape.graphics.drawRect ( 0,0,_w,_h);
//加入到現實列表
drawButtons ();
_back.addChild ( ui_up_normal );
ui_up_select.visible = false;
ui_up_press.visible = false;
_back.addChild ( ui_up_select );
_back.addChild ( ui_up_press );
//
_back.addChild ( ui_down_normal );
ui_down_select.visible = false;
ui_down_press.visible = false;
_back.addChild ( ui_down_select );
_back.addChild ( ui_down_press );
//
_back.addChild ( ui_drag_normal );
ui_drag_select.visible = false;
ui_drag_press.visible = false;
_back.addChild ( ui_drag_select );
_back.addChild ( ui_drag_press );
}
/**
* 繪制背景
*/
protected function drawBackground ():void {
//clear
backLayer.removeChild ( _back );
_back = new Sprite ();
backLayer.addChild ( _back );
//draw background
_back.addChild ( backShape );
}
/**
* 繪制按鈕
*/
protected function drawButtons ():void {
//clear
btnsLayer.removeChild ( _btns );
_btns = new Sprite ();
//draw buttons
upBtn = new Sprite ();
downBtn = new Sprite ();
dragBtn = new Sprite ();
upBtn.graphics.beginFill ( fillColor , fillAlpha );
downBtn.graphics.beginFill ( fillColor , fillAlpha );
dragBtn.graphics.beginFill ( fillColor , fillAlpha );
upBtn.graphics.drawRect ( 0 , 0 , ui_up_normal.width , ui_up_normal.height );
downBtn.graphics.drawRect ( 0 , 0 , ui_down_normal.width , ui_down_normal.height );
dragBtn.graphics.drawRect ( 0 , 0 , ui_drag_normal.width , ui_drag_normal.height );
//
//up
_btns.addChild ( upBtn );
_btns.addChild ( downBtn );
_btns.addChild ( dragBtn );
//draw buttons complete
btnsLayer.addChild ( _btns );
dispatchListenersForUp ();
dispatchListenersForDown ();
dispatchListenersForDrag ();
}
/**
* 添加向上按鈕事件分派
*/
protected function dispatchListenersForUp ():void {
var hasClickEvent:Boolean = upBtn.hasEventListener ( MouseEvent.CLICK );
var hasOverEvent:Boolean = upBtn.hasEventListener ( MouseEvent.ROLL_OVER );
var hasOutEvent:Boolean = upBtn.hasEventListener ( MouseEvent.ROLL_OUT );
var hasUpEvent:Boolean = upBtn.hasEventListener ( MouseEvent.MOUSE_UP );
var hasDownEvent:Boolean = upBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
var hasLeaveEvent:Boolean = stage.hasEventListener ( Event.MOUSE_LEAVE );
if ( hasClickEvent ) {
upBtn.removeEventListener ( MouseEvent.CLICK , upClick );
}
if ( hasOverEvent ) {
upBtn.removeEventListener ( MouseEvent.ROLL_OVER , upRollOver );
}
if ( hasOutEvent ) {
upBtn.removeEventListener ( MouseEvent.ROLL_OUT , upRollOut );
}
if ( hasUpEvent ) {
upBtn.removeEventListener ( MouseEvent.MOUSE_UP , upUp );
}
if ( hasDownEvent ) {
upBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , upDown );
}
upBtn.addEventListener ( MouseEvent.CLICK , upClick );
upBtn.addEventListener ( MouseEvent.ROLL_OVER , upRollOver );
upBtn.addEventListener ( MouseEvent.ROLL_OUT , upRollOut );
upBtn.addEventListener ( MouseEvent.MOUSE_UP , upUp );
upBtn.addEventListener ( MouseEvent.MOUSE_DOWN , upDown );
}
/**
* 添加向下按鈕事件分派
*/
protected function dispatchListenersForDown ():void {
var hasClickEvent:Boolean = downBtn.hasEventListener ( MouseEvent.CLICK );
var hasOverEvent:Boolean = downBtn.hasEventListener ( MouseEvent.ROLL_OVER );
var hasOutEvent:Boolean = downBtn.hasEventListener ( MouseEvent.ROLL_OUT );
var hasUpEvent:Boolean = downBtn.hasEventListener ( MouseEvent.MOUSE_UP );
var hasDownEvent:Boolean = downBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
var hasLeaveEvent:Boolean = stage.hasEventListener ( Event.MOUSE_LEAVE );
if ( hasClickEvent ) {
downBtn.removeEventListener ( MouseEvent.CLICK , downClick );
}
if ( hasOverEvent ) {
downBtn.removeEventListener ( MouseEvent.ROLL_OVER , downRollOver );
}
if ( hasOutEvent ) {
downBtn.removeEventListener ( MouseEvent.ROLL_OUT , downRollOut );
}
if ( hasUpEvent ) {
downBtn.removeEventListener ( MouseEvent.MOUSE_UP , downUp );
}
if ( hasDownEvent ) {
downBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , downDown );
}
downBtn.addEventListener ( MouseEvent.CLICK , downClick );
downBtn.addEventListener ( MouseEvent.ROLL_OVER , downRollOver );
downBtn.addEventListener ( MouseEvent.ROLL_OUT , downRollOut );
downBtn.addEventListener ( MouseEvent.MOUSE_UP , downUp );
downBtn.addEventListener ( MouseEvent.MOUSE_DOWN , downDown );
}
/**
* 添加拖曳條事件分派
*/
protected function dispatchListenersForDrag ():void {
var hasUpEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_UP );
var hasDownEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
var hasMoveEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_MOVE );
if ( hasUpEvent ) {
dragBtn.removeEventListener ( MouseEvent.MOUSE_UP , dragUp );
}
if ( hasDownEvent ) {
dragBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , dragDown );
}
if ( hasMoveEvent ) {
dragBtn.removeEventListener ( MouseEvent.MOUSE_MOVE , dragMove );
}
dragBtn.addEventListener ( MouseEvent.ROLL_OVER , dragRollOver );
dragBtn.addEventListener ( MouseEvent.ROLL_OUT , dragRollOut );
dragBtn.addEventListener ( MouseEvent.MOUSE_UP , dragUp );
dragBtn.addEventListener ( MouseEvent.MOUSE_DOWN , dragDown );
}
//--------------------------------------------
// 鼠標事件處理器
//--------------------------------------------
/**上滾按鈕點擊*/
override protected function upClick ( event:Event ):void {
//override
}
/**下滾按鈕點擊*/
override protected function downClick ( event:Event ):void {
//override
}
/**上滾按鈕滑過*/
override protected function upRollOver ( event:Event ):void {
super.upRollOver ( event );
ui_up_select.visible = true;
}
/**上滾按鈕滑出*/
override protected function upRollOut ( event:Event ):void {
super.upRollOut ( event );
ui_up_select.visible = false;
}
/**上滾按鈕按下*/
override protected function upDown ( event:Event ):void {
super.upDown ( event );
ui_up_press.visible = true;
clearTemp ();
var temp:Sprite = new Sprite ();
temp.x = globalToLocal(new Point(0,0)).x;
temp.y = globalToLocal(new Point(0,0)).y;
temp.graphics.beginFill ( fillColor , fillAlpha );
temp.addEventListener ( MouseEvent.MOUSE_UP , upReleaseOutSide );
temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
stage.addEventListener(Event.MOUSE_LEAVE,upLeave);
_temp.addChild ( temp );
}
/**上滾按鈕移動*/
override protected function upLeave ( event:Event ):void {
super.upLeave ( event );
upUp ( event );
stage.removeEventListener ( Event.MOUSE_LEAVE , upLeave );
}
/**上滾按鈕外部釋放*/
override protected function upReleaseOutSide ( event:Event ):void {
super.upReleaseOutSide ( event );
clearTemp ();
ui_up_press.visible = false;
event.target.removeEventListener ( MouseEvent.MOUSE_UP , upReleaseOutSide );
}
/**上滾按鈕松開*/
override protected function upUp ( event:Event ):void {
super.upUp ( event );
ui_up_press.visible = false;
try {
stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
} catch ( e:Error ) {}
clearTemp ();
}
//////////////////////////////////////////////////
/**下滾按鈕滑過*/
override protected function downRollOver ( event:Event ):void {
super.downRollOver ( event );
ui_down_select.visible = true;
}
/**下滾按鈕滑出*/
override protected function downRollOut ( event:Event ):void {
super.downRollOut( event );
ui_down_select.visible = false;
}
/**下滾按鈕按下*/
override protected function downDown ( event:Event ):void {
super.downDown ( event );
ui_down_press.visible = true;
clearTemp ();
var temp:Sprite = new Sprite ();
temp.x = globalToLocal(new Point(0,0)).x;
temp.y = globalToLocal(new Point(0,0)).y;
temp.graphics.beginFill ( fillColor , fillAlpha );
temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
temp.addEventListener ( MouseEvent.MOUSE_UP , downReleaseOutSide );
stage.addEventListener(Event.MOUSE_LEAVE,downLeave);
_temp.addChild ( temp );
}
/**下滾按鈕松開*/
override protected function downUp ( event:Event ):void {
super.downUp ( event );
ui_down_press.visible = false;
try {
stage.removeEventListener ( Event.MOUSE_LEAVE , downLeave );
} catch ( e:Error ) {}
clearTemp ();
}
/**下滾按鈕移動*/
override protected function downLeave ( event:Event ):void {
super.downLeave ( event );
downUp ( event );
stage.removeEventListener ( Event.MOUSE_LEAVE , downLeave );
}
override protected function downReleaseOutSide ( event:Event ):void {
super.downReleaseOutSide ( event );
clearTemp ();
ui_down_press.visible = false;
event.target.removeEventListener ( MouseEvent.MOUSE_UP , downReleaseOutSide );
}
//////////////////////////////////////////////////
/**拖曳條滑過*/
override protected function dragRollOver ( event:Event ):void {
super.dragRollOver ( event );
ui_drag_select.visible = true;
}
/**拖曳條滑出*/
override protected function dragRollOut ( event:Event ):void {
super.dragRollOut ( event );
ui_drag_select.visible = false;
}
/**拖曳條按下*/
override protected function dragDown ( event:Event ):void {
super.dragDown ( event );
ui_drag_press.visible = true;
//
var temp:Sprite = new Sprite ();
temp.x = globalToLocal(new Point(0,0)).x;
temp.y = globalToLocal(new Point(0,0)).y;
temp.graphics.beginFill ( fillColor , fillAlpha );
temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
temp.addEventListener ( MouseEvent.MOUSE_UP , dragReleaseOutSide );
temp.addEventListener ( MouseEvent.MOUSE_MOVE , dragMove );
stage.addEventListener ( Event.MOUSE_LEAVE , dragLeave );
_temp.addChild ( temp );
//
var area:Rectangle = new Rectangle ( _left , dragTop , 0 , Math.abs ( dragBottom-dragBtn.height-dragTop ) );
dragBtn.startDrag ( false , area );
}
/**拖曳條在自己圖形範圍內鬆開*/
override protected function dragUp ( event:Event ):void {
super.dragUp ( event );
ui_drag_press.visible = false;
try {
stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
} catch ( e:Error ) {}
clearTemp ();
dragBtn.stopDrag ();
ui_drag_normal.x = dragBtn.x;
ui_drag_select.x = dragBtn.x;
ui_drag_press. x = dragBtn.x;
ui_drag_normal.y = dragBtn.y;
ui_drag_select.y = dragBtn.y;
ui_drag_press. y = dragBtn.y;
}
/**拖曳條移動*/
override protected function dragMove ( event:Event ):void {
super.dragMove ( event );
ui_drag_normal.x = dragBtn.x;
ui_drag_select.x = dragBtn.x;
ui_drag_press. x = dragBtn.x;
ui_drag_normal.y = dragBtn.y;
ui_drag_select.y = dragBtn.y;
ui_drag_press. y = dragBtn.y;
}
/**拖曳條移出了舞臺*/
override protected function dragLeave ( event:Event ):void {
super.dragLeave ( event );
dragUp ( event );
stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
dragBtn.stopDrag ();
}
/**拖曳條在自己圖形範圍外鬆開*/
override protected function dragReleaseOutSide ( event:Event ):void {
super.dragReleaseOutSide ( event );
clearTemp ();
ui_drag_press.visible = false;
event.target.removeEventListener ( MouseEvent.MOUSE_UP , dragReleaseOutSide );
dragBtn.stopDrag ();
}
}//end class
}/////////////////////////////////////////////////////////////////////////////[
本帖最后由 enc0717 于 2007-12-26 10:06 编辑 ]