Форум 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=157731)

XBEEN 09.06.2011 20:22

Многоточие в текстовом поле
 
Доброго времени суток. Подскажите плз. Есть такая задача обрезать текст в текстовом поле с использованием "..." в конце текста. В какую сторону необходимо рыть, чтобы определить вмещается ли текст в текстовое поле и на каком символе осуществлять обрезку с добавлением многоточия?
Обрезанный текст вместе с "..." должен вместится в рамках фиксированной ширины текстового поля.

Jewelz 09.06.2011 20:26

поле многострочное?

in4core 09.06.2011 20:34

видимо нет. Ну задача то простая. используем maxChars ( или как оно там ) чтобы вернуть маквимальное кол-во символов. Далее если длинна текста > maxChars - 3 , делаем обрезку и добавление .
Код:

tf.text = str.slice ( 0, длинна )  , tf.appendText('...');

Wolsh 09.06.2011 21:40

in4core, то есть если длина текста будет на два символа короче чем maxChars, Вы обрежете и поставите эллипсис?

udaaff 09.06.2011 22:34

Если maxScrollH > 0, текст вылазит за рамки.

XBEEN 09.06.2011 23:20

Цитата:

Сообщение от in4core (Сообщение 1002485)
видимо нет. Ну задача то простая. используем maxChars ( или как оно там ) чтобы вернуть маквимальное кол-во символов. Далее если длинна текста > maxChars - 3 , делаем обрезку и добавление .
Код:

tf.text = str.slice ( 0, длинна )  , tf.appendText('...');

Неплохое решение. Спасибо. Однако как узнать сколько максимально символов в текстовом поле должно быть, если максимальная ширина данного поля допустим 300 пикселей?

Добавлено через 45 секунд
Цитата:

Сообщение от udaaff (Сообщение 1002520)
Если maxScrollH > 0, текст вылазит за рамки.

А как определить на каком символе выходит за рамки?

Котяра 09.06.2011 23:49

не все шрифты моноширинные

udaaff 09.06.2011 23:51

Цитата:

А как определить на каком символе выходит за рамки?
Как вариант, сокращать посимвольно, прибавляя три точки, до тех пор пока не влезет полностью.

XBEEN 10.06.2011 00:05

Цитата:

Сообщение от udaaff (Сообщение 1002535)
Как вариант, сокращать посимвольно, прибавляя три точки, до тех пор пока не влезет полностью.

Не лучший вариант. Неоправданная нагрузка для такой задачи.

udaaff 10.06.2011 00:10

Если логически рассудить, то длину на немоноширном шрифте никак не рассчитать. Поэтому других вариантов не вижу.

XBEEN 10.06.2011 00:11

Пробывал заюзать метод getCharIndexAtPoint(x:Number, y:Number):int, но как-то не очень получается. Если б как-то вычислить реальную точку на срезе.

Wolsh 10.06.2011 00:17

Есть же getCharIndexAtPoint ()
опоздал)))

Добавлено через 5 минут
Код AS3:

function ellipsis():void
{
    _txt.text = _text;
    if (_txt.textWidth > (_txt.width - 4))
    {
        var lastVisual:int = _txt.getCharIndexAtPoint(_txt.width-4, 5);
        _txt.text = _text.substr(0, lastVisual - 3) + "...";
    }
}


XBEEN 10.06.2011 00:30

Цитата:

Сообщение от Wolsh (Сообщение 1002547)
Есть же getCharIndexAtPoint ()
опоздал)))

Добавлено через 5 минут
Код AS3:

function ellipsis():void
{
    _txt.text = _text;
    if (_txt.textWidth > (_txt.width - 4))
    {
        var lastVisual:int = _txt.getCharIndexAtPoint(_txt.width-4, 5);
        _txt.text = _text.substr(0, lastVisual - 3) + "...";
    }
}


Надо попробывать, но с первого раза не получилось getCharIndexAtPoint возвращал -1. Интересно аргументы x и y относительно родителя нужно указывать, т.е. с учетом текущих координат текстового поля?

Wolsh 10.06.2011 00:33

Код AS3:

var lastVisual:int = _txt.getCharIndexAtPoint(_txt.x + _txt.width-4, _txt.y + 5);


rs7 10.06.2011 23:23

Цитата:

Сообщение от udaaff (Сообщение 1002544)
Если логически рассудить, то длину на немоноширном шрифте никак не рассчитать. Поэтому других вариантов не вижу.

Как это не рассчитать?)

Класс TextField, метод getCharBoundaries
Код AS3:

getCharBoundaries(charIndex:int):Rectangle
//Возвращает прямоугольник, который является ограничительным блоком символа.



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

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