Форум 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)
-   -   Форматирование динамического текста (http://www.flasher.ru/forum/showthread.php?t=131912)

Monsoro 30.10.2009 23:02

Форматирование динамического текста
 
Здравствуйте! у меня следующая проблема.
у меня в ходе вычислений получается массив 5*5. Я его хочу вывести, как динамический текст.
pole.text=array.join("\n");
но, т.к. массив содержит и целые и дробные числа, то все это выводится вкривь и вкось. а нужно, чтобы 1-й элемент 1-й строки был над 1-м элементом 2-й и тд. Как это можно осуществить?
и еще вопрос - элементы выводятся через запятую. Запятые как-то можно убрать?

spooner 30.10.2009 23:25

Каждый элемент в отдельное поле. Код подлиннее будет, но не так, чтобы очень.

MaskiShow 30.10.2009 23:29

Вы учитывайте еще шрифт текста, например Courier позволит вывести символ под символом.
А так можно использовать пробелы для заполнения промежутков.

Monsoro 30.10.2009 23:42

Courier не помог, все равно пирамида выходит(
А как пробелами заполнить? везде же будет разное число пробелов.

Можно попробовать каждый элемент в отдельное поле, но у меня много массивов печатается. и,получается,для каждого 25 полей..

MaskiShow 30.10.2009 23:49

Определяете макс. длинну строки элемента в массиве. По ней считаете пробелы... как-нить слева -справа их потом... x)

Но как выше сказали, можно 25 textField-ов сделать с алигном по центру. Ширина каждого поля - по "ширине" самой "длинного" элемента массива, или заданная с запасом. У вас же точность не 50 символов после запятой, надеюсь.

spooner 30.10.2009 23:53

а вообще есть такая штука, как табуляция \t и превод строки \n, \r

MaskiShow 30.10.2009 23:59

\n от \r чем отличается?

spooner 31.10.2009 00:28

\n - это новая строка, \r - это перевод строки. Отличий не знаю и не замечал никогда. Если найдете, напишите, плиз

mooncar 31.10.2009 00:45

\r - это "возврат каретки". Теперь отличие стало очевидным.

Monsoro 31.10.2009 00:56

Спасибо большое!!!
Все получилось!

spooner 31.10.2009 07:34

mooncar, так в чем разнца? Объясните неучу. Что тот новую строку начинает, что тот.

mooncar 31.10.2009 10:06

Ну может и не совсем очевидно, но если вдуматься в смысл терминов, то догадаться можно.
Сам в этом вопросе то, что касается флеша, многое уяснил не так давно, благодаря форуму, кстати. До этого загадкой мучался - отчего в HTML-ном текстовом файле там, где один раз абзац, после загрузки во флеш в динамическом текстовом поле при выводе уже два рендерится.

При работе программы с текстовым файлом
\r - "возврат каретки" - это переход печатающей головки или курсора, или внутреннего указателя к левому краю страницы.
\n - "новая строка", "перевод строки" - это и есть новая строка, то есть движение внутреннего указателя на одну строку вниз.

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

А вот во флеше да, оба начинают новую строку, как вы сказали. Флеш-плеер делает стойку на оба эти спецсимвола как на новую строку и поэтому, когда мы грузим обычный текстовый файл и выводим его содержимое в динамическое текстовое поле, то вместо одного абзаца получаем два.

Проблема решается выдиранием "лишних" символов перед выводом из текста, полученного из загруженного файла. Например, так:
Код AS1/AS2:

txt.text = txtSrc.toString().split('\r').join('');

Важное следствие: если в ролике производим какие-то операции с текстом, кроме вывода, то нужно разделить понятие выводимого текста и редактируемого текста. То есть на вывод всегда давать строковое значение, обработанное такой операцией, а работать только с самой строковой переменной, во избежании искажения межабзацного расстояния.

Вот статья в Википедии.

etc 31.10.2009 11:23

Лучше изначально сохранять файл с одним переводом строки.

spooner 31.10.2009 11:39

mooncar, спасибо, теперь ясно.

mooncar 31.10.2009 12:07

Цитата:

Сообщение от etc (Сообщение 862330)
Лучше изначально сохранять файл с одним переводом строки.

Да, конечно лучше, но не всегда есть возможность. Не всегда текст генерируется, например, админкой, и таким как нужно. Иногда многостраничные тесты поступают от заказчиков в готовом виде формате Ворда, других форматах виндовых программ, и нет особого желания или времени на переформат. И к тому же, кто использует PC, оперативная правка часто идет в обычном виндовом Блокноте, там нет выбора сохранения с учетом вставки разных последовательностей в конце абзаца. В расширенных блокнотоподобных редакторах это есть.
Я так понимаю, что в Блокноте можно выбрать UTF-8, это в принципе и нужно для текста, предназначенного для загрузки во флеш. Но в статье из Вики, говорится, что
Цитата:

по стандарту, любое совместимое с Уникодом приложение должно воспринимать как перевод строки каждый из нижеследующих символов:
* LF: подача строки, U+000A
* CR: возврат каретки, U+000D
* NEL: новая строка, U+0085
* FF: новая страница, U+000C
* LS: разделитель строк, U+2028
* PS: разделитель абзацев, U+2029
Последовательность CR LF (U+000D U+000A) надлежит воспринимать как один перевод строки (а не два).
С учетом
Цитата:

CR + LF (ASCII 0x0D 0x0A) — используется в DEC RT-11 и большинстве остальных доюниксовых систем, несовместимых с IBM OS, а также в CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS, протоколах internet.
оно конечно надлежит-то надлежит ("воспринимать как один перевод строки"), но если даже мы сохраним в Блокноте, задав не ANSI, а UTF-8, то для флеша все равно будем иметь два равнозначных спецсимвола в конце.
Поэтому, ИМХО, лучше предусмотреть разные возможности и парсить текст уже внутри флеша на предмет спецсимволов.

MaskiShow 17.12.2009 14:36

Можно ли как-то сделать background для части текста в дин. текстовом поле?

mooncar 17.12.2009 14:48

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

MaskiShow 17.12.2009 15:11

Значит ни как не сделать 8)

etc 17.12.2009 15:16

Цитата:

Сообщение от MaskiShow (Сообщение 873244)
Значит ни как не сделать 8)

Это значит, что вы не там вопросы задаете.


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

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