В. Дронов - Macromedia Flash Professional 8. Графика и анимация
В случае текстового блока с помощью перехватчика могут быть обработаны события onchanged и onScroller. (Это значит, что перехватчик должен содержать свойства onchanged и onScroller.) Вот пример сценария, создающего такой перехватчик (предположим, что функции обработки нажатия клавиш fOnChanged и fOnScroller уже описаны):
myListener = new Object ();
myListener.onchanged = fOnChanged;
myListener.onScroller = fOnScroller;
Изначально объект object не содержит свойств onchanged и onScroller. Они будут созданы в экземпляре этого объекта myListener, который мы только что создали, и будут "принадлежать" только этому экземпляру.
Для привязки перехватчика к текстовому блоку используется метод addListener объекта Text Field. Этот метод принимает единственный параметр — ссылку на перехватчик.
txtName.addListener(myListener);
Это выражение привязывает созданный нами перехватчик к полю ввода txtName.
Один и тот же перехватчик можно привязать сразу к нескольким текстовым блокам:
txtName2.addListener(myListener);
txtFamily.addListener(myListener);
Это значит, что события, происходящие в разных текстовых блоках, можно обрабатывать с помощью одного комплекта функций-обработчиков. Иногда это бывает полезно, особенно если обработчики, привязанные к разным текстовым блокам, делают одно и то же.
Чтобы "отвязать" от текстового блока ненужный более перехватчик, воспользуемся методом removeListener. Этот метод в качестве единственного параметра также принимает ссылку на перехватчик.
txtName.removeListener(myListener);
Теперь останется только совсем удалить ненужный перехватчик:
delete myListener;
Создание и удаление текстовых блоков из сценариевFlash также позволяет создавать и удалять текстовые блоки с помощью особых сценариев. Сейчас мы выясним, как это делается.
Для создания поля ввода или динамического текстового блока используется метод createTextField объекта movieClip. Формат его вызова таков:
<Клип>.createTextField(<Имя>, <Порядок перекрытия>, <Х>, <Y>,
<Ширина>, <Высота>);
Первый параметр задает имя создаваемого поля ввода или динамического текстового блока в строковом виде, а второй — его порядок перекрытия. Третий и четвертый параметры задают соответственно горизонтальную и вертикальную координаты верхнего левого угла создаваемого текстового блока относительно клипа, в котором он создается. Последние два параметра задают размеры — ширину и высоту — текстового блока. И координаты, и размеры задаются в пикселах.
Нужно помнить, что с помощью этого метода создается динамический текстовый блок, т. е. свойство type соответствующего экземпляра объекта TextField сразу же получит значение "dynamic". Чтобы преобразовать этот экземпляр в поле ввода, нужно присвоить свойству type строку "input". Например:
_root.createTextField("txtName", 0, 100, 100, 200, 50);
_root.txtName.type = "input";
_root.txtName.variable = "Name";
Этот сценарий создает поле ввода txtName и привязывает его к переменной Name.
Для удаления созданного с помощью метода createTextField текстового блока используется метод removeTextField объекта TextField:
_root.txtName.removeTextField();
Внимание!С помощью действия или метода removeText Field можно удалить только те текстовые блоки, которые созданы из сценариев. Текстовые блоки, созданные вручную, не могут быть удалены таким образом.
Использование объекта SelectionFlash также предоставляет возможность управления текстовым курсором и выделением текста в текстовых блоках. Для этого предназначен объект selection, единственный экземпляр которого по имени selection создается самим Flash.
Метод get Focus этого объекта возвращает в строковом виде имя переменной, привязанной к текстовому блоку, имеющему в данный момент фокус ввода. Если к текстовому блоку не привязана переменная или если фокус ввода имеет кнопка или клип, то возвращается путь (также в строковом виде). Если ни один текстовый блок, ни одна кнопка и ни один клип не имеют фокуса, возвращается значение null.
Для того чтобы дать какому-либо текстовому блоку (а также кнопке или клипу) фокус ввода, нужно вызвать метод set Focus. В качестве единственного параметра этому методу передается путь в строковом виде:
Selection.setFocus("_root.txtName");
Selection.setFocus("_root.btnOK");
Чтобы снять фокус ввода со всех элементов управления, достаточно передать методу setFocus в качестве параметра значение null.
С помощью объекта selection мы можем получить позицию текстового курсора в поле ввода. Для этого достаточно вызвать не принимающий параметров метод get Caret index, который вернет нам номер символа, на котором стоит курсор. (Не стоит забывать, что нумерация символов начинается с нуля.) Если же ни одно поле ввода не имеет фокуса, возвращается значение — 1.
Методы getBeginindex и getEndindex возвращают номера соответственно начального и конечного символа выделенного в текстовом блоке фрагмента текста. Если ничего не выделено, также возвращается значение — 1.
Можно выделить нужный фрагмент текста, воспользовавшись методом setSelection. Первый параметр этого метода должен иметь значение, равное номеру первого символа выделяемого фрагмента, а второй параметр — значение, равное номеру последнего символа. Вот так:
Selection.setSelection(10, 30);
Чтобы просто поставить текстовый курсор в требуемую позицию, нужно передать методу setSelection номер нужного символа и в первом, и во втором параметре:
Selection.setSelection(10, 10);
Объект selection поддерживает одно-единственное событие onSetFocus, возникающее при перемещении фокуса ввода. Обработка этого события возможна только с помощью перехватчика. Например:
myListener = new Object ();
myListener.onSetFocus = fOnSetFocus;
Selection.addListener(myListener);
Это пример создания и привязки перехватчика к объекту selection. Функция fOnsetFocus выполняет собственно обработку события onset Focus; определение этой функции было опущено.
Обработка нажатий клавиш клавиатуры
Для обработки нажатия клавиш клавиатуры служит объект Key. Его единственный экземпляр, также носящий имя Key, создается самим Flash.
Свойства и методы объекта Key
Два важнейших метода, которые обязательно понадобятся нам для обработки нажатий клавиш, — это методы getAscii и getcode. Первый метод возвращает код символа ASCII, который присвоен нажатой клавише. Второй метод возвращает так называемый виртуальный код нажатой клавиши — низкоуровневый код, позволяющий узнать, какая клавиша на клавиатуре была нажата. Оба эти метода не принимают параметров.
Вот пример выражений вызова этих методов:
codel = Key.getAscii(); code2 = Key.getCode();
Код символа ASCII зависит от текущей кодировки. Коды символов кодировки Windows 1251 приведены в интерактивной справке Flash; там же приведены и виртуальные коды клавиш.
Еще один полезный метод объекта Key — метод isDown. Он принимает единственный параметр — виртуальный код клавиши — и возвращает значение true, если эта клавиша нажата. Например:
if (Key.isDown(Key.ENTER)) {. }
Приведенное выше выражение проверяет, была ли нажата клавиша <Enter>.
Метод isToggied возвращает значение true, если в момент его вызова была включена одна из клавиш-переключателей: <NumLock> или <CapsLock>. Он принимает единственный параметр — числовое значение 20 (виртуальный код клавиши <CapsLock>) или 144 (виртуальный код клавиши <NumLock>).
Пример вызова метода isToggied:
if (Key.isToggied(20)) { s = s.toLowerCase; }
Кроме вышеописанных методов, объект Key поддерживает ряд свойств, доступных только для чтения и возвращающих значения виртуальных кодов различных служебных клавиш клавиатуры. Все эти свойства приведены в табл. 19.14.
Обработка нажатий клавиш в клипах
А теперь поговорим о том, как же собственно выполняется обработка нажатий клавиш клавиатуры. Выполнить ее можно двумя способами, которые мы и рассмотрим в этом разделе.
Обработка нажатий клавиш в клипахПервый — более простой — способ обработки нажатий клавиш — заключается в привязке к клипу, который будет реагировать на нажатия, обработчика события keyDown, возникающего при нажатии клавиши. Мы рассмотрим создание этого обработчика на примере.