PDA

View Full Version : Adobe Flex4 безумие ООП



crazy-mike
06-26-2010, 04:06 AM
:wink1:
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
:wink1:
Странное от него ощущение. По-своему прикольно. Даже и быстро работает. И даже даёт "почти независимость" от браузера - лишь бы plug-in Flash был установлен. Но что-то в нём "не так". Это не Java! И даже не JavaScript. И объекты там - "странные". Ну нет у них деструкторов.
:grum:
И дело не только в деструкторах. Всё остальное там - "тяжёлый случай". Объекты Function и Class - "шиза". Хотя с деревьями там очень даже приятно что-то делать. Правда их controls для CUA как бы "недостаточно универсальны". Но веб-приложение с динамическим контентом из формально всего одной страницы, загружаемой на стороне клиента , так можно рисовать.

A H T O H
06-26-2010, 11:25 AM
There is a groundbreaking startup looking for IT guru partner. This may be the opportunity of a lifetime for someone with the right skills. Briefly about the project:



Intellectual property exists in the form of US Patent 7,089,319

METHOD AND SYSTEM FOR INSTANTANEOUS ON-DEMAND DELIVERY OF MULTIMEDIA CONTENT OVER A COMMUNICATION NETWORK WITH AID OF CONTENT CAPTURING COMPONENT, DELIVERY-ON-DEMAND CLIENT AND DYNAMICALLY MAPPED RESOURCE LOCATOR SERVER.

http://www.google.com/patents/about?id=NsV6AAAAEBAJ&dq=7,089,319



Basically, I am looking to put together a beta for pure web-based “Skype/Chatroulette” type of online service. The premise is rather simple, yet new and groundbreaking. This is not a “me too” – there is nothing like this out there. There are two basic functions envisioned:



Direct connect. User-to-user connectivity via web-browser for live audio-video communication (Like Skype, only in-the-cloud, instant and purely web browser based).
“Chat Roulette” with enhanced GeoIP tagging. This takes “rouletting” to the whole new level, as one could connect to random groups of users by GeoIP attributes – “x miles from me”, city/town, keyword etc.
Database schematic has been drafted.

Camtuber.com portal would also allow “porting in” Facebook user profile.

All of this can be accomplished with the following toolset:



Adobe Stratus Server with Adobe Player 10.0. This manages P2P connectivity, so users connect to each other and traffic does not flow through the server. Adobe Flex/Flash Builder is required to code and compile this logic.
MySQL back-end server database, or the like.
Basic GeoIP database.
PHP manages scripting and HTML
Facebook connectivity
The marketing end of this will be managed by me and other well positioned partners. The idea is to build up user base and then exit by selling to Facebook, Google etc. The existing IP in combination with working Beta would get investors attention. There are already existing inquiries from top national VC shops looking for a beta of this.

We offer 15-20% equity in the enterprise to someone with strong technical background and vision, able to bring this online yesterday. The potential payout is multi-million, worst case scenario you sharpen up on Adobe toolset experience.



If you have the skills, or know someone who does, please contact me directly [email protected]



AHTOH

crazy-mike
06-27-2010, 03:19 AM
There is a groundbreaking startup looking for IT guru partner. This may be the opportunity of a lifetime for someone with the right skills. Briefly about the project:
....
Basically, I am looking to put together a beta for pure web-based “Skype/Chatroulette” type of online service. The premise is rather simple, yet new and groundbreaking. This is not a “me too” – there is nothing like this out there. There are two basic functions envisioned:

Direct connect. User-to-user connectivity via web-browser for live audio-video communication (Like Skype, only in-the-cloud, instant and purely web browser based).
“Chat Roulette” with enhanced GeoIP tagging. This takes “rouletting” to the whole new level, as one could connect to random groups of users by GeoIP attributes – “x miles from me”, city/town, keyword etc.
Database schematic has been drafted.

Camtuber.com portal would also allow “porting in” Facebook user profile.

All of this can be accomplished with the following toolset:

Adobe Stratus Server with Adobe Player 10.0. This manages P2P connectivity, so users connect to each other and traffic does not flow through the server. Adobe Flex/Flash Builder is required to code and compile this logic.
MySQL back-end server database, or the like.
Basic GeoIP database.
PHP manages scripting and HTML
Facebook connectivity
AHTOH
Пока мне кажется , что toolset выбран крайне неудачно. Будешь смеяться - но Adobe Flex SDK намного "приятнее" в использовании (хотя кому-то такая точка зрения может показаться "садомазохизмом"). MySQL - тоже очень неудачный выбор СУБД (DBMS). Да - её предлагают почти на любом "бесплатном хостинге", но оптимизатор сложных запросов в PostgreSQL работает лучше. Не знаю - существуют ли реально большие проекты на Adobe Flex (это вообще сомнительно). Я пока просто попробовал перенести фунцкиональность одного из своих виджетов для браузера Opera в этот environment. Кое-что во flex даже понравилось (особенно то - что это не только под Opera работает. Правда в браузере Internet Exlorer в настройках безопасности нужно разрешить приложению обновлять динамический контент и ещё несколько "настроек по умолчанию" сбросить) - TitleWindow даже очень приятная вещь, но кнопка Close там есть , а кнопок Minimize и Resize вообще нет. Документировано там всё по сравнению с Java не очень хорошо. Даже плохо. Сложилось впечатление , что никто точно не знает - как "это" вообще должно работать ("глюки" в программах там надо исправлять как бы "пошагово" и для каждой используемой "фишки" приходится свой маленький тест сначала писать для уточнения семантики, и это просто раздражает. Если уже компилятор пропускает языковую конструкцию - то оно должно работать без всяких "но". Во flex всё немного "не так" ). С кросс-платформностью там тоже что-то смешное. Под Linux их SDK работает нормально , но медленнее (там компилятор написан на Java , а не на C).
Вместо Adobe Flex вообще-то можно попробовать использовать haxe и swfmill - но там всё ещё "глупее" (особенно с документацией - и по любому поводу посылают на документацию по Adobe Flex SDK).
:grum:
Но web-сервисы в ресурсах (mxml) и переменные с модификатором [Bindable] - в Adobe Flex и в самом деле довольно удобно.

crazy-mike
06-28-2010, 01:09 PM
Ну - для примера , можно глянуть немного на это "безумие".
(это не php, а mxml с ActionScript внутри )


<?xml version="1.0" encoding="windows-1251" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#ffff00" width="100%" height="1000" creationComplete="zInit()" paddingTop="0"
paddingBottom="0" paddingLeft="0" paddingRight="0" >
<mx:HTTPService id="zaddURL" url="./addurl.php"
method="POST" resultFormat="text" >
<mx:request xmlns="" >
<zurl>{glnk.text}</zurl>
</mx:request >
</mx:HTTPService >
<mx:HTTPService id="zsaveInfo" url="./saveinfo.php"
method="POST" resultFormat="text" >
<mx:request xmlns="" >
<info>{qinfo.text}</info>
</mx:request>
</mx:HTTPService >
<mx:HTTPService id="zSendLogin" url="./login.php" method="POST" resultFormat="text" >
<mx:request xmlns="" >
<xxlogin>{ilogin.text}</xxlogin>
<xxpass>{ipass.text}</xxpass>
</mx:request>
</mx:HTTPService>
<mx:HTTPService id="zSvProp" url="./svprop.php" method="POST" resultFormat="text" >
<mx:request xmlns="" >
<p>{Spro}</p>
</mx:request>
</mx:HTTPService>
<mx:HTTPService id="zSetProp" url="./setmp.php" method="POST" resultFormat="text" >
<mx:request xmlns="" >
<p>{Upro}</p>
<i>{Uisns}</i>
</mx:request>
</mx:HTTPService>
<mx:HTTPService id="zUnSetProp" url="./unsetmp.php" method="POST" resultFormat="text" >
<mx:request xmlns="" >
<p>{Vpro}</p>
<i>{Visns}</i>
</mx:request>
</mx:HTTPService>
<mx:HTTPService id="zFromList" url="./fromlist.php" method="POST" resultFormat="text" >
<mx:request xmlns="" >
<f>{Flist}</f>
</mx:request>
</mx:HTTPService>
<mx:Script>
<![CDATA[
import yoyo.XBar;
import flash.net.*;
import flash.events.*;
import mx.events.*;
import mx.rpc.events.*;
import mx.managers.*;
import mx.collections.*;
import mx.controls.*;
import mx.controls.dataGridClasses.DataGridColumn;

[Bindable]
static public var Flist:String="0";

[Bindable]
static public var Spro:String="0";

[Bindable]
static public var Uisns:String="0";

[Bindable]
static public var Upro:String="0";

[Bindable]
static public var Visns:String="0";
[Bindable]
static public var Vpro:String="0";


static public var XInfo:Object={
SvProp:"Сохраняем свойства...",
WrOk:"Данные записаны",
ErrWr:"Ошибка записи",
Countries:"Страны",
Cabinet:"Кабинет",
Deleted:"Запись удалена!",
Deleting:"удаление записи...",
TreeLd:"загрузка описаний групп...",
TreeOk:"описания групп загружены"
};

static private var MyUser:String="?";
static private var kwidth:int=45;

public function setFlist(q:String):void
{ Flist=q;
}

public function savePP(q:String):void
{ Spro=q;
}

public function saveVP(qp:String,qi:String):void
{ Visns=qi; Vpro=qp;
}

public function saveUP(qp:String,qi:String):void
{ Uisns=qi; Upro=qp;
}

public function noAdd():void
{ xadd.width=0;
xadd.visible=false;
}

public function checkEditor():void
{ if(MyUser!="dbadmin") {
edsv.visible=false;
ed2.visible=false;
ed3.visible=false;
};
}


public function permitAdd():void
{ if(MyUser!="dbadmin") {
noAdd(); return;
};
xadd.width=kwidth;
xadd.visible=true;
}

private function zInit():void
{ var i:int;
var n:int;
yoyo.XBar.setMain(main);
noAdd();
doAuth();
}

// конечно же здесь что-то есть ещё
]]>
</mx:Script>
<mx:Panel id="main" title="БД по инновациям" backgroundColor="#4e85e0"
width="100%" height="100%" paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" visible="false" >
<mx:Label id="yy" text="Adobe Flex release for Smarthome Database" fontWeight="bold" fontSize="12" color="#000000" />
<mx:HBox id="hb" backgroundColor="#c2c2c2" autoLayout="true"
width="100%" borderStyle="outset" paddingTop="10" paddingBottom="10" >
<mx:Button id="xadd" icon="@Embed(source='./im/addurl.gif')" width="45" height="40" toolTip="добавить URL"
click="yoyo.XBar.doAddURL(event)" />
<mx:Button id="xbuy" icon="@Embed(source='./im/icobuy.gif')" width="45" height="40" toolTip="купить продукт в Украине"
click="yoyo.XBar.doBuy(event)" />
<mx:Button id="ulogin" icon="@Embed(source='./im/login.gif')" width="45" height="40" toolTip="доступ к персональным данным"
click="yoyo.XBar.doCabinet(event)" />
<mx:Button id="xtoday" icon="@Embed(source='./im/today.gif')" width="45" height="40" toolTip="линки за сегодня"
click="yoyo.XBar.doToday(event)" />
<mx:Button id="xdate" icon="@Embed(source='./im/calendar.gif')" width="45" height="40" toolTip="линки по датам"
click="yoyo.XBar.doByDate(event)" />
<mx:Button id="xcountries" icon="@Embed(source='./im/sites.gif')" width="45" height="40" toolTip="данные по странам"
click="yoyo.XBar.doCountries(event)" />
<mx:Button id="xcompanies" icon="@Embed(source='./im/reseller.gif')" width="45" height="40" toolTip="данные по компаниям"
click="yoyo.XBar.doCompanies(event)" />
<mx:Button id="xquery" icon="@Embed(source='./im/search.gif')" width="45" height="40" toolTip="поиск линков в БД"
click="yoyo.XBar.doQuery(event)" />
<mx:Button id="xdig" icon="@Embed(source='./im/dig.gif')" width="45" height="40" toolTip="поиск данных по словарю"
click="yoyo.XBar.doDig(event)" />
<mx:Button id="xfolder" icon="@Embed(source='./im/explorer.gif')" width="45" height="40" toolTip="линки по категориям"
click="yoyo.XBar.doExplorer(event)" />
<mx:Button id="xupd" icon="@Embed(source='./im/undated.jpg')" width="45" height="40" toolTip="линки без категорий"
click="yoyo.XBar.doUndated(event)" />
<mx:Button id="xlinks" icon="@Embed(source='./im/links.gif')" width="0" height="40"
toolTip="назначить свойства для выборки"
click="yoyo.XBar.beginMultiSel(event)" visible="false" />
<mx:Button id="xcat" icon="@Embed(source='./im/cats.gif')" width="0" height="40"
toolTip="список категорий для выборки"
click="yoyo.XBar.seeCat(event)" visible="false"
/>
</mx:HBox>
<mx:HBox id="xseldate" visible="false"
paddingTop="10" paddingLeft="10"
width="400" height="500" backgroundColor="#c2c2c2" >
</mx:HBox>
</mx:Panel>
<mx:TitleWindow id="xnewlink"
backgroundColor="#83ffc1" width="400" visible="false"
showCloseButton="true"
>
<mx:VBox>
<mx:Form>
<mx:FormHeading label="добавляем линк" />
<mx:FormItem label="URL" >
<mx:TextArea id="glnk" width="290" height="80" />
</mx:FormItem>
<mx:FormItem>
<mx:Button id="submit" label="ввести" click="addNew(event)" />
</mx:FormItem>
</mx:Form>
</mx:VBox>
</mx:TitleWindow>
<mx:TitleWindow id="xedlink" backgroundColor="#83ffc1" width="500"
visible="false" showCloseButton="true"
>
<mx:VBox>
<mx:HBox id="tbitem" >
<mx:Button label="открыть" id="ed1" />
<mx:Button label="удалить" id="ed2" />
<mx:Button label="свойства" id="ed3" />
</mx:HBox>
<mx:Label id="qlnk" text="линк" />
<mx:Form id="fminfo" >
<mx:FormItem>
<mx:Button label="записать" id="edsv" />
</mx:FormItem>
<mx:FormItem label="инфо" >
<mx:TextArea id="qinfo" width="290" height="160" />
</mx:FormItem>
</mx:Form>
</mx:VBox>
</mx:TitleWindow>
<mx:TitleWindow id="xlogin" title="Вход в систему" backgroundColor="#83ffc1" width="500"
visible="false" showCloseButton="false"
>
<mx:VBox>
<mx:Label id="istat" text="данные для доступа" />
<mx:Form>
<mx:FormItem label="логин:" >
<mx:TextInput id="ilogin" text="" editable="true" width="120" />
</mx:FormItem>
<mx:FormItem label="пароль:" >
<mx:TextInput id="ipass" text="" editable="true" width="120" displayAsPassword="true" />
</mx:FormItem>
<mx:FormItem>
<mx:Button label="войти" click="beginLogin(event)" />
</mx:FormItem>
</mx:Form>
</mx:VBox>
</mx:TitleWindow>
</mx:Application>

Формально имя такого файла служит параметром при вызове компилятора , на выходе у которого строится файл в формате swf. Этот файл swf тупо встраивается в "минимальнную" html-страничку по <embed> или по <object>.
Например: mxmlc /coocoo/nest.mxml
И где-то в папке coocoo создаётся nest.swf. Всё остальное туда берётся из того же каталога и из подкаталогов (в которых размещаются "пакеты" - package).
Полное имя метода пишется как "имя пакета.имя класса.имя метода" (всё как у всех :grum: ). Классы не могут быть вложенными. Но зато могут быть "локальные классы" внутри одного файла скрипта.
Из "пакетов" и "методов классов внутри пакетов" можно обращаться к данным (ресурсам) - описанным в файле mxml по mx.core.FlexGlobals.topLevelApplication.имя...Так можно обращаться ко всему , где есть модификатор public.

смешно
06-30-2010, 03:16 PM
пока они нв выпустят Flash 64-bit Windows support, я с ними не разговариваю.

crazy-mike
06-30-2010, 03:30 PM
пока они нв выпустят Flash 64-bit Windows support, я с ними не разговариваю.
64битный нетбук? :grum: Оно ведь и в самом деле чем-то удобнее чем JavaScript. И выполняется быстрее.А с аналогами Ajax-запросов там намного меньше мороки чем в JavaScript.

crazy-mike
08-18-2010, 05:01 AM
пока они нв выпустят Flash 64-bit Windows support, я с ними не разговариваю.
Уже выпустили. (для 64bit Ubuntu и т.д.)
Мало того - они выпустили Adobe AIR 2.0 даже.
При этом AIR-приложение немного напоминает widget для браузера Opera с той лишь разницей , что оно "намного длиннее". (600 К вместо 80 К - например).
Но AIR-application может хранить данные на компе пользователя и даже держать БД (к которой можно обращаться через SQL-запросы из AIR-application) на компьютере пользователя,
Вместо <mx:Application> в "главном файле приложения" для AIR используется <mx:WindowedApplication >.
Вместо манифеста (такого как для Java) пишется XML-файл дескриптора приложения. Компилируется эта радость под flex в этом случае через amxmlc (а не через mxmlc ). Ну и потом создаётся пакет через adt (для "обычного" Flash этого не надо делать ).
Под Windows это всё работает вообще без проблем и о "совместимости с браузерами" можно просто забыть. Под Ubuntu 10 всё немного смешно (как всегда в Ubuntu). Установить такое AIR-application можно , но запускать его лучше из под root (sudo -s и потом запускать). Иначе оно просто с сетевыми запросами не будет работать и требовать указать сервер аутентификации.

crazy-mike
08-21-2010, 04:53 AM
:wink1:
Но самый смешной идиотизм начинается - когда во flex окна описываются в качестве ресурсов (там такое можно делать - <mx:TitleWindow> и т.п.). Проблема концептуально сводится к отсутствию деструкторов в явном виде поскольку закрытие окна в этом случае не разрушает данные этого окна (в том числе ссылки на обработчики событий). Конечно "обработчики событий"(Event Listener) можно писать несколькими способами (один обработчик для нескольких targets , например) - но с точки зрения "удобочитаемости и сопровождения" лучше чтобы для каждого "функционального случая" всё было отдельно. За счет отсутствия деструкторов и невозможности удалить "окно из ресурса" приходится обработчики событий к нему цеплять всего один раз. Иначе они тупо вызываются все подряд (один после другого). AddEventListener добавляет очередной instance обработчика , но не убирает предидущий. Правда метод RemoveEventListener у них тоже есть.
Но если хочется менять обработчики для "объекта из статического ресураса" в зависимости от контекста вызова , то эти обработчики приходится как бы передавать в качестве параметров "статическим обработчикам" , которые можно установить всего один раз при "инициализации приложения".
Вот довольно "жестоко-варварский" фрагмент кода.


public static var xeEditProp:Function;
public static var xeOpenHref:Function;
public static var xeDelHref:Function;
public static var xeSave:Function;

public function reEditProp():void
{ xeEditProp=yoyo.XBar.editProperties;
xeOpenHref=yoyo.XBar.openHref;
xeDelHref=yoyo.XBar.delHref;
xeSave=runSaveInfo;
}

public function openLink(ev:MouseEvent):void
{ xeOpenHref();
}


public function setEditProp(prop:Function,openU:Function,delU:Func tion,save:Function):void
{ xeEditProp=prop;
xeOpenHref=openU;
xeDelHref=delU;
xeSave=save;
}

public function delHref(ev:MouseEvent):void
{ xeDelHref();
}


public function saveInfo(ev:MouseEvent):void
{ xeSave();
}

public function zEditListeners():void
{ ed1.addEventListener(MouseEvent.CLICK,openLink);
ed2.addEventListener(MouseEvent.CLICK,delHref);
ed3.addEventListener(MouseEvent.CLICK,changeProp);
ed4.addEventListener(MouseEvent.CLICK,yoyo.XBar.to Cab);
ed5.addEventListener(MouseEvent.CLICK,yoyo.XBar.re mFromCab);
ed6.addEventListener(MouseEvent.CLICK,yoyo.XBar.sh areFromCab);
edsv.addEventListener(MouseEvent.CLICK,saveInfo);
}

Здесь функция setEditProp вызывается перед "всплыванием диалога" в каждом контексте.
В качестве параметров ей передаются ссылки на функции - которые будут вызываться при нажатии на кнопки при вызове из различных instances диалоговых объектов.

crazy-mike
10-02-2010, 03:46 AM
Вообще-то в flex массивы являются массивами объектов. Среди объектов могут быть даже объекты типа Function и Class. Для "инициализации" массива используется "оператор" [].
И там возникают очень смешные ошибки , когда компонентой массива является тоже массив. При этом достаточно всего один раз пропустить запятую в перечислении. Компилятор такое "пропустит" - поскольку ["a"]["b"] означает значение свойства "b" у свойства "a". :grum:
Я с этим минут 15 разбирался во Flex 4.1 SDK.


var b:Array;

b=[
[ bucediaexpo,seeCEDIAEXPO ] ,
[ bueebc,seeEEBC2010 ],[bugitex,seeGITEX],
[ buphotokina,seePhotokina2010 ],
...
];

Вот если убрать одну запятую и сделать так:


b=[
[ bucediaexpo,seeCEDIAEXPO ]
[ bueebc,seeEEBC2010 ],[bugitex,seeGITEX],
[ buphotokina,seePhotokina2010 ],
...
];

- ну тогда [bucediaexpo,seeCEDIAEXPO] будет интерпретироваться как "значение свойства" ,после вычисления выражения bucediaexpo,seeCEDIAEXPO. :grum:

crazy-mike
10-09-2010, 01:46 AM
Всё бы хорошо - но там ещё и "проблемы совместимости" появились. На flex4 можно всё делать немного "не так" как во flex3 хотя flex4 понимает все описания flex3. Только вот одно "но" - mx:Application и s:Application - это немного разные тэги. Да и mx:Button - это совсем не s:Button. Там появилась новая форма описания ресурсов. И самое гадкое - "конфликты" при обработке событий. Поэтому если хочется писать "как flex4" , то лучше не смешивать две разные архитектуры flex3 и flex4. :wink1:

Serge7
10-09-2010, 01:49 AM
:wink1:
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
:wink1:
Странное от него ощущение. По-своему прикольно. Даже и быстро работает. И даже даёт "почти независимость" от браузера - лишь бы plug-in Flash был установлен. Но что-то в нём "не так". Это не Java! И даже не JavaScript. И объекты там - "странные". Ну нет у них деструкторов.
:grum:
И дело не только в деструкторах. Всё остальное там - "тяжёлый случай". Объекты Function и Class - "шиза". Хотя с деревьями там очень даже приятно что-то делать. Правда их controls для CUA как бы "недостаточно универсальны". Но веб-приложение с динамическим контентом из формально всего одной страницы, загружаемой на стороне клиента , так можно рисовать. Адобе - вообще особая контора. ))) Just take it as it is, Mike.. ))) :)

crazy-mike
10-09-2010, 01:53 AM
Адобе - вообще особая контора. ))) Just take it as it is, Mike.. ))) :)
Они на IDF 2010 как бы "поженились" с Intel. Просто Adobe Flash теперь как бы является одной из компонент Google TV и Smart TV. Мало того - Intel на IDF 2010 попыталась позиционировать Adobe Flash в качестве основной платформы для разработки бизнес-приложений на нетбуках (на любых дивайсах с Intel Atom внутри) и tablet PCs.
Кроме того - выпуск смартбуков на процессорах ARM был задержан из-за того , что для Android для ARM вовремя не был готов Adobe Flash. :wink1:

crazy-mike
10-09-2010, 03:48 AM
Для демонстрации "небольших различий" между flex3 и flex4 можно глянуть на что-то такое:
flex3:


<?xml version="1.0" encoding="UTF-8" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#4e85e0" width="100%" height="100%" creationComplete="zInit()" paddingTop="0"
paddingBottom="0" paddingLeft="0" paddingRight="0" >
....
<mx:Script>
<![CDATA[
...
]]>
</mx:Script>
<mx:Panel id="main" title="БД по инновациям" backgroundColor="#4e85e0"
width="1024" height="768" paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" visible="false" >
<mx:HBox id="hb" backgroundColor="#c2c2c2" autoLayout="true" width="100%"
borderStyle="outset" paddingTop="1" paddingBottom="2" paddingLeft="1" >
<mx:Button id="bu1" icon="@Embed(source='./im/logo.jpg')" toolTip="сайт провайдера" />
<mx:Button id="bu2" icon="@Embed(source='./im/invent.jpg')" toolTip="решения и предложения" />
</mx:HBox>
</mx:Panel>
</mx:Application>

:wink1: Это flex3 без лишних "наворотов". Допустим , что захотелось вот перенести всё на flex4 (зачем - трудно сказать. Дело в том - что размер файла swf при этом становится не меньше , а немного больше. :grum:).
И здесь сразу начинаются "сюрпризы". Для s:Button , например , свойства Icon нет вообще. Поэтому приходится "родить" что-то своеобразное:
flex4:


<?xml version="1.0" encoding="UTF-8" ?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark"
backgroundColor="#4e85e0" width="100%" height="100%" creationComplete="zInit()"
>
<fx:Style>
.XButton {
borderStyle: outset;
borderColor: black;
cornerRadius: 8;
}
</fx:Style>
<fx:Script>
<![CDATA[

import flash.net.*;
import flash.events.*;
import mx.events.*;
import mx.rpc.events.*;
import mx.managers.*;
import mx.collections.*;
import mx.controls.*;
//import mx.controls.dataGridClasses.DataGridColumn;
import spark.core.*;
import spark.components.*;

private function zInit():void
{ //var a:Array,i:int,b:Array;
main.width=main.parentDocument.width;
main.height=main.parentDocument.height;
}

]]>
</fx:Script>
<s:Panel id="main" title="тест" backgroundColor="#4e85e0" visible="true" >
<s:HGroup width="100%" >
<s:BorderContainer width="100%" height="52" backgroundColor="#c6c6c6" >
<s:HGroup>
<s:BorderContainer styleName="XButton" width="70" height="50" >
<mx:Image id="bu1" source="@Embed('./im/logo.jpg')"
toolTip="сайт провайдера" />
</s:BorderContainer>
<s:BorderContainer styleName="XButton" width="50" height="50" >
<mx:Image id="bu2" source="@Embed('./im/invent.jpg')"
toolTip="решения и предложения" />
</s:BorderContainer>
</s:HGroup>
</s:BorderContainer>
</s:HGroup>
</s:Panel>
</s:Application>

Ну - addEventListener для mx:Image , а не для mx:Button в этом случае. Но различий ведь очень много.
Коротко - две архитектуры (flex3 и flex4 (с s: и fx: )) лучше не смешивать. Просто использование "кусочков flex4" внутри "flex3" может привести к "нарушению работы". Например - внутри s:Application события от кликов мышкой могут перестать передаваться в listener-ы.

crazy-mike
12-17-2010, 07:02 AM
Эти "очень сильно продвинутые" ведь RunTime Environment заменяют время от времени. Ну вот дозаменялись. Для класса FileStream куда-то исчезли методы readUTF и writeUTF:

XBar.XTree=fi.readMultiByte(fi.bytesAvailable,"utf-8"); // XBar.XTree=fi.readUTF();
fi.writeMultiByte(XBar.XTree,"utf-8"); // fi.writeUTF(XBar.Xtree);


Вот что-то такое приходится писать. Мало того - исчезли они именно из RunTime Environment! :grum:
Я час на эту хреновину угробил чтобы разобраться в чём дело.