Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   TextFormat.getTextExtent работает неверно (http://www.flasher.ru/forum/showthread.php?t=99001)

romantique 26.07.2007 11:56

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

Текст не влазит в TextField. Почему?

etc 26.07.2007 12:46

Вообше говоря, autoSize автоматом такие вещи делает.

А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs).

CrazyFlasher 26.07.2007 12:58

кстати autoSize не со всеми фонтами верно работает.

etc 26.07.2007 13:07

Например?

CrazyFlasher 26.07.2007 13:47

Код:

//Сделано на скорую руку и покорявому =)
//на сцене: 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;
}

к примеру, здесь не верно работает. по крайней мере у меня. шрифт на инпуте стоит "Times New Roman"

etc 26.07.2007 13:53

В приведенном коде autoSize отсутствует.

CrazyFlasher 26.07.2007 13:55

чёрт возьми =) точно...извиняюсь за невнимательность =)

romantique 26.07.2007 13:56

Цитата:

Сообщение от __etc
Вообше говоря, autoSize автоматом такие вещи делает.

А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs).

Не работает даже при явном указании размера.
Код:

newstyle.size = 12;
Попробовал найти иное решение:

пробежался по всей строке, и складывал в одну переменную все значения metrics.width, взятые от каждой буквы. Теперь работает пиксель в пиксель. Хотя решение наверное не самое красивое. Видимо то, что выдаёт getTextExtent() - это какое-то теоретическое значение, может он считает все буквы одинакового размера. В общем по логике вещей разницы быть не должно, взять getTextExtent() от всей строки, или пройтись по каждой буквы. Но она есть.

etc 26.07.2007 14:04

А у меня работает. В AS3 он, кстати, убран.
И, похоже, правильно это работает только для не-embed шрифтов.

romantique 26.07.2007 14:09

Может ты проверял на короткой строчке... В общем у меня строка в линию, там несколько десятков тыщ символов (там типа символы нуклеотидов ДНК), вот на ней разница видна конкретно... По несколько сотен символов не влазит.
На котротких у меня тоже работает, разницы не видно.

Может у мну руки не оттуда. Но я просто сравнил численно getTextExtent().width от строки, и сумма по всем getTextExtent().width от каждого символа - числа разные, клянусь.


Часовой пояс GMT +4, время: 06:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.