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

HardCoder 28.06.2011 19:14

Изменить размер текстового поля при вводе
 
Здравствуйте. Нужно сделать так, чтобы при вводе текста пользователем, ширина и высота поля увеличивались, если текст не помещается (чтобы текст не прятался за пределы поля). Казалось бы все просто: при событии TEXT_INPUT или CHANGE изменять width и height, да вот как вычислить на какую величину их увеличивать? Если увеличить слишком мало, текст уже скрывается и видна только одна буква, если слишком много, то... (мне слишком много не подходит, нужно чтобы поле ограничивало текст впритык). Помогите пожалуйста.

Wolsh 28.06.2011 19:35

TextField#textWidth
TextField#textHeight
только не забывайте добавлять по 4 пикселя.

HardCoder 28.06.2011 19:49

Цитата:

Сообщение от Wolsh (Сообщение 1007151)
TextField#textWidth
TextField#textHeight

Извините, не совсем понял что это за конструкция

КорДум 28.06.2011 19:58

Это публичные свойства. Посмотрите в хелпе.

HardCoder 28.06.2011 20:00

Какие свойства? textWidth и textHeight? Они здесь мне не помогут.

Добавлено через 40 секунд
Или подскажите, пожалуйста как именно в моем случае их применить.

Добавлено через 2 минуты
Мне нужно узнать не величину написанного текста, а то на сколько его прибавить. Что-то типа textWidth+getCharBoundaries(...).width

КорДум 28.06.2011 20:06

Что сложного в том, чтобы откорректировать высоту текстового поля по высоте текста + 4 пикселя?

Добавлено через 40 секунд
Ну вычтите из последнего запомненного значения новое, делов-то.

HardCoder 28.06.2011 20:21

Ну да, с высотой думаю проблем не будет. А вот с шириной текста непонятно.
Я в предыдущем посте не так выразился. Есть некая ширина текстового поля txt.width.
1. Вычисляем ширину уже написанного текста с помощью textWidth.
2. Видим что значение textWidth уже приближенно к txt.width. Дальше.
3. Пользователь вводит еще один символ и флеш прятает весь раньше написанный текст, оставляя видным лишь последний символ.
Возвращаемся к п.2. Что нужно сделать? Нужно txt.width увеличить, чтобы поместился еще один символ. Увеличиваем на 10 пикселей - мало (еще один символ не помещается, получается то что в п.2). Пробуем увеличить на 50. Много(уродство получается). Выходит что нужно увеличить на ширину вводимого символа плюс отступ+запас(1-2 пиксела). Так вот. Как это сделать программно?

Wolsh 28.06.2011 21:06

UPDATE
Во, кажется нашел решение

Код AS3:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFieldType;
 
    public class Main extends Sprite
    {
        private var _txt:TextField;
 
        public function Main():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            _txt = new TextField();
            _txt.type = TextFieldType.INPUT;
            _txt.multiline = true;
            _txt.border = true;
            _txt.width = 50;
            _txt.height = 20;
            _txt.x = 200;
            _txt.y = 150;
            _txt.addEventListener(Event.CHANGE, onChange);
            addChild(_txt);
        }
 
        private function onChange(event:Event):void
        {   
            var placeW:Number = _txt.textWidth + 5;
            var placeH:Number = _txt.textHeight + 4;
            if (_txt.width < placeW) _txt.width = placeW;
            if (_txt.height < placeH) _txt.height = placeH;
            _txt.scrollH = 0;
        }
    }
}

Там прибавляется к ширине не 4 а 5 - это для того чтобы всеже был виден мигающий курсор каретки. Можно прибавить и больше для.. надежности.. Секрет – в _txt.scrollH = 0;

S-ed 29.06.2011 04:16

Wolsh
Жаль, что он только растет... =)

Wolsh 29.06.2011 05:43

Цитата:

Жаль, что он только растет... =)
Ну это же тестовый код, проявите смекалку)))
Код AS3:

private function onChange(event:Event):void 
{       
        _txt.width = Math.max(50, _txt.textWidth + 5);
        _txt.height = _txt.textHeight + 4;
        _txt.scrollH = 0;
}



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

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