PDA

Просмотр полной версии : Как "отучить" input TextField добавлять лишний перенос строки?


Жень Шень
06.11.2008, 17:44
Привет!
Возникла проблема того рода:
Создается программно "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
Если поле "динамик" - нет. Я приложил пример. Закоментируйте строку 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
Но при этом поле теряет свойство "input"... причём на всегда :(Есть решение. После установки стиля, назначить ему заново null.

chingachgoog
06.11.2008, 19:34
Поведение текстового поля полностью логичное.

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

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

Жень Шень
06.11.2008, 19:41
Вариант заплатки
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
Нашел самое простое решение. Это убрать </p>, тогда разрыва строки не будет.

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

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

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
...p там нет вообще...
Привет!
А пробывали "trace(tf.text)" после "tf.htmlText"? Флеш сам добавляет нужное форматирование для html текста и соответсвенно теги.

$mival
16.12.2008, 11:43
Приветствую!

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

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

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

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

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

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


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

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

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

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

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