Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как "отучить" input TextField добавлять лишний перенос строки? (http://www.flasher.ru/forum/showthread.php?t=117791)

Жень Шень 06.11.2008 17:44

Как "отучить" input TextField добавлять лишний перенос строки?
 
Вложений: 1
Привет!
Возникла проблема того рода:
Создается программно "input"-текстовое поле с предложением ввести свой текст или вводится уже измененный ранее текст, но при этом флеш добавляет "возврат каретки". И если мне нужно поменять, к примеру, одну букву или атрибут шрифта, то этот лишний абзац увеличивает высоту поля и мешает дальнейшим манипуляциям (центровка, выравнивание и т.д.)
Как вариант, делал поле динамическим и только при редакции присваивал ему тип "input". Но в этом случае при добавлении новой строки добавляется еще одна.
Упрощенный приложеный пример это показывает.
Подскажите, как выкрутиться или поправте код.
Спасибо.

Mnilionic 06.11.2008 18:00

тег <p> добавляет перенос на новую строку

Жень Шень 06.11.2008 18:09

Если поле "динамик" - нет. Я приложил пример. Закоментируйте строку links_txt.type = "input";
Запустите и не нажимайте кнопку.
Строки лишней нет!
Добавлено.
Тег нужен хотя бы для того, чтоб управлять <P ALIGN="...">

iNils 06.11.2008 18:18

Может multiline = false подойдет?

Жень Шень 06.11.2008 18:30

Спасибо, iNils, но и это не помогло. Я тогда не могу добавлять новые строки. Не помогло и включение multiline = true уже непосредственно перед редактированием. С последним я еще немного "пошаманю"...
Добавлено.
Не выходит: Даже если включать на стадии редактирования multiline = true, то при последующей загрузке весь текст в одной линии...

Mnilionic 06.11.2008 18:34

Цитата:

Сообщение от Жень Шень (Сообщение 775140)
Если поле "динамик" - нет. Я приложил пример. Закоментируйте строку links_txt.type = "input";
Запустите и не нажимайте кнопку.
Строки лишней нет!
Добавлено.
Тег нужен хотя бы для того, чтоб управлять <P ALIGN="...">

строка лишняя есть (выделите текст мышкой и тяните вниз) просто поле не растягивается под неё почему-то

iNils 06.11.2008 18:34

Отказаться от тега <p> и задать центрирование через TextFormat

Mnilionic 06.11.2008 19:07

кстати если использовать стили, то перенос не добавляется к тегу <p>.
Но при этом поле теряет свойство "input"... причём на всегда :(

Жень Шень 06.11.2008 19:11

2 Mnilionic - autoSize = true;
2 iNils - я тоже об этом подумываю. Но, есть серьезное "но".
Текстфилду присвоено html = true;. Я просто считываю его содержание str и помещаю в ХМЛ: <_txt>"+"<![CDATA["+str+"]]></_txt>. Затем сохраняю оболочкой.
Если отказаться, то прийдется лопатить этот str. А в нем может быть пару-наццать абзацев, плюс разноцветные слова и прочее форматирование. А как по другому сформировать ХэТэМээЛьный формат я не знаю.
Добавлено
2 2 Mnilionic Юзверь (учитель) сам "раскрашивает" что сам же и написал. И только ему ведома, что он наваяет!

iNils 06.11.2008 19:15

Цитата:

Сообщение от Mnilionic (Сообщение 775168)
Но при этом поле теряет свойство "input"... причём на всегда :(

Есть решение. После установки стиля, назначить ему заново null.

chingachgoog 06.11.2008 19:34

Поведение текстового поля полностью логичное.

Вариант заплатки:
1) после чтения текста в динамик-поле - отключить автосайз (обязательно с задержкой!)
2) далее делаем поле инпутом и следим за числом строк - если строк стало больше чем было - включаем автосайз

Mnilionic 06.11.2008 19:37

iNils, действительно,
но тогда оформление конвертируется в формат флеша и как результат появляется перенос на новую строку.

Жень Шень 06.11.2008 19:41

Цитата:

Сообщение от chingachgoog (Сообщение 775177)
Вариант заплатки

chingachgoog, спасибо, буду пробовать.

Mnilionic 06.11.2008 22:33

Код:

f_createInterface = function () {
        _root.createTextField("links_txt", 1, 10, 10, 530, 1);
        links_txt.type = "input";
        with (links_txt) {
                border = true;
                html = true;
                wordWrap = true;
                multiline = true;
                autoSize = true;
                htmlText = my_xml.firstChild.firstChild.nodeValue;
        }
                var len = links_txt.text.length;
                if( links_txt.text.charAt(len - 1) == '\r' )
                links_txt.replaceText(len - 1, len, '');
       
};


Жень Шень 07.11.2008 11:14

Всем привет!
Спасибо за обсуждения моей проблемы.
2 Mnilionic: еще не успел опробывать, так как только пришел на работу и опробывал "танец с бубном" chingachgoog-а. И он сработал как мне надо!!!
При выходе из редактирования "инпута" вставил в своей основной программе такой код:
Код:

clip["container"+i].content_mc.input_txt.autoSize =false
clip["container"+i].content_mc.input_txt.type = "dynamic"
clip["container"+i].content_mc.input_txt.autoSize =true

И это помогло "подтянуть" пустую строку. Теперь она не влияет на "нужные" габариты текстового блока.
А код Mnilionic-а опробую тоже.
Еще раз спасибо!

iNils 07.11.2008 20:24

Нашел самое простое решение. Это убрать </p>, тогда разрыва строки не будет.

$mival 15.12.2008 21:39

Цитата:

Сообщение от iNils (Сообщение 775369)
Нашел самое простое решение. Это убрать </p>, тогда разрыва строки не будет.

столкнулся с такой проблемой с динамик текстом.
раньше как то не приходилось делать текст выделяемым, а теперь он выделяется и скролится на лишнюю строку вниз.

p нам нет вообще, история мне очень непонятна

Код AS1/AS2:

var tf:TextField = cont.txt;
tf.multiline = true;
tf.wordWrap = true;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.htmlText = data.html.body;

зы:тему через поиск нашёл, не заметил что в ас2 тема, у меня проблема в ас3, но разницы вроде нет, и там и там есть такая история

Жень Шень 16.12.2008 11:10

Цитата:

Сообщение от $mival (Сообщение 784017)
...p там нет вообще...

Привет!
А пробывали "trace(tf.text)" после "tf.htmlText"? Флеш сам добавляет нужное форматирование для html текста и соответсвенно теги.

$mival 16.12.2008 11:43

Приветствую!

Цитата:

Сообщение от Жень Шень (Сообщение 784088)
Привет!
А пробывали "trace(tf.text)" после "tf.htmlText"? Флеш сам добавляет нужное форматирование для html текста и соответсвенно теги.

tf.text выдал простой текст бех тегов, а вот tf.htmlText после присвоения выдал кучу левых тегов, в т.ч. и Р, в который обрамлён весь текст и поверх него ещё обрамлено в textformat :mad:

вырезать видимо бесполезно потому что придётся снова присваивать и опять вставится

upd:
пока временно вот так

Код AS3:

function onTextScroll(e:Event):void
{
        tf.scrollV = 1;
}
 
tf.addEventListener(Event.SCROLL, onTextScroll);

проблему решает наполовину: колесом мыши не скролится, но если выделять сверху вниз то успевает дёрнуться вниз.
теперь видимо надо шаманить с выделением, ограничивать его какм-то образом.

Жень Шень 16.12.2008 15:54

Привет!
Ну, да, трейсить надо tf.htmlText.
Я остановился на варианте chingachgoog-а без задержки.
iNils-а предложение не реализовал по вышеизложеной причине.
Не знаю, как поведет код Mnilionic-а в АС3

nOobCrafter 16.12.2008 16:52

У меня аналогичная байда, только у меня просто динамик текст подгружаемый из хмл. скролл мыши отключен, но при выделении текста его можно сместить вниз на одну строку, могу кинуть пример, точнее он лежит где то в соседней ветке. Так что думаю дело не только в хтмл тегах. Использую AS2, само по себе это никак не напрягает, но сам факт присутствия такого имееется.
upd. вспомнил можно попробовать удалить тег через сплит. http://www.flasher.ru/forum/showthread.php?t=118720 как тут (несочтите за рекламу темы, там проблема уже решена) Там я и подгружал динамик текст, но после замены тегов, убралась ненужная строка после ентера в хмл. Так может и тут, как нибудь в конце текста убрать тег дающий лишнююю строку?. Сорри, если плохо выражаюсь, просто мне познания невелики, но ситуация кажеться весьма похожей.

Mnilionic 16.12.2008 17:59

Цитата:

Не знаю, как поведет код Mnilionic-а в АС3
Ну так попробует кто-нибудь? :)
Отрезать последний перевод каретки при наличии, я думаю, ac3 в состоянии.

Жень Шень 16.12.2008 18:26

Цитата:

Сообщение от Mnilionic (Сообщение 784194)
Ну так попробует кто-нибудь?

К сожалению еще не стоит 9-й. А работа требует не выше 8-го.
Вот и намекнул $mival-у протестировать. Имхо, будет все тип-топ.

chingachgoog 16.12.2008 19:13

Цитата:

Сообщение от $mival (Сообщение 784094)
tf.text выдал простой текст бех тегов, а вот tf.htmlText после присвоения выдал кучу левых тегов, в т.ч. и Р, в который обрамлён весь текст и поверх него ещё обрамлено в textformat :mad:

htmlText и есть реализация текст-формата, так что это не "левые теги", а просто текст-формат данного поля в html-виде :D

nOobCrafter 17.12.2008 14:47

А вот вопрос, а что получается если просто гружу текст из хмл, то там тоже теги используются, даже не смотря на то что нет опции "редактировать как хтмл"?

$mival 17.12.2008 16:58

Цитата:

Сообщение от Жень Шень (Сообщение 784201)
К сожалению еще не стоит 9-й. А работа требует не выше 8-го.
Вот и намекнул $mival-у протестировать. Имхо, будет все тип-топ.

код мнимолика не работает потому что любые операции по вырезанию автовставленных символов приводят к их возвращению на место, в том числе если резать [P]

ещё бы чингачкук написал свой код, а то не понятно что за строки могут появиться после того как поле делается инпутом и отключается автосайз. может его код только для ас2 актуален, напоминаю что проблема в ас3


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

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