Март 2011

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

// (Если в данный момент пользователь перетаскивает ползунок,

// изменение прокрутки, вызвавшее данное событие, явилось результатом

// перетаскивания ползунка в новую позицию, поэтому обновлять полосу

// прокрутки не нужно, поскольку ползунок уже находится в правильной

// позиции.)

if (!dragging) {

происходящую Пользователь операцию

changed = true;

}

}

// Устанавливает размеры и позицию фонового изображения и ползунка // полосы прокрутки в соответствии с размерами и содержимым связанного // текстового поля. Информацию о переменных scrolIV, maxScrolIV // и bottomScrollV класса TextField можно найти в справочнике // по языку ActionScript корпорации Adobe, public function updateScrollbar ( ):void {

// Устанавливаем размеры и позицию фонового изображения полосы прокрутки.

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

// Данный код всегда помещает полосу прокрутки справа от поля.

scrollTrack. х = t. x + t. width;

scrollTrack. y = t. y;

scrollTrack. height = t. height;

scrol lTrack. width = scrollbarWidth;

// Проверяем количество видимых на экране строк текстового поля

var numVisibleLines:int = t. bottomScrollV — (t. scrol1V-1);

// Если часть строк в текстовом поле не видна на экране…

if (numVisibleLines < t.numlines) { // ...отображаем ползунок scrolithumb.visible = true; // теперь устанавливаем размеры ползунка // высота ползунка определяется процентным соотношением // отображаемых строк, умноженным на высоту текстового поля var thumbheight:int = math.floor(t.height *

(numVi siblel_i nes/t. numLi nes)); // Высота ползунка не должна быть меньше значения minimumThumbHeight scrolIThumb. height = Math. max(minimumThumbHeight, thumbHeight); scrolIThumb. width = scrollbarWidth;

// Теперь устанавливаем позицию ползунка scrollThumb. x = t. x + t. width;

// Вертикальная позиция ползунка определяется количеством // прокрученных строк в поле, выраженным в процентах и умноженным // на высоту «пространства полосы» (это высота // полосы прокрутки за вычетом высоты ползунка), scrolIThumb. y = t. y + (scrollTrack. height-scrolIThumb. height) * ((t. scrol 1V-D/U. maxScrol 1V-D);

} else { •

// Если в данный момент на экране отображаются все строки текстового // поля, прячем ползунок полосы прокрутки scrolIThumb. visible = false;

}

// Устанавливает вертикальную позицию прокрутки текстового поля // в соответствии с относительной позицией ползунка public function synchTextToScrolIThumb ( ):void {

var scrolIThumbMaxY:Number = t. height-scrollThumb. height;

var scrolIThumbY:Number = scrolIThumb. y-t. у;

t. scrolIV = Math. round(t. maxScrolIV

* (scrol1ThumbY/scrol1ThumbMaxY));

}

// Выполняется, когда пользователь нажимает основную кнопку мыши // над ползунком

private function mouseDownListener (e:MouseEvent):void { // Начинаем операцию перетаскивания ползунка. (Метод startDrag( ) // наследуется из класса Sprite.) var bounds:Rectangle = new Rectangle(t. x + t. width,

t. y.

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

0,

t. height-scrolIThumb. height); scrollThumb. startDrag(false, bounds); dragging = true;

}

// Выполняется, когда пользователь отпускает основную кнопку мыши // (в любом месте области отображения приложения Flash Player и даже // за ее пределами)

private function mouseUpListener (e:MouseEvent):void { // Если пользователь перетащил ползунок, обновляем вертикальную // позицию прокрутки поля, после чего прекращаем операцию // перетаскивания ползунка if (dragging) {

synchTextToScrollThumb( );

scrolIThumb. stopDragC );

dragging = false;

}

}

// Выполняется при перемещении указателя мыши (над областью отображения // приложения Flash Player)

private function mouseMoveListener (e:MouseEvent):void { // Если пользователь перетаскивает ползунок, устанавливаем // вертикальную позицию прокрутки в соответствии с относительной // позицией ползунка if (dragging) { synchTextToScrolIThumbC );

}

}

}

}

В листинге 22.16 представлен простой тестовый класс, который демонстрирует использование класса БсгоИВагиз листинга 22.15.

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

Листинг 22.16. Демонстрационный класс, представляющий использование класса ScrollBar

package { import flash. display.*; import flash. text.*; import flash. events.*; import flash. utils.*;

// Демонстрирует использование класса Scroll Ваг public class ScrolIBarDemo extends Sprite { public function ScrolIBarDemo ( ) {

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

var inputfi eld-.TextFi eld = new TextField( );

// Заполняем текстовое поле начальным содержимым

inputfield. text = «1\п2\пЗ\п4\п5\п6\п7\п8\п9″;

inputfield. height = 50;

inputfield. width = 100;

inputfield. border = true;

inputfield. background = true;

inputfield. type = TextFieldType. INPUT;

inputfield. multiline = true;

addChild(inputfield);

// Создаем полосу прокрутки и связываем ее // с объектом TextField

var scrollbar:ScrolIBar = new ScrollBar(inputfield); addChi ld(scrol1 bar);

}

}

}

Событие TextEvent. LINK

Событие TextEvent. LINK применяется для вызова кода на языке ActionScript, когда пользователь щелкает кнопкой мыши на гипертекстовой ссылке в объекте TextField. Это событие возникает в тех случаях, когда пользователь щелкает кнопкой мыши на гипертекстовой ссылке, адрес URL которой начинается с псевдопротокола event.

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

Введение в использование гипертекстовых ссылок в текстовых полях языка ActionScript можно найти в гл. 27.

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

объектТехЬП eld. htm}Text = «текстСсылки»;

В предыдущем коде обьектТехЬПе1с1 — это объект TextField, содержащий ссылку, а текстСсылки — текст, который отображается на экране и на котором щелкает кнопкой мыши пользователь. Когда пользователь щелкает кнопкой мыши на тексте текстСсылки, приложение Flash Player выполняет все приемники, зарегистрированные в объекте объектТехЬПе1с! или в его отображаемых предках для события TextEvent. LINK. В каждый приемник передается объект TextEvent, значением переменной text которого является указанная строка содержимоеСсылки. Эта строка обычно обозначает операцию языка ActionScript, которая должна быть выполнена при щелчке кнопкой мыши на ссылке.

Обобщенный код, необходимый для регистрации приемника в объекте TextField для события TextEvent. LINK, выглядит следующим образом:

обьектТехЬПе Id. addEventLi stener (TextEvent. LINK, приемник);

Обобщенный код для приемника события TextEvent. LINK выглядит следующим образом:

private function приемник (e:TextEvent):void { }

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

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

Var t:TextField = new TextFieldC );

t. html Text = «P1ay now!«;

t. autoSize = TextFieldAutoSize. LEFT;

addChild(t);

Следующий код регистрирует метод linkListener( ) в предыдущем объекте TextField — t — для событий TextEvent. LINK:

t. addEventListener(TextEvent. LINK. linkListener);

Наконец, следующий код демонстрирует метод linkListener ( ), который выполняется при щелчке кнопкой мыши на создаваемой ссылке. Внутри метода linkListener ( ) мы выполняем операцию, определенную в задаваемой строке содержимоеСсылки, к которой можно обратиться через переменную экземпляра text класса TextEvent.

private function linkListener (e:TextEvent):void { var operationName:String = e. text; if (operationName == «startGame») { startGame( );

}

}

Теперь попытаемся создать гипертекстовую ссылку, которая не просто вызывает операцию на языке ActionScript, но и передает аргументы для этой операции. Код для этой гипертекстовой ссылки представлен ниже. Обратите внимание, что на этот раз задаваемая строка содержимоеСсылки содержит название операции (di splayMsg) и аргумент (hello world), которые отделены друг от друга произвольным разделителем (запятой).

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

Var t:TextField = new TextFieldC );

t. html Text = «Click here«;

t. autoSize = TextFieldAutoSize. LEFT;

addChild(t);

Следующий код регистрирует метод linkListener ( ) в предыдущем объекте TextField — t — для событий TextEvent. LINK:

t. addEventListener(TextEvent. LINK. linkListener);

Наконец, следующий код демонстрирует метод linkListener( ),в котором для отделения названия операции (displayMsg) от аргумента (hello world) применяется метод экземпляра split ( ) класса String.

private function linkListener (e:TextEvent):void { var linkContent:Array = e. text. split(«.»); var operationName:String = linkContent[0]; var argument:String = linkContent[l];

if (operationName == «displayMsg») { displayMsg(argument);

}

}

В отличие от языка JavaScript, обычный код на языке ActionScript нельзя включить непосредственно в атрибут HREF тега.

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

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

Листинг 22.17. Использование события TextEvent. LINK для создания имен пользователей, активизируемых щелчком кнопкой мыши

package { import flash. display.*; import flash. text.*; import flash. events.*;

// Демонстрирует использование события TextEvent. LINK в примере упрощенного // раздела чата с именами пользователей, активизируемыми щелчком кнопкой мыши, public class ChatRoom extends Sprite {

// Текстовое поле, содержащее сообщения чата

private var messages:TextField;

public function ChatRoom ( ) { // Создаем текстовое поле со ссылками протокола event: messages = new TextFieldC ); messages. multiline = true; messages. autoSize = TextFieldAutoSize. LEFT; messages. border = true: ‘messages. background = true;

// Создаем тестовые сообщения чата с именами пользователей, // активизируемыми щелчком кнопкой мыши messages. html Text =

«Andy says: What’s up?

» + «Mike says: I’m busy…

» + «Andy says: Ok see you later»; addChi1d(messages);

// Регистрируем приемник в объекте // TextField ‘messages’ для событий // TextEvent. LINK

messages. addEventLi stener(TextEvent. LINK, 1i nkLi stener);

}

// Выполняется всякий раз, когда пользователь щелкает кнопкой мыши // на ссылке протокола event: в объекте TextField ‘messages’ private function linkListener (e:TextEvent):void {

// Содержимое переменной e. text — это вся строка, следующая

// за названием протокола event: в атрибуте href. Например.

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

// «privateChat, userl». Эта строка разбивается

// на название операции («privateChat»)

// и соответствующий аргумент («userl»).

var requestedCommand:Array = e. text. split(«.»);

var operationName:String = requestedCommand[0];

var argument.-String = requestedCommand[l];

// Если запрашиваемой операцией // является запрос личной беседы, // то вызываем метод requestPrivateChat( ). if (operationName == «privateChat») { requestPrivateChat(argument);

}

}

// Отправляет приглашение указанному пользователю на участие // в личной беседе

private function requestPrivateChat (userID:String):void { traceC’Now requesting private chat with » + userlD); // Код для работы с сетью не показан…

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

}

}

События ввода уровня приложения Flash Player

Как мы уже неоднократно видели на протяжении этой главы, подавляющее большинство событий ввода приложения Flash Player возникает в результате взаимодействия пользователя с определенными объектами в списке отображения. Тем не менее Flash Player также поддерживает небольшой набор событий, которые возникают в результате взаимодействия пользователя с самим приложением. Мы будем называть такие «события приложения» событиями ввода уровня приложения Flash Player. Диспетчеризация событий ввода уровня Flash Player выполняется в следующих ситуациях, когда:

? изменяются размеры области отображения приложения Flash Player;

? происходит перемещение указателя мыши над областью отображения Flash Player;

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

В табл. 22.5 перечислены типы событий ввода уровня приложения Flash Player. Для каждого типа события столбец «Тип события» содержит константу класса Event, представляющую официальное строковое название типа события. В столбце «Описание» указано конкретное действие пользователя, приводящее к возникновению этого события. Столбец «Получатель» описывает объект, который выступает в роли получателя события при его диспетчеризации. Столбец «Поведение по умолчанию» описывает стандартную реакцию приложения Flash Player на данное событие (у типов событий ввода уровня приложения Flash Player отсутствует поведение по умолчанию). Столбец «Всплывает» содержит информацию о том, имеет ли данное событие фазу всплытия. Столбец «Тип данных объекта, передаваемого в функцию-приемник» определяет тип данных объекта, передаваемого в функцию-приемник, обрабатывающую данное событие. Наконец, столбец «Примечание» содержит важную информацию, касающуюся использования этого события.

Таблица 22.5. События ввода уровня приложения Flash Player

Тип события Описание Получатель Поведение по умолчанию Всплывает Тип данных объекта, передаваемого в функцию-приемник Примечание

Event. ACTIVATE Приложение Flash Player получило системный фокус Отображаемый объект, в котором зарегистрирован приемник события Отсутствует Да Event Возникает даже в тех случаях, когда получатель не находится в списке отображения

Event. DEACTIVATE Приложение Flash Player потеряло системный фокус Отображаемый объект, в котором зарегистрирован приемник события Отсутствует Да Event Возникает даже в тех случаях, когда получатель не находится в списке отображения

Event. RESIZE Изменились размеры области отображения приложения Экземпляр класса Stage Отсутствует Да Event

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

Тип Описание Получатель Поведение Всплы — Тип Примечание

события по умолчанию вает данных объекта, передаваемого в функцию-приемник

Event. Указатель Экземпляр Отсутствует Да Event Сопутствующее

MOUSE мыши пе — класса Stage событие Event.



Полезные ссылки
Случайные записи
  • 03.08.2010">Сравнение параметров дизайна
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.165
  • 02.03.2010">Новый вид ретвитов (retweet) в твиттере
  • 12.05.2014">Косметический ремонт квартиры
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 006
  • 21.07.2011">Венгрия – жемчужина Европы
  • 15.07.2010">Полезные термины для новичков.
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 128
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 050
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 121
  • 06.09.2011">Обзор ноутбука Acer As 5534-512G25Mn
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 031
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.7
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.15
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 068
Опрос

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

View Results

Loading ... Loading ...