Март 2011

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

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

0бъектТехЬПе1с1.setTextFormat (обьекг7ех? Рогш?, индексНачала, индексКонца)

В приведенном обобщенном коде oObeKTTextField — это текстовое поле, текст которого будет отформатирован, a oObeKTTextFormat — объект TextFormat, содержащий инструкции форматирования. Параметр индексНачала — это необязательное целое число, обозначающее индекс первого символа, который будет отформатирован с помощью объекта oObeKTTextFormat. Параметр индексКонца — это необязательное целое число, обозначающее индекс символа, следующего за последним символом, который будет отформатирован с помощью объекта обь-eKTTextFormat.

Когда указаны оба аргумента индексНачала и индексКонца, метод setTextFormat ( ) форматирует последовательность символов, начиная с индекса индексНачала и заканчивая индексом индексКонца-1, в соответствии со значениями переменных объекта oObeKTTextFormat. Когда аргумент индексНачала указан, а аргумент индексКонца — нет, метод setTextFormat ( ) форматирует один символ с индексом индексНачала в соответствии со значениями переменных объекта oObeKTTextFormat. Когда не указан ни аргумент индексНачала, ни аргумент индексКонца, метод setTextFormat ( ) форматирует все символы в объекте oObeKTTextFieldв соответствии со значениями переменных объекта oObeKTTextFormat. Любая переменная объекта o6beKTTextFormat, которой присвоено значение null, не влияет на форматирование целевой последовательности

символов (существующее форматирование, определяемое данной переменной, сохраняется).

Попробуем использовать метод setTextFormat ( ), чтобы отформатировать символы в нашем тестовом текстовом поле t. Вот этот код:

t. setTextFormat(format);

Для обзора в листинге 27.5 приведен весь код, необходимый для форматирования всех символов в текстовом поле с использованием шрифта Arial размером 20 пунктов полужирного начертания.

Листинг 27.5. Форматирование текстового поля

// Создаем текстовое поле var t:TextField = new TextFieldC ); t. text = «ActionScript is fun!»; t. autoSize = TextFieldAutoSize. LEFT;

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

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

Результат выполнения кода из листинга 27.5 проиллюстрирован на рис. 27.10.

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

ActionScript is fun! Рис. 27.10. Текст, отформатированный с помощью объекта TextFormat

Теперь предположим, что мы хотим отформатировать весь текст в поле с помощью шрифта Arial размером 20 пунктов, но при этом хотим, чтобы полужирным шрифтом было выделено только слово fun. Нам потребуется два объекта TextFormat: один для общих настроек шрифта и один для шрифта полужирного начертания. Этот код показан в листинге 27.6 (обратите внимание на использование аргументов индексНачала и индексКонца во втором вызове метода setTextFormat ( )):

Листинг 27.6. Два формата

// Создаем текстовое поле var t:TextField = new TextField( ); t. text = «ActionScript is fun!»; t. autoSize = TextFieldAutoSize. LEFT;

// Создаем объект TextFormat для общих настроек шрифта var fontFormat:TextFormat = new TextFormat( ); fontFormat. font = «Arial»; fontFormat. size = 20;

// Создаем объект TextFormat для настроек шрифта полужирного начертания var boldFormat:TextFormat = new TextFormat( );

boldFormat. bold = true;

// Применяем общие настройки шрифта ко всему текстовому полю t. setTextFormat(fontFormat);

// Применяем настройки шрифта полужирного начертания только к слову fun t. setTextFormat(bol dFormat. 16, 19):

Стоит отметить, что последовательное форматирование не является деструктивным; изменения в форматировании касаются только установленных переменных, поэтому во втором вызове метода setTextFormat ( ) слово fun сохраняет свою гарнитуру шрифта (Arial) и размер (20) и приобретает полужирное начертание.

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

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

Доступные переменные класса TextFormat

В табл. 27.3 и 27.4 перечислены переменные класса TextFormat, применяемые для форматирования на уровне символов и абзацев. Подробные сведения о каждой переменной можно найти в описании класса TextFormat в справочнике по языку ActionScript корпорации Adobe.

В табл. 27.3 перечислены переменные класса TextFormat, используемые для установки параметров форматирования на уровне символов.

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

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

bold Тип Boolean. Задает отображение символа с использованием полужирного начертания

color Указывает цвет символа в виде 24-битного целого числа (например, OxFFOOOO)

font Задает шрифт

italic Тип Boolean. Определяет отображение символа с использованием курсива

kerning Тип Boolean. Задает, нужно ли использовать автоматический кернинг для пар символов

letterSpacing Указывает расстояние между буквами (трекинг), в пикселах

size Задает размер шрифта, в пунктах (1/72 дюйма)

target Определяет окно или фрейм для гипертекстовой ссылки

underline Тип Boolean. Задает отображение символа с использованием подчеркивания

url Определяет гипертекстовую ссылку

В табл. 27.4 перечислены переменные класса TextFormat, используемые для установки параметров форматирования на уровне абзацев.

Руководство по 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.



Полезные ссылки
Случайные записи
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 042
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.66
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.3
  • 19.02.2012">Кто же такой верстальщик?
  • 04.08.2010">Современное выравнивание макета
  • 19.10.2011">Памяти Стива Джобса
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 015
  • 04.09.2011">FastStore Image Viewer
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 095
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.38
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 080
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.15
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 099
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.166
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 067
Опрос

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

View Results

Loading ... Loading ...