Flex: flash聊天框 表情+文字 图文混排 (思路)

  flash聊天框 表情+文字 图文混排 (思路)
  space.flash8.net/bbs/viewthread.php?tid=363077
  
  在as2里面实现文图混排很麻烦(在as3里面就很容易解决了),文本框中,html标签的方式实现图文混排,图片的的位置总是不理想。
  想自己手工写程序完成个效果,创建textField,把文本显示出来,然后获得表情符号出现的位置(x,y),在这里显示表情的MC。
  但把as2关于textFied的部分看了一遍,竟然没有获得具体文本,所在位置坐标的办法……
  唯一的办法只有textFormat.getTextExtent获得文字信息,但是多行的时候,第二行的字符宽度就无法获得了。
  最后…… 想到的办法是这样:
  1. my_txt 是要显示的字符串。
  2. 创建一个TextField,名为 my_txetField,宽度为100,高度为20
  my_txetField的autoSize属性为true
  createTextField("my_txetField", 1, 0, 0,100,20);
  my_txetField.autoSize = true;
  3. my_txt2 是一个内容为空的字符串
  做一个循环,把my_txt中的字符一个个的加入到my_txt2中
  然后在my_txetField中显示字符,
  因为 my_txetField.autoSize = true;
  这时可以随时获得字符串最后一个字符的x坐标
  4. my_txetField的宽度_width超过 显示框宽度时。
  my_txt相应位置加入"\n"换行符号。my_txt2内容清空,行数增加。
  然后再逐一往my_txt2 中输入字符。获得第二行每个字符的x坐标。
  5 在这个循环中,遇到表情符号就记录下来这个表情字符 所在的x,y坐标。
  6 最后显示出来就行了。
  :( 不知道as2中 还有没有更好的办法获得字符的坐标位置。
  PS:具体实现代码 public function addEmo(param1:TextField, param2:String, param3:Rectangle) { var xml:*; var emo:*; var img:*; var emo_mc:*; var ename:*; var emoreg:RegExp; var text:*; var space:*; var len:*; var i:*; var c:*; var l:*; var txt:* = param1; var emoName:* = param2; var rectangle:* = param3; var _loc_6:int; var _loc_7:* = this.emoXML.emotion; var _loc_5:* = new XMLList(""); for each (_loc_8 in _loc_7) { // label var _loc_9:* = _loc_7[_loc_6]; with (_loc_7[_loc_6]) { if (phrase == emoName) { _loc_5[_loc_6] = _loc_8; }// end if }// end with }// end of for each ... in xml = _loc_5; if (xml.length() == 0) { return; }// end if emo = new MovieClip(); img = String(xml[0].url); Image.loadGif(img, emo); emo.x = rectangle.x + txt.x - 2; emo.y = rectangle.y + txt.y - 6; emo_mc = txt.parent.getChildByName("emo_mc"); emo_mc.addChild(emo); ename = emoName.substr(1, emoName.length - 2); emoreg = new RegExp("\\[" + ename + "\\]", "i"); text = txt.htmlText; space; len = ename.length; i; while (i < len) { // label c = ename.substr(i, 1); l = Text.byteLength(c); space = space + (l == 2 ? (" ") : (" ")); i = i++; }// end while space = space + " "; text = text.replace(emoreg, space); txt.htmlText = text; xml; return; }// end function
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直以来都比较羡慕那些,界面美观,功能强大的即时通讯软件,自己慢慢摸索了好长时间,用MFC做了一个聊天程序主窗口演示小程序。 该程序主要自定义了CRichEditCtrl控件,使用XML技术与GDI处理各种图片及QQ表情组件,串行化数据等,使得程序拥有了一般聊天程序应用的特色(同时仿FeiQ程序的自动释放程序运行需要的资源到安装目录): 支持字体设置、图文混排表情及各种格式图片的插入、发送与保存,聊天记录的保存等等... 1、聊天输入、输出窗口:使用CRichEditCtrl控件,扩展后方便了字体设置、图文混排表情及各种格式图片的插入,及窗口上右键菜单的功能。 2、聊天表情:这一部分是我精心制作的,使用GDI处理各种图片使得程序支持各种格式图片的预览、插入、保存。使用XML技术,方便快捷管理表情数据。自动释放表情图片资源(程序所在目录)及QQ表情组件(放到\System32\ImageOle.dll),程序自动注册组件,让程序支持GIF格式表情的插入。程序仿FeiQ自动生成表情页面缓存图片,快捷增加大量表情。本程序生成缓存图时,使用多线程技术,增加、修改完后立即更新页面缓存图,几千张图片,马上生成完成。 3、表情管理:支持表情的添加、删除、修改,移动,导入、导出表情库等,修改完后自动删除需要更新的页面缓存图,及程序程序无关的文件等。 4、聊天记录:使用串行化数据技术,将聊天记录生成到Log.dat文件中,可分页浏览记录。 本程序本人精心制件,最近一段时间在弄一个即时通讯软件,程序马上完工,完工后立即上传,由于弄程序花了不少精力,出于私心暂时不公布了。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值