勉強を兼ねて作ってみました。
JavascriptをONにし、最新のFlashプレーヤーをインストールしてください。
setText関数にテキストを渡すと表示します。
必要っぽいパラメータはsetで用意しました。
各パラメータに渡す値の組み合わせによってはコンパイルエラーを出してしまうみたいです。
色々、制限をつけてみたんですが、改行コードはNGなど、まだまだあるみたいです。
ToolTip.as
package {
import flash.display.DisplayObjectContainer ;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.geom.Point;
import flash.geom.Rectangle;
public class ToolTip {
/*-----------------------------------------------
変数
-----------------------------------------------*/
private var container:DisplayObjectContainer ;
private var puffSet:Sprite;
private var tf:TextField;
private var flag:Boolean;
//◆set&get用
private var __widthPuff:uint=100;//最大幅
private var __padding:Object={top:5,left:5,bottom:3,right:3};//吹き出しとテキストとの間隔
private var __round:uint=5;//角丸の直径
private var __x:Number=0;//X座標
private var __y:Number=0;//Y座標
private var __size:uint=10;//フォントサイズ
private var __color:uint=0x000000;//文字の色
private var __leading:uint=0;//行間
private var __bgColor:uint=0xFFFFFF;//吹き出しの色
private var __bgAlpha:Number=1;//吹き出しの透明度
private var __lineThickness:uint=2;//ラインの太さ
private var __lineColor:uint=0x000000;//ラインの色
private var __lineAlpha:Number=1;//ラインの透明度
private var __length:uint;//表示文字列の字数
private var __maxLength:uint=100;//最大文字数
/*-----------------------------------------------
関数・メソッド
-----------------------------------------------*/
//◆コンストラクタ
public function ToolTip(_container:DisplayObjectContainer ):void {
container=_container;
init();
}
//◆初期設定
private function init():void {
tf = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.selectable = false;
tf.multiline = true;
tf.wordWrap = true;
tf.mouseEnabled = false;
//
puffSet=new Sprite();
puffSet.addChild(tf);
//
flag=false;
}
/*-----------------------------------------------
メイン
-----------------------------------------------*/
public function setText(_str:String):void {
tf.text=textRound(_str);
tf.x=__padding.left;
tf.y=__padding.top;
tf.width=__widthPuff-(__padding.left+__padding.right);
tf.setTextFormat(textFormatFunc());
//
var frame:Rectangle=textRectangle(tf);
//
puffSet.graphics.clear();
puffSet.graphics.beginFill(__bgColor, __bgAlpha);
puffSet.graphics.lineStyle(__lineThickness,__lineColor,__lineAlpha);
puffSet.graphics.drawRoundRect(frame.x,frame.y, frame.x+frame.width+(__padding.left+__padding.right), frame.y+frame.height+(__padding.top+__padding.bottom),__round,__round);
puffSet.graphics.endFill();
puffSet.x=__x;
puffSet.y=__y;
container.addChild(puffSet);
//
flag=true;
}
public function removeText():void {
if (flag) {
container.removeChild(puffSet);
flag=false;
}
}
/*-----------------------------------------------
サブ
-----------------------------------------------*/
//テキストフォーマットを設定
private function textFormatFunc():TextFormat {
var format:TextFormat=new TextFormat();
format.size=__size;
format.color=__color;
format.leading=__leading;
format.font="_ゴシック";
return format;
}
//全テキストを囲む矩形データを返す
public function textRectangle(_tf:TextField):Rectangle {
var firstText:Rectangle = _tf.getCharBoundaries(0);
var fp:Point = new Point(firstText.x,firstText.y);
var tr:Rectangle,trLeft:Number;
var mostLeft:Number=0;
__length=tf.length;
for (var i=0; i<__length; i++) {
tr = _tf.getCharBoundaries(i);
trLeft=tr.x+tr.width;
mostLeft=(mostLeft__maxLength) {
str=str.substr(0,__maxLength-1)+"...";
}
return str;
}
/*-----------------------------------------------
set&get
-----------------------------------------------*/
public function set _width(value:uint):void {
__widthPuff=value;
}
public function get _width():uint {
return __widthPuff;
}
public function set _padding(value:Object):void {
__padding=value;
}
public function get _padding():Object {
return __padding;
}
public function set _round(value:uint):void {
__round=value;
}
public function get _round():uint {
return __round;
}
public function set _x(value:Number):void {
__x=value;
}
public function get _x():Number {
return __x;
}
public function set _y(value:Number):void {
__y=value;
}
public function get _y():Number {
return __y;
}
public function set _size(value:uint):void {
//サイズが10より大きくなると、条件次第でバグるので
__size=(value>10)?10:value;
}
public function get _size():uint {
return __size;
}
public function set _color(value:uint):void {
__color=value;
}
public function get _color():uint {
return __color;
}
public function set _leading(value:uint):void {
__leading=value;
}
public function get _leading():uint {
return __leading;
}
public function set _bgColor(value:uint):void {
__bgColor=value;
}
public function get _bgColor():uint {
return __bgColor;
}
public function set _bgAlpha(value:Number):void {
__bgAlpha=value;
}
public function get _bgAlpha():Number {
return __bgAlpha;
}
public function set _lineThickness(value:uint):void {
__lineThickness=value;
}
public function get _lineThickness():uint {
return __lineThickness;
}
public function set _lineColor(value:uint):void {
__lineColor=value;
}
public function get _lineColor():uint {
return __lineColor;
}
public function set _lineAlpha(value:Number):void {
__lineAlpha=value;
}
public function get _lineAlpha():Number {
return __lineAlpha;
}
public function set _maxLength(value:Number):void {
//文字数が多くなると重くなるので
__maxLength=(value>500)?500:value;
}
public function get _maxLength():Number {
return __maxLength;
}
//◆getだけ
public function get _length():Number {
return __length;
}
}
}
タイムライン
iimport ToolTip;
var t:ToolTip=new ToolTip(this);
t._padding.left=4;
t._padding.top=2;
t._padding.bottom=0;
t._padding.right=1;
t._width=100;
t._round=10;
t._x=t._y=200;
t._size=10;
t._color=0xFFFFFF;
t._leading=2;
t._bgColor=0x6666FF;
t._bgAlpha=1;
t._lineThickness=2;
t._lineColor=0x3333CC;
t._lineAlpha=1;
t._maxLength=100;
t._width=100;
t.setText("テキストテキストテキストテキストテキストテキストテキストテキスト");
var sp:Sprite=new Sprite();
addChild(sp);
var t2:ToolTip=new ToolTip(sp);
t2._x=10;
t2._y=10;
addEventListener(Event.ENTER_FRAME, moveHander);
function moveHander(e:Event):void {
sp.x=stage.mouseX;
sp.y=stage.mouseY;
t2.setText("マウスカーソルの座標 → ("+String(stage.mouseX+","+stage.mouseY)+")");
}
時間があればもう少し作りこみたいです。