【问题标题】:How do I get formatted text in flash?如何在 Flash 中获取格式化文本?
【发布时间】:2010-01-31 06:07:24
【问题描述】:

setTextFormat 来格式化文本很简单。但是是否有任何有效的方法来检索对文本所做的所有样式? getTextFormat 是已知的,但它不适用于格式不同的文本。有什么想法吗?

【问题讨论】:

  • 你想写一个富文本编辑器还是只获取格式化文本?编写 rte 是一件复杂的事情,获取格式化文本就像从文本字段中读取 htmlText 一样简单。
  • 如果有人感兴趣,这里有一些事情:snipplr.com/view/24558/basic-rich-text-editor-in-flash
  • 好的,为了不混淆任何人,我已经编辑了问题的标题(尽管在问题的描述中都很清楚;或者描述不包括这些天?)。
  • @Amarghosh:嗯,可以不用html吗?
  • 其实我想把文本内容和格式化分开保存。阅读 htmlText 对此无济于事。我只是希望有办法......

标签: flash


【解决方案1】:

至少可以这么说,这是很多工作。

我推荐一个现有的富文本编辑器,您可以将其插入到您的解决方案中,例如 obedit : http://www.oblius.com/projects/obedit/ (donationware)

编辑:

好的,作为对您的评论的回应,您通过实现样式文本标准(例如 text/enriched MIME 内容类型 (https://www.rfc-editor.org/rfc/rfc1896) 或更可能的 Rich Text Format (http://msdn.microsoft.com/en-us/library/aa140277(office.10).aspx) 来编写富文本编辑器)。您也可以使用 HTML 或创建自己的语法。

假设用户键入The quick brown fox jumps over the lazy dog. 用户突出显示“快速”并单击粗体按钮(您提供),突出显示狐狸并将前景更改为红色(使用您提供的颜色选择器)。从视图中隐藏,您将数据字段的值更改为 The \bquick\b brown \{color:red}fox\{\color} jumps over the lazy dog.

现在用户突出显示整行并将其设置为绿色。您将隐藏值更改为 \{color:green}The \bquick\b brown fox jumps over the lazy dog.\{color} 请注意,您必须解析该行以识别和删除冲突的颜色标记。如果用户想要撤消该更改怎么办?你用红狐保存过版本吗?当用户在行尾输入新文本时,你认为插入符号在绿色标签之内还是之外?

当您重新加载该值时,您必须再次解析该行,然后将所有格式转换为 Flash 可以显示的内容,从而去除标签。

重新发明轮子并不好玩。

【讨论】:

  • 如果我想使用现有的富文本编辑器,我会有一个关于如何获得的问题。但是我确实问过如何编写富文本编辑器,也就是说,我有一个关于如何编写代码的问题。特别是,我对一件事感兴趣:如何检索对文本所做的所有样式?
  • 请闭嘴,重新发明轮子。
  • @Ruman 您的问题的措辞(在您编辑之前)具有误导性 - 看起来您想使用 flash 创建一个 RichTextEditor 控件(如 gedit 或写字板) - 而 Jay 正试图回答那个。他正在努力帮助你;如果你不能感谢他或对他好,请忽略他而不是粗鲁。
  • 即使我想创建一个富文本编辑器(顺便说一句,我正在这样做),我确实想创建一个但不想使用现有的。这很重要!无话可说,除了重新发明轮子,什么都不要说,因为无论如何也没有任何帮助。
  • 完成后一定要向我们提供一个指向您的富文本编辑器的链接。
【解决方案2】:

正如你所说,getTextFormat(beginIndex:int = -1, endIndex:int = -1) 只返回一个 TextFormat 对象,其中填充了指定文本范围的格式信息(只有指定的整个文本共有的属性才会在结果 TextFormat 对象中设置)。

如果要全文的格式信息,请在调用setTextFormat后读取TextFieldhtmlText属性。它包含文本字段内容的 HTML 表示。

var str:String = "The quick brown fox jumps over the lazy dog\n";
var tf:TextField = new TextField();
tf.multiline = true;
tf.text = str + str + str;
var f:TextFormat = new TextFormat("Arial", 15, 0xFF0000, true, false, 
    true, null, null, TextFormatAlign.CENTER);
tf.setTextFormat(f, 0, str.length);
f = new TextFormat("Courier New", 12, 0x00FF00, false, false, 
    false, "http://www.google.com", null, TextFormatAlign.LEFT);
tf.setTextFormat(f, str.length, 2 * str.length);
f = new TextFormat("Times New Roman", 12, 0x0000FF, false, true, 
    true, null, null, TextFormatAlign.RIGHT);
tf.setTextFormat(f, 2 * str.length, str.length * 3);
tf.width = 400;
tf.height = 300
addChild(tf);
trace(tf.htmlText);

输出是:

<P ALIGN="CENTER">
    <FONT FACE="Arial" SIZE="15" COLOR="#FF0000" LETTERSPACING="0" KERNING="0">
        <B>
            <U>The quick brown fox jumps over the lazy dog</U>
        </B>
    </FONT>
</P>
<P ALIGN="LEFT">
    <FONT FACE="Courier New" SIZE="12" COLOR="#00FF00" LETTERSPACING="0" KERNING="0">
        <A HREF="http://www.google.com" TARGET="">The quick brown fox jumps over the lazy dog</A>
    </FONT>
</P>
<P ALIGN="RIGHT">
    <FONT FACE="Times New Roman" SIZE="12" COLOR="#0000FF" LETTERSPACING="0" KERNING="0">
        <I>
            <U>The quick brown fox jumps over the lazy dog</U>
        </I>
    </FONT>
</P>

【讨论】:

  • 是的,感谢您提供的信息,但是如果想将格式与文本分开,有什么办法吗?
  • 如果文本的格式不同,如何将其与文本分开?如果一行的前两个单词是粗体,后两个是正常的,那么该行是粗体还是正常?
  • 哈哈,是的,我只是觉得 Flash 功能强大到可以完成它。 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多