0

ダイナミック テキスト フィールドを作成し、autoSize を true に設定して、必要に応じて高さを大きくできるようにしました。次に、_height 値を使用してコンテナー グラフィック (吹き出し) のサイズを変更します。

(簡略化された)コードは次のとおりです。

var format:TextFormat = new TextFormat("Arial", 14);
format.color = 0x000000;
format.letterSpacing = -0.2;

var txt:TextField = _root.createTextField("dialog_txt", 150, 10, 10, 150, 0);
txt.multiline = true;
txt.wordWrap = true;
txt.autoSize = 'left';
txt.embedFonts = true;
txt.selectable = false;
txt.text = value;
txt.setTextFormat(format);

次に、コンテナの高さをテキストフィールドの高さ + 5 に設定しようとしましたが、短すぎます。

container._height = txt._height + 5;

trace(txt._height)トレース値が小さすぎる場合でも、前に追加すると、値が正しく表示されることがわかりました。txt._height を一時変数 ( var junk=txt._height;) に割り当てるだけでも問題は解決します。それをいくつかのトレース関数に置き換えます。

trace(txt._height); //Note: No code between these two calls
trace(txt._height);

戻り値の19.6直後に35.2. 読むtxt._heightと再計算するようなものなので、2回目は正しいです。

アクセスtextHeight後に再計算されるように見えるプロパティも試しました。_heightたとえば、このシーケンスは次のとおりです。

trace(txt.textHeight); // Returns 15
trace(txt.textHeight); // Returns 15
trace(txt._height);    // Returns 19.6
trace(txt.textHeight); // Returns 31
trace(txt._height);    // Returns 35.2

これは AS 2 にあり、MTASCによってコンパイルされています。

ここで何が起こっているかについてのアイデアはありますか?

4

2 に答える 2

0

heightプロパティの代わりにプロパティを使用してみてください_height

于 2011-05-06T21:08:04.710 に答える
0

まず、AS2 を使用していることを明確にする必要があります。Flash 8 またはそれらの線に沿って何かを実行していることを意味すると思います (AS3 は .height を使用し、AS2 は ._height を使用します)。

発生する可能性があるのは、計算が新しいフレームでのみ発生することです。setTimeout() のようなものを使用してサイズ変更コードを後で呼び出したり、dispatchEvent を使用してサイズ変更を実行したりしましたか?

私の経験から、 autosize はうまくいきませんでした。Textfield を拡張するクラスを作成し、スーパーを呼び出す独自のテキスト関数を作成してから、textfield の高さを _textHeight に拡張する方がはるかに優れています。この値は、オートサイズをオフにして初めて正しいはずです。

于 2011-05-06T22:01:35.470 に答える