PDA

Просмотр полной версии : Построчный TextFormat


Idalgo
20.05.2008, 20:22
Есть многострочный TextField, динамический или поле ввода - неважно.
Если задавать ему формат построчно (например шрифт и размер), то общий формат будет содержать шрифт и размер равные null, даже если построчно устанавливались одни и те же значения.

Вот тестовый пример:
inpText.text = ''
for(var i=0; i<10; i++) {
inpText.text += i+'\r'
}
for(var i=0; i<10; i++) {
var tf = new TextFormat()
tf.size = 20
tf.font = 'Arial'
inpText.setTextFormat(i*2,i*2+2,tf)
var ttt = inpText.getTextFormat(i*2,i*2+2)
trace(ttt.font+" : "+ttt.size)
}
var ttt = inpText.getTextFormat()
trace('==============')
trace(ttt.font+" : "+ttt.size)
Почему так?

В общем случае размер и название шрифта могут быть разные для разных строк. Хотелось бы получить в результате название шрифта и размер его, если таковые совпадут во всех строках.

iNils
20.05.2008, 20:26
У меня в трейсе все в порядке:
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20
Arial : 20

Idalgo
20.05.2008, 20:30
А что выводит в итоге под '==============', если заранее установить для поля любой шрифт и размер, кроме Arial : 20 ?

iNils
20.05.2008, 20:56
Было "Myriad Pro : 14"
Стало "Arial : 20"

Idalgo
20.05.2008, 21:10
Хм... да, действительно получается.
Но! Если сделать так:
inpText.text = ''
for(var i=0; i<10; i++) {
inpText.text += i+'\r'
}
for(var i=0; i<10; i++) {
var tf = new TextFormat()
tf.size = (i+1)*8 // <----- разный размер
tf.font = 'Arial'
inpText.setTextFormat(i*2,i*2+2,tf)
var ttt = inpText.getTextFormat(i*2,i*2+2)
trace(ttt.font+" : "+ttt.size)
}
var ttt = inpText.getTextFormat()
trace('==============')
trace(ttt.font+" : "+ttt.size)
...то в результате получаем null : null
хотя по идее должно быть Arial : null

(или я опять что-то напутал?)

iNils
20.05.2008, 21:14
Добавил две строчки.
inpText.text = '';
inpText.html = true;
for (var i = 0; i < 10; i++) {
inpText.text += i + '\r';
}
for (var i = 0; i < 10; i++) {
var tf = new TextFormat ();
tf.size = i;
// <----- разный размер
tf.font = 'Arial';
inpText.setTextFormat (i * 2, i * 2 + 2, tf);
var ttt = inpText.getTextFormat (i * 2, i * 2 + 2);
trace (ttt.font + " : " + ttt.size);
}
var ttt = inpText.getTextFormat ();
trace ('==============');
trace (ttt.font + " : " + ttt.size);
trace (inpText.htmlText);А теперь посмотрите на бардак (результат) в трейсе.

Idalgo
20.05.2008, 23:53
Почему бардак? Вполне ожидаемая разметка.
Но только мне html не нужен в данном случае.
Или без html никак не обойтись?

iNils
21.05.2008, 00:26
А вы думаете TextFormat сам по себе работает? Нет, это просто другой способ форматирования, но работает он через те же html теги. И включив html я вам показал реальную картину, а не голый текст.

Idalgo
21.05.2008, 00:57
По крайней мере пришли к выводу, что так как мне нужно - не работает :(
Спасибо, iNils
Буду придумывать по-другому.