Форматирование текста с помощью HTML во флеш,что ни говори – гораздо удобнее, чем форматирование с TextFormat, практически в любой ситуации.
Если Вас сильно огорчает сильно урезанный набор тегов, который HTML парсер флеша понимает – читайте дальше.
Итак, что мы имеем в распоряжении:
P, B, I, U, A, BR, LI, I, IMG, SPAN, TEXTFORMAT, FONT.
Как видим – ни хедеров, ни STRONG, который рекомендуется вместо B. Заставить флеш-хтмл-парсер понимать h1, h2…. strong, em не прибегая к хакам – елементарно.
У нас же есть законный TextField.StyleSheet. А с помощью css можно форматировать любой XML документ. Грамотный HTML – это тот же XML, поэтому нам достаточно описать в каком виде мы хотим видеть наши заголовки, описать strong, em – и все что нам нужно в таблице стилей.
Маленькая странность – любой неподдерживаемый тег, описанный в таблице стилей – разрывает строку. В случае заголовоков это даже полезно, а вот strong, разрывающий пасть строке – это экзотика К счастью флеш поддерживает свойство display. Так что display: inline – поставит все на свои места.
Дружите с цсс+хтмл. Великий поклон разработчикам за то, что они избавили меня лично от необходимости повсеместно пользоваться текстФорматом. Даже за такой куцый парсер хтмл.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| // стиль
var style_string:String = "h1 {font-size: 20; font-weight: bold} ";
style_string += "strong {font-weight: bold; display: inline;}";
var style_css:TextField.StyleSheet = new TextField.StyleSheet();
style_css.parseCSS(style_string);
// текст
var html_text:String = "
</code>
<h1>Нeader</h1>
";
html_text +="<strong> Very strong line </strong>";
html_text +="usual text";
// текстовое поле
var tf:TextField = this.createTextField("tf",0,10,10,400,200);
tf.multiline = true;
tf.wordWrap = true;
tf.border = true;
tf.html = true;
tf.condenseWhite = true;
tf.styleSheet = style_css;
tf.htmlText = html_text; |
Ну, а если требуется что-то более продвинутое – посмотрите на компонент HTMLRenderer Андрея Горбатова: http://gorbatov.blogspot.com/…/htmlrenderer
Popularity: 10% [?]
января 28, 2008
Очень надоедливый баг, который я обнаружил только при работе в CS3.
Создаем статичное текстовое поле.
Вносим в него текст.
Задаем тип рендеринга – Device-Fonts
Публикуем свфку, сохраняем FLA.
Пока все нормально.
Когда FLA открывается в следующий раз – Статичное текстовое поле уже рендерит текст как Anti-alias for animation, и приходится вновь выставлять Device-Fonts.
В итоге я перестаю использовать статичные поля и делаю их невыделяемыми динамическими. Но все же баг. Пожаловался Adobe.
Кто-то встречал что-то подобное? Какие оси и версии IDE?
Popularity: 5% [?]
января 15, 2008
Обнаружил баг.
Если свойство multiline текстового поля типа input равно true, то даже если поле пустое, проверка на длину текста показывает 1. В поле сидит паразитный символ с кодом 13 (ввод). При проверке формы на заполненные поля – этот баг играет злую шутку. Визуально поле пустое, но для кода – оно заполнено.
ВАЖНО! Этот баг проявляется, если multiline задано в среде разработки Flash IDE. Программно заданное свойство лишено этого парзитного явления.
______
UPD: По наблюдениям @st@l@vist@ – Важную роль в этом баге играет еще и AutoKern. Если он отключен, то даже при multiline баг не прорявляется.
То есть AutoKern+multiline в поле ввода = баг с длинной текста. Более того, если в поле введен ОДИН символ – длина текста будет равной уже двум. Так что баг ко всему еще имеет и свою логику ).
Popularity: 4% [?]
декабря 16, 2007
TextField – субстанция крайне интересная, взбаломошная и мистическая.
Обуздание оной подчас превращается в подвиг Геракла.
Несколько статей о TеxtField я обязательно размещу на страницах этого блога.
Многие знают, что в текстовое поле с подключенным html можно грузить картинки и флешки, а также вставлять символы из библиотеки.
Но вот вопрос – а можно ли взаимодействовать с этими объектами? Например возможен ли прелоадер?
ДА и очень просто. Фактически тег <IMG> создает внутри тексатового поля новый MovieClip. Если в html-коде прописан id для IMG, то будет создан клип именно с таким instance name. И обращаться к этому клипу можно через текстовое поле. К примеру если в текстовое поле my_txt внедряется картинка
<img id="img" src="http://yoursite.com/images/someIMG.pg" alt="" />
То мы можем обратиться к ней my_txt.img
Но что если у нас есть html-текст с img без id, и таких картинок много, а нам необходимо сделать скроллер для текстового поля. Пока картинки не загружены мы с большой долей вероятности получим неверную высоту поля.
Есть простой способ – нам нужно просто завести массив для учета встроенных картинок
И пройтись по текстовому полю циклом for…in, помня, что картинки – это объекты типа MovieClip.
for (var mc in my_txt)
{
if(typeof(my_txt[mc]) == "movieclip")
{
trace("found IMG: "+my_txt[mc]);
htmlIMG.push(my_txt[mc]);
}
}
Теперь у нас есть массив, в которые занесены ссылки на все клипы.
А дальше – прелоадер должен собрать все загруженные байты этих клипов и все тотальные байты этих же клипов. Суммируем, делим, получаем процент. По завершению загрузки – проверяем высоту поля, и приделываем наш бесценный скроллер.
Popularity: 9% [?]
декабря 11, 2007