在J2ME中使用记录存储系统(RMS)存储信息
2008-08-14 10:28
344 查看
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
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
相关文章推荐
- J2ME中使用记录存储系统(RMS)存储信息
- 在J2ME中使用记录存储系统(RMS)存储信息
- J2ME中使用记录存储系统(RMS)存储信息
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- J2ME手机移动通讯开发记录存储管理系统的例子
- 浪潮存储系统使用记录
- RMS记录管理系统,J2ME
- 使用StatFs用于获取系统/sdcard存储空间信息 api18中增加的方法
- 使用Log4Net将系统日志信息记录到记事本和数据库中
- 学生信息管理系统V0.2(使用文件存储数据)【MVC模式、DAO模式、Factory模式】
- 使用log4j将不同类型的日志信息记录到不同的文件中
- Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息
- 使用系统存储过程实现的通用分页存储过程
- 使用Application_Error事件处理程序把异常记录到系统事件日志
- 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200
- 获取系统运行进程信息——PSAPI介绍使用 .
- 使用keyChain存储用户敏感信息
- vc6轮询mysql,检查信息过期,使用系统线程池,可慢,求高人指点
- 业务审批过程分析与使用Sbo系统存储过程实现业务审批流程状态检索
- 20135328信息安全系统设计基础第七周学习总结(存储设备)