Руководство по actionscript. часть 5, стр. 088

Таблица 27.4. Переменные класса TextFormat для форматирования на уровне абзацев

Переменная Описание

align Задает выравнивание абзаца по горизонтали (по левому или правому краю, по центру или по ширине) с помощью одной из констант класса TextFormatAlign

blocklndent Определяет расстояние в пикселах, представляющее смещение абзаца от левой границы текстового поля

Таблица 27.4 (продолжение)

Переменная Описание

bullet Указывает, нужно ли добавлять маркеры к абзацам

indent Задает расстояние в пикселах, представляющее отступ первой строки абзаца от левой границы текстового поля

leading Указывает величину вертикального промежутка в пикселах между строками текста

leftMargin Определяет расстояние по горизонтали в пикселах между левой границей текстового поля и левым краем абзаца

rightMargin Задает расстояние по горизонтали в пикселах между правой границей текстового поля и правым краем абзаца

tabStops Задает шаги табуляции по горизонтали в пикселах

Из всех переменных, перечисленных в двух предыдущих таблицах, особого внимания заслуживает переменная экземпляра font класса TextFormat. Ее значение определяет название шрифта в виде строки. Как мы узнаем далее, в разд. «Шрифты и отображение текста», у разработчиков есть возможность заставить приложение Flash Player отображать текст с помощью шрифтов, установленных в локальной системе конечного пользователя (называемых шрифтами устройства), или шрифтов, включенных в SWF-файл (называемых встраиваемыми). Таким образом, переменная font должна определять либо название шрифта в локальной системе, либо название шрифта, встраиваемого в SWF-файл.

Руководство по actionscript. часть 5, стр. 089

Специально для шрифтов устройств язык ActionScript также предлагает три особых названия — ff_sansff, ff_serifff и «_typewriter11, которые могут применяться в тех случаях, когда текст должен отображаться шрифтом без засечек, с засечками или моноширинным, используемым по умолчанию в локальной системе. Например, если при использовании шрифтов устройства в качестве названия шрифта указать значение «_sans11, в США на компьютере с установленной операционной системой Windows ХР текст будет отображен шрифтом Arial, а на компьютере с установленной операционной системой Mac OS X — шрифтом Helvetica.

Мы узнаем больше об особенностях выбора названий шрифтов далее в этой главе. В дальнейшем будем полагать, что текст отображается с помощью шрифтов, установленных в локальной системе конечного пользователя (шрифтов устройства), и будем использовать названия шрифтов, поставляемых с операционной системой Windows ХР.

Предупреждение насчет встраиваемых шрифтов

Стоит отметить, что, когда текст, для форматирования которого применяется полужирное начертание или курсив, отображается с помощью встраиваемых шрифтов, вариации соответствующего шрифта (-ов) полужирного начертания и курсива должны быть доступны для Flash Player в виде встраиваемых шрифтов. Например, рассмотрим следующий код, который создает текстовое поле, содержащее слова «hello» и «world», при этом слово «hello» отформатировано с использованием шрифта Courier New, а слово «world» — с использованием шрифта Courier New полужирного начертания:

// Создаем текстовое поле

var t.-TextField = new TextFieldC );

t. text = «hello world»;

// Создаем объекты TextFormat

var fontFormat-.TextFormat = new TextFormat( );

fontFormat. font = «Courier New»;

var boldFormat:TextFormat = new TextFormatC );

boldFormat. bold = true;

// Применяем форматирование

t. setTextFormat(fontFormat, 0, 11);

t. setTextFormat(boldFormat, 6, 11);

Чтобы отобразить предыдущее текстовое поле с помощью встраиваемых шрифтов, приложение Flash Player должно иметь доступ к встраиваемым версиям шрифтов Courier New и Courier New Bold. Дополнительную информацию можно найти далее, в подразд. «Форматирование текста с помощью встраиваемого шрифта» разд. «Шрифты и отображение текста».

Руководство по actionscript. часть 5, стр. 090

Вызов метода setTextFormaU) не оказывает влияния на текст, присваиваемый в дальнейшем

Метод setTextFormat ( ) может быть использован для форматирования текста в текстовом поле только после того, как этот текст будет добавлен в текстовое поле. Например, в следующем коде мы по ошибке вызываем метод setTextFormat ( ) до того, как будет присвоен текст, который мы хотим отформатировать:

// Создаем текстовое поле

var t:TextField = new TextField( );

t. autoSize = TextFieldAutoSize. LEFT;

// Создаем объект TextFormat и устанавливаем значения его переменных var format:TextFormat = new TextFormat( ); format. font = «Arial»; format. size = 20; format. bold = true;

// Применяем форматирование t. setTextFormat(format);

// Присваиваем текст

t. text = «ActionScript is fun!»;

Когда в предыдущем коде происходит вызов метода setTextFormat ( ), объект t еще не содержит никакого текста, поэтому попытка применить форматирование оказывается безрезультатной. Вот правильный код:

// Создаем текстовое поле

var t:TextField = new TextField( );

t. autoSize = TextFieldAutoSize. LEFT;

// Создаем объект TextFormat и устанавливаем // значения его переменных var format.-TextFormat = new TextFormat( ); format. font = «Arial»;

format. size = 20; format. bold = true;

// Присваиваем текст

t. text = «ActionScript is fun!»;

// Применяем форматирование t. setTextFormat(format):

4* 4

Выполняя форматирование текста с помощью метода setTextFormat(), всегда присваивайте текст перед вызовом этого метода.

Руководство по actionscript. часть 5, стр. 091

Информацию о применении форматирования к текстовому полю до того, как будет присвоен текст, можно найти далее, в подразд. «Форматирование по умолчанию для текстовых полей».

Применение форматирования на уровне абзацев

Чтобы применить любой из вариантов форматирования на уровне абзацев, перечисленных ранее в табл. 27.4, мы должны применить желаемый формат к первому символу в абзаце (напомним, что в языке ActionScript абзац определяется как часть текста, ограниченная разрывами строки).

Например, рассмотрим следующий код, который сначала создает текстовое поле с двумя абзацами, а затем — объект TextFormat, задающий вариант форматирования на уровне абзацев — выравнивание по центру:

// Создаем текстовое поле

var t:TextField = new TextField( );

t. width = 300;

t. border = true;

// Абзацы разделяются одним разрывом строки (представляемым служебной // последовательностью «\п»)

t. text = «This is paragraph one.\nThis is paragraph two.»:

// Создаем объект TextFormat

var alignFormat:TextFormat = new TextFormat( );

alignFormat. align = TextFormatAlign. CENTER;

Чтобы установить выравнивание только для первого абзаца в текстовом поле, мы применяем форматирование к первому символу первого абзаца, который находится в позиции с индексом 0:

t. setTextFormat(alignFormat, 0);

Для установки выравнивания только второму абзацу мы применяем форматирование к первому символу второго абзаца, который находится в позиции с индексом 23:

t. setTextFormat(alignFormat. 23);

Чтобы установить выравнивание сразу для нескольких абзацев, мы применяем форматирование с помощью аргументов индексНачала и индексКонца, диапазон значений которых включает позиции символов желаемых абзацев:

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

Руководство по actionscript. часть 5, стр. 092

Для динамического определения начального и конечного индексов символов в абзаце используйте методы экземпляра getFirstCharInParagraph ( ) и getParagraphLength ( ) класса TextField. Например, следующий код применяет метод getParagraphLength ( ), чтобы динамически определить начальные и конечные индексы двух абзацев в текстовом поле из предыдущего примера. После этого данный код использует полученные индексы для применения форматирования — выравнивания текста — ко всей последовательности символов во втором абзаце.

// Создаем текстовое поле

var t:TextField = new TextFieldC );

t. width = 100;

t. border = true;

t. wordwrap = true;

t. text = «This is paragraph oneAnThis is paragraph two.»;

// Создаем объект TextFormat

var alignFormat:TextFormat = new TextFormat( );

alignFormat. align = TextFormatAlign. CENTER;

// Определяем начальные и конечные индексы абзацев var firstParagraphStart:int = 0;

var firstParagraphEnd:int = t. getParagraphl_ength(firstParagraphStart)-l; var secondParagraphStart:int = firstParagraphEnd+1; var secondParagraphEnd:int = secondParagraphStart

+ t. getParagraphLength(secondParagraphStart)-l;

// Применяем форматирование

t. setTextFormat(alignFormat, secondParagraphStart, secondParagraphEnd);

Получение информации о форматировании для последовательности символов

Чтобы получить информацию о существующем форматировании для одного или более символов, находящихся в текстовом поле, мы используем метод экземпляра getTextFormat ( ) класса TextField. Этот метод возвращает объект TextFormat, переменные которого описывают форматирование указанных символов. В общем виде метод getTextFormat ( ) записывается следующим образом:

0бьектТехЬПе1с1 .деиех^огтИиндексНачалд, индексКонца)

Если при вызове этого метода указывается один целочисленный аргумент или значение аргумента индексКонца равно значению выражения индексНачала+1, то возвращаемый объект TextFormat будет отражать форматирование для одного символа,

находящегося в позиции индексНачала. Например, в следующем коде мы применяем форматирование к первым четырем символам текстового поля, а затем проверяем название шрифта для первого символа:

// Создаем текстовое поле

var t:TextField = new TextField( );

t. width = 100;

t. border = true;

t. wordwrap = true;

t. text = «What time is it?»;

// Создаем объект TextFormat, переменной font которого присваивается // значение «Arial»

var arialFormat:TextFormat = new TextFormatC ); arialFormat. font = «Arial»;

// Применяем форматирование к слову ‘What’, индексы символов -

// от 0 до 3 (включительно)

t. setTextFormat(arialFormat, 0, 4);

// Получаем объект TextFormat для первого символа var firstCharFormat:TextFormat = t. getTextFormat(0);

// Проверяем значение переменной font trace(firstCharFormat. font); // Выводит: Arial

Если при вызове метода getTextFormat ( ) указываются два целочисленных аргумента, то возвращаемый объект TextFormat представляет форматирование для последовательности символов, начиная с позиции индексНачала и заканчивая позицией индексКонца-1. Если же метод getTextFormat ( ) вызывается без аргументов, то возвращаемый объект TextFormat представляет форматирование для всех символов в этом поле.

Руководство по actionscript. часть 5, стр. 093

Если определенный параметр форматирования (например, шрифт, полужирное начертание или курсив) не является одинаковым для всех символов в указанной последовательности, то значение соответствующей переменной объекта TextFormat для этой последовательности будет равно null. Возвращаясь к нашему примеру, если получить объект TextFormat для всего текста объекта t, то мы обнаружим, что переменные, которые обозначают варианты форматирования, используемые всеми символами, содержат ненулевые значения:

// Получаем объект TextFormat для всех символов в объекте t var allCharsFormat:TextFormat = t. getTextFormat( );

// Теперь проверим, имеют ли все символы полужирное начертание trace(allCharsFormat. bold); // Выводит: false

Однако переменные, обозначающие варианты форматирования, которые отличаются от символа к символу, содержат значение null:

// Проверяем шрифт для всех символов

trace(al1CharsFormat. font); // Выводит: null (шрифт не единообразен)

Шрифт первых четырех символов в объекте t отличается от шрифта остальных символов, стало быть, не существует такого значения переменной font, которое

могло бы точно описать всю последовательность целиком. В связи с этим переменной font присваивается значение null.

Отметим, что любые изменения в объекте TextFormat, возвращаемом методом getTextFormat ( ), не оказывают никакого влияния на текст в объекте объ-eKTTextFieldy кроме тех случаев, когда измененный объект TextFormat повторно применяется к тексту через вызов метода setTextFormat ( ). Например, само по себе следующее выражение присваивания значения переменной font не оказывает никакого влияния на объект t:

al1CharsFormat. font = «Courier New»;

Однако, если мы добавим вызов метода setTextFormat ( ), изменение будет применено:

// Применяет шрифт «Courier New» ко всему текстовому полю t. setTextFormat(allCharsFormat);

Форматирование по умолчанию для текстовых полей

Всякий раз, когда новый текст добавляется в текстовое поле (либо программным путем, либо через пользовательский ввод), среда выполнения Flash форматирует этот текст с использованием формата текста по умолчанию для данного поля. Формат текста по умолчанию для поля представляется внутренним объектом TextFormat, который определяет, как должен быть отформатирован новый текст, если форматирование не указано явно.

Руководство по actionscript. часть 5, стр. 094

Тем не менее формат текста по умолчанию для текстового поля не является постоянным; он динамически изменяет свои настройки, чтобы соответствовать форматированию текста в точке вставки (также называемой позицией курсора). Таким образом, когда пользователь вводит новый текст после некоторого символа в текстовом поле, формат нового текста будет обусловлен форматом данного символа.

Как мы уже знаем, когда для добавления нового текста в текстовое поле используется метод replaceText ( ), новый текст принимает форматирование либо символа, следующего за новым текстом (если существующий текст был удален), либо символа, предшествующего новому тексту (если существующий текст не был удален).

Вообще говоря, формат текста по умолчанию следует рассматривать не как инструмент разработчика для форматирования нового текста, добавляемого в текстовое поле, а как внутреннее средство среды Flash для определения форматирования нового текста, добавляемого в текстовое поле. Чтобы отформатировать новый текст с помощью некоторого формата, используйте метод setTextFormat ( ). Например, рассмотрим следующий код, создающий текстовое поле, весь текст которого отформатирован с использованием полужирного начертания:

var t:TextField = new TextField( ); t. width = 400;

t. text = «This is bold text.»;

var boldFormat-.TextFormat = new TextFormat( );

boldFormat. bold = true;

t. setTextFormat(boldFormat);

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

t. appendText(» This is bold too.»);

Чтобы добавить новый текст без полужирного начертания в объект t, мы должны применить нужное форматирование после добавления этого текста в поле, как показано в следующем коде:

// Добавляем текст

t. appendText(» This isn’t bold.»):

// Сразу же форматируем новый текст без использования полужирного

// начертания. Обратите внимание, что индексы первого и последнего символов

// нового текста определяются динамически с помощью метода String. mdexOf( )

// и переменной TextField. length.

Руководство по actionscript. часть 5, стр. 095

Var regularFormat:TextFormat = new TextFormat( );

regularFormat. bold = false;

t. setTextFormat(regularFormat,

t. textлndex0f(«This isn’t bold.»),

t. length);

Подобный подход, применяемый для форматирования добавляемого пользователем текста, продемонстрирован далее, в разд. «Ввод через текстовые поля».

Хотя формат текста по умолчанию в основном является внутренним инструментом среды Flash, разработчики могут использовать его для решения одной важной задачи: устанавливать форматирование пустого текстового поля. Формат для пустого объекта TextField указывается путем присваивания объекта TextFormat переменной def aultTextFormat объекта TextField, как показано в следующем коде:

// Создаем текстовое поле

var t:TextField = new TextField( );

t. width = 300;

// Создаем объект TextFormat

var defaultFormat:TextFormat = new TextFormatC );

defaultFormat. size = 20;

defaultFormat. color = OxFFOOOO;

defaultFormat. font = «Verdana»;

// Присваиваем объект TextFormat переменной defaultTextFormat объекта t t. defaultTextFormat = defaultFormat;

Как только переменной def aultTextFormat пустого объекта TextField будет присвоено значение, весь текст, добавляемый в данное поле (либо программным путем, либо через пользовательский ввод), будет отформатирован в соответствии с указанным значением переменной def aultTextFormat до тех пор, пока к символам в текстовом поле не будет применено новое пользовательское форматирование. Например, следующий код добавляет новый текст в объект t; текст автоматически форматируется с использованием шрифта Verdana размером 20 пунктов красного цвета (в соответствии со значением переменной t. def aultTextFormat):

Когда к символам в текстовом поле будет применено пользовательское форматирование, новый текст, добавляемый в поле, будет отформатирован в соответствии с форматом текста в месте вставки.

Руководство по actionscript. часть 5, стр. 096

Теперь, когда мы познакомились с основами форматирования текста с помощью класса TextFormat, перейдем к форматированию текста с помощью разметки HTML.

HTML-форматирование текста

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

1. Создать объект TextField.

2. Создать строку текста, представляющую разметку HTML, с использованием ограниченного набора HTML-тегов форматирования, поддерживаемых языком ActionScript.

3. Присвоить текст, отформатированный с помощью разметки HTML, переменной htmlText объекта TextField. Любой текст, отформатированный с помощью разметки HTML и присвоенный переменной htmlText, выводится на экран в виде отформатированного текста.

Применим перечисленные шаги на примере. Наша цель — отформатировать весь текст в поле, используя шрифт Arial размером 20 пунктов с полужирным начертанием (как мы делали это ранее с помощью объекта TextFormat).

Начнем с создания текстового поля, которое будет автоматически изменять свои размеры, чтобы соответствовать нашему отформатированному тексту:

var t:TextField = new TextField( ); t. autoSize = TextFieldAutoSize. LEFT;

Затем мы создадим нашу отформатированную текстовую строку, используя теги и :

var message:String = «»

+ «ActionScript is fun!«;

Наконец, присваиваем строку, содержащую разметку HTML, переменной htmlText объекта t:

t. html Text = message; Результат показан на рис. 27.11.

Руководство по actionscript. часть 5, стр. 097

ActionScript is fun! Рис. 27.11. Текст, отформатированный с помощью разметки HTML

Зачастую текст, содержащий разметку HTML, присваивается непосредственно переменной htmlText, как показано в следующем коде:

t. htmlText = «»

+ «ActionScript is fun!«;

С помощью HTML-разметки мы можем применять любые параметры форматирования, доступные в классе TextFormat. В табл. 27.5 перечислены поддерживаемые

языком ActionScript теги и атрибуты HTML, дополненные перекрестными ссылками на эквивалентные переменные класса TextFormat. Дополнительную информацию по поддержке HTML в языке ActionScript можно найти в разделе, посвященном описанию переменной экземпляра htmlText класса TextField, справочника по языку ActionScript корпорации Adobe.

В отличие от автономной версии приложения Flash Player и версии, реализованной в виде модуля расширения браузера, приложение Adobe AIR включает полнофункциональные синтаксический анализатор и подсистему визуализации разметки HTML, которые способны обрабатывать весь диапазон инструкций языка HTML, таблиц стилей CSS и языка JavaScript, обычно применяемых в браузерах.

Обратите внимание, что, когда таблицы стилей не используются, приложение Flash Player автоматически добавляет разметку HTML к строковому значению переменной htmlText, если HTML-код, присвоенный переменной htmlText, не полностью описывает форматирование текстового поля. Например, следующий код присваивает переменной htmlText текст, не содержащий теги или :

var t:TextField = new TextField( );

t. htmlText = «This field contains HTML!«;

Прочитав значение переменной t. htmlText, мы обнаружим, что были добавлены теги и :

trace(t. htmlText); // Выводит:

This field contains HTML!



Теперь рассмотрим набор тегов и атрибутов языка HTML, поддерживаемых языком ActionScript, которые представлены в табл. 27.5.



Полезные ссылки
Случайные записи
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.54
  • 24.02.2011">Руководство по actionscript. часть 6, стр. 104
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 001
  • 27.08.2010">Атрибуты .
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.7
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.76
  • 06.07.2011">Типичные ошибки начинающих веб-дизайнеров
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.76
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.56
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.12
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 039
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.118
  • 28.02.2010">Где найти и скачать иконки?
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 083
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.11
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...