2011-01-03 8 views
0

フォーマットを削除せずに複数のtextformatsを持つテキストフィールド(改行を含む)から最後の文字を削除したいという問題があります。textformatを破棄せずにテキストフィールドから最後の文字を削除する

これまでのところ、私が持っている:私は、これは改行を削除し、非常に遅いですしない

textfield.replaceText(textField.length-1,textField.length-1,''); 

と思い、私のtextformatsを破壊するようです。

か:

textfield.text = textfield.text.slice(0,-1); 

これは高速ですが、同様にすべてのtextformatsを削除します。

+0

Woa、 – eldamar

答えて

1

それは少し面倒ですが、あなたはスタイルシートを使用してテキストの書式設定されていない場合でも、テキストフィールドのhtmlText -propertyを使用することができますFlashがすべての書式設定情報を変換します

textField.text = "A test."; 
trace (textField.htmlText); 

が実際に返されます:HTMLテキストに内部的に、あなたはtextField.text設定しそうにもかかわらず、あなたはまだで動作するように、XML形式のテキストを取得することができます

<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">A test.</FONT></P> 

setTextFormat()を使用して行った変更を反映したテキストは、常に<FONT>タグ内に表示されます。したがって、この行に含まれているXMLを繰り返し処理し、最後のTextNodeの最後の文字だけを取り除くことができます。

private function removeLastCharacter (textField:TextField) : void { 
    var xml:XML = new XML (textField.htmlText); 
    for (var i : int = xml.children().length()-1; i >= 0; i--){ 
     var node:XML = xml.children()[i]; 
     if (node.name() == "FONT") { 
      var tx:String = node.text()[0].toString(); 
      node.setChildren (tx.substr (0, tx.length-1)); 
      break; 
     } 
    } 
    textField.htmlText = xml; 
    trace (textField.text); // In the above example, output will be: "A test"; 
} 
+0

これは本当にうまくいくかもしれません、私はそれが本当に私の問題thoのために遅くなるだろうと思う。私はそれがオーバーフローしないようにテキストフィールドの中にテキストを入れる必要があります。現在の解決策は、テキストフィールドがそのコンテナよりも大きい間に最後の文字を削除することです。マビはこれを別のやり方で乗り越えることができます。今テキストファイルクラスのフォントサイズの制限が127になっている新しい問題に直面していて、TLFに切り替えなければならないかもしれません。これは本当の悪夢であることが判明しています... – eldamar

+0

それは非常に遅くなることはありません。とにかく、XML変換はFlashによって行われます。 TextFieldを拡大縮小することでサイズ制限を回避することができます。たとえば、128のフォントサイズは、スケール2でフォントサイズ:64になります。すべてのフォントサイズに倍率を掛けるために同じ解析メカニズムを使用できます。 127より小さいも同じように見えるでしょう。 – weltraumpirat

+0

申し訳ありませんが、私はちょうどあなたのコメントを読んだ...なぜあなたはgetCharIndexAtPointを使用しないでください? – weltraumpirat

1

私はあなたの問題を正しく理解してくれることを願っています。書式設定をhtmlTextにしておくと、解決策が1つあります。

考えられるのは、書式設定されたテキストをXML形式で保持し、XMLを変更することです。 XMLは書式設定をそのまま維持しますが、文字列を維持するために文字列を使用する必要はありません。欠点はもちろん、書式設定XMLを有効にしなければならないことと、余分な変数です。ここで

は例です:

var tf:TextField = new TextField(); 
var t:XML = new XML("<html><p>lalala</p><font color='#ff0000'> lol</font></html>"); 
tf.htmlText = t.toXMLString(); 
t.font[0] = t.font[0].text().slice(0, -1); 
tf.htmlText = t.toXMLString(); 
addChild(tf); 
+0

これはありがたいですが、私はこのプロジェクトにhtmlTextを使用していません。これは私のかなり大きなプロジェクトに大きな書き換えを意味すると思います。テキストフィールド内のすべてのテキスト形式を完全に削除せずに、テキスト文字列の最後にある文字(または改行)を削除できるように、単純な解決策を探しています。 – eldamar

+0

複数のテキストスニペットを表示して、複数のテキストフォーマットを設定する方法を確認できますか? – Roy

+0

ここに投稿するのはちょっと複雑ですが、パラグラフ用のハンドルクラス、拡張テキストフィールドクラス、バッチコードがXMLに含まれています。基本的に私はxmlからテキストフィールドのための私のフォーマットを取得し、フォント、サイズ、先導、色(cmyk、rgb、pmsなどの複数の色のサポート)を変更するためのcontrollsの束を持っています。私は設定を保存するためにxmlにtextformatクラスを翻訳します。私は同じ方法を使用して "段落スタイル"を保存し、さらに動的になります。これを短くして、プリント専用の単語のようなアプリケーションにします。 – eldamar

関連する問題