Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Какой-то странный TextFeld. (http://www.flasher.ru/forum/showthread.php?t=145962)

SunShadow 24.10.2010 23:43

Какой-то странный TextFeld.
 
Здравствуйте коллеги.
Первый раз сталкиваюсь с таким глюком. У меня есть два текстовых поля, одно для ввода, второе для вывода сообщений. Я делаю следующее. Ввожу текст в инпут, далее по кнопке передаю его для вставки в новое поле. Перед этим обрезаю все не значащие символы в начале и конце сообщения. Далее полученный текст вставляется с последующей установкой TextFormat. При этом если в строке которую я передаю присутствуют символы переноса строки, у меня наблюдается смещение добавляемого текста, а старый текст затирается почему то. При этом формат текста тоже начинает плыть. Вот код при вставке который обрабатывает строку:
Код AS3:

                        var pattern:RegExp = /^\s*|\s*$/g;
                        msgTxt = msgTxt.replace(pattern, '');

Вот так я этот текст вывожу в TextField с именем tf
Код AS3:

                                var msg:Message = RStore.read(ChatConst.MSG_RECEIVE);
                                var textFormat:TextFormat = new TextFormat();
                                var idx:int = tf.length - 1 ;
                                var s:String;
                                if (msg.type == MessageType.SIMPLE) {
                                        textFormat.underline = false;
                                        textFormat.color = 0x004000;
                                        textFormat.bold = true;
                                        s = msg.nickName + ': ';
                                        tf.appendText(s);
                                        tf.setTextFormat(textFormat, idx, tf.length - 1);
                                        idx = tf.length - 1;
                                        textFormat.color = 0x000040;
                                        s = msg.text + "\n";
                                        tf.appendText(s);
                                        tf.setTextFormat(textFormat, idx, tf.length - 1);
                                }
                                if (msg.type == MessageType.SYSTEM) {
                                        s = msg.nickName + ': ' + msg.text + "\n";
                                        textFormat.color = 0xFF0000;
                                        textFormat.underline = true;
                                        tf.appendText(s);
                                        tf.setTextFormat(textFormat, idx, tf.length - 1);
                                }
                        }

Кто знает подскажите в чем может быть причина и как с этим бороться. Оба текстовых поля одинаковые, разница только в том что одно динамическое, а второе для ввода. Шрифты используются встроенные.
Забыл уточнить, fla в CS5, тип поля классический, а для компиляции использую проект FlashDevelop с подключением swc с данным текстовым полем

Psycho Tiger 24.10.2010 23:47

Не знаю, что подсказать. autoSize там, multiline посмотрите.
P.S. перед вторым if else можно воткнуть )

SunShadow 24.10.2010 23:58

Цитата:

Сообщение от Psycho Tiger (Сообщение 945100)
Не знаю, что подсказать. autoSize там, multiline посмотрите.
P.S. перед вторым if else можно воткнуть )

autosize отвечает за подгонку размеров текстового поля на сколько я помню, а не за его внутреннее содержимое. Тем более поле очень большое, и текст туда умещается свободно. Многострочность влкючена(без переносов). А постскриптум не критично пока

Psycho Tiger 25.10.2010 00:01

Цитата:

autosize отвечает за подгонку размеров текстового поля на сколько я помню, а не за его внутреннее содержимое.
Текст мог не влезать, от этого видна последняя строчка. Следовало заметить, всё таки)
\n это один символ, но он может распознаться, а "\n" - уже два. Я не силён в рэгэкспах, по сути ничего дельного наверно не подскажу. Пойду-ка я.)

udaaff 25.10.2010 00:03

Цитата:

При этом если в строке которую я передаю присутствуют символы переноса строки...
Если в тексте встречается символ \r, то попробуй заменить его на \n.

SunShadow 25.10.2010 00:05

В справке по TextField написано что \n и \t распознаются как один символ.

udaaff 25.10.2010 00:08

C appentText() баги наблюдались, если использовался символ \r.

SunShadow 25.10.2010 00:21

Попробовал вот так
Код AS3:

var r:RegExp = /\r/;
s = msg.text + "\n";
tf.appendText(s.replace(r,"\n"));

Эффекта никакого(

mayakwd 25.10.2010 00:38

Цитата:

Сообщение от SunShadow (Сообщение 945117)
Попробовал вот так
Код AS3:

var r:RegExp = /\r/;
s = msg.text + "\n";
tf.appendText(s.replace(r,"\n"));

Эффекта никакого(

может быть у вас там не один \r?
Код AS3:

while (text.indexOf("\r") != -1) 
  text = text.replace("\r","\n");


SunShadow 25.10.2010 00:47

Да действительно, надо было удалять все а не только первый) Спасибо дельное замечание) только гораздо проще сделать так
Код AS3:

var r:RegExp = /\r/g;

И цикл будет не нужен

Добавлено через 52 секунды
Всем спасибо за помощь, теперь все функционирует как положено. Если кому то понадобится моя помощь, чем смогу ...)


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

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