![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 44
|
var newstyle:TextFormat = new TextFormat(); newstyle.bold = true; newstyle.color = 0x990000; newstyle.font = "Courier New"; newstyle.size = this.__font_sizes[fs]; var metrics:Object = newstyle.getTextExtent(CodeText.text); CodeText.setTextFormat(newstyle); // CodeText:TextField CodeText._width = metrics.width+4; // 2 gutters, every is 2 pixels CodeText._height = metrics.height+4; // same |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Вообше говоря, autoSize автоматом такие вещи делает.
А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs). Последний раз редактировалось etc; 26.07.2007 в 12:49. |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
кстати autoSize не со всеми фонтами верно работает.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Например?
|
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
//Сделано на скорую руку и покорявому =)
//на сцене: sendBtn - кнопка
// input - текстовое поле
i = 1;
textY = 0;
lineHeight = input.textHeight;
sendBtn.onRelease = function(){
createText();
}
function createText(){
this.createTextField("m"+i, i, 0, textY, input.textWidth, lineHeight);
createField();
this["m"+i].text = input.text;
input.text = "";
textY += lineHeight;
i++;
}
function createField(){
this["m"+i].type = "dynamic"
this["m"+i].border = true;
this["m"+i].multiline = true;
this["m"+i].color = 0x000000;
}
Последний раз редактировалось CrazyFlasher; 26.07.2007 в 13:50. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
В приведенном коде autoSize отсутствует.
|
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
чёрт возьми =) точно...извиняюсь за невнимательность =)
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 44
|
Цитата:
Попробовал найти иное решение: пробежался по всей строке, и складывал в одну переменную все значения metrics.width, взятые от каждой буквы. Теперь работает пиксель в пиксель. Хотя решение наверное не самое красивое. Видимо то, что выдаёт getTextExtent() - это какое-то теоретическое значение, может он считает все буквы одинакового размера. В общем по логике вещей разницы быть не должно, взять getTextExtent() от всей строки, или пройтись по каждой буквы. Но она есть. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А у меня работает. В AS3 он, кстати, убран.
И, похоже, правильно это работает только для не-embed шрифтов. Последний раз редактировалось etc; 26.07.2007 в 14:07. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 44
|
Может ты проверял на короткой строчке... В общем у меня строка в линию, там несколько десятков тыщ символов (там типа символы нуклеотидов ДНК), вот на ней разница видна конкретно... По несколько сотен символов не влазит.
На котротких у меня тоже работает, разницы не видно. Может у мну руки не оттуда. Но я просто сравнил численно getTextExtent().width от строки, и сумма по всем getTextExtent().width от каждого символа - числа разные, клянусь. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|