Настройка текстового поля

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

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

Управление размером поля
Чаще всего размер поля задается при его создании, и в процессе проигрывания фильма он не меняется. Как вы помните, если поле изготавливается вручную, делается это при помощи специального маркера, расположенного в левом нижнем углу поля. Размеры программно создаваемых полей задают специальные параметры метода createTextField().

Однако иногда размеры поля должны меняться и динамически. Обычно такая потребность возникает, если площадь текстовой области зависит от объема введенной информации.


В ActionScript имеется два способа решить эту задачу.

Во-первых, можно воспользоваться свойствами _width и _height. Этот подход наиболее универсален, так как он позволяет менять размер поля полностью независимо (в отличие от свойства autoSize) от введенного в него текста. Однако на практике данная возможность используется редко, так как обычно необходимо, чтобы поле расширялось или сжималось исключительно по мередобавления или удаления текста. Следовательно, прежде чем применить свойства _width и _height, каким-то образом нужно определить ширину и высоту области, занимаемую текстом. Сделать это, опираясь только на знание размера шрифта и количество знаков в тексте, невозможно. Но проблема эта все же решаема благодаря наличию у класса TextField специальных свойств textHeight (высота текста) и textWidth (ширина текста). В качестве примера приведем код, меняющий размер поля ввода по мере добавления (или удаления) в него текста:

this.createTextField(pole", 0, 200, 200, 100, 30); // Создаем текстовое
// поле
pole.type = "input"; // Делаем поле полем ввода
pole.text = "Замените текст"; // Задаем текст по умолчанию
pole.multiline = true; // Делаем поле многострочным
pole.border = true; // Активизируем отображение рамки
pole._width=pole.textWidth, pole._height=pole.textHeight; // Выравниваем
// поле по тексту
// При изменении текста в поле его размеры также будут меняться
pole.onChanged = function():Void {
this._width=this.textWidth, this._height=this.textHeight;
};

Во-вторых, можно активизировать режим автоматического задания высоты и ширины поля.


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

• none — автоматического изменения размеров поля не происходит. Значение по умолчанию;

• left — при добавлении символов в строку поле будет расширяться вправо. Создание новой
строки будет сопровождаться расширением поля вниз. Верхняя и левая границы смещаться не будут. Данный режим — наиболее часто используемый из режимов автоматического масштабирования поля;

• center — для данного режима характерно то, что линия, делящая по вертикали поле на две половины, остается неподвижной. Расширение же или сжатие поля происходит как влево, так и вправо в разной степени. Наоборот, при изменении количества строк смещается только нижняя граница, верхняя же остается статичной;

• right — режим, противоположный left. При изменении горизонтальных размеров текста смещаться будет левая граница ноля. Изменение высоты текста будет сопровождаться сдвигом нижней границы. Правая и верхняя границы поля всегда остаются неподвижными.

На практике для свойства autoSize чаще всего используется два значения — none и left. Остальные режимы автовыравнивания применяются довольно редко.


По этой причине разработчики ввели упрощенную форму свойства autoSize, принимающую только два значения: true — используется режим left, false – автоматически размеры поля меняться не будут.

Для примера перепишем приведенный выше код так, чтобы он основывался на свойстве autoSize:

this.createTextField(pole", о, 200, 200, 100, 30);
pole.type = "input", pole.text = "Замените текст", pole.multiline = true,
pole.border = true;
pole.autoSize="left";

Как видите, решить задачу динамического изменения размеров поля исходя из площади, занимаемой текстом, гораздо проще при помощи свойства autoSize, нежели используя свойства _width и _height в связке со свойствами textWidth и textHight.

Рамка и задний фон
По умолчанию текстовое поле отображается без заднего фона и рамки. Это не всегда приемлемо, особенно в случае полей ввода, которые должны хорошо выделяться среди остальных элементов интерфейса.

Чтобы включить отображение рамки вокруг поля, нужно присвоить значение true специальному свойству border. Если данное свойство равно false, то рамка не прорисовывается.

Изначально рамка отображается черной. Однако при желании ее можно сделать любого цвета. Для этого служит свойство borderColor, принимающее в качестве значения код оттенка, которым должна быть нарисована рамка. Например:

this.createTextField{"pole", 0, 200, 200, 130, 25);
pole.text = "Поле с красной рамкой";
pole.border=true; // Включаем отображение рамки
pole.borderColor=0xFF0000; // Делаем рамку красной

Включение отображения заднего фона делает поле более заметным и обособленным. Это подобно тому, как если бы область поля была закрашена непрозрачной заливкой. Чтобы отобразить задний фон, необходимо присвоить значение true особому свойству background. Отсутствию фона соответствует величина false.

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

this.createTextField("pole", 0, 200, 200, 200, 25);
pole.text="Пoлe с красной рамкой и синим фоном";
pole.border=true,pole.borderColor=0xFF0000;
pole.background=true; // Включаем отображение заднего фона
pole.backgroundColor=0x009FF7; // Делаем задний фон светло-синим

Включить отображение рамки и заднего фона можно и вручную. Для этого нужно нажать кнопку!. Однако подобный подход куда менее универсален по сравнению с использованием описанных в этом разделе свойств. Во-первых, при этом нельзя активизировать отображение только рамки или только заднего фона — они визуализируются в паре. Вовторых, на Инспекторе Свойств нет элементов, позволяющих произвольным образом задавать цвет рамки (она только черная) и фона (он только белый).

К сожалению, нельзя управлять толщиной рамки поля, а также делать ее или задний фон прозрачным. Если подобная необходимость возникнет, то нарисовать соответствующие элементы придется вручную, разместив затем поле над ними.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Автоматическое удаление пробелов. Свойство condenseWhite
Встраивание в фильм целого шрифта
Динамическая замена выделенного текста. Метод replaceSel()
Динамическое задание выделения. Метод setSelection()
Задание и извлечение текста поля

Вернуться в раздел: Action Script / 13. Работа с текстом