|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2007
Сообщений: 44
|
TextFormat.getTextExtent работает неверно
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,784
|
Вообше говоря, autoSize автоматом такие вещи делает.
А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs). Последний раз редактировалось etc; 26.07.2007 в 12:49. |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
кстати autoSize не со всеми фонтами верно работает.
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Например?
|
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
//Сделано на скорую руку и покорявому =) //на сцене: 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,784
|
В приведенном коде autoSize отсутствует.
|
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
чёрт возьми =) точно...извиняюсь за невнимательность =)
|
|
|||||
Регистрация: Jul 2007
Сообщений: 44
|
Цитата:
Попробовал найти иное решение: пробежался по всей строке, и складывал в одну переменную все значения metrics.width, взятые от каждой буквы. Теперь работает пиксель в пиксель. Хотя решение наверное не самое красивое. Видимо то, что выдаёт getTextExtent() - это какое-то теоретическое значение, может он считает все буквы одинакового размера. В общем по логике вещей разницы быть не должно, взять getTextExtent() от всей строки, или пройтись по каждой буквы. Но она есть. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
А у меня работает. В AS3 он, кстати, убран.
И, похоже, правильно это работает только для не-embed шрифтов. Последний раз редактировалось etc; 26.07.2007 в 14:07. |
|
|||||
Регистрация: Jul 2007
Сообщений: 44
|
Может ты проверял на короткой строчке... В общем у меня строка в линию, там несколько десятков тыщ символов (там типа символы нуклеотидов ДНК), вот на ней разница видна конкретно... По несколько сотен символов не влазит.
На котротких у меня тоже работает, разницы не видно. Может у мну руки не оттуда. Но я просто сравнил численно getTextExtent().width от строки, и сумма по всем getTextExtent().width от каждого символа - числа разные, клянусь. |
Часовой пояс GMT +4, время: 15:47. |
|
« Предыдущая тема | Следующая тема » |
|
|