2012-03-07 1 views
4

TextFieldのテキストの正確な境界を表すRectangleを取得しようとしています。できるだけ正確なAS3:テキストフィールドのテキストの左上と正確な幅と高さを取得するにはどうすればよいですか?

** *

はこのイメージください:。私の現在の知識を使用して

enter image description here

を、私はそうのように上記ブルー四角形を取得することができます。

var textRect:Rectangle = new Rectangle(
    field.x, 
    field.y, 
    field.textWidth, 
    field.textHeight 
); 

しかし、できるだけ近くに取得する必要があります長方形(文字は/高さが変わって共通の地面が必要なため、多少の違いがあることに気づきます)。

どのように赤い矩形を(動的に)取得できますか?

私は色私の小さな部分を埋める場合でも

package 
{ 
    import flash.display.BitmapData; 
    import flash.text.TextField; 
    import flash.geom.Rectangle; 

    public class TextBounds 
    { 

     public static function getTextBounds(textField:TextField):Rectangle 
     { 
      var curtainColor:uint = 0x00FF00; 
      var bmd:BitmapData = new BitmapData(textField.width, textField.height, false, curtainColor); 
      bmd.draw(textField); 

      return bmd.getColorBoundsRect(curtainColor, textField.textColor, true); 
     } 

    } 
} 

...しかし、私はいつも(x=0, y=0, w=0, h=0)の結果を取得し、ジェイコブエッガースにより、下記の回答に基づいて、このヘルパークラスを設定


完璧であることを行っていないが、

bmd.fillRect(new Rectangle(0, 0, 30, 30), textField.textColor); 
+0

あなたは見ましたか? :http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html#getCharBoundaries() – OXMO456

+0

@MartyWallace、Jacob Eggersによって下に掲載されたソリューションが投稿された質問を解決しない場合これは誤解を招くので、質問の答えとしてマークを外してください。 –

答えて

5

利用のBitmapData.draw、その後、黒のテキストの境界を取得するにはgetColorBoundsRectを使用しています。このような 何か:

import flash.display.Bitmap; 
import flash.display.BitmapData; 

var bmd:BitmapData = new BitmapData(80, 40, false, 0xFFFFFF); 
bmd.draw(tf) 

var maskColor:uint = 0xFFFFFF; 
var color:uint = 0x000000; //the color of the text 
var tfBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, true); 
trace(tfBounds); 

エディットテキストの色について良いキャッチzachzurn。明確にするためにコメントを追加しました。

+1

これは非常に巧妙な解決策です。 – redhotvengeance

+0

私はこれを試してみましたが、私は常にサイズ0の四角形を得ています。私の質問の更新に自分のコードを掲載しました。私はまた、生成されたBitmapDataのBitmap表現をステージに追加し、予想通りに見えます(テキストが緑色のブロック)。 – Marty

+0

あなたの新しい質問に私はこれに対する解決策を投稿しました。 –

1

はこれを試してみてください:私はまだゼロサイズの長方形を得るために探してい

var textRect:Rectangle = field.getBounds(field.parent); 

か(たとえばあなたが試すことができますがあります)、これを試してみてください。

http://blog.stroep.nl/2009/11/getbitmapbounds/

+0

'getBounds()'は、TextFieldの全体を表すRectangleを返します(上記の青い矩形よりもさらに大きくても)。 – Marty