Март 2011
Руководство по actionscript. часть 5, стр. 075
Hello world, how are you?
Рис. 27.6. Автоматическое добавление разрывов строк
Перенос слов является всего лишь свойством отображения. В тех местах, где переносится исходный текст, никакие символы возврата каретки или новой строки не добавляются. Если переменной wordwrap присвоено значение true, изменение значения переменной width текстового поля приведет к тому, что мягкий перенос будет происходить в другом месте (то есть изменится размещение текста). Жесткие переносы могут быть добавлены в текстовое поле с помощью служебной последовательности » \п» или тега
в тексте HTML (использование разметки HTML в текстовых полях мы рассмотрим далее, в разд. «HTML-форматирование текста»).
1 Не путайте переменную wordwrap с переменной multiline (рассматривается далее, & л ч в разд. «HTML-форматирование текста» и «Ввод через текстовые поля»). Переменная S-Jyj multiline влияет на возможность разметки HTML и пользовательского ввода вызывать разрывы строк, а переменная wordwrap определяет, должна ли среда выполнения Flash осуществлять автоматический перенос строк.
Автоматическое изменение размеров
Чтобы прямоугольная область отображения текстового поля автоматически изменяла свои размеры в соответствии с размером текста в текстовом поле, мы используем переменную экземпляра autoSize класса TextField. Если переменной autoSize присвоить любое значение, отличное от значения TextFieldAutoSize. NONE (установлено по умолчанию), размер текстового поля всегда будет достаточным для отображения текста, присваиваемого этому полю.
^ 1 Переменная autoSize перекрывает любые абсолютные размеры, задаваемые через пе-
ременные height и width объекта TextField.
Переменная autoSize может принимать одно из следующих четырех возможных значений: TextFieldAutoSize. NONE, TextFieldAutoSize. LEFT, TextFieldAutoSize. RIGHT и TextFieldAutoSize. CENTER. Они определяют направление, в котором текстовое поле должно расширяться или сужаться, чтобы соответствовать размерам присвоенного ему текста.
Если переменной autoSize присвоено значение NONE, то размеры текстового поля остаются фиксированными. Если переменной присвоено значение LEFT, то левая граница текстового поля фиксируется, а правая — перемещается. Если переменной присвоено значение RIGHT, то правая граница текстового поля фиксируется, а левая — перемещается. Если же переменной присвоено значение CENTER, то происходит равномерное перемещение левой и правой границ текстового поля. В последних трех случаях, когда происходит перенос строк или встречаются твердые разрывы строк, нижняя граница текстового поля также перемещается для размещения нескольких строк текста.
В листинге 27.3 создается текстовое поле, прямоугольная область отображения которого изменяет свои размеры справа и, когда встречается разрыв строки, снизу.
Руководство по actionscript. часть 5, стр. 076
Листинг 27.3. Перемещаемые правая и нижняя границы
package { import flash. display.*: import flash. text.*;
public class HelloWorld extends Sprite { public function HelloWorld ( ) { var t:TextField = new TextField( ); t. text = «Hello world, how are you?»: t. background = true; t. backgroundColor = OxCCCCCC; t. border = true: t. borderColor = 0×333333;
// Прямоугольная область отображения объекта t // будет автоматически изменять свои размеры, // чтобы вместить значение переменной t. text. t. autoSize = TextFieldAutoSize. LEFT;
addChild(t);
}
}
}
Результат выполнения кода из листинга 27.3 показан на рис. 27.7. Сравните его с рис. 27.5, на котором было изображено текстовое поле, не использующее ни возможность автоматического изменения размеров, ни возможность переноса слов.
Hello world, how are you?
Рис. 27.7. Перемещаемые правая и нижняя границы
Теперь предположим, что мы добавили разрыв строки в текст объекта t, как показано в следующем коде (разрыв строки вставляется с помощью последовательности символов f,\nff):
t. text = «Hello world.» + «\n» + «How are you?»;
На рис. 27.8 показано результирующее текстовое поле. Обратите внимание, что среда выполнения Flash автоматически изменяет размеры прямоугольной области отображения поля, чтобы полностью вместить текст, путем перемещения ее левой и нижней границ.
Руководство по actionscript. часть 5, стр. 077
Hello world. How are you?
Рис. 27.8. Перемещаемые правая и нижняя границы, с разрывом строки
Если переменной wordwrap присвоить значение true, а переменной autoSize — любое значение, отличное от значения TextFieldAutoSize. NONE, нижняя граница текстового поля будет автоматически перемещаться вниз или вверх, но при этом его левая, правая и верхняя границы будут оставаться в исходном положении. Этот код продемонстрирован в листинге 27.4 — в нем создается текстовое поле с перемещаемой нижней границей.
Листинг 27.4. Перемещаемая нижняя граница
package { import flash. display.*; import flash. text.*;
public class HelloWorld extends Sprite { public function HelloWorld ( ) { var t:TextField = new TextField( ); t. text = «Hello world, how are you?»; t. background = true; t. backgroundColor = OxCCCCCC; t. border = true; t. borderColor = 0×333333;
// Вместе две следующие строки кода делают нижнюю границу объекта t // автоматически перемещаемой для размещения значения переменной // t. text.
t. autoSize = TextFieldAutoSize. LEFT; t. wordwrap = true;
addChild(t);
}
}
}
Результат выполнения кода из листинга 27.4 показан на рис. 27.9. Обратите внимание, что ширина прямоугольного отображаемого контейнера зафиксирована и составляет 100 пикселов (по умолчанию), а для размещения текста с переносами перемещается нижняя граница.
Руководство по actionscript. часть 5, стр. 078
Hello world, how are you?
Рис. 27.9. Перемещаемая нижняя граница
^ I Чтобы создать текстовое поле с перемещаемой нижней границей и фиксированной м? j* шириной, присвойте переменной autoSize любое значение, отличное от значения TextFieldAutoSize. NONE, а переменной wordwrap присвойте значение true.
Встраиваемые шрифты для отображения повернутого, искаженного и прозрачного текста
По умолчанию приложение Flash Player не отображает повернутые или искаженные текстовые поля на экране. Например, если мы хотим добавить следующее текстовое поле в список отображения, текст «Hello world» не появится на экране, поскольку поле повернуто:
var t:TextField = new TextField( );
t. text = «Hello world»;
t. rotation = 30; // Поворачиваем текст
Подобным образом, если мы захотим добавить следующее текстовое поле в список отображения, текст «Hello world» не появится на экране, поскольку поле искажено:
var t:TextField = new TextFieldC ); t. text = «Hello world»;
t. transform. matrix = new Matrixd, 1, 0, 1); // Искажаем текст
Кроме того, по умолчанию Flash Player для отображения всех текстовых полей использует полную непрозрачность, даже если для них устанавливается уровень прозрачности через переменную экземпляра alpha класса TextField. Например, если бы мы хотели добавить следующее текстовое поле в список отображения, на экране текст «Hello world» оказался бы полностью непрозрачным, хотя уровню канала Alpha данного поля установлено значение 20 %:
var t:TextField = new TextField( ); t. text = «Hello world»; t. alpha = .2;
Приложение Flash Player правильно отображает только те повернутые, искаженные и прозрачные текстовые поля, которые используют встраиваемые шрифты. Информацию о визуализации текста с использованием встраиваемых шрифтов можно найти далее, в разд. «Шрифты и отображение текста».
Руководство по actionscript. часть 5, стр. 079
Изменение содержимого текстового поля
После того как текстовому полю будет присвоено текстовое содержимое, это содержимое можно изменить через переменную text. Например, следующий код создает объект TextField и присваивает его текстовому содержимому строку «Hello»:
var t:TextField = new TextFi eld( ); t. text = «Hello»;
Следующий код полностью заменяет текст объекта t строкой «Goodbye»: t. text = «Goodbye»;
Чтобы добавить новый текст к существующему содержимому текстового поля (вместо того чтобы полностью заменять текст в текстовом поле), мы используем либо метод экземпляра appendText ( ) класса TextField, либо оператор +=. Например, следующий код добавляет строку «…hope to see you again! » к тексту «Goodbye»:
t. appendText(«…hope to see you again 1″);
После выполнения предыдущей строки кода переменная t. text будет иметь такое значение:
«Goodbye…hope to see you again!»
Для добавленного текста используется форматирование последнего символа в текстовом поле, а любой существующий текст сохраняет свое первоначальное форматирование. Если в момент вызова функции appendText ( ) текстовое поле не содержит никакого текста, добавляемый текст будет отформатирован в соответствии с текстовым форматом, используемым по умолчанию для данного текстового поля.
^ 1 Информацию по форматированию текста и текстовому формату, используемому по умол-
_W
чанию, можно найти в следующем разд. «Форматирование текстовых полей».
Руководство по actionscript. часть 5, стр. 080
Следующий код, как и предыдущий, добавляет новый текст в конец существующего текста в текстовом поле, но делает это не с помощью метода appendText ( ), а с помощью оператора +=:
t. text += » Come again soon.»;
В отличие от метода appendText ( ), оператор += сбрасывает форматирование для всего текста в поле, устанавливая формат, используемый по умолчанию. Кроме того, оператор гораздо медленнее метода, поэтому следует избегать его использования.
Чтобы заменить некоторую последовательность символов в текстовом поле новой последовательностью, мы используем метод экземпляра replaceText( ) класса TextField, который имеет следующий обобщенный вид:
объектТехЬПе! с1. гер~\асеТехКиндексНачала, индексКонца, новыйТекст)
Метод replaceText ( ) удаляет символы в объекте 0бъектТехЬПе1с1, начиная с индекса индексНачала и заканчивая индексом индексКонца-l, и заменяет их текстом новыйТекст. Новое объединенное значение сохраняется в переменной oObeKTTextField. text.
Например, следующий код заменяет символы «bed» в тексте «abede» новым текстом «х»:
var t:TextField = new TextField( );
t. text = «abede»; t. replaceTextd, 4, «x»); trace(t. text); // Выводит: axe
Если значения индексНачала и индексКонца равны, то строка новыйТекст вставляется непосредственно перед указанным индексом индексНачала. Например, следующий код вставляет символ «s» непосредственно перед символом «t»:
var t:TextField = new TextField( ); t. text = «mat»; t. replaceText(2, 2, «s»); trace(t. text); // Выводит: mast
I В оставшейся части этого раздела рассматриваются вопросы форматирования, относящие А з ся к методу replaceText(), и для чтения последующего материала необходимо понимание Я?»’ методик форматирования текста, рассматриваемых в следующем разделе.
Руководство по actionscript. часть 5, стр. 081
Форматирование текста, вставляемого через метод replaceText ( ), зависит от указываемых значений для параметров индексНачала и индексКонца. Если значения отличаются, то вставляемый текст использует форматирование символа, следующего за вставляемым текстом (то есть символа в позиции индексКонца). Любой существующий текст сохраняет свое первоначальное форматирование. Например, рассмотрим следующий код, который создает текстовое поле, отображающее слово «lunchtime*», при этом символы «time» отформатированы с использованием полужирного шрифта:
var boldFormat:TextFormat = new TextFormat( );
boldFormat. bold = true;
var t:TextField = new TextField( );
t. text = «lunchtime»;
t. setTextFormat(boldFormat, 5, 9); // Выделяем слово «time»
// полужирным шрифтом
Результатом выполнения этого кода является строка:
lunchtime
Теперь мы воспользуемся методом replaceText ( ), чтобы заменить слово «lunch» словом «dinner», как показано ниже:
t. replaceText(0, 5, «dinner»); 4 // Заменяем слово «lunch» словом «dinner»
В итоге слово «dinner» будет отформатировано с использованием полужирного шрифта, что соответствует форматированию символа в позиции индексКонца ( » t»). Результат выглядит следующим образом:
dinnertime
Чтобы вместо существующего формата текстового поля использовать новый формат для вставляемого текста, мы присваиваем новый текст с помощью метода replaceText ( ), а затем сразу же присваиваем желаемый формат этому тексту. Например, следующий код снова заменяет слово «lunch» словом «dinner», но на этот раз к новому добавленному тексту также применяется форматирование:
t. replaceText(0, 5. «dinner»); // Заменяем слово «lunch» словом «dinner» var regularFormat;TextFormat = new TextFormat( ); regularFormat. bold = false;
t. setTextFormat(regularFormat, 0, 6); // Отменяем форматирование полужирным
// шрифтом слова dinner
Результат выполнения предыдущего кода выглядит следующим образом: dinnertime
Когда оба аргумента индексНачала и индексКонца метода replaceText ( ) равны О, текст вставляется в начало текстового поля, а для форматирования вставляемого текста применяется используемый по умолчанию формат данного поля. Первоначальное форматирование любого существующего текста сохраняется.
Руководство по actionscript. часть 5, стр. 082
Когда аргументы индексНачала и индексКонца равны, и при этом их значения больше 0, для форматирования вставляемого текста используется формат символа, непосредственно предшествующего вставляемому тексту (то есть символа в позиции индексКонца-1). Первоначальное форматирование любого существующего текста сохраняется. Например, следующий код снова создает текстовое поле, которое отображает слово «lunchtime», применяя полужирный шрифт для слова «time»:
var boldFormat:TextFormat = new TextFormatC );
boldFormat. bold = true:
var t:TextField = new TextField( ):
t. text = «lunchtime»;
t. setTextFormat(boldFormat, 5, 9); // Выделяем слово «time»
// полужирным шрифтом
На этот раз мы вставляем текст «break» сразу после символа «t»:
t. replaceText(5, 5, «break»); // Вставляем слово «break» после символа «t»
Поскольку символ в позиции индексКонца-1 («h») не отформатирован с использованием полужирного шрифта, для слова «break» полужирный шрифт применяться не будет, а результат выполнения предыдущего кода будет выглядеть следующим образом:
lunchbreaktime
Теперь ближе познакомимся с методиками форматирования текста.
Руководство по actionscript. часть 5, стр. 083
Форматирование текстовых полей
Язык ActionScript предоставляет три различных инструмента для форматирования текста: класс flash. text. TextFormat, разметку HTML и класс flash. text. Stylesheet. Все три инструмента позволяют управлять следующими вариантами форматирования абзацев и символов, но используют различный синтаксис.
Форматирование на уровне абзацев — выравнивание, отступы, маркеры, высота строки (интервал между строками), шаг табуляции.
Форматирование на уровне символов — гарнитура, размер, вес шрифта (полужирный или обычный), цвет, стиль шрифта (курсив или обычный), кернинг, расстояние между буквами (трекинг), подчеркивание текста, гипертекстовые ссылки.
Форматирование на уровне абзацев применяется ко всему абзацу, при этом абзац определяется как часть текста, ограниченная разрывами строки (\n,
или ). В отличие от этого, форматирование на уровне символов применяется
к произвольным последовательностям отдельных символов, ограниченным индексами в тексте или тегами HTML или XML.
Класс TextFormat предоставляет точное программное управление над форматированием текста и обычно используется для динамической генерации текстового вывода. Класс Stylesheet помогает отделить инструкции форматирования от содержимого, к которому применяется данное форматирование, и обычно применяется при форматировании больших блоков содержимого HTML или XML. Инструкции форматирования языка HTML предлагают простой, интуитивно понятный способ форматирования текста, но загрязняют текстовое содержимое разметкой. Разметка HTML обычно используется в тех случаях, когда удобство важнее гибкости, как, возможно, при форматировании текста в прототипе приложения или форматировании небольших фрагментов текста, которые гарантированно не будут изменяться в течение проекта.
Класс TextFormat является полностью совместимым и взаимозаменяемым с инструкциями форматирования языка HTML. Однако класс Stylesheet не совместим ни с классом TextFormat, ни с инструкциями форматирования языка HTML. Текстовые поля, использующие таблицы стилей, могут быть отформатированы только с помощью экземпляров класса Stylesheet.
В следующих разделах рассматриваются вопросы общего использования объектов TextFormat и Stylesheet, а также разметки HTML. Каждый раздел содержит примеры распространенных операций форматирования. Подробное описание каждого отдельного параметра форматирования можно найти в следующих разделах справочника по языку ActionScript корпорации Adobe:
? класс TextFormat;
? переменная экземпляра htmlText класса TextField;
? класс Stylesheet.
Руководство по actionscript. часть 5, стр. 084
Присваивание значения переменной text объекта TextField приводит к удалению любого пользовательского форматирования, связанного с этим полем. Чтобы добавить текст в поле, сохранив его текущее форматирование, используйте метод экземпляра replaceText() класса TextField.
Форматирование текста с помощью класса TextFormat
Общий процесс форматирования текста с использованием класса TextFormat заключается в следующем.
1. Создать объект TextFormat.
2. Установить переменные объекта TextFormat, отражающие желаемое форматирование.
3. Применить форматирование к одному символу или более, используя метод экземпляра setTextFormat ( ) класса TextField.
Применим перечисленные шаги на примере. Наша цель — отформатировать весь текст в поле, используя шрифт Arial размером 20 пунктов с полужирным начертанием.
В языке ActionScript все размеры шрифтов указываются в пикселах. Если шрифт имеет размер 20 пунктов, это интерпретируется приложением Flash Player как 20 пикселов.
А*_
Мы начнем работу над нашим кодом форматирования с создания текстового поля, размеры которого будут изменяться автоматически, чтобы соответствовать размерам форматируемого текста:
var t:TextField = new TextField( ); t. text = «ActionScript is fun!»; t. autoSize = TextFieldAutoSize. LEFT;
Далее создадим объект TextFormat:
var format:TextFormat = new TextFormat( );
Затем присвоим переменным font, size и bold созданного объекта TextFormat желаемые значения: «Arial», 20 и true, как показано в следующем коде:
format. font = «Arial»; format. size = 20; format. bold = true;
Вместе переменные объекта TextFormat описывают стиль форматирования, который может быть применен к некоторому символу или последовательности символов. Доступные переменные перечислены в следующем подразд. «Доступные переменные класса TextFormat».