Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   mx:TextArea обрезает текст (http://www.flasher.ru/forum/showthread.php?t=192485)

GrMerlin 14.01.2013 21:11

mx:TextArea обрезает текст
 
При чем в s:TextArea текст не обрезается.
(Первый - spark, второй - mx).

http://www1.picturepush.com/photo/a/...g/11959724.png

Казалось бы: проблема решается тем, что можно использовать s:TextArea, но дело в том, что шрифты подгружаются c embed-as-cff=false рантаймно как swf.

В итого получается вопрос - два в одном:
1) как сделать чтоб mx:TextArea не обрезало текст?
или
2) можно ли в s:TextArea отображать шрифты с embed-as-cff=false?

Dukobpa3 15.01.2013 10:59

Можно попробовать для текстфилда просто отступы побольше поставить:
Код AS3:

paddingLeft="0"
paddingRight="0"

Че-то умнее сказать не смогу:)

GrMerlin 17.01.2013 12:29

Решение вроде-бы ничего. Я пробовал так делать. Написал наследника mx:TaxtArea, в нем поставил сэттеры на textOffset, в которых я делаю
Код AS1/AS2:

_textOffset = value;
setStyle("paddingLeft", value);
setStyle("paddingRight", value);

далее переопределил метод updateDisplayList
Код AS1/AS2:

override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void {
    super.updateDisplayList(unscaledWidth, unscaledHeight);
 
    var vm:EdgeMetrics = viewMetrics;
    textField.move(vm.left - _textOffset, vm.top);
    //increase viewMetrics width by textOffset*2
    var w:Number = unscaledWidth - vm.left - vm.right + _textOffset*2;
    var h:Number = unscaledHeight - vm.top - vm.bottom;
 
    // If there's a border, add another line of pixels to the textField
    // that go under the border but allow for descenders on some fonts.
    if (vm.top + vm.bottom > 0)
          h++;
 
    // maxScrollV doesnt get proper value if width < 4
    textField.setActualSize(Math.max(4, w), Math.max(4, h));
}

Еще нужно не забыть про
Код AS1/AS2:

textField.ignorePadding = false;


По большому счету этот метод на 90% дублирует метод updateDisplayList в mx:TextArea кроме маленькой особенности: двигается textField на величину паддинга для того, чтоб визуально начало строки было там где и положено ему быть.
В таком случае текст не обрезается, но фактически сам textField получается больше области, в которой отображается текст и в итоге кликабельная область становится шире. Хотелось бы, конечно, чтоб те клики, которые визуально попадают за граничу TextArea не ловились этим компонентом. Т.е. структура, типа:
Код AS1/AS2:

<s:Group>
    <s:BorderContainer/>
    <local:AdvancedTextArea/>
</s:Group>

s:BorderContainer ловил клики если пользователь кликнул рядом с текстом (но попал в зону паддинга).

Dukobpa3 17.01.2013 12:36

Как-то сложно всё получается...:)
Ну если продолжить крутить костыли то еще одним может быть hitArea - это свойство спрайта либо дисплейобжекта, не помню. Можно наложить на текстфилд такую штуку.

GrMerlin 17.01.2013 12:45

Тоже пробовал. В таком случаю TextArea ловит клики где нужно, но не пропускает по-краям.


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

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