PDA

Просмотр полной версии : Scroll большого фрагмента текста


qsedftghk
04.05.2009, 01:08
Ребята, я понимаю, что вопрос похож на ламерский, но, черт возьми, бьюсь уже день третий...
Есть простой TextField с UIScrollbar. В него запихнуто страниц 36 (если смотреть в Word`е) текста. Вопрос. Почему не весь текст прокручивается, а только до 23 страницы? Остаток текста не виден. Такое ощущение, что у TextField есть какое-то ограничение на количество вставляемого в него текста.
Пример текста и сам исходник прилагаю. Подскажите пожалуйста, в чем трабла, мозг высох совсем.

ЗЫ. Чего хочу добиться: Текст из word`а скопировать в TextField и, чтобы можно было его прокручивая, просмотреть весь целиком.

mooncar
04.05.2009, 01:49
Да, не влезает.
Текст сформируйте как HTML, назначте стили, далее - работа AS: загружайте его в поле с использованием стилей, поле уже динамическое.
Тогда и жирности будут и курсивы.

Добавлено через 26 минут
Если не разберетесь, пишите в личку....

qsedftghk
04.05.2009, 02:44
Кстати, могу показать исходник того, что делаю... (в личку). Но боюсь, буду осмеян нипадецки, ибо, чую, что так уже лет сто не делают...

mooncar
04.05.2009, 07:08
Вот как-то так.
Исходник прилагается.
var myVars1:LoadVars = new LoadVars(); //объект для текста 1
var txt_url_1:String = "tri_1var.htm" //URL текста 1

var myVars2:LoadVars = new LoadVars(); //объект для текста 2
var txt_url_2:String = "tri_2var.htm" //URL текста 2*/

// Загружаем текст вариант 1 (шрифт не внедрен в поле (вместо Arno Pro у тех, у кого его нет, будет Georgia), но работает HTML (жирный, курсив)
myVars1.onData = function(src:String):Void {
if (src != undefined) {
InstanceName_3_1.htmlText = src;
} else {
InstanceName_3_1.text = "Невозможно загрузить HTML file";
}
};
myVars1.load(txt_url_1);

// Загружаем текст вариант 2
// (HTML не работает, зато в поле внедрен Arno Pro (кнопка "Embed" на свойствах поля), у всех будет показывать именно с этим шрифтом)
myVars2.onData = function(src:String):Void {
if (src != undefined) {
InstanceName_3_2.htmlText = src;
} else {
InstanceName_3_2.text = "Невозможно загрузить HTML file";
}
};
myVars2.load(txt_url_2);

KiL33
04.05.2009, 08:27
На сколько я понял, всё что нужно было..
content_txt.multiline= true;
content_txt.wordWrap = true;
content_txt.html = true;

var myXml:XML = new XML();
myXml.ignoreWhite = true;
myXml.load("text.html");
myXml.onLoad = function () {
content_txt.htmlText = myXml;
}
+Текстовое поле и компонент.
Ещё лучше к этому всему подключить стили, хотя если текста много, вручную формировать его..жесть..
Лучше использовать разрешение html, а не htm.
useCodepage вообще лучше не использовать.

aksios
04.05.2009, 09:51
На самом деле, в старых версиях по крайней мере, был такой потолок - 23-28 Кб текста. - Текстфилд становился не адекватным. А вот если такие текстфилды собрать в акордион, флеш вообще зависает при загрузке.
Актуальность такой простыни во флеш говорит о неправильности концепта. Делайте по другому.

qsedftghk
04.05.2009, 10:49
Большое спасибо за примеры. Придётся, всё-таки как я вижу, подгружать текст из внешнего файла, чего делать не хотелось...

Заметил странность поведения UIScrollBar в моем файле - он не реагирует на мышку, а в примере Mooncar`a все работает пучком... Сейчас буду разбираться.

Актуальность такой простыни во флеш говорит о неправильности концепта
Я об этом уже думал... Но... тут только так и никак иначе.

Кстати, не дадите ссылку, где почитать, о том, как менять внешний вид стандартного флешевского компонента в Flash CS3? Или в кратце суть описать... Так проще потом понять, что там в хелпе понаписано... И вообще литература существует нормальная какая-нибудь по флешу, или, всё как обычно, - там почитал, здесь почитал.....?

KiL33
04.05.2009, 11:45
На самом деле, в старых версиях по крайней мере, был такой потолок - 23-28 Кб текста.
С восьмой версии.
Я без особых проблем грузил по 4 mb форматированного текста(это примерно 1400 страниц). Подгружалось, примерно 15-20 сек. Скроллер работал вполне живенько.

qsedftghk
04.05.2009, 11:51
подключить стили - это css имеется ввиду? А как это, на словах хотя бы, не подскажете?

iNils
04.05.2009, 12:13
Подгружалось, примерно 15-20 сек.Это слишком долго.

KiL33
04.05.2009, 14:37
Долго?
А за какое время должен открываться документ с таким объёмом во флешке. Конечно, нотпад за секунду открывает, но во флешке ещё учитывается всякая графическая приблуда+zinc оболочка+транспарент моде.

Если грузить текст в голый проект, то у меня затрачивалось 9 сек. Наверняка ещё стоит учитывать мощность проца.

iNils
04.05.2009, 14:38
Долго. Открыть приложение которое потом виснет на 20 секунд, это не приемлемо для такого рода задач.

KiL33
04.05.2009, 14:46
Ну так лично у меня и задача как таковая не стояла, чтобы загружать большой объем текста:)
Конечно, я согласен, это долго, но, к сожалению, это лучший результат, который получилось добиться.
Может вы посоветуете что-нибудь насчет производительности?:)

iNils
04.05.2009, 14:51
Не выводить весь текст сразу.

aksios
04.05.2009, 14:54
KiL33, это все замечательно, но в большом текстфилде со скролем скролить столько букв... Я про экспорт из Ворда - когда тупо скопипастили текст из ворда в текстфилд!
Я не понимаю, зачем делать длинный скроль из того же ворда не сохраняя разбивку на страницы. Адекватный экспорт же давно уже реализован.

mooncar
04.05.2009, 15:29
Адекватный экспорт же давно уже реализован.
Например?

Добавлено через 8 минут

Лучше использовать разрешение html, а не htm.
useCodepage вообще лучше не использовать.
Разъясните, пожалуйста, оба момента.

qsedftghk
04.05.2009, 15:51
со стилями разобрался... мда... достаточно гемморно такое количество текста переколбашивать в html...

aksios
04.05.2009, 15:53
Для виндов под 6 плеер и ап - пример (http://www.adobe.com/products/flashpaper/).

mooncar
04.05.2009, 15:55
Делай не руками. Скопируй из Ворда в Dreamweaver, в область контента, а потом скопируй код из области кода. А потом - либо в том же Ворде, вставкой-заменой ненужных тегов на нужные, либо, как сказали выше, пиши парсер.

KiL33
04.05.2009, 16:02
Я про экспорт из Ворда - когда тупо скопипастили текст из ворда в текстфилд!
Не..я загружал готовый текст для редактирования в флешку из файла.

Это был сравнительно простенький редактор хтмл_ьных тегов с возможностью сохранить всё сверстанное в txt файл и по необходимости загружать его же обратно для редактирования.
Разумеется txt файл был небольшого размера, все остальные ухищрения с большим размером файла были просто ради того чтобы проверить на какой объём данных может вытянуть флешка.

Не выводить весь текст сразу.
Наверняка это правильная идея, но я с этим пока что не разбирался.

Добавлено через 13 минут
Для виндов под 6 плеер и ап - пример (http://www.adobe.com/products/flashpaper/).
Брать готовый флешпапер не самая лучшая идея, если ты пишешь под особые нужды))
Гораздо интересней узнать, как работает флешпепер? Я сомневаюсь, что он выводит текст с какой-то задержкой. Он, конечно, постепенно загружает текст, но он грузит его сразу весь, тем не менее, производительность выше..

aksios
04.05.2009, 16:22
Брать готовый флешпапер не самая лучшая идея, если ты пишешь под особые нужды))
Гораздо интересней узнать, как работает флешпепер? Я сомневаюсь, что он выводит текст с какой-то задержкой. Он, конечно, постепенно загружает текст, но он грузит его сразу весь, тем не менее, производительность выше..
Такие вещи писать заново каждый раз - не лучшая идея.
Чтобы не сомневаться, надо смотреть доки (http://www.adobe.com/support/documentation/en/flashpaper/2/flashpaper_api/flashpaper_api3.html).

mooncar
04.05.2009, 16:45
Вопрос близкий к теме.
Может подскажите, отчего Flash воспринимает простой перевод строки в HTML-документе не как разрыв строки <br>, а как полноценный новый абзац <p> ? И делает соответственно два перевода строки перед новым текстовым блоком.
Приходится в документе, где нужно просто новую строку начать, вставить <br> и продолжать текст на той же строчке.

iNils
04.05.2009, 16:49
Он воспринимает его как разрыв строки. Просто в Windows для переноса используется два символа \r и \n, а для флеша любой из них, в результате возникает два переноса.

mooncar
04.05.2009, 16:59
То есть, когда флеш отрисовывает HTML, он сперва встречает \n , "ага, новая строка", делает разрыв строки и возвращает каретку? А потом натыкается на \r, принимает возврат каретки за начало новой строки и еще раз делает уже ненужный разрыв строки и еще раз возвращает каретку, так?
То есть для него есть только понятие "новая строка", куда входит и разрыв и возврат, хотя для Windows это разные вещи?

iNils
04.05.2009, 17:04
Да, только сначал \r, а потом \n :)
Есть такое решение проблемы:
str = str.split ("\r\n").join ("\r");

mooncar
04.05.2009, 17:06
Да, только сначал \r, а потом \n :)
Есть такое решение проблемы:
str = str.split ("\r\n").join ("\r");
Спасибо! А ведь сколько пришлось помучиться!

qsedftghk
05.05.2009, 02:41
Ребза! большущее спасибо, все получилось как надо... Я даже, наконец-таки понял, как можно менять внешний вид у стандартной компоненты...