// forked from zahir's 自作 TextArea ver.3 /* * TextAreaの自作 ver.3 * * ある程度は動かせると思う。簡単にしか実験もしてないので不安 * いつか自分で自作コンポーネントを作ってみたいものです。 * * アドバイスを頂けたら嬉しいです。 * */ package{ import flash.display.Sprite; [SWF(width = 600, height = 350, backgroundColor = 0xFFFFFF)] public class TF_test1 extends Sprite{ public function TF_test1(){ var txt:String = ""; txt += ""; for(var i:int= 2; i<=2; i++){ txt += "\n" + ""; } var ta:TextArea = new TextArea( 590, 350, true, true, false, true); addChild( ta ); ta.x = (stage.stageWidth - ta.width) >>1; ta.y = (stage.stageHeight - ta.height) >>1; ta.text = txt; } } } import flash.display.DisplayObject; import flash.display.Graphics; import flash.display.Sprite; import flash.events.Event; import flash.events.FocusEvent; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TextEvent; import flash.filters.ColorMatrixFilter; import flash.geom.Rectangle; import flash.text.StyleSheet; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; import flash.text.TextLineMetrics; class TextArea extends Sprite{ public const SCROLL_BAR_WIDTH : int = 16; private var t:TextField; // HScrollBar private var hSliderBg:Sprite; private var hSlider:HSlider; // VScrollBar private var upBtn:UpButton; private var downBtn:DownButton; private var vSliderBg:Sprite; private var vSlider:VSlider; // up, down, over private var _arrowColor:Array = [0x999999, 0x333333, 0x666666]; private var _baseColor:Array = [0xEEEEEE, 0xCCCCCC, 0xCCCCCC]; private var _lineColor:Array = [0x999999, 0x0099FF, 0x666666]; private var _barBackgroundColor:uint = 0xCCCCCC; private var _bg:uint = 0xEEEEEE; private var _border:uint = 0x333333; private var _focusBg:uint = 0xFFFFCC; private var _focusBorder:uint = 0x0099FF; private var _textColor:uint = 0x000000; private var _selectTextColor:uint = 0xFFFFFF; private var _selectBackgroundColor:uint = 0x0099FF; private var _useHScrollBar:Boolean; private var _useVScrollBar:Boolean; private var _useFilter:Boolean; private var _edit:Boolean; private var _focus:Boolean; private var _inFocus:Boolean = false; private var _draw:Boolean = true; private var _drag_flg:Boolean = false; private var hScroll_flg:Boolean = false; private var vScroll_flg:Boolean = false; private var w:int, h:int; private var hScrollThickness:Number; private var vScrollThickness:Number; private var clickPoint:int; private var minHScrollX:int; private var maxHScrollX:int; private var minVScrollY:int; private var maxVScrollY:int; private var _delayFrame:int = 8; private var count:int = 0; public function TextArea( width:int, height:int, useHScrollBar:Boolean, useVScrollBar:Boolean, focus:Boolean = false, useFilter:Boolean = false, editable:Boolean = true){ t = new TextField(); addChild( t ); w = t.width = width; h = t.height = height; t.x = t.y = 0; _useHScrollBar = useHScrollBar; _useVScrollBar = useVScrollBar; _useFilter = useFilter; this.focus = focus; this.editable = editable; this.multiline = true; init(); } private function init():void{ t.type = (_edit == true) ? TextFieldType.INPUT : TextFieldType.DYNAMIC; setFilter(); draw(); t.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); t.addEventListener( Event.CHANGE, onChange ); t.addEventListener(Event.SCROLL, onScroll); t.addEventListener( TextEvent.LINK, onLink ); } private function addHScrollUI():void{ if(hScroll_flg){ updataHScrollUI(); return; } t.height -= SCROLL_BAR_WIDTH; hSliderBg = new Sprite(); addChild( hSliderBg ); drawH(); var _w:int = hSliderBg.width * (t.width / t.textWidth); _w = _w < 12 ? 12 : _w; hSlider = new HSlider( _w, SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor ); addChild(hSlider); hSliderBg.addEventListener( MouseEvent.MOUSE_DOWN, onHSliderBgDown); hSlider.addEventListener( MouseEvent.MOUSE_DOWN, onHSliderDown); hSlider.cacheAsBitmap = true; if(useVScrollBar && vScroll_flg) updataVScrollUI(); updataHScrollUI(); hScroll_flg = true; _draw = true; } private function addVScrollUI():void{ if(vScroll_flg){ updataVScrollUI(); return; } t.width -= SCROLL_BAR_WIDTH; vSliderBg = new Sprite(); addChild(vSliderBg); upBtn = new UpButton( SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor); addChild( upBtn ); downBtn = new DownButton( SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor); addChild( downBtn ); var _h:int = (h - SCROLL_BAR_WIDTH*2) * (t.height / t.textHeight); _h = _h < 12 ? 12 : _h; vSlider = new VSlider( _h , SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor); addChild( vSlider ); drawV(); upBtn.addEventListener( MouseEvent.MOUSE_DOWN, onUpDown ); downBtn.addEventListener( MouseEvent.MOUSE_DOWN, onDownDown ); vSliderBg.addEventListener( MouseEvent.MOUSE_DOWN, onVSliderBgDown ); vSlider.addEventListener( MouseEvent.MOUSE_DOWN, onVSliderDown ); vSlider.cacheAsBitmap = true; if(useHScrollBar && hScroll_flg) updataHScrollUI(); updataVScrollUI(); vScroll_flg = true; _draw = true; } private function removeHScrollUI():void{ if( hSliderBg != null && this.contains( hSliderBg) ){ hSliderBg.removeEventListener( MouseEvent.MOUSE_DOWN, onHSliderBgDown); removeChild(hSliderBg); } if( hSlider != null && this.contains( hSlider) ){ hSlider.removeEventListener( MouseEvent.MOUSE_DOWN, onHSliderDown); removeChild(hSlider); } t.height = h; hScroll_flg = false; } private function removeVScrollUI():void{ if( upBtn != null && this.contains(upBtn) ){ upBtn.removeEventListener( MouseEvent.MOUSE_DOWN, onUpDown ); removeChild( upBtn ); } if( downBtn != null && this.contains(downBtn) ){ downBtn.removeEventListener( MouseEvent.MOUSE_DOWN, onDownDown ); removeChild( downBtn ); } if( vSliderBg != null && this.contains(vSliderBg) ){ vSliderBg.removeEventListener( MouseEvent.CLICK, onVSliderBgDown); removeChild( vSliderBg ); } if( vSlider != null && this.contains(vSlider) ){ vSlider.removeEventListener( MouseEvent.MOUSE_DOWN, onVSliderDown ); removeChild( vSlider ); } t.width = w; vScroll_flg = false; } private function updataHScrollUI():void{ hSliderBg.y = hSlider.y = t.height; var _w:int = hSliderBg.width * ( (maxScrollH / 3) / maxScrollH); hSlider.sliderWidth = _w = _w < 12 ? 12 : _w; minHScrollX = 0; maxHScrollX = t.width - hSlider.width; hScrollThickness = (maxHScrollX - minHScrollX) / ( t.maxScrollH); hSlider.x = minHScrollX + hScrollThickness * ( t.scrollH); draw(); } private function updataVScrollUI():void{ vSliderBg.x = upBtn.x = downBtn.x = vSlider.x = t.width; downBtn.y = h - SCROLL_BAR_WIDTH - 1; var _h:int = ( t.height - SCROLL_BAR_WIDTH*2) * (t.height / t.textHeight); vSlider.sliderHeight = _h < 12 ? 12 : _h; minVScrollY = upBtn.y + upBtn.height; maxVScrollY = downBtn.y - vSlider.height; vScrollThickness = (maxVScrollY - minVScrollY ) / (t.maxScrollV); vSlider.y = minVScrollY + vScrollThickness * (scrollV - 1); draw(); } private function checkUseScrollBar():void{ if( !useHScrollBar && !useVScrollBar ) return; if( useHScrollBar ){ if( maxScrollH >= 1){ addHScrollUI(); }else if( maxScrollH == 0){ removeHScrollUI(); } } if( useVScrollBar ){ if( maxScrollV > 1){ addVScrollUI(); }else if( maxScrollV == 1){ removeVScrollUI(); } } } private function draw():void{ if(!_draw) return; var g:Graphics = this.graphics; g.clear(); g.lineStyle( _inFocus ? 2 : 1, _inFocus ? focusBorderColor : borderColor , _inFocus ? 0.8 : 1); g.beginFill( _inFocus ? focusBackgroundColor : backgroundColor ); g.drawRect(0,0, width, height -1); g.endFill(); if( hScroll_flg ) drawH(); if( vScroll_flg ) drawV(); _draw = false; } private function drawH():void{ var g:Graphics = hSliderBg.graphics; g.clear(); g.lineStyle( 1, _lineColor[0]); g.beginFill( _barBackgroundColor ); g.drawRect( 1,0, t.width - 1, SCROLL_BAR_WIDTH - 2); g.endFill(); } private function drawV():void{ var g:Graphics = vSliderBg.graphics; g.clear(); g.lineStyle( 1, _lineColor[0]); g.beginFill( _barBackgroundColor ); g.drawRect( 1,1, SCROLL_BAR_WIDTH - 2, h -3); g.endFill(); } private function setFilter():void{ //引用元 :: http://labs.hellokeita.com/2008/03/13/textfield-selection-color/ // filterを使用する場合 htmlTextで<font color="#RRGGBB">を利用してもテキストの色は統一されるので注意 if( !_useFilter ) return; const n:Number = 1/255; var cf:ColorMatrixFilter = new ColorMatrixFilter(); var c:Array = []; var r:int, g:int, b:int; c[0] = _selectBackgroundColor >> 16; c[1] = _selectBackgroundColor >> 8 &0xFF; c[2] = _selectBackgroundColor &0xFF; r = _textColor >>16; g = _textColor >> 8 &0xFF; b = _textColor &0xFF; c[3] = (r - (255 + c[0])) * n + 1; c[4] = (g - (255 + c[1])) * n + 1; c[5] = (b - (255 + c[2])) * n + 1; r = _selectTextColor >>16; g = _selectTextColor >> 8 &0xFF; b = _selectTextColor &0xFF; c[6] = (r - (255 + c[0])) * n + 1 - c[3]; c[7] = (g - (255 + c[1])) * n + 1 - c[4]; c[8] = (b - (255 + c[2])) * n + 1 - c[5]; cf.matrix = [c[3], c[6], 0, 0, c[0], c[4], c[7], 0, 0, c[1], c[5], c[8], 0, 0, c[2], 0, 0, 0, 1, 0]; t.textColor = 0xFF0000; t.filters = [ cf ]; } public function get backgroundColor():uint{ return _bg; } public function set backgroundColor( value:uint ):void{ _bg = value; _draw = true; draw() } public function get borderColor():uint{ return _border; } public function set borderColor( value:uint ):void{ _border = value; _draw = true; draw(); } public function set barBackgroundColor( value:uint ):void{ _barBackgroundColor = value; _draw = true; draw(); } public function get delayFrame():int{ return _delayFrame; } public function set delayFrame( value:int ):void{ _delayFrame = value < 0 ? 0:Math.round( value ); } public function get editable():Boolean{ return _edit; } public function set editable( flg:Boolean ):void { _edit = flg; t.type = (_edit == true) ? TextFieldType.INPUT : TextFieldType.DYNAMIC; } public function get filtering():Boolean{ return _useFilter; } public function set filtering( flg:Boolean ):void{ _useFilter = flg; if(!flg) t.filters = []; } public function get focus():Boolean{ return _focus; } public function set focus( flg:Boolean ):void{ _focus = flg; if(flg){ t.addEventListener(FocusEvent.FOCUS_IN, inFocus); }else{ t.removeEventListener(FocusEvent.FOCUS_IN, inFocus); } } public function get focusBackgroundColor():uint{ return _focusBg; } public function set focusBackgroundColor( value:uint ):void{ _focusBg = value; } public function get focusBorderColor():uint{ return _focusBorder; } public function set focusBorderColor( value:uint ):void{ _focusBorder = value; } public override function get height():Number{ return Math.floor( super.height ); } public override function set height( value:Number ):void{ h = Math.round( value ); _draw = true; if(hScroll_flg){ t.height = h - SCROLL_BAR_WIDTH; updataHScrollUI(); }else t.height = h; if(vScroll_flg) updataVScrollUI(); draw(); } public function get selectBackgroundColor():uint{ return _selectBackgroundColor; } public function set selectBackgroundColor( value:uint ):void{_selectBackgroundColor = value; setFilter();} public function get selectTextColor():uint{ return _selectTextColor; } public function set selectTextColor( value:uint ):void{ _selectTextColor = value; setFilter();} public function get textColor():uint{ return _textColor; } public function set textColor(value:uint):void{ _textColor = value; setFilter();} public function set UIArrowColor( arr:Array ):void{ if(arr.length != 3) return; _arrowColor = arr; upBtn.arrowColors = downBtn.arrowColors = vSlider.arrowColors = arr; } public function set UIBaseColor( arr:Array ):void{ if(arr.length != 3) return; _baseColor = arr; upBtn.baseColors = downBtn.baseColors = vSlider.baseColors = arr; } public function set UILineColor( arr:Array ):void{ if(arr.length != 3) return; _lineColor = arr; upBtn.lineColors = downBtn.lineColors = vSlider.lineColors = arr; } public function get useHScrollBar():Boolean{ return _useHScrollBar; } public function set useHScrollBar( flg:Boolean ):void{ _useHScrollBar = flg; } public function get useVScrollBar():Boolean{ return _useVScrollBar; } public function set useVScrollBar( flg:Boolean ):void{ _useVScrollBar = flg; } public override function get width():Number{ return Math.floor( super.width ); } public override function set width(value:Number):void{ w = Math.round( value ); _draw = true; if(vScroll_flg){ t.width = w - SCROLL_BAR_WIDTH; updataVScrollUI(); }else t.width = w; if(hScroll_flg) updataHScrollUI(); draw(); } // HSliderBg protected function onHSliderBgDown( e:MouseEvent ):void{ var p:int = mouseX; p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p; scrollH = p / hScrollThickness + 1; hSliderBg.stage.addEventListener(MouseEvent.MOUSE_MOVE, onHSliderBgMove); hSliderBg.stage.addEventListener(MouseEvent.MOUSE_UP, onHSliderBgUp); } protected function onHSliderBgMove( e:MouseEvent ):void{ var p:int = mouseX; p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p; scrollH = p / hScrollThickness + 1; e.updateAfterEvent(); } protected function onHSliderBgUp( e:MouseEvent ):void{ hSliderBg.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onHSliderBgMove); hSliderBg.stage.removeEventListener(MouseEvent.MOUSE_UP, onHSliderBgUp); } protected function onHSliderDown( e:MouseEvent ):void{ _drag_flg = true; clickPoint = hSlider.mouseX; hSlider.stage.addEventListener( MouseEvent.MOUSE_MOVE, onHSliderMove ); hSlider.stage.addEventListener( MouseEvent.MOUSE_UP, onHSliderUp ); } protected function onHSliderMove( e:MouseEvent ):void{ var p:int = mouseX - clickPoint; hSlider.x = p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p; scrollH = p / hScrollThickness + 1; } protected function onHSliderUp( e:MouseEvent ):void{ _drag_flg = false; hSlider.stage.removeEventListener( MouseEvent.MOUSE_MOVE, onHSliderMove ); hSlider.stage.removeEventListener( MouseEvent.MOUSE_UP, onHSliderUp ); } // VSliderBg protected function onVSliderBgDown( e:MouseEvent ):void{ var p:int = mouseY; p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p; scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1; vSliderBg.stage.addEventListener(MouseEvent.MOUSE_MOVE, onVSliderBgMove); vSliderBg.stage.addEventListener(MouseEvent.MOUSE_UP, onVSliderBgUp); } protected function onVSliderBgMove( e:MouseEvent ):void{ var p:int = mouseY; p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p; scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1; e.updateAfterEvent(); } protected function onVSliderBgUp( e:MouseEvent ):void{ vSliderBg.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onVSliderBgMove); vSliderBg.stage.removeEventListener(MouseEvent.MOUSE_UP, onVSliderBgUp); } // VSlider protected function onVSliderDown( e:MouseEvent ):void{ _drag_flg = true; clickPoint = vSlider.mouseY; vSlider.stage.addEventListener( MouseEvent.MOUSE_MOVE, onVSliderMove ); vSlider.stage.addEventListener( MouseEvent.MOUSE_UP, onVSliderUp ); } protected function onVSliderMove( e:MouseEvent):void{ var p:int = mouseY - clickPoint; vSlider.y = p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p; scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1; e.updateAfterEvent(); } protected function onVSliderUp( e:MouseEvent ):void{ _drag_flg = false; vSlider.stage.removeEventListener( MouseEvent.MOUSE_MOVE, onVSliderMove ); vSlider.stage.removeEventListener( MouseEvent.MOUSE_UP, onVSliderUp ); } // Up Button protected function onUpDown( e:MouseEvent ):void{ scrollV--; count = 0; addEventListener(Event.ENTER_FRAME, onUpFrame); stage.addEventListener( MouseEvent.MOUSE_UP, onUpUp); } protected function onUpUp( e:MouseEvent ):void{ removeEventListener(Event.ENTER_FRAME, onUpFrame); stage.removeEventListener( MouseEvent.MOUSE_UP, onUpUp); } protected function onUpFrame( e:Event ):void{ if( count <= delayFrame){ count ++; return; } scrollV--; } // Down Button protected function onDownDown( e:MouseEvent):void{ scrollV++; count = 0; addEventListener(Event.ENTER_FRAME, onDownFrame); stage.addEventListener( MouseEvent.MOUSE_UP, onDownUp); } protected function onDownUp(e:MouseEvent):void{ removeEventListener(Event.ENTER_FRAME, onDownFrame); stage.removeEventListener( MouseEvent.MOUSE_UP, onDownUp); } protected function onDownFrame( e:Event ):void{ if( count <= delayFrame){ count ++; return; } scrollV++; } protected function onChange( e:Event ):void{ checkUseScrollBar(); dispatchEvent( e ); } protected function onScroll( e:Event ):void{ dispatchEvent( e ); if(_drag_flg) return; if(hScroll_flg) hSlider.x = scrollH == 1 ? minHScrollX : minHScrollX + hScrollThickness * scrollH; if(vScroll_flg) vSlider.y = scrollV == 1 ? minVScrollY : minVScrollY + vScrollThickness * scrollV; } protected function inFocus( e:FocusEvent ):void{ _inFocus = true; _draw = true; draw(); } protected function outFocus( e:FocusEvent ):void{ _inFocus = false; _draw = true; draw(); } protected function onLink( e:TextEvent ):void{ dispatchEvent( e ); } protected function onKeyDown( e:KeyboardEvent ):void{ t.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); } protected function onKeyUp( e:KeyboardEvent ):void{ t.removeEventListener( KeyboardEvent.KEY_UP, onKeyUp); } // TextFieldのプロパティーとかメソッドとか public function get alwaysShowSelection():Boolean{ return t.alwaysShowSelection; } public function set alwaysShowSelection(flg:Boolean):void{ t.alwaysShowSelection = flg; } public function get antiAliasType():String{ return t.antiAliasType; } public function set antiAliasType(str:String):void{ t.antiAliasType = str; } public function get bottomScroll():int{ return t.bottomScrollV; } public function get caretIndex():int{ return t.caretIndex; } public function get condenseWhite():Boolean{ return t.condenseWhite; } public function set condenseWhite(flg:Boolean):void{ t.condenseWhite = flg; } public function get defaultTextFormat():TextFormat{ return t.defaultTextFormat; } public function set defaultTextFormat(data:TextFormat):void{ t.defaultTextFormat = data; } public function get embedFonts():Boolean{ return t.embedFonts; } public function set embedFonts(flg:Boolean):void{ t.embedFonts = flg; } public function get gridFitType():String{ return t.gridFitType; } public function set gridFitType(str:String):void{ t.gridFitType = str; } public function get htmlText():String{ return t.htmlText; } public function set htmlText(str:String):void{ t.htmlText = str; checkUseScrollBar();} public function get length():int{ return t.length; } public function get maxChars():int{ return t.maxChars; } public function set maxChars(value:int):void{ t.maxChars = value; } public function get maxScrollH():int{ return t.maxScrollH; } public function get maxScrollV():int{ return t.maxScrollV; } public function get mouseWheelEnabled():Boolean{ return t.mouseWheelEnabled; } public function set mouseWheelEnabled(flg:Boolean):void{ t.mouseWheelEnabled = flg; } public function get multiline():Boolean{ return t.multiline; } public function set multiline(flg:Boolean):void{ t.multiline = flg; } public function get numLines():int{ return t.numLines; } public function get restrict():String{ return t.restrict; } public function set restrict(str:String):void{ t.restrict = str; } public function get scrollH():int{ return t.scrollH; } public function set scrollH(value:int):void{ t.scrollH = value; } public function get scrollV():int{ return t.scrollV; } public function set scrollV(value:int):void{ t.scrollV = value; } public function get selectable():Boolean{ return t.selectable; } public function set selectable(flg:Boolean):void{ t.selectable = flg; } public function get selectedText():String{ return t.selectedText; } public function get selectionBeginIndex():int{ return t.selectionBeginIndex; } public function get selectionEndIndex():int{ return t.selectionEndIndex; } public function get sharpness():Number{ return t.sharpness; } public function set sharpness(value:Number):void{ t.sharpness = value; } public function get styleSheet():StyleSheet{ return t.styleSheet; } public function set styleSheet(data:StyleSheet):void{ t.styleSheet = data; } public function get text():String{ return t.text; } public function set text(str:String):void{ t.text = str; checkUseScrollBar();} public function get textHeight():Number{ return t.textHeight; } public function get textWidth():Number{ return t.textWidth; } public function get thickness():Number{ return t.thickness; } public function set thickness(value:Number):void{ t.thickness = value; } public function get useRichTextClipboard():Boolean{ return t.useRichTextClipboard; } public function set useRichTextClipboard(flg:Boolean):void{ t.useRichTextClipboard = flg; } public function get wordWrap():Boolean{ return t.wordWrap; } public function set wordWrap(flg:Boolean):void{ t.wordWrap = flg; } public function appendText(newText:String):void{ t.appendText( newText ); } public function getCharBoundaries(charIndex:int):Rectangle{ return t.getCharBoundaries( charIndex ); } public function getCharIndexAtPoint(x:Number, y:Number):int{ return t.getCharIndexAtPoint( x, y ); } public function getFirstCharInParagraph(charIndex:int):int{ return t.getFirstCharInParagraph( charIndex ); } public function getImageReference(id:String):DisplayObject{ return t.getImageReference( id ); } public function getLineIndexAtPoint(x:Number, y:Number):int{ return t.getLineIndexAtPoint( x, y); } public function getLineIndexOfChar(charIndex:int):int{ return t.getLineIndexOfChar( charIndex ); } public function getLineLength(lineIndex:int):int{ return t.getLineLength( lineIndex ); } public function getLineMetrics(lineIndex:int):TextLineMetrics{ return t.getLineMetrics( lineIndex ); } public function getLineOffset(lineIndex:int):int{ return t.getLineOffset( lineIndex ); } public function getLineText(lineIndex:int):String{ return t.getLineText( lineIndex ); } public function getParagraphLength(charIndex:int):int{ return t.getParagraphLength( charIndex ); } public function getRawText():String{ return t.getRawText(); } public function getTextFormat(beginIndex:int, endIndex:int):TextFormat{ return t.getTextFormat( beginIndex, endIndex ); } public function getTextRuns(beginIndex:int=0, endIndex:int=2147483647):Array{ return t.getTextRuns( beginIndex, endIndex ); } public function getXMLText(beginIndex:int=0, endIndex:int=2147483647):String{ return t.getXMLText( beginIndex, endIndex ); } public function replaceSelectedText(value:String):void{ t.replaceSelectedText( value ); } public function replaceText(beginIndex:int, endIndex:int, newText:String):void{ t.replaceText( beginIndex, endIndex, newText ); } public function setSelection(beginIndex:int, endIndex:int):void{ t.setSelection( beginIndex, endIndex ); } public function setTextFormat(format:TextFormat, beginIndex:int, endIndex:int):void{ t.setTextFormat( format, beginIndex, endIndex ); } } class MyButton extends Sprite{ protected var flg:Boolean = false; protected var over_flg:Boolean = false; // up, down, over protected var _arrowColor:Array ; protected var _baseColor:Array; protected var _lineColor:Array; protected var _thickness:Array = [1,2,1]; protected var _side:int; protected var ui:Sprite; public function set arrowColors( arr:Array ):void{ _arrowColor = arr; draw(); } public function set baseColors( arr:Array ):void{ _baseColor = arr; draw(); } public function set lineColors( arr:Array ):void{ _lineColor = arr; draw(); } public function MyButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){ _side = side; _arrowColor = arrowColor; _baseColor = baseColor; _lineColor = lineColor; ui = new Sprite(); addChild( ui ); var g:Graphics = this.graphics; g.beginFill( _baseColor[ 0 ], 0.02); g.drawRect( 0,0, side,side); g.endFill(); draw(); addEventListener( MouseEvent.MOUSE_DOWN, onDown ); addEventListener( MouseEvent.MOUSE_OVER, onOver ); } protected function draw( num:int = 0 ):void{ if( num >= 3) return; // overrideして描画処理しよう } protected function onDown( e:MouseEvent ):void{ flg = true; draw( 1 ); stage.addEventListener( MouseEvent.MOUSE_UP, onUp ); } protected function onUp( e:MouseEvent ):void{ flg = false; over_flg == true ? draw(2): draw(); stage.removeEventListener( MouseEvent.MOUSE_UP, onUp ); } protected function onOver( e:MouseEvent ):void{ over_flg = true; if(flg) return; draw( 2 ); addEventListener( MouseEvent.MOUSE_OUT, onOut ); } protected function onOut( e:MouseEvent ):void{ over_flg = false; if(flg) return; draw(); removeEventListener( MouseEvent.MOUSE_OUT, onOut ); } } class HSlider extends MyButton{ private var _width:int; public function HSlider( width:int, side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){ _width = width; super( side, arrowColor, baseColor, lineColor ); } public function set sliderWidth( value:int ):void{ _width = value; draw(); } protected override function draw( num:int = 0):void{ super.draw( num ); var g:Graphics = ui.graphics; g.clear(); g.lineStyle( 1, _lineColor[ num ]); g.beginFill( _baseColor[ num ] ); g.drawRect( 2,1, _width, _side - 4); g.endFill(); var ww:int = _width >>1; var t:int = _side >>1; var b:int = t; t -= 4; b +=4; g.lineStyle( 1, _arrowColor[ num ]); g.moveTo( ww -3, t); g.lineTo( ww - 3, b); g.moveTo( ww, t); g.lineTo( ww, b); g.moveTo( ww +3, t); g.lineTo( ww + 3, b); } } class VSlider extends MyButton{ private var _height:int; public function VSlider( height:int, side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){ _height = height; super( side, arrowColor, baseColor, lineColor ); } public function set sliderHeight( value:int ):void{ _height = value; draw(); } protected override function draw( num:int = 0):void{ super.draw( num ); var g:Graphics = ui.graphics; g.clear(); g.lineStyle( 1, _lineColor[ num ]); g.beginFill( _baseColor[ num ] ); g.drawRect( 2,1, _side - 4, _height); g.endFill(); var hh:int = _height >>1; var l:int = _side >>1; var r:int = l; l -= 4; r +=4; g.lineStyle( 1, _arrowColor[ num ]); g.moveTo( l, hh - 3); g.lineTo( r, hh - 3); g.moveTo( l, hh); g.lineTo( r, hh); g.moveTo( l, hh + 3); g.lineTo( r, hh + 3); } } class UpButton extends MyButton{ public function UpButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){ super( side, arrowColor, baseColor, lineColor ); } protected override function draw( num:int = 0):void{ super.draw( num ); var g:Graphics = ui.graphics; var l:int =_thickness[ num ]; g.clear(); g.lineStyle( l, _lineColor[ num ]); g.beginFill( _baseColor[ num ] ); g.drawRect( l,l, _side - (l+1),_side - (l+1)); g.endFill(); g.lineStyle( 0, 0, 0); g.beginFill( _arrowColor[ num ]); g.moveTo( 5, _side - 5); g.lineTo( _side - 5, _side -5); g.lineTo( _side/2, 6); g.lineTo( 5, _side -5); g.endFill(); } } class DownButton extends MyButton{ public function DownButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){ super( side, arrowColor, baseColor, lineColor ); } protected override function draw( num:int = 0):void{ super.draw( num ); var g:Graphics = ui.graphics; var l:int =_thickness[ num ]; g.clear(); g.lineStyle( l, _lineColor[ num ]); g.beginFill( _baseColor[ num ] ); g.drawRect( l,l, _side - (l+1),_side - (l+1)); g.endFill(); g.lineStyle( 0, 0, 0); g.beginFill( _arrowColor[ num ]); g.moveTo( 5, 7); g.lineTo( _side - 5, 7); g.lineTo( _side/2, _side - 5); g.lineTo( 5, 7); g.endFill(); } } forked from: 自作 TextArea ver.3