Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Волгоградец

Рейтинг: 3.33. Голосов: 3.

FTE based text controls

Запись от Волгоградец размещена 10.01.2011 в 13:12

Сори за английское название темы - не знаю как в нескольких словах сформулировать суть. По русски будет звучать так: "Представляю вашему вниманию текстовые контролы, использующие для отображения текста Flash Text Engine".

Как вы знаете, в десятке нам подарили возможность работы с текстом на низком уровне. Т.е. дали возможность щупать каждую отдельную букву в слове (называется атом). Также где-то я встречал что TextField признан устаревшим и развиваться в следующих версиях плеера не будет. Т.к. Flash Text Engine (далее FTE) не дает возможности создавать текстовые поля напрямую, вводить текст в поле, выделять текст, Adobe вместе с выпуском FTE выпустили TLF (Text Layout Framework). Штука эта чрезвычайно мощная и крутая. Но в то же время нереально тяжелая, запутанная и тормознутая. Я написал пару контролов, которые повторяют некоторую функциональность обычного TextField, но которые легче и проще TLF.

Что это и для чего это нужно? Это упрощенные аналоги нативного TextField. Писались для конкретных целей, поэтому сверхфункциональностью не обладают. Нужно в том случае, если вы хотите лучшего отображения текста, если хотите задавать прозрачность и поворот текста без эмбеда. Плюс ко всему, даже если вы заэмбедели текст для FTE, то он будет занимать примерно на 10% меньше места, чем если бы заэмбедили для обычного TextField - мелочь, а приятно.

Краткий обзор контролов.
VSimpleText - простейшее текстовое поле, содержащее 1 (одну) строку, не более. Высота текста устанавливается автоматически в зависимости от размера фонта. Ширину можно задать жестко или установить свойство autoWidth в true - тогда текст будет расти в ширину бесконечно. Форматировать текст можно, присвоив свойству textFormat экземпляр VTextFormat - аналог нативного TextFormat. Форматируется текстовое поле целиком - т.е. нельзя форматировать посимвольно. Выделять текст нельзя.
VMultilineText - текстовое поле, которое может содержать несколько линий. Высоту и ширину можно задать жестко или задать автоматическую высоту/ширину. Форматируется точно так же как и VSimpleText - целиком. Можно выделять текст.
VFormatableText - наследник VMultilineText. Однако форматировать можно посимвольно методом formatTextRange(beginIndex:int, lastIndex:int, format:VTextFormat). Также это поле поддерживает html тэги - b, br, font, i (в регулярных выражениях я не силен, поэтому извиняйте если что не так).

Взять можно здесь http://code.google.com/p/fte-text-co...downloads/list
Если кому-то покажется интересным и кто-то будет использовать у себя в проектах - прошу сообщать о багах (можно здесь, можно на гуглокоде).

Примеры использования:
Код AS3:
var st:VSimpleText = new VSimpleText();
addChild(st);
st.text = 'Hello World!';
st.autoWidth = true;
st.height = 500;
st.x = 100;
st.y = 100;
var tf:VTextFormat = new VTextFormat();
tf.color = 0xAA0000;
st.textFormat = tf;
 
var mt:VMultilineText = new VMultilineText();
mt.x = 100;
mt.y = 300;
mt.width = 100;
mt.height = 50;
mt.autoWidth = true;
mt.autoHeight = true;
mt.text = 'Hello\nworld\nppppppppppppppppppppppppp';
addChild(mt);
tf = new VTextFormat();
tf.color = 0xFF0000;
tf.horizontalAlign = VTextAlign.CENTER;
tf.verticalAlign = VTextAlign.MIDDLE;
mt.textFormat = tf;
mt.selectable = true;
 
var ft:VFormatableText = new VFormatableText();
ft.x = 100;
ft.y = 500;
addChild(ft);
ft.htmlText = '<font size="25" color="0xFF0000">This</font> <i>is</i><br/><b>bold</b>';
Всего комментариев 14

Комментарии

Старый 10.01.2011 14:18 mayakwd вне форума
mayakwd
 
Аватар для mayakwd
очень занятно, но названия классов...
Старый 10.01.2011 14:59 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Очень занятно, не знал. Большое спасибо!
Тема, кажется, очень актуальная. Будет здорово увидеть ещё статей по этой теме.
Старый 10.01.2011 16:46 kutuzov вне форума
kutuzov
 
Аватар для kutuzov
буквально на днях тибо (Thibault Imbert) спрашивал народ, какой проперти или метод им не хватает в текстфилде, просто так бы спрашивать он не стал, так что рано хоронить текстфилд
Старый 10.01.2011 23:09 Котяра вне форума
Котяра
 
Аватар для Котяра
V - это от Волгоградец?
статья на тему: http://habrahabr.ru/blogs/arbeit/88443/
пункт: подающий надежды гений.
Старый 11.01.2011 01:36 in4core вне форума
in4core
 
Аватар для in4core
Кот зачем же ты его так оскорбил?!))
Старый 11.01.2011 02:16 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Котяра, Волгоградец когда о физдвижках писал тоже добавлял букву и ему кинули ту же статью.
Тут что-то другое )
Старый 11.01.2011 02:21 Котяра вне форума
Котяра
 
Аватар для Котяра
точно, так и было.
Цитата:
ко всем классам буду добавлять эту букву - заодно прославлю свой ник
И никого я не оскорблял. Каждый некомпетентен в степени своей некомпетентности.
Степень некомпетентности Волгоградца очень хорошая)
Старый 11.01.2011 02:39 in4core вне форума
in4core
 
Аватар для in4core
Ну я так то, не знаю конечно. Но вроде, человек хорошие блоги шмаляет. Ну данный для меня тоже, не нужно*. Ну а другие, хорошие были в свое время. И не сказать, что уж компетентность плохая, имхо. Можт я и не прав конечно...
Старый 14.01.2011 00:54 LOS2008 вне форума
LOS2008
А как/где задавать имя шрифта (системный и встроенный)?
Старый 14.01.2011 12:02 Волгоградец вне форума
Волгоградец
 
Аватар для Волгоградец
Код AS3:
textFormat.font = 'Arial';
Код AS3:
textFormat.embedFont = true/false;
Старый 04.02.2011 20:20 LOS2008 вне форума
LOS2008

Баг

Баг обнаружил у класса VFormatableText. Для некоторых слов проявляется лишним переносом строки.

Код AS3:
// работает правильно
ft.htmlText = '<font size="16" color="0x2E83BF">Это <i>есть</i><br/><b>bold</b></font>';
 
// работает неправильно
ft.htmlText = '<font size="16" color="0x2E83BF">Предмет <i>есть</i><br/><b>bold</b></font>';
Если слово "Это" заменить на слово "Предмет", то после него происходит перенос строки.
Исправьте пожалуйста.
Старый 07.02.2011 12:28 Волгоградец вне форума
Волгоградец
 
Аватар для Волгоградец
Скорее всего ширина поля не позволяет вместить 'Предмет есть' в одну строчку. Нужно увеличить ширину или поставить в авто.
Старый 07.02.2011 17:42 LOS2008 вне форума
LOS2008
Цитата:
Нужно увеличить ширину или поставить в авто.
Проверил, действительно так. У Вас по дефолту autoWidth = false и задана небольшая ширина примерно в 100 пикселов, и строка не влезала. ИМХО лучше чтобы по дефолту стояло autoWidth = true.
Старый 07.02.2011 18:54 Волгоградец вне форума
Волгоградец
 
Аватар для Волгоградец
Я делал по аналогии с 'родным' TextField. Там именно так и сделано - размер 100 на 100 и отключен автосайз.
 

 


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


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