Flash动态文本框内动态文本内容自适应

这样一道题关于Flash的:Flash场景中有一个文本框,它的长和宽是已知的但是值不固定(可能是10×20也可能是462×139还有可能其他),然后我们有一个字符串长度已知但是同样不固定(可能1个字也可能562个字还可能其他)。目前我们要实现,调整字的大小使这些字要填满这个文本框,不能有滚动(字要完全显示出来)也不能空很大的空出来最好刚刚填满。

  这个问题困扰了我3、4天了还是没有办法解决其中的一些问题,写下我的实现办法。

  先我设想文本框和场景一样大,拖动Flash影片的时候文本框长宽自然改变,但是值也是可以通过Stage获取的。然后文本内的文字设置一个变量。现在问题就变成无论怎么拖动这个Flash,里面的自都是满满的填满了真个文本框,没有隐藏也没有太多空白。如下图

  我的代码

stop();
Stage.scaleMode = “noScale”;
Stage.align = “TL”;
Stage.showMenu = false;
var i_txt:String = “其实电脑方面懂的太少其实电脑方面懂的太少其实电脑方面懂的太少”;
var t_w:Number = Stage.width-10;//减去边框霓虹灯的宽度
var t_h:Number = Stage.height-10;//减去边框霓虹灯的高度
var xn:Number = Math.ceil(Math.sqrt(i_txt.length * ((Stage.width-14) * 76) / (67 * (Stage.height-14))));//是对每行字体个数的估算,下面是对字行数的估算,问题就在这里。
var yn:Number = Math.ceil(i_txt.length/xn);
setProperty(”_root.nhd_b”, _y, Stage.height-3);//霓虹灯宽3像素,这里设置霓虹灯底部的边框
setProperty(”_root.nhd_r”, _x, Stage.width-3);//霓虹灯右边的边框
this.createTextField(”my_txt”, this.getNextHighestDepth(), 5, 5, t_w, t_h);//画出文本框
my_txt.type = “static”;
my_txt.multiline = true;
my_txt.border = true;
my_txt.wordWrap = true;
my_txt.selectable = true;
my_txt.hscroll = 0;
my_txt.text = i_txt;
var my_fmt:TextFormat = new TextFormat();
my_fmt.size = Math.floor((t_w-4)/(xn));//估算字的大小
my_fmt.color = 0xFF0000;
my_fmt.align = “left”;
my_fmt.leftMargin = 0;
my_fmt.rightMargin = 0;
my_fmt.indent = 0;
my_fmt.leading = 0;
my_fmt.letterSpacing = 0;
my_fmt.kerning = true;
my_txt.setTextFormat(my_fmt);
var sizeLis = new Object();
sizeLis.onResize = function() {
setProperty(”_root.nhd_b”, _y, Stage.height-3);
setProperty(”_root.nhd_r”, _x, Stage.width-3);
var xn:Number = Math.ceil(Math.sqrt(i_txt.length * ((Stage.width-14) * 76) / (67 * (Stage.height-14))));
var yn:Number = Math.ceil(i_txt.length/xn);
my_txt._width = Stage.width-10;
my_txt._height = Stage.height-10;
my_fmt.size = Math.floor((Stage.width-10-4)/(xn));
};
Stage.addListener(sizeLis);

posted on 2010-09-30 14:20  Morris  阅读(1080)  评论(0编辑  收藏  举报

导航