Март 2011

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

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

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

Чтобы загрузить шрифты на этапе выполнения, повторите следующие обобщенные шаги.

1. Встройте шрифт (-ы) в SWF-файл (с помощью методик, описанных ранее в подразд. «Встраивание начертаний шрифта в среде разработки Flash» и «Встраивание начертаний шрифта в приложении Flex Builder 2 и компиляторе mxmlc»).

2. В SWF-файле, содержащем встроенный шрифт, используйте статический метод registerFont ( ) класса Font, чтобы добавить шрифт в глобальный список шрифтов.

3. Загрузите SWF-файл со встроенным шрифтом.

Применим перечисленные шаги на примере. Мы начнем с создания SWF-файла Fonts, swf, который встраивает шрифт Verdana (обычного и полужирного начертания) с помощью тега метаданных [Embed]. Рассмотрим код для основного класса приложения Fonts. swf:

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

// Встраивает шрифты для использования в любом SWF-файле,

// загрузившем этот файл

public class Fonts extends Sprite {

[Embed(source="c:/wi ndows/fonts/verdana. ttf". fontFamily="Verdana")]

private var verdana:Class;

[Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaBold:Class;

}

}

Теперь мы должны добавить наши встраиваемые шрифты в глобальный список шрифтов. Для этого мы используем статический метод registerFont ( ) класса Font, который принимает единственный параметр font. В качестве параметра font передается ссылка на класс Font, который представляет шрифт, добавляемый в глобальный список шрифтов. Как только шрифт будет добавлен, он может быть использован любым’ SWF-файлом, выполняющимся в приложении Flash Player.

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

В предыдущем коде классы, представляющие две вариации шрифта Verdana, присваиваются переменным verdana и verdanaBold. Таким образом, чтобы добавить эти шрифты в глобальный список шрифтов, мы передаем значения этих переменных в метод registerFont ( ), как показано в следующем коде:

Font. regi sterFont(verdana); Font. regi sterFont(verdanaBold);

Чтобы гарантировать, что шрифты будут добавлены в глобальный список шрифтов сразу после их загрузки, мы вызываем метод regi sterFont ( ) внутри конструктора класса Fonts, как показано в следующем коде:

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

// Встраивает шрифты для дальнейшего использования любым SWF-файлом,

// загрузившим этот файл

public class Fonts extends Sprite {

[Embed(source="c:/windows/fonts/verdana. ttf", fontFamily="Verdana")]

private var verdana:Class;

[Embed(source="c:/windows/fonts/verdanab. ttf",

fontFamily="Verdana",

fontWeight="bold")] private var verdanaBold:Class;

// Конструктор

public function Fonts ( ) {

// Регистрируем встроенные шрифты этого класса

// в глобальном списке шрифтов

Font. regi sterFont(verdana);

Font. regi sterFont(verdanaBold);

}

}

}

Если бы мы встраивали наши шрифты с помощью символов Font среды разработки Flash, нам бы пришлось добавить предыдущие вызовы метода registerFont ( ) в первый кадр основной временной шкалы, а в метод registerFont ( ) мы бы передавали имя класса шрифта, указываемое в поле Class (Класс) окна Linkage Properties (Свойства связывания) для каждого встраиваемого символа Font (обратитесь к описанию шага 8 в подразд. «Встраивание начертаний шрифта в среде разработки Flash»).

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

После этого мы компилируем файл Fonts. swf и загружаем его на этапе выполнения с помощью класса Loader. Сразу после завершения загрузки файла Fonts. swf его шрифты могут быть использованы любым другим SWF-файлом, выполняющимся в приложении Flash Player. В листинге 27.15 представлен пример класса, который загружает и затем использует шрифты, встроенные в файл Fonts. swf.

1 Исчерпывающую информацию о загрузке SWF-файлов можно найти в гл. 28.

нГ 4 .

Листинг 27.15. Использование загруженных шрифтов

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

import flash. events.*; import flash. net.*;

f

// Этот класс демонстрирует, как форматировать текст с помощью загруженных // шрифтов. Сами шрифты встроены в файл Fonts. swf, представленный ранее, public class HelloWorld extends Sprite { public function HelloWorld ( ) {

// Загружаем SWF-файл, содержащий встроенные шрифты

var loader:Loader = new Loader( );

loader. contentLoaderInfo. addEventListener(Event. INIT, initListener); 1oader.1oad(new URLRequest(«Fonts. swf»));

}

// Выполняется после завершения инициализации файла Fonts. swf, когда // его шрифты будут доступны для использования private function initListener (e:Event):void {

// Для отладочных целей отображаем все доступные встроенные шрифты

showEmbeddedFonts( );

// Шрифт был загружен, поэтому теперь отображаем // отформатированный текст outputMsg( );

}

// Отображаем текст, отформатированный с использованием

// встроенных шрифтов

private function outputMsg ( ):void {

// Создаем текстовое поле

var t:TextField = new TextField( );

t. embedFonts = true; // Говорим среде выполнения Flash отображать это

// текстовое поле с помощью встроенных шрифтов // Используем две вариации шрифта Verdana (обычного и полужирного // начертания)

t. htmlText = «Hel1 о World«;

// Добавляем текстовое поле в список отображения addChild(t);

}

// Выводит список доступных на настоящий момент встроенных шрифтов public function showEmbeddedFonts ( ):void { trace(«========Embedded Fonts========»);

var fonts-.Array = Font. enumerateFonts( ); fonts. sortOn(«fontName». Array. CASEINSENSITIVE); for (var i:int = 0; i < fonts.length; i++) { trace(fonts[i].fontname + ", " + fonts[i].fontstyle);

}

}

^ I Многие браузеры кэшируют SWF-файлы, поэтому для приложений, состоящих из нем?; j „ скольких SWF-файлов, можно добиться снижения общего времени загрузки, загружая шрифты из одного SWF-файла на этапе выполнения.

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

Отсутствующие шрифты и глифы

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

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

var t:TextField = new TextField( ); t. embedFonts = true;

t. html Text = «Hellо World«; .

Обратите внимание, что для слова «Не11о» указана вариация шрифта Verdana обычного начертания, а для слова «world» указана вариация шрифта Verdana полужирного начертания. Если на этапе выполнения вариация встроенного шрифта Verdana полужирного начертания окажется недоступной, но при этом доступной окажется вариация встроенного шрифта Verdana обычного начертания, текст «Hello world» будет полностью отображен с использованием вариации шрифта Verdana обычного начертания. Однако если не будут доступны ни вариация обычного начертания, ни вариация полужирного начертания шрифта Verdana, символы не будут отображены вообще и никакой текст на экране не появится!

4Г*

м*4

Если при использовании встраиваемых шрифтов текст в вашем приложении таинственным образом исчезает или отображается с помощью неправильной вариации шрифта, Э# то, скорее всего, оказались недоступны необходимые шрифты. Чтобы определить, какие шрифты доступны на этапе выполнения, используйте статический метод enumerateFonts() класса Font, рассматриваемый в разд. «Определение доступности шрифта».

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

Если переменной embedFonts объекта TextField присвоено значение true, но программа не предоставляет никакой информации по форматированию этого объ-

екта, Flash Player попытается отобразить его содержимое с помощью встроенного шрифта, имя которого совпадает с именем шрифта, используемого по умолчанию в текущей среде (в операционной системе Microsoft Windows таким шрифтом является Times New Roman). Если такого встроенного шрифта не существует, то текст не будет выведен на экран.

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

Определение доступности шрифта

Чтобы на этапе выполнения определить список доступных шрифтов устройства и встроенных шрифтов, используйте статический метод enumerateFonts ( ) класса Font. Метод enumerateFonts ( ) возвращает массив объектов Font, каждый из которых представляет доступный шрифт устройства или встроенный шрифт. Метод enumerateFonts ( ) определяет единственный параметр типа Boolean enumerateDeviceFonts, который указывает, должен ли возвращаемый массив включать шрифты устройства. По умолчанию параметру enumerateDeviceFonts присвоено значение false, поэтому массив, возвращаемый методом enumerateFonts ( ), не включает шрифты устройства. Каждый объект Font в возвращаемом массиве определяет следующие переменные, описывающие представляемый шрифт.

? fontName — имя шрифта. Для шрифтов устройства переменная fontName содержит имя, которое отображается в списке системных шрифтов. Для шрифтов, встраиваемых через среду разработки Flash, переменная fontName содержит имя, которое отображается в списке Font (Шрифт) окна Font Symbol Properties (Свойства символа шрифта), применяемого для встраивания шрифта. Для шрифтов, встраиваемых с помощью тега метаданных [Embed], переменная fontName содержит строковое значение, которое указывается для параметра fontFamily тега [Embed], применяемого для встраивания шрифта.

? fontStyle — вариация шрифта (обычное начертание, полужирное начертание, курсив или полужирный курсив) в виде одной из четырех следующих констант языка ActionScript: FontStyle. REGULAR, FontStyle. BOLD, FontStyle. ITALIC, FontStyle. BOLD_ITALIC.

? f ontType — тип шрифта: встроенный или шрифт устройства. Эта переменная ссылается на одну из двух следующих констант языка ActionScript: FontType. EMBEDDED или FontType. DEVICE.

В листинге 27.16 представлен код, генерирующий список всех доступных встроенных шрифтов, отсортированных в алфавитном порядке.

Листинг 27.16. Перечисление всех встроенных шрифтов

var fonts:Array = Font. enumerateFonts( ); fonts. sortOn(«fontName». Array. CASE INSENSITIVE); for (var i:int = 0; i < fonts.length; i++) { trace(fonts[i].fontname + ", " + fonts[i].fontstyle);

}

В листинге 27.17 продемонстрирован код, генерирующий список всех доступных шрифтов устройства, которые отсортированы в алфавитном порядке.

Листинг 27.17. Перечисление всех шрифтов устройства

var fonts:Array = Font. enumerateFonts(true); fonts. sortOnC»fontName». Array. CASEINSENSITIVE); for (var i:int = 0; i < fonts.length; i++) { if (fonts[i].fonttype == fonttype.device) { trace(fonts[i].fontname + ". " + fonts[i].fontstyle);

}

}

В листинге 27.18 представлен код, генерирующий список всех доступных встроенных шрифтов и шрифтов устройства, отсортированных в алфавитном порядке.

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

Листинг 27.18. Перечисление всех встроенных шрифтов и шрифтов устройства

var fonts:Array = Font. enumerateFonts(true); fonts. sortOn(«fontName». Array. CASEINSENSITIVE); for (var i:int = 0; i < fonts.length; i++) { trace(fonts[i].fonttype + ": "

+ fonts[i].fontName + «. » + fonts[i].fontStyle);

}

Функция enumerateFonts ( ) может быть использована, чтобы дать возможность пользователю выбирать шрифты приложения или автоматически выбирать резервный шрифт, как показано в листинге 27.19.

Листинг 27.19. Автоматический выбор резервного шрифта

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

public class FontFallbackDemo extends Sprite { public function FontFallbackDemo ( ) { var format-.TextFormat = new TextFormat( );

// Присваивает первый доступный шрифт

format. font = getFont(["ZapfChancery". "Verdana". "Arial". "_sans"]);

var t:TextField = new TextField( ); t. text = «ActionScript is fun!»; t. autoSize = TextFieldAutoSize. LEFT; t. setTextFormat(format)

addChild(t);

}

// Из передаваемого списка шрифтов возвращает имя первого шрита

// в списке, который доступен либо в качестве встроенного шрифта, либо

// в качестве шрифта устройства

public function getFont (fontList: Array)-.String {

var availableFonts:Array = Font. enumerateFonts(true);

for (var i:int = 0; i < fontlist.length; i++) { for (var j:int = 0; j < availablefonts.length; j++) {

if (fontl_ist[i] == Font(avai 1 ableFontsCj]).fontName) { return fontl_ist[i];

return null;

Определение доступности глифа

Чтобы определить, имеет ли некий встроенный шрифт глиф для указанного символа или набора символов, мы используем метод экземпляра hasGlyphs ( ) класса Font. Принимая строковый аргумент, этот метод возвращает значение типа Boolean, которое указывает, имеет ли шрифт все глифы, необходимые для отображения данной строки.

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

Метод экземпляра hasGlyphs() класса Font работает только со встраиваемыми шрифтами. Не существует способа, позволяющего определить, имеет ли некий шрифт устройства глиф для указанного символа.

Чтобы воспользоваться методом hasGlyphs ( ), мы должны сначала получить ссылку на объект Font для интересующего нас шрифта. Для этого мы применяем цикл for, чтобы осуществить поиск в массиве, возвращаемом методом enumerateFonts ( ). Например, следующий код получает ссылку на объект Font для шрифта Verdana и присваивает ее переменной font:

var fontName:String = «Verdana»; var font:Font;

var fonts:Array = Font. enumerateFonts(true); for (var i:int = 0; i < fonts.length; i++) { if (fonts[i].fontname == fontname) { font = fonts[i];

Как только будет получена ссылка на желаемый объект Font, мы можем использовать метод hasGlyphs ( ), чтобы проверить, имеет ли соответствующий шрифт все глифы, необходимые для отображения некоторой строки. Например, следующий код проверяет, можно ли с помощью шрифта Verdana отобразить строку «Hello world» на английском языке:

trace(font. hasGlyphs(«Hei 1 о world»)); // Выводит: true

Следующий код проверяет, можно ли с помощью шрифта Verdana отобразить строку «й^-А/йсЕЛл C/ulCtp[?» на японском языке: trace(font. hasGlyphs(^/u&c?/iA C/ulCtili)); // Выводит: false

break;

Отображение текста с помощью встраиваемых шрифтов

Как бы удивительно это ни звучало, для объектов TextField, переменной embedFonts которых присвоено значение true, приложение Flash Player предоставляет два различных режима отображения текста. Названия этих режимов звучат достаточно размыто: обычный и расширенный.

В обычном режиме приложение Flash Player отображает текст с помощью стандартного визуализатора векторной графики, который применяется для отображения всех векторных фигур в SWF-файле. Стандартный визуализатор векторной графики рисует текст с использованием алгоритма сглаживания, который характеризуется высокой скоростью и создает гладкие линии. Текст, отображаемый с помощью стандартного визуализатора векторной графики, обычно получается четким и разборчивым при средних и больших размерах шрифта (приблизительно 16 пунктов и выше), однако при малых размерах шрифта (12 пунктов и меньше) текст оказывается размытым и неразборчивым.

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

В расширенном режиме приложение Flash Player выводит текст с помощью специализированного визуализатора текста, называемого визуализатором FlashType. Визуализатор FlashType — это лицензированная реализация системы Saffron Type System, созданной лабораторией Mitsubishi Electric Research Laboratories (MERL). Визуализатор FlashType специально разработан для того, чтобы обеспечивать четкую визуализацию типов фигур, которые часто встречаются в шрифтах небольших размеров.

В настоящее время наилучшие результаты при использовании визуализатора FlashType достигаются для западных шрифтов, нежели для азиатских. Тем не менее азиатский текст, отображаемый с помощью визуализатора FlashType, все равно оказывается более разборчивым, чем текст, отображаемый с помощью стандартного визуализатора векторной графики приложения Flash Player.

Текст, выводимый с помощью визуализатора FlashType, обычно получается более разборчивым, чем текст, выводимый с помощью стандартного визуализатора векторной графики приложения Flash Player. Кроме того, при небольших размерах шрифта визуализатор FlashType отображает текст быстрее, чем стандартный визуализатор векторной графики приложения Flash Player. Тем не менее при больших размерах шрифта отображение текста с помощью визуализатора FlashType занимает значительно больше времени, чем отображение текста с помощью стандартного визуализатора векторной графики приложения Flash Player.

Я 4

Дополнительную информацию о системе Saffron Type System можно получить в официальном обзоре проекта Saffron компании Mitsubishi, доступном по адресу http://www. S?’ merl. com/projects/ADF-Saffron, а также в технической презентации проекта Saffron Рональда Перри (Ronald Perry), доступной по адресу http://www. merl. com/people/perry/ SaffronOverview. ppt.

Разработчики могут выбирать любой из двух режимов визуализации текста приложения Flash Player динамически на этапе выполнения для каждого текстового

поля по отдельности. Чтобы приложение Flash Player отображало некоторый объект TextField с помощью стандартного визуализатора векторной графики, присвойте переменной antiAliasType данного объекта значение AntiAliasType. NORMAL. Например, следующий код создает объект TextField, а затем говорит приложению Flash Player отобразить этот объект с помощью встроенных шрифтов, используя стандартный визуализатор векторной графики. Обратите внимание, что помимо присваивания значения переменной antiAliasType этот код присваивает переменной embedFonts объекта TextField значение true. Режимы визуализации текста приложения Flash Player применяются только к тексту, отображаемому с помощью встраиваемых шрифтов.

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

var t:TextField = new TextField( );

// Говорим приложению Flash Player отобразить это текстовое поле // с помощью встроенных шрифтов t. embedFonts = true;

// Говорим приложению Flash Player использовать стандартный визуализатор // векторной графики для отображения этого текстового поля t. antiAliasType = AntiAliasType. NORMAL;

В отличие от этого, следующий код создает объект TextField, а затем говорит приложению Flash Player отобразить этот объект с помощью встроенных шрифтов, используя визуализатор FlashType:

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

var t:TextField = new TextField( );

// Говорим приложению Flash Player отобразить это текстовое поле // с помощью встроенных шрифтов t. embedFonts = true;

// Говорим приложению Flash Player использовать визуализатор FlashType // для отображения этого текстового поля t. antiAliasType = AntiAliasType. ADVANCED;

По умолчанию переменной antiAliasType присвоено такое значение, как AntiAliasType. NORMAL (стандартный визуализатор векторной графики).

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

По умолчанию приложение Flash Player отображает объекты TextField, переменной А ^ embedFonts которых присвоено значение true, с помощью стандартного визуализатора щ< векторной графики.

На рис. 27.13 показан английский алфавит, для отображения которого с помощью шрифта Verdana размером 10 пунктов использовались оба визуализатора: визуализатор FlashType (слева) и стандартный визуализатор векторной графики (справа). На экране алфавит, отображенный с помощью визуализатора FlashType, в значительной степени более разборчив, чем алфавит, отображенный с помощью стандартного визуализатора векторной графики приложения Flash Player.

Для справки в листинге 27.20 показан код, который применялся для создания демонстрационных алфавитов, изображенных на рис. 27.13.

FlashType Стандартный визуализатор векторной графики

a bed ef g h ij kl m nopq rstu vwxy z abcdefghijklmnopqrstuvwxyz

Рис. 27.13. Визуализатор FlashType в сравнении со стандартным визуализатором векторной графики приложения Flash Player

Листинг 27.20. Визуализатор FlashType в сравнении со стандартным визуализатором векторной графики приложения Flash Player

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

public class FlashTypeDemo extends Sprite { // Прямые слэши необходимы, однако регистр символов роли не играет. [Embed(source="c:/wi ndows/fonts/verdana. ttf",

fontFamily="Verdana")] private var verdana:Class;

public function FlashTypeDemo ( ) { // Визуализатор FlashType var t:TextField = new TextField( ); t. width = 200; t. embedFonts = true;

t. htmlText = «»

+ «abedefghijklmnopqrstuvwxyz»; t. antiAliasType = AntiAliasType. ADVANCED; addChild(t);

// Стандартный визуализатор векторной графики

var t2:TextField = new TextField( );

t2.width = 200;

t2.embedFonts = true;

t2.htmlText = «»

+ «abedefghijklmnopqrstuvwxyz»; t2.antiAliasType = AntiAliasType. NORMAL; addChild(t2); t2.x = 180;

}

}

}

I Чтобы достичь наилучшего качества анимационного текста, используйте стандарт-1$ л щ ный визуализатор векторной графики (присвойте переменной antiAliasType значение AntiAliasType. NORMAL). Чтобы добиться наилучшей разборчивости текста, используйте визуализатор FlashType (присвойте переменной antiAliasType значение AntiAliasTypeADVANCED).

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

Обратите внимание, что, если текст наклонен или перевернут, его отображение с помощью визуализатора FlashType автоматически отменяется.

Настройка визуализатора FlashType. Привлекательность и разборчивость текста — это весьма субъективные понятия. Язык ActionScript предлагает ряд расширенных инструментов для точной настройки конкретного поведения визуализатора FlashType.

Хотя детальное рассмотрение возможных настроек визуализатора Flash Туре выходит за рамки данной книги, для ознакомления в табл. 27.9 перечислены доступные инструменты и их основное назначение. Для дальнейшего изучения обратитесь к описанию каждого инструмента в справочнике по языку ActionScript корпорации Adobe.

Таблица 27.9. Переменные и методы, используемые для настройки параметров визуализатора FlashType

Переменная или метод Описание

Переменная экземпляра sharpness класса TextField Определяет резкость текста в текстовом поле. Может принимать целочисленные значения в диапазоне от -400 (размытый) до 400 (резкий)

Переменная экземпляра thickness класса TextField Указывает толщину линий текста в текстовом поле. Может принимать целочисленные значения в диапазоне от -200 (тонкий) до 200 (толстый). Если переменной thickness поля присвоить большое значение, текст этого поля примет полужирное начертание

Переменная экземпляра gridFitType класса TextField Определяет параметры хинтования на уровне пикселов, влияющие на разборчивость текста при различном выравнивании (по левому краю, по центру или по правому краю). Хинтование — это методика, с помощью которой ножки отображаемого глифа размещаются на целых пикселах, улучшая его читабельность

Статическая переменная displayMode класса TextRenderer Настраивает алгоритм сглаживания визуализатора FlashType, улучшая результаты либо для ЖК-, либо для ЭЛТ-мониторов. Этот параметр применяется глобально ко всему тексту, отображаемому с помощью визуализатора FlashType

Статическая переменная maxLevel класса TextRenderer Определяет уровень качества адаптивно выбираемых интервалов полей (Adaptjvely Sampled Distance Fields — ADFs) (часть внутренней структуры визуализатора FlashType для описания контуров глифов). Этот параметр применяется глобально ко всему тексту, отображаемому с помощью визуализатора FlashType (однако Flash Player автоматически увеличивает значение этого параметра для любого отдельного глифа, размер шрифта которого превышает 64 пиксела). Большие значения снижают производительность

Статический метод setAdv ancedAntiAliasingTable() Присваивает значения, которые точно определяют вес и резкость конкретного шрифта при использовании указанного размера, стиля и типа цвета (светлый или темный)

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



Полезные ссылки
Случайные записи
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 148
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.48
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 076
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.25
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 030
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.60
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.103
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 095
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 057
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 073
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 004
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 094
  • 24.02.2011">Руководство по actionscript. часть 6, стр. 112
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.78
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 042
Опрос

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

View Results

Loading ... Loading ...