PDA

Просмотр полной версии : динамически скомпоновать текст


DrZubr
16.06.2005, 19:14
Добрый день, уважаемые.
Обращаюсь к вам с такой проблемой. Сам я к флэшу не имею никакого отношения, но понадобилось сделать такую вещь. Буду очень благодарен если укажете в каких направлениях нужно копать.

Задача такова: флэшке через FlashVars передается 2 параметра (текст) и эти два текста нужно скомпоновать следующим образом:
-----------
| текст 1 |
-----------
| текст 2 |
-----------

Нашел что это можно сделать примерно так:
_root.createTextField("mytext",1,10,10,300,100);
mytext.multiline = true;
mytext.wordWrap = true;
mytext.border = false;
mytext.text = "my text here";

Как я понимаю, что возможно расположить текстовые блоки только по абсолютным координатам. Отсюда вопрос:

1. Как можно грамотно определить координаты для второго блока? (то есть нужно чтобы для данного шрифта произвелся рендеринг первого блока и можно было узнать сколько реально занял этот текстовый блок по высоте)

2. Может есть какие другие способы компоновки динамического текста? (может что-нибудь наподобие LayoutManager'ов Java?)

3. Как для заданного шрифта узнать сколько будет занимать заданная строка по ширине?

Nirth
16.06.2005, 19:19
ммм... как насчет свойства autoSize=true, сначала вставить текст в первый блок, после чего он автоматом поправиться, а потом уже позиционировать второй.

DrZubr
16.06.2005, 19:26
так вот проблема то именно в том, куда позиционировать второй?

iNils
16.06.2005, 19:29
TextField2._y = TextField1._height + TextField1._y

DrZubr
16.06.2005, 19:35
TextField2._y = TextField1._height + TextField1._y

Да, супер! Огромное спасибо, а я почему-то не подумал, что это свойство может отражать реальную высоту, а не ту которая указывалась в конструкторе...

А по поводу вопроса №3?

Nirth
16.06.2005, 19:44
TextFormat.getTextExtent() (http://www.novemberain.com/livedocs/Help/ActionScriptLangRef/00001840.html)
Кстати на этом форуме считаеться хорошим тоном читать хелп =)

iNils
16.06.2005, 19:50
TextFormat.getTextExtent() (http://www.novemberain.com/livedocs/Help/ActionScriptLangRef/00001840.html)

Это если ты хочешь заранее знать, и то не точно считает. А если текст уже задан, то реальные размеры можно узнать с помощью:
TextField.textHeight
TextField.textWidth

DrZubr
16.06.2005, 19:54
TextFormat.getTextExtent() (http://www.novemberain.com/livedocs/Help/ActionScriptLangRef/00001840.html)
Кстати на этом форуме считаеться хорошим тоном читать хелп =)
И вам огромное спасибо, уважаемый.
Это на всех форумах считается хорошим тоном. Но к сожалению за полдня это нереально поднять тучу толковых доков, разобраться в абсолютно незнакомой технологии и найти что нужно...

Nirth
16.06.2005, 20:06
на всякий случай, на будущее выложу код, чтоб понятно было

function createText(name:String):TextField {
this.createTextField(name,this.getNextHighestDepth(),0,0,0,0);
this[name].autoSize=this[name].border = true;
return this[name];
}
var text1_str:String = "boo \nboooo \nbobo";
var text2_str:String = "baba \nbubu \nbibuba";
createText("text1_txt");
this.text1_txt.text=text1_str;
createText("text2_txt");
text2_txt._y = this.text1_txt._x+this.text1_txt._height;
text2_txt.text=text2_str;