Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Точный размер текста в текстфилде (http://www.flasher.ru/forum/showthread.php?t=111099)

alekslitvinenk 16.04.2008 00:08

Точный размер текста в текстфилде
 
Неожиданно столкнулся с проблемой, когда textWidth и textHeight текстового поля возвращают недостоверные результаты. Для одних шрифтов погрешности почти нет, а для других она весьма значительна. С погрешностью textWidth я уже почти смрился, но вот узнать точный размер textHeight хоть убейте - надо...
Использование LineMetrics тоже к получению достоверных данных не привели.
Есть ли у кого-нибудь идея как получить более менее правдивые данные о textHeight ?

Pecher 16.04.2008 10:10

Если совсем ниче не поможет, а скорость не очень важна - переводи текст на BitmapData и ищи снизу первую строку, где есть хоть одна точка :)

alekslitvinenk 16.04.2008 10:22

Спасибо за совет.
Но дело в том, что скорость как раз-таки и важна, так как все это должно висеть на Event.CHANGE...

etc 16.04.2008 10:53

Размер глифов или все таки текста с полями?

alekslitvinenk 16.04.2008 11:05

Вобщем, есть текстовое поле его должна окружать рамка с маркерами для ресайзинга...
Проблема в том, что я не могу точно посчитать высоту рамки каждый раз когда добавляеться/удаляется новая строка текста...

Pecher 16.04.2008 13:18

Не берусь судить, но возможно скорости работы с битмапдата хватит для этой задачи...

P.S. Можно ещё поставить
Код:

autosize = true
для многострочного текстового поля. Тогда, наверное, будет браться height.

ulik 16.04.2008 13:18

alekslitvinenk >> а так чем вам не нравится?

Код:

import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.Sprite;
import flash.geom.Rectangle;

var format:TextFormat=new TextFormat();
format.font="любой_шрифт";
format.size=20;

var tf:TextField=new TextField();
tf.defaultTextFormat=format;
tf.autoSize=TextFieldAutoSize.LEFT;
tf.htmlText="Hello world!";
addChild(tf);

var bound:Rectangle = tf.getCharBoundaries(0); // скажем, для 1-ой
var sp:Sprite=new Sprite();
sp.graphics.lineStyle(1,0xdd0000);
sp.graphics.moveTo(bound.x, bound.y);
sp.graphics.lineTo(bound.x+bound.width,bound.y);
sp.graphics.lineTo(bound.x+bound.width,bound.y+bound.height);
sp.graphics.lineTo(bound.x,bound.y+bound.height);
sp.graphics.lineTo(bound.x, bound.y);
addChild(sp);

Цитата:

Вобщем, есть текстовое поле его должна окружать рамка с маркерами для ресайзинга...
О: А, чем вас не устраивает TextFieldAutoSize?
Цитата:

...переводи текст на BitmapData...
О: Психи, ей богу :)))

Pecher 16.04.2008 13:29

Цитата:

Психи, ей богу ))
Ты наверно не прочитал, что это предложение - на крайний случай. Глаза раскрой.

alekslitvinenk 16.04.2008 13:31

Цитата:

О: А, чем вас не устраивает TextFieldAutoSize?
Это не я так решил, это заказчику нужна возможность ресайзить текстовое поле с помощью маркеров...Причем, там куча ограничений: когда текстовое поле должно автоматически расти по ширине, а когда нет...
Если выставить autoSize, то слишком много вещей окажется сломано...

etc 16.04.2008 13:41

Цитата:

Сообщение от Pecher
Глаза раскрой.

Не переходите на личности.


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

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