среда, мая 16, 2007
APE - Actionscript Physics Engine
пятница, мая 04, 2007
AS3 String Utils
API:
afterFirst
adterLast
beginsWith
beforeFirst
beforeLast
between
block
capitalize
contains
countof
editDistance
endsWith
hasText
isEmpty
isNumeric
padLeft
padRight
properCase
quote
remove
removeExtraWhiteSpace
reverse
reverseWords
similarity
stripTags
swapCase
trim
trimLeft
trimRight
wordCount
truncate
четверг, апреля 26, 2007
Открываем ссылки в новом окне
...
[Bindable] private var str:String = '<a href="event:http://www.ya.ru">www.ya.ru</a>';
...
<mx:Label selectable="true" htmlText="{str}" link="URLUtil.openWindow(event.text)"/>Теперь все в порядке.
среда, апреля 18, 2007
AS3 карты
SVN
понедельник, апреля 16, 2007
FDT 3.0 beta
понедельник, апреля 02, 2007
HTMLRenderer - больше, чем htmlText!
HTMLRenderer далеко не универсален, но всего функционала и впихнешь, а если и впихнешь, то можно получить какой-нибудь браузер:)
среда, марта 21, 2007
SWFZ - еще один 3D движок
Примеры:
DOOM ?!
Танцующий динозаврик
Использование материалов для модели
воскресенье, марта 18, 2007
Семейство Flex Explorer
Flex Primitive Explorer - создание графических примитивов.
Flex Filter Explorer - создание графических фильтров.
Flex Transitions and Effects Explorer - эффекты и переходы.
четверг, марта 15, 2007
Flex 2.0 Primitive Explorer
Некоторые тонкости использования E4X
1. Устанавливайте resultFormat="e4x" для HTTPService
По умолчанию, resultFormat для <mx:HTTPService> является "object". Но при получении XML данных, "object" - это не то, что вам нужно. Если же задать "e4x", то lastResult будет являтся XML объектом, который можно парсить с помощью E4X выражений.
2. E4X выражения не ссылаются на самый верхний тег XML
Итак, имеем <mx:HTTPService>, названный myService с resultFormat="e4x", возвращающим следующую структуру:
<?xml version="1.0"?>
<people>
<person>mike</person>
<person>sho</person>
<person>nj</person>
</people>
Эти данные содержатся в myService.lastResult (или в event.result.) Как получить XMLList всех элементов <person>?
Часто думают, что E4X выражения составляют от корневого тега <people>:
var personNodes:XMLList = myService.lastResult.people.person;
// неправильно
А правильно так :
var personNodes:XMLList = myService.lastResult.person;
// правильно
3. Используйте for each, а не for
ECMAScript давно имеет структуру for (ключ в коллекции). Но обратите внимание, что при использовании этого выражения переменной цикла является ключ коллекции, а не значение текущего элемента, поэтому в цикле необходимо писать коллекция[ключ] для ображения к его значению.
E4X добавляет следующую структуру (которую можно использовать на любой коллекции): for each (значение в коллекции). Рассмотрим примеры:
for (var key:* in myService.lastResult.person) {
var value:* = myService.lastResult.person[key];
...
}
А теперь for each: for each (var value:* in myService.lastResult.person)
{... }
4. Используйте for each (child in parent.*), вместо for each (child in parent)
Итак, есть документ :
var mydocument:XML =Теперь необходимо перебрать всех мышей у этого кота.
<root>
<cat>
<mouse />
<mouse />
<mouse />
</cat>
</root>
var cats:XMLList = mydocument.cat; // это только один элемент
var o:Object = ...; for each (var property:* in o) ...Вы думаете, что следующим образом вы делаете тоже самое:
for each (var mouse:XML in cats) ... // неправильно
Увы, E4X отличается. В E4X, "cats" - это коллекция -- список узлов <cat>, а в примере есть только один <cat>.
Поэтому, чтобы перебрать всех мышей необходимо использовать следующую структуру:// перебрать все прямые дочерние элементы
for each (var mouse:XML in cats.*) { ... }
// или перебрать всех прямых потомков, которые являются узлами <mouse>
for each (var mouse:XML in cats.mouse) { ... }
5. E4X специально стирает различия между XML и XMLList
При изучении E4X, вы узнаете, что есть два типа данных: XML и XMLList. Вроде легко, но потом появляются проблемы с неправильной типизацией данных.var mydocument =
<root>
<rabbit name="Brownster Johansson McGee" />
</root>;
// 'mydocument.rabbit' - список всех узлов <rabbit>, значит
// myPetRabbit должен быть XMLList? Но я назвал переменную
// 'myPetRabbit', а не 'myPetRabbits',
// потому что я знаю, что заяц только один.
var myPetRabbit:XMLList = mydocument.rabbit;
// Как же его зовут? Почему следующее выражение не вызывает ошибки,
//ведь myPetRabbit - это XMLList?
trace(myPetRabbit.@name);
Причина в том, что E4X намеренно стирает различия между XML и XMLList. Каждый XMLList, который содержит один элемент, будет рассматриваться как XML. (Если 'myPetRabbit' будет содержать несколько узлов, то myPetRabbit.@name будет возвращать список всех атрибутов "name" все узлов <rabbit>.)
Например, рассмотрим документацию по методу XMLList.toString():
- Если объект XML имеет простую структуру, то метод toString() возвращает содержимое узлов без тегов, атрибутов, пространств имен и т.п.
- Если объект XML имеет сложную структуру, то метод toString() возвращает все содержимое, вклюяая теги, атрибуты и т.п.
То есть если XMLList содержит <node>hello</node>, то toString() вернет "hello"; но если он содержит <node>hello</node><node>goodbye</node>, toString() вернет "<node>hello</node><node>goodbye</node>" (а не "hellogoodbye"). Если же вам всегда нужен полный XML, используйте toXMLString() вместо of toString().
6. Внимание! Простое выражение может вам дорого обойтись
При использовании простых объектов нет ничего удивительного в использовании следующего кода:
var x:Object = ...;
if (x.y.z == 3)
foo(x.y.z);
Код работает быстро, проблем не вознкает.
Но в E4X операция типа "x.y.z" будет означать, что цикл проходит через всю XML-структуру и ищет соответствующие совпадения:
var mydocument:XML = ...;
if (mydocument.cat.mouse.length() == 3)
{foo(mydocument.cat.mouse)};
Итак, если вам потом понадобиться использовать результат, то лучше сохранить его в XMLLis переменнойt:
var mydocument:XML = ...;
var mice:XMLList = mydocument.cat.mouse;
if (mice.length() == 3)
{foo(mice);}
7. Используйте дебаггер
Отладчик поможет вам разобраться в значениях XML и XMLList переменных.
Отсюда
среда, марта 07, 2007
Презентация Papervision
Взял отсюда.
вторник, марта 06, 2007
ActionScript 2.0 - 3.0 Migration Cheatsheet
понедельник, марта 05, 2007
четверг, марта 01, 2007
Easing-эффекты в одном месте
FlexLib на Google Code
суббота, февраля 17, 2007
Примеры движка Papervision3D
Может для заядлых 3D-шников это ерунда, но меня впечатлило!
среда, февраля 14, 2007
Adobe Flex Coding Guidelines
Flex Style Explorer 2.01
1) Навороченный ColorPicker (эх, Василий, не видели они вашего)
2) Экспорт всего CSS
3) Поддержка StyleName
4) Стили форматирования текста
5) Возможность введения значения руками и слайдером
6) Добавлены ToggleButtonBar, HDividedBox, VDividedBox, TextArea, VRule, VSlider, ColorPicker, ToolTip
7) Улучшенная навигация
8) Индикация отредактированных компонентов
9) Работа с прозрачным приложением
10) Улучшение UI
среда, февраля 07, 2007
Прикольный скин - мятые салфетки
четверг, января 25, 2007
Макросы в html-темплейтах флекс-проекта
Название проекта, MyProject.
${application}
Имя приложения, MyApp.
${version_major}
Major-версия плеера, т.е. 9 для 9.0 r28.
${version_minor}
Minor-версия, т.е. 0 для 9.0 r28.
${version_revision}
revision-версия, т.е. 28 для 9.0 r28.
${build_suffix}
Суффикс, определяющий тип версии приложения, "-debug" - для отладочной версии и "" - для релиза.
${swf}
Имя SWF файла без расширения .swf. Эквивалентно ${application}${build_suffix}.
${bgcolor}
Фон приложения, заданный в атрибуте backgroundColor тега <mx:Application> или в поле метаданных backgroundColor в [SWF] metadata атрибуте [SWF(backgroundColor="#ffffff")] public class MyApp extends Sprite.
${width} и ${height}
Ширина и высота приложения, заданная в <mx:Application> или в метаданных [SWF(width="300", height="400")] public class MyApp extends Sprite.
${title}
заголовок приложения, заданный в атрибуте pageTitle тега <mx:Application> или в [SWF(pageTitle="flex r00lz")] public class MyApp extends Sprite.
Отсюда
среда, января 24, 2007
Flex2LocalDebugger - трейс-панель во флексе
LocalDebugger.show('test'); вылетает окошко Alert с надписью test.
А LocalDebugger.trace('test'); заносит информацию в окно отладки. Flex2LocalDebugger работает через LocalConnection, поэтому для правильной работы функции trace необходимо запустить файлик Flex2LocalDebuggerConsole.html, который идет в архиве. В нем и будут отображаться все ваши трейсы.
PageFlip во флеше и флексе
среда, января 17, 2007
felxoBooth - сервис для эксбиционистов
пятница, января 12, 2007
Альтернатива FMS - Wowza Media Server
О цене WMS будет объявлено позже.
четверг, января 11, 2007
Несколько заметок про Date
Например, если задать в качестве месяца -1, то из даты будет вычтен месяц:
var dt:Date = new Date( 2006, -1, 1 );
// Thu Dec 1 00:00:00 GMT+0300 2005Теперь попытаемся создать 0 января 2006 года:
dt = new Date( 2006, 0, 0 );Получим 31 декабря 2005 года.
0 марта не существует, поэтому получаем 29 февраля (2008 год будет високосным):
dt = new Date( 2008, 2, 0 );Теперь вычтем из текущей даты неделю:
dt = new Date();
dt.date = dt.date - 7;Получим Thu Jan 4 2006.
Вот такая математика:)
С прошедшими праздниками всех!
вторник, декабря 26, 2006
Введение в контейнеры
Использование Flex 2 и AMFPHP
А тем временем вышла бета AMFPHP 1.9, поддерживающая json, xml-rpc, amf3. Сервис-браузер теперь на флексе. Примеры работы с AMFPHP можно скачать на гугловской страничке проекта.
вторник, декабря 19, 2006
воскресенье, декабря 17, 2006
Flex-девелоперы, терпите, ваше время - 2008 год...
- на данный момент прибыльными являются продукты из Creative Suite;
- Acrobat вообще рабочая лошадка;
- LiveCycle является победителем в enterprise-секторе;
- Flash Lite рулит на мобильных девайсах;
- прибылей от Flex и Apollo ожидают в 2007 году.
Поэтому флексеры вольются в мейнстрим только к 2008 году, а значит сейчас самое время учиться.
P.S. Интересно, в России кто-нибудь имеет доходы от этого? Не считая работу с забугорными закзчиками.
Вышла альфа 2d движка Fisix
Примеры:
Mona the Ragdoll
Bike Game
Boxes Demo
Hourglass
Несколько уроков:
Первое Fisix приложение
Работа с Fisix в FlashDevelop
Партиклы
FisixObject
Мануал по Fisix
Думаю, скоро переведу.
Компонент FileUpload
вторник, декабря 12, 2006
Как правильно переносить текст в ячейке DataGrid
Суть проблемы в следующем. Текст в ячейке с атрибутом wordWrap=true будет переноситься в остальных рядах, только если он переносится в первом. Посмотрим на следующий пример. Измените ширину правой колонки Title так, чтобы текст ячейки не требовал переноса, затем перейдите туда и обратно, чтобы обновить вид. При этом, если следующие ряды требуют переноса, то его не будет и текст просто обрежется. Если же текст первой ячейки переносится изначально, то все остальные будут переноситься тоже. То есть никакой wordWrap не поможет...
А поможет нам variableRowHeight = true!
Papervision3D - примеры использования
раз, два, три, четыре и пять (с Flex'ом).
Ссылки по теме:
Страница на OSFlash
Блог разработчиков
Email лист
Исходников пока нет, но обещают в декабре.
Первая часть урока Flex Cairngorm/WebORB Issue Tracker
воскресенье, декабря 10, 2006
Примеры по скинованию Flex-приложений
четверг, декабря 07, 2006
Эмуляция repeat-x/repeat-y для фона Flex-приложения
среда, декабря 06, 2006
Просмотр сгенерированного из MXML-приложения AS кода
вторник, декабря 05, 2006
Использование mx:Metadata для задания стилей компонентов
Давайте взглянем на пример. Здесь расположены два компонента (example 1 и example 2). Это два экземпляра компонента "MXML_Example". Да, выглядят они по разному, но родитель у них один. Каждый "MXML_Example" сожержит mx:Panel, mx:TextArea и mx:Button.
Посмотрим на исходный код компонентов:
<components:MXML_Example width="{(width/2)-20}" left="10" top="80" title="Example 1" styleName="example1" height="200" />
<components:MXML_Example width="{(width/2)-20}" right="10" top="80" title="Example 2" styleName="example2" height="200" />Разница лишь в атрибуте styleName.
Давайте посмотрим на исходный код компонента "MXML_example". В теге mx:Metadata можно увидеть определения трех стилей.
<mx:Metadata>
[Style(name="panelStyleName", type="String", inherit="no" )]
[Style(name="buttonStyleName", type="String", inherit="no" )]
[Style(name="textAreaStyleName", type="String", inherit="no" )]
</mx:Metadata>По наступлению события creationComplete эти стили применяются к компонентам внутри "MXML_Example".
private function onCreationComplete() : void
{
panel.styleName = getStyle("panelStyleName");
button.styleName = getStyle("buttonStyleName");
textArea.styleName = getStyle("textAreaStyleName");
}А вот и сам CSS:
.example1
{
panelStyleName:"panel1";
buttonStyleName:"button1";
textAreaStyleName:"textArea1";
}
.example2
{
panelStyleName:"panel2";
buttonStyleName:"button2";
textAreaStyleName:"textArea2";
}Можно увидеть, что для запчастей компонентов применены разные стили.
Открыть в новом окне
Посмотреть исходный код
Скачать исходный код
Статья
пятница, декабря 01, 2006
Еще одна реализация paging в DataGrid
четверг, ноября 30, 2006
Поисковые инструменты
Постраничный вывод в DataGrid
Уменьшение размера swf с помощью удаленных библиотек
Накнулся на интересный пост Джеймса Ворда, в котором рассказано, как уменьшить размер выходного swf файла с помощью использования Runtime Shared Libraries (RSL) - удаленных библиотек. Вот перевод.
Flex 2 позволяет загружать эти библиотеки с других доменов. Подразумевается, что приложение будет указывать на какой-нибудь определенный набор библиотек, который браузер будет быстро доставать из кэша. Перед началом необходимо заметить, что это не поддерживается Adobe, хотя команда разработчиков и работает в этом направлении, пока это просто хак. Во-вторых, пока нет нормального централизованного хранилища для RSL- библиотек, они хранятся на моем сервере, который может быть взломан и вместо изначальных библиотек вы получите какие-нибудь опасные компоненты. Несмотря на эти препоны, этот способ удовлетворяет большинство приложений и позволяет значительно уменьшить их размер. Как же это применить?
Мною было создано три библиотеки: малая, средняя и большая. Библиотеки взаимодополняемы, то есть, если необходимо использовать среднюю, то загружать надо малую и среднюю. См. таблицу у автора.
1) Скачайте необходимые SWC для RSL
2) Измените build path проекта
2.1) Если вы компилируете с помощью Ant или командной строки, определите пути к библиотекам следующим образом:
flex2-sdk/bin/mxmlc -external-library-path+=build/framework-2_0_0_a-small.swc,
build/framework-2_0_0_a-medium.swc -runtime-shared-libraries=
http://ws.jamesward.org/framework-2_0_0_a-small.swf,
http://ws.jamesward.org/framework-2_0_0_a-medium.swf-o=
build/testHostedFlexLibs-medium.swf -file-specs=test/testHostedFlexLibs.mxml
2.2) Если вы используете Flex Builder, перейдите в Project -> Properties -> Flex Build Path -> Library Path -> Add SWC -> [добавьте необходимые SWC]. Затем выберите SWC’s RSL URL и нажмите кнопку Edit. Измените Link Type на "Runtime shared library (RSL)", введите правильный URL, уберите галку с "Auto extract checkbox", затем нажмите OK.
2.3) Если вы используете FDS, добавьте SWC в папку flex/user_classes и обновите runtime-shared-libraries соответственно в файле flex-config.xml.
3) Перекомпилируйте приложение (если этого не произошло автоматически) и размер файла значительно уменьшится!
4) Еще одна преграда - приложение будет работать только из интернета, потому что политика безопасности запрещает загружать внешние ресурсы.
среда, ноября 29, 2006
Поиск по коду as и mxml файлов
file:.mxml$ tabnavigator
file:.as$ displayobject
Отсюда
Четыре днюхи за неделю
20 - МК
23 - Дэн Иванов
26 - Рост
27 - мое:)
Всех поздравляю задним числом!
вторник, ноября 21, 2006
Использование data-driven виджетов
Форматирование чисел в AS3
Есть небольшая AS3 библиотека с полезными методами. Одним из них является вывод чисел, форматированных по маске. За это отвечает класс NumberFormat. Маски поддерживают следующие символы:
- 0 - место, заполненное числом или нулем
- # - место, заполненное числом или пробелом
- . - дробный разделитель. Выводится символ точки
или запятой - в зависимости от локали. - , - группировка символов. Выводится символ точки или запятой - в зависимости от
локали.
Рассмотрим следующую маску:
##,###.0000
Если эту маску применить к числам
1.2345
12.345
123.45
1234.5
12345
То они будут отображены в виде
1.2345
12.3450
123.4500
1,234.5000
12,345.0000
Задать маску числу можно следующими способами:
- создать эеземпляр NumberFormat:
var styler:NumberFormat = new NumberFormat("##,###.0000"); - использовать свойство mask:
styler.mask = "##.00";
var styler:NumberFormat = new NumberFormat("#,###,###,###");
trace(styler.format(1));
trace(styler.format(12));
trace(styler.format(123));
trace(styler.format(1234));
styler.mask = "#,###,###,###.0000";
trace(styler.format(12345));
trace(styler.format(123456));
trace(styler.format(1234567));
trace(styler.format(12345678));
trace(styler.format(123456789));Числа будут выведены в следующем виде:
1
12
123
1,234
12,345.0000
123,456.0000
1,234,567.0000
12,345,678.0000
123,456,789.0000
Разделители и знаки дроби меняются на точки или запятые в зависимости от текущей локали автоматически. Но могут иногда быть ошибки определения локали. В
этом случае локаль можно определить руками, задав, например:
Locale.slanguage = "fr";
Во Франции, в качестве группировки применяются точки, а в качестве дробного разделителя запятые. Насколько я знаю, в России тоже самое, поэтому данную
установку можно использовать (или я ошибаюсь?).
При выполнении примеров не забудьте импортировать необходимые классы:
import ascb.util.NumberFormat;
import ascb.util.Locale;
Отслеживание реального фреймрейта
Установить свой фреймрейт можно с помощью команды компилятора:
mxmlc -default-frame-rate=50 HelloWorld.mxmlНо установка значение в 50 кадров в секунду вовсе не означает, что каждые 20 миллисекунд будет проигран кадр. Разные типы браузера, плеера, операционной системы дают разные результаты. Протестировать реальный фреймрейт можно с помощью следующего небольшого приложения:
<mx:ApplicationВзято у FARATA.
mx="http://www.adobe.com/2006/mxml"
layout="horizontal"
enterFrame="enterFrameHandler()">
<mx:Script>
<!--[CDATA[
var lastTime:int;
public function enterFrameHandler():void {
test.text = String(int(1000/(getTimer()-lastTime)));
lastTime=getTimer();
}
]]>
</mx:Script>
<mx:TextInput id="test" />
</mx:Application>
пятница, ноября 17, 2006
Коллекция уроков по Ruby on Rails
Эли Гринфилд почти закончил свой календарь
понедельник, ноября 13, 2006
Создание FDS Flex приложения с помощью FlashDevelop
вторник, ноября 07, 2006
250 темплейтов для RadRails
После скачивания откройте RadRails, перейдите в меню
Windows > Preferences > Ruby > Editor > Templates, выделите все элементы (ctrl+A), затем удалите их. Потом выберите Import и импортируйте ruby-rr-templates.xml.
Для импорта rhtml темплейтов зайдите в
Rails > Editiors > RHTML Editor > RHTML Templates, повторите туже процедуру и импортируйте rhtml-rr-templates.xml.
Обещано включить эти темплейты в следующий релиз RadRails.
понедельник, ноября 06, 2006
Загружаем эффекты, показанные на MAX 2006
четверг, ноября 02, 2006
Видеоуроки по Flex 2 и Red5
Компонент DisplayShelf
Пример разделен на три блока. Первый, компонент TiltingPane, получает любой элемент и применяет к нему '3d' эффект. Второй, компонент DisplayShelf, использует компонент TiltingPane для отображения элементов вдоль виртуальной полки, из которой можно выбирать элемент.
В примере проиллюстрирурованы:
- матричные трансформации
- graphics API
- маскирование
- манипуляции с битмапом
- темплейтинг
- item renderers
- интерфейс IList
- реализация dataProvider'ов
- анимация
Посмотреть DisplayShelf
Исходник
Загрузить
Отсюда
среда, ноября 01, 2006
Новый формат просмотра исходников Flex-приложения
вторник, октября 31, 2006
Выложены некоторые примеры кода из RIABook
Увеличение производительности Eclipse IDE
Например, для машины с 512 метрами памяти предлагается использовать следующие параметры:
-vmargs -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64mА для 1024 -
vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128mОригинал
понедельник, октября 30, 2006
Виджеты, основанные на Menu
четверг, октября 26, 2006
Полнотекстовый поиск по Rails-приложению
1. Откройте командную строку и установите
gem install ferret2. Затем установите плагин acts_as_ferret в папку приложения:
ruby script/plugin install3. Измените модель, соответствующую таблице, по которой должен идти поиск, следующим образом:
svn://projects.jkraemer.net/acts_as_ferret/
tags/stable/acts_as_ferret
class Bug < ActiveRecord::Baseгде :fields - поля для индексации. Если не использовать этот атрибут, то будут проиндексированы все поля.
acts_as_ferret :fields => [ ‘description’]
end
4. Добавьте, например, такой метод:
def searchBugs5. Наконец, можно вызвать этот метод из Flex-приложения с помощью HTTPService.
@bugs= Bug.find_by_contents(params[:query])
render(:xml => @bugs.to_xml)
end
Например, следующий код вернет все bugs, содержащие слово "error" в поле description:
searchBugs.send({query:"error"}); Оттуда
Пример кода Apollo приложения
<applicationwindowmode может быть также systemChrome.
xmlns="http://ns.adobe.com/apollo/application/1.0"
appid="" version="1.0">
<properties>
<name>ApolloHelloWorld</name>
<publisher>Mike Chambers</publisher>
<description></description>
<copyright></copyright>
</properties>
<rootcontent
contenttype="application/x-shokwave-flash"
windowmode="transparent">
ApolloHelloWorld.swf
</rootcontent>
</application>
Все просто и ясно.
И mxml-файла самого приложения ApolloHelloWorld.mxml:
<mx:applicationТоже ничего сложного.
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:apollo="http://www.abode.com/2006/apollo">
<mx:style>
Application
{
background-color:"";
background-image:"";
}
</mx:style>
<apollo:applicationwindow
title="Hello World" layout="absolute"
right="5" left="0" top="0" bottom="5">
<mx:label text="Hello World"
horizontalcenter="0"
verticalcenter="0">
</mx:label>
</apollo:applicationwindow>
</mx:application>
среда, октября 25, 2006
Как прилепить ApplicationControlBar к низу приложения
Посмотреть
Исходник
Скачать
вторник, октября 24, 2006
Открыта вики по RadRails
1) Скачать eclipse.
2) Запустить и перейти в Help | Software Updates | Find and Install | Search for New Features
3) Добавить следующие сайты:
- RDT: http://updatesite.rubypeople.org/release
- RadRails: http://radrails.sourceforge.net/update
- Subclipse (не обязательно): http://subclipse.tigris.org/update_1.0.x
И поискать обновления.
Динамическая загрузка шрифтов
понедельник, октября 23, 2006
DataGrid с фильтрацией
Стеклянный DataGrid
Исходники по правому клику.
среда, октября 18, 2006
Изменение стиля разделителя в заголовке mx:DataGrid
Как изменить или избавится от вертикальных линий в заголовке mx:DataGrid?
Вот простой ответ.
понедельник, октября 16, 2006
Новая статья от Derek Wischusen
воскресенье, октября 15, 2006
Чат Flex2/Red5
среда, октября 11, 2006
Новая статья "Использование текстовых виджетов"
а также правила использования простого и HTML форматированного текста во Flex-приложениях.
вторник, октября 10, 2006
DatGrid: меняем фоновый цвет ряда
1. Создайте новый класс, расширяющий mx.controls.DataGrid. Это может быть как MXML, так и ActionScript файл.
2. Переопределите метод drawRowBackground:
override protected function drawRowBackground
(s:Sprite, rowIndex:int, y:Number, height:Number,
color:uint, dataIndex:int):void
{
// изменяем цвет
color = 0xFF0000;
// вызываем метод родителя
super.drawRowBackground(s,rowIndex,y,
height,color,dataIndex);
}
3. Можете пользоваться.
Внутри drawRowBackground можно тестировать данные. Аргумент dataIndex может быть использован для поиска элемента в dataProvider, соответствующего этому ряду. Например, если необходимо выделить зеленым все ряды с данными больше 1000:
var item:Object = (dataProvider as ArrayCollection).getItemAt(dataIndex);
if( item.quantity > 1000 ) color = 0x00FF00;Все просто.
Взято у Пента.
понедельник, октября 09, 2006
Поддержка полноэкранного режима плеера в браузере
четверг, октября 05, 2006
Использование swc во FlashDevelop-проектах
жить с ним можно:)
Так вот, чтобы заюзать swc-компоненты во FlashDevelop-проекте, необходимо добавить директиву компилятора типа в файл build.xml в блок compile:
<target name="compile">
<exec executable="${flex2.dir}/${compiler}">
<arg
line="-compiler.include-libraries
${source.dir}/your_file.swc">
...
</arg>
</exec>
</target>
В этом случае компонент your_file.swc находится в папке ${source.dir}.
вторник, октября 03, 2006
Прозрачные Flex-приложения
Чудес никаких - просто добавление в html-файл строки:
AC_FL_RunContent(
...,
"wmode", "transparent"
);
понедельник, октября 02, 2006
Учите Flash, Flex, Apollo, Actionscript 3 и WPF
Последнее время я активно работаю с WPF и Flash. Flash давно является моей любимой платформой для создания интерактивности и анимации для веба. Вся шумиха от Microsoft и Adobe о WPF как о потенциальном убийце Flash так и останется шумихой. Пока эти два бегемота идут вместе во многих областях, Flash не должен беспокоится о конкуренции с WPF.
Основным моментом является то, что Flash и WPF - это удивительные инструменты для создания интерактивности и анимации. Но их конечные продукты сильно отличаются. WPF использует формат XBAP, который может быть прочитан IE. Вообще WPF заточен для создания богатых Windows приложений. Основываясь на своем опыте, могу сказать, что это платформа легка для изучения Flash разработчиками и дизайнерами. Комбинация C#/XAML в WPF похожа на связку Javascript/HTML, с которой знакомы многие веб-разработчики. WPF был разработан с целью достижения разделения визуального дизайна и данных(модели), что достаточно важно для современных приложений.
Причин того, что Flash не будет "убит" WPF, множество. Видео является той областью, где Flash явно доминирует над всеми. Никакая другая технология не может интегрировать видео и анимацию так легко, как это делает Flash. Также виновато само Flash сообщество, которое делает из мухи слона. Вот новости для всех: Microsoft - это не зло, а Adobe - не ваша добрая фея. Это просто компании, которые хотят заработать на вас деньги. То есть, судить технологии надо по их достоинствам, а не по тому, где они разработаны - в Редмонде или в Сан Хосе.
Итак, если Flash рулит в вебе, почему Flash разработчики и дизайнеры должны беспокоится о WPF? Ответ прост. Многие дизайн-студии уже получают тонны заказов на WPF проекты и сильно нуждаются в "полиглотах"-девелоперах. Мы уже завершили несколько проектов и ждем еще кучу. Итак, если вы хотите удержаться на плаву, расширять кругозор просто необходимо. Другой причиной изучения WPF является то, что он чертовски крут! Flash разработчики теперь имеют возможность создавать Windows приложения, которые содержат сложную анимацию и 3D. Поверьте мне, это не только круто, это еще и весело!
Хорошо, вы вняли моему совету и начали изучать WPF, который в связке с Flash-навыками, станет мощной силой в создании интерактивного контента как для веба, так и для десктопа. Но, подождите. Как же насчет Flex и Apollo? Когда вы подумали, что вся индустрия у вас на ладони, эти двое стучатся в дверь. Мой совет - учите и их! Flex - это технология, похожая по структуре на WPF, поэтому код можно практически легко портировать туда-сюда. Flex использует MXML в качестве языка размети, как XAML для WPF. Вместо C# для скриптинга используется Actionscript 3. Кстати, учите и его тоже. Но если вы знаете WPF или Flex, изучение другого является лишь проблемой синтаксиса. Отлично, теперь у вас три интеактивные технологии за плечами. В ваше резюме добавилась еще одна страница, но мы еще не закончили.
Apollo - это попытка Adobe войти на рынок десктопных приложений. С его помощью Flash разработчики могут создавать standalone приложения для Windows, Mac и Linux. Хотя релиза еще не было, я видел несколько демок и выглядят они впечатляюще. Теперь у вас есть полный контроль над приложениями, можно использовать такие фишки как прозрачные и округлые окна. Но если вы использовали Zinc до этого, вы скажете "Нах надо?". Поверьте на слово - надо! Основной проверкой будет проверка на кроссплатформенность этих приложений и насколько будет глубоким доступ к операционной системе. Apollo позиционируется как платформа для RIA на десктопе. Он не собирается замещать WPF с его огромной .NET библиотекой, которую никогда не достигнет Apollo.
Итак, хотите быть интерактивным крутнем, учите Flash, Flex, Apollo, Actionscript 3 и WPF.
четверг, сентября 28, 2006
среда, сентября 27, 2006
Image Converter на RoR и Flex
- загрузка изображений
- zip-архивирование
- сохранение изображений
Компонент Closeable Tab Navigator
Исходников не будет, так что делаем сами:)
вторник, сентября 26, 2006
Новое в вики - Использование виджетов
понедельник, сентября 25, 2006
Трюки и приемы использования BitmapData во Flex 2
- сохранение изображения из приложения (над этим он сейчас трудится)
- создания скриншотов текущего состояния приложения
- зеркальное отображения поведения компонентов (есть эксперимент и с видео)
- различные эффекты с изображениями
четверг, сентября 21, 2006
Flex-интерфейс для блога
Функционал:
- поиск
- выбор по категориям
- выбор по календарю
- добавление комментариев
среда, сентября 20, 2006
Компонент Calculator
Update: Кстати, есть большой урок от Adobe по созданию калькулятора, правда для 1.5.
вторник, сентября 19, 2006
Обновления у вики
- Использование визуальных компонентов во Flex
- Использование источников данных и коллекций
- Масштабирование и позиционирование компонентов
Готовится большая статья по виджетам.
четверг, сентября 14, 2006
Компонент SelfLabelingTextInput
<controls:selflabelingtextinput x="10" y="10" width="238"
label="Name">
</controls:selflabelingtextinput>
и в поле формы написано Name - всем понятно - сюда пишем имя :). При получении фокуса подпись исчезает.
Исходники в ассортименте.
вторник, сентября 12, 2006
Тюнингованный Rich Text Editor для Flex 2
Использование JSON и Flex 2
понедельник, сентября 11, 2006
Редактируем картинки во Flex - сохраняем с помощью rails
пятница, сентября 08, 2006
Укрощаем XML - получаем соседский узел
Например, одним способом представления пары имя / значение является следующая форма:
<Artist>Interpol</Artist>
А формат Apple делает это с помощью структуры ключ / значение:
<key>Artist</key><string>Interpol</string>
отношения между ключом и значением основываются на соседстве, а не на иерархии, как в первом примере. Я не буду вникать, зачем Apple это делает (я и не знаю), хорошо это или плохо, но это, однозначно, доставляет трудности при парсинге.
Чтобы распарсить эту строку, необходимо сперва извлечь узел key, соответствующий нужному значению, а затем получить следующий узел, содержащий это значение.
Вот пример:
package {
import flash.display.Sprite;
public class XMLTest extends Sprite
{
public function XMLTest()
{
var xml:XML =
<xml>
<songs>
<song>
<key>Artist</key><string>Interpol</string>
<key>Track Number</key><int>7</int>
</song>
<song>
<key>Artist</key><string>Bloc Party</string>
<key>Track Number</key><int>3</int>
</song>
</songs>
</xml>
var temp:XML;
var artistName:String;
//проходим через songs
for each (var song:XML in xml.songs.song)
{
// получаем узел key, имеющий значение Artist,
// в первой song
temp = song.key.(text() == "Artist")[0];
//получаем следующий узел
//(т.е. соседский узел узла key).
//Сохраняем его как Stirng
artistName =
String(temp.parent().children()[temp.childIndex() + 1]);
trace(artistName);
}
}
}
}Важной частью примера является строка:
temp.parent().children()[temp.childIndex() + 1]
Здесь извлекается соседский узел узла temp. Для получения предыдущего узла, вычтите 1:
temp.parent().children()[temp.childIndex() - 1]
Данный метод добавлен Майком Чамберсом в класс XMLUtil в corelib.
Оригинал поста
среда, сентября 06, 2006
Альтернативная IDE для RoR
Главное преимущество - это вес - всего 900Кб.
Основные фичи:
- Таб-навигация между открытыми файлами
- Навигация по коду с помощью Ctrl+клик
- Переключение назад/вперед между открытыми файлами
- Использование закладок, гиперзакладок, макросов
- Подсветка синтаксиса для .rb .rhtml файлов (черный фон - белые буквы - круто)
- Запуск сервера, консоли, командной строки в одно нажатие
В общем, пробуйте, выбор за вами.
вторник, сентября 05, 2006
понедельник, сентября 04, 2006
Затемнение ala Windows XP (Flex 2)
Примеры данного эффекта можно посмотреть в оригинальном посте автора, там же можно загрузить библиотеку данного эффекта и SWC-файл. Просто нажмите кнопку и фон за модальным окном померкнет.
Работает это так. Класс PopUpManager имеет недокументированное внутреннее свойтсво modalWindowClass. Если задать в качестве значения этого свойства какой-нибудь класс, то его экземпляр будет создан при создании модального (только модального!) окна. Экземпляр появляется позади модального окна и изменяет внешний вид приложения.
Alistair создал класс SaturationFadePopUpBlocker, который использует его новый эффект SaturationFade. SaturationFade изменяет насыщенность компонента, который является целью эффекта.
Чтобы добавить данный эффект в приложение, необходимо добавить в обработчик creationComplete строку:
PopUpManager.mx_internal::modalWindowClass =
SaturationFadePopUpBlocker;
Вот переделанный пример из документации с использованием данного эффекта:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="doInit();">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.core.IFlexDisplayObject;
import com.adobe.effects.*;
private function doInit():void {
PopUpManager.mx_internal::modalWindowClass =
SaturationFadePopUpBlocker;
}
private function showLogin():void {
var helpWindow:IFlexDisplayObject =
PopUpManager.createPopUp(this, MyLoginForm, true);
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button click="showLogin();" label="Login"/>
<mx:Image source="img/sunset.jpg" />
</mx:VBox>
</mx:Application>
Необходимо еще само модальное окно, но его можно взять из хелпа. Изменений никаких в нем нет.
Естественно, все классы или swc файлы должны быть импортированны.
Эффект можно настроить для любого уровня насыщенности. Эффект SaturationFade можно использовать отдельно. В следующем примере эффект проигрывается при нажатии на изображения. Насыщенность меняется с 1 до 0. При отпускании эффект проигрывается в обратную сторону:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:eff="com.adobe.effects.*" >
<mx:Script>
<![CDATA[
import com.adobe.effects.SaturationFade;
]]>
</mx:Script>
<eff:SaturationFade id="fadeToGray" duration="500"
saturationFrom="1" saturationTo="0" />
<eff:SaturationFade id="fadeBack" duration="500"
saturationFrom="0" saturationTo="1" />
<mx:Image mouseDownEffect="fadeToGray" mouseUpEffect="fadeBack"
source="sunset.jpg" />
</mx:Application>
Кого интересует реализация данного эффекта во Flash - добро пожаловать.
.