上一篇文章解决了Flex 显示表情图片,这篇转摘可以解决Flash显示图片和表情的问题。

感谢原作者分享

bbs.9ria.com/redirect.php?tid=81096&goto=lastpost

这是我第一次开源自己的东东给大家,如果不好请各位大虾见谅。
这几天需要写一个图文并貌的聊天框,用了一下第三方的类,结果还是达不到我想要的效果,于是就研究了一下TLF,终于成功了。
TLF用起来感觉很麻烦,研究了几天,写了一个工具类,最后发现flashCS5本身提供了一个TLF的高级工具类TLFTextField,位于fl.text.TLFTextField。这个类提供了跟textField相似的用法,很实用,我这里就扩展了这个类,加了一些实用的东东在里面,方便大家更简单地运用这个类。我取名叫STLFTextField。
主要功能增加了几个:
1、在文本中插入图片;
2、将一段XML格式的TLF信息以字符串形式导入
3、设置最大段落数(如果设置了最大段落数后,当段落数到达最大段落数时,文本会从最开始加入文本的段落中删除多余的段落。)
4、UI滚动条的数据更新控制
demo在附件的压缩包里,这里附上测试截图

用法很简单,跟textField没有什么太大差别,但是功能却大大加强了,本人只是对原本的类做了一些小小的修改,供大家更方便地实用,欢迎大家拍砖。
类里面的源码和例子在附件里有,我把源码也贴出来,其实也比较简单。

package
{
import fl.controls.UIScrollBar;
import fl.text.TLFTextField;
import flash.events.Event;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.edit.IEditManager;
import flashx.textLayout.elements.FlowElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.events.CompositionCompleteEvent;
import flashx.textLayout.events.StatusChangeEvent;
/**
* 使用 STLFTextField 类创建使用文本布局框架 (TLF) 的高级文本显示功能的文本字段。
* STLFTextField 对象与 TextField 对象类似,但 STLFTextField 对象可以利用 flashx 包中包含的 TLF 类的属性和方法。TLF 提供了大量格式选项和功能。
* @author Jimhy
*/
public class STLFTextField extends TLFTextField
{
//最大段落数
private var _maxParagraph:uint = 0;
//UI滚动条
private var uiScrollBar:UIScrollBar;
public function STLFTextField()
{
super();
}
private function tlfEventHandle(e:Event):void
{
super.textFlow.flowComposer.updateAllControllers();
if (uiScrollBar) {
uiScrollBar.scrollPosition = uiScrollBar.maxScrollPosition;
uiScrollBar.validateNow();
}
}
/**
* 过滤段落数达到最大值时文本的段落
*/
private function filtrationPar():void
{
if (_maxParagraph == 0) return;
if (textFlow.numChildren > _maxParagraph) {
for (var i:uint = 0; i < textFlow.numChildren - _maxParagraph; i++ ) {
textFlow.removeChildAt(0);
}
}
}
/**
* 在文本中插入图片
* @param        src                图片的路径或者库里面的MC实例
* @param        width        图片的宽,默认是图片宽度
* @param        height        图片的高,默认是图片的高度
*/
public function insertImg(src:Object, width:Object = "auto", height:Object = "auto"):void
{
if(!textFlow.hasEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE))
super.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, tlfEventHandle);
IEditManager(super.textFlow.interactionManager).insertInlineGraphic(src, width, height);
super.textFlow.interactionManager.setFocus();
super.textFlow.flowComposer.updateAllControllers();
}
/**
* 将一段XML格式的TLF信息以字符串形式导入
* 这个值如:
* private const headingMarkup:String = "<flow:TextFlow xmlns:flow='http://ns.adobe.com/textLayout/2008'>" +
"<flow:p textAlign='center'>" +
"<flow:span fontFamily='Georgia' fontSize='36'>Ethan Brand</flow:span><flow:br/>" +
"<flow:span fontSize='8' fontStyle='italic'>by </flow:span>" +
"<flow:span fontSize='12' fontStyle='italic'>Nathaniel Hawthorne</flow:span>" +
"</flow:p>" +
"</flow:TextFlow>";
*/
public function importToTLF(value:String):void
{
if(!textFlow.hasEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE))
super.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, tlfEventHandle);
if(textFlow.hasEventListener(CompositionCompleteEvent.COMPOSITION_COMPLETE))
super.textFlow.removeEventListener(CompositionCompleteEvent.COMPOSITION_COMPLETE, tlfEventHandle);
super.textFlow.addEventListener(CompositionCompleteEvent.COMPOSITION_COMPLETE, tlfEventHandle);
var tlf:TextFlow = TextConverter.importToFlow(value, TextConverter.TEXT_LAYOUT_FORMAT);
var elm:FlowElement = tlf.getChildAt(0);
textFlow.addChild(elm);
filtrationPar();
super.textFlow.flowComposer.updateAllControllers();
}
/**
* 设置文本格式
*/
public function setTextLayoutformat(fontFamily:String="宋体",fontSize:uint=12,color:uint=0):void
{
textFlow.fontFamily = fontFamily;
textFlow.fontSize = fontSize;
textFlow.color = color;
}
/**
* 清除所有子元素
*/
public function clearElements():void
{
while (super.textFlow.numChildren) {
super.textFlow.removeChildAt(0);
}
}
/**
* 设置最大段落数
* 如果设置了最大段落数后,当段落数到达最大段落数时,文本会从最开始加入文本的段落中删除多余的段落。
*/
public function set maxParagraph(value:uint):void
{
_maxParagraph = value;
}
/**
* 设置滚动条
*/
public function set scrollBar(sb:UIScrollBar):void
{
uiScrollBar = sb;
uiScrollBar.scrollTarget = this;
}
}
}

demo请到原作者9ria 连接下载。

bbs.9ria.com/redirect.php?tid=81096&goto=lastpost

Flash:一个TLF图文并貌的高级应用类相关推荐

  1. Windows2008+sqlserver2008集群安装(图文并貌)

    群集安装环境需要提前做好准备工作,搭建域环境,需要三台服务器,一台作为域控,另外两台为成员服务器,为两台成员服务器创建账户并分配权限,在DNS服务器上做好名称和地址的映射关系.设置网络连接,至少双网卡 ...

  2. flash的TLF字体框架,与部分XP-SP3 IE8不兼容。

    1.flash的TLF字体框架,用起来是比较方便的,但它有很多问题.目前已发现最大的问题是,与客户端的兼容问题. 2.在一批XP-SP3 IE8的机器上,flash player都已经升级到最新版.I ...

  3. 一个简单的完成端口(服务端/客户端)类

    一个简单的完成端口(服务端/客户端)类 作者:spinoza 翻译:麦子芽儿, POWERCPP(后面部分内容) 下载源代码 原文网址:http://www.codeproject.com/KB/IP ...

  4. 一个以东晋北伐为背景的战略战术类古代战争游戏

    一个以东晋北伐为背景的战略战术类古代战争游戏 中国五千年历史,最让我觉得神秘,充满诱人之处的却是很多人不太了解的五胡 乱华南北朝.说来好笑,对这段历史的偏好居然是因为自以为的那些不同凡响的 人名.祖逖 ...

  5. 一个由印度人编写的VC串口类

    软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些基础知识,如怎么用VC打开串口,如何对串口进行配置,读串口.写串口等. 这个类有点特别,它没有 ...

  6. 二.编写第一个c#程序(注释,命名空间,类,Main方法,标识符,关键字,输入,输出语句,)...

    复习编写一个控制台应用程序,目标是在控制台输出"Hello World" 1.第一步,打开Visual Studio 2012以上版本(我用的是VS 2015),打开完成后出现以下 ...

  7. 一个简单而又灵活的数据库操作类

    一个简单而又灵活的数据库操作类 作者: 紫瑗 ***************************************************************************** ...

  8. php生成饼状图 柱形图,求一个饼状图或柱状图php生成类或例子

    求一个饼状图或柱状图php生成类或例子 时间:2006/7/19 6:10:04 作者:佚名 人气:268 PHP代码:---------------------------------------- ...

  9. java判断接口对象是哪个子类_Java提供了一个关键字( ),可以判断一个对象是否为某个类(或接口)的实例或者子类实例。...

    Java提供了一个关键字( ),可以判断一个对象是否为某个类(或接口)的实例或者子类实例. 更多相关问题 -Do you know a has just opened in our neighborh ...

  10. 实验3.3 设计一个用于人事管理的People(人员)类

    题目 (选做)设计一个用于人事管理的People(人员)类.考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号).sex(性别).birthday(出生日期).id(身份证号)等等 ...

最新文章

  1. Oracle中的MERGE语句
  2. pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行
  3. 【Scratch】青少年蓝桥杯_每日一题_2.13_碰苹果
  4. 第7组-17级通信三班-227-抓包分析
  5. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  6. PHP中cookie和session的区别
  7. IO多路复用之select全面总结(必看篇)
  8. html5 网页游戏论文,JavaScript编写的网页小游戏,很给力
  9. 浙大 PAT b1036
  10. 中国自研数据库超越Oracle登顶全球第一
  11. c语言程序设计 江汉大学,C语言程序设计B卷
  12. 2021年安全员-B证新版试题及安全员-B证试题及解析
  13. C#员工考勤管理系统源码 考勤工资管理系统源码
  14. 用大于一素数的最小素数替换4*4矩阵中的素数
  15. 终生学习者,永远劳苦命!
  16. 解决:win10打印机连上,但是控制面板显示未指定
  17. 2015级移动本面向对象课程主页
  18. 时下流行的css3页面纵向滑动效果
  19. postgresql mysql 源码安装_PostGreSQL12 源码安装与字符集修改 (一)
  20. Windows的hosts文件所在位置

热门文章

  1. CMD命令提示符保姆级入门教程
  2. python查看list的shape_列表list、数组np.array等的len,size,shape操作
  3. 某软件大赛编程题(转)
  4. 超有用:记一次Yapi上传报错及其处理方式
  5. JQuery插件机制
  6. 自然语言处理基础 一 及 sklearn实现 分析词代码实现
  7. flask蓝图buleprint使用
  8. 【行业应用案例】区块链+珠宝应用案例分析
  9. 普通文档怎么换成php,wps只读文档怎么修改为普通文档
  10. cf1163B2. Cat Party (Hard Edition)(简单总结一下map数据结构的简单方法)