Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Растягивающееся TextField (http://www.flasher.ru/forum/showthread.php?t=132664)

gloomyBrain 17.11.2009 22:29

Растягивающееся TextField
 
Пытаюсь сделать текстовое поле, которое при вводе текста самостоятельно растягивается по высоте (ширина задана жестко).
Но есть нюанс - хочу вводить не просто текст, а текст с тэгами HTML.
Для этого применяю вот такой подход:
Код AS3:

public class RubberTextField extends TextField {
 
        public function RubberTextField() {
 
                super();
                super.type = TextFieldType.INPUT;
                super.border = true;
                super.borderColor = 0x000000;
                super.multiline = true;
                super.wordWrap = true;
 
                super.addEventListener(TextEvent.TEXT_INPUT, onInput);
                super.addEventListener(Event.CHANGE, onInput);
 
 
        }
 
        private function onInput(evt:Event):void {
 
                if (evt is TextEvent) {
 
                        evt = (evt as TextEvent);
                        evt.preventDefault();
                        super.htmlText = super.htmlText + (evt as TextEvent).text;
                        super.setSelection(super.htmlText.length, super.htmlText.length);
 
                }
 
                super.height = this.textHeight + 8;
 
        }
 
}

Но почему-то каждый новый символ появляется с новой строки.
не могу понять, в чем причина и как этого избёгнуть ? =)

UPD:
трейс выдает вообще что-то ужасное =) каждый символ ставится в кучу тэгов типа <p>, <font> и тп
По сути, мне нужно вставить новый текст между этими тэгами, но может как-то это можно сделать автоматически?

SamFR 17.11.2009 22:41

Лучше всего использовать text и textFormat. А вообще, с изменением размеров текстового поля в момент ввода куча глюков. Можно попробовать для начала реализовать растягивание без форматирования, а там уж, если получится, и с ним.

gloomyBrain 17.11.2009 22:45

У меня глюков нет никаких =) Возьмите код и попробуйте. Да и проблема-то не в том
Да, я согласен насчет text + textFormat, однако продолжаю упорствовать над htmlText =)

SamFR 17.11.2009 23:12

Да? Значит я что-то делал не так :)

Автоматически – вряд ли... Скорее всего, придётся написать функцию преобразования позиции символа в обычном тексте в позицию в html-тексте, и с помощью неё вставлять введённый символ в html-текст. А сам html-текст хранить в дополнительной переменной, так как TextField изменяет значение своего свойства htmlText, дописывая туда всякие теги типа TEXTFORMAT. Хотя я не полностью в этом уверен, но вроде бы несколько раз сталкивался.

С функцией преобразования проблем особых быть не должно, она должна просто пропускать все теги. Единственно что, могут быть небольшие сложности с <p>, <br> и пробелами между тегами, которые, насколько я помню, в некоторых случаях пропускаются. Это если писать компонент для произвольного html-текста. Если же чётко задать допускаемый формат html-разметки, то многое упрощается.

Добавлено через 4 минуты
И ещё немного не в тему)
Мне кажется, лучше блок if в обработчике из вашего примера переписать так:
Код AS3:

if (evt is TextEvent) {
        var textEvt:TextEvent = evt as TextEvent;
        textEvt.preventDefault();
        super.htmlText = super.htmlText + textEvt.text;
        super.setSelection(super.htmlText.length, super.htmlText.length);
}



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

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