<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>O2dev [сборка контента - 10% total]</title>
	<atom:link href="http://o2dev.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://o2dev.wordpress.com</link>
	<description>Air -путь на десктоп</description>
	<lastBuildDate>Sun, 18 Nov 2007 21:29:11 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='o2dev.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>O2dev [сборка контента - 10% total]</title>
		<link>http://o2dev.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://o2dev.wordpress.com/osd.xml" title="O2dev [сборка контента - 10% total]" />
	<atom:link rel='hub' href='http://o2dev.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Правая кнопка</title>
		<link>http://o2dev.wordpress.com/2007/11/14/%d0%9f%d1%80%d0%b0%d0%b2%d0%b0%d1%8f-%d0%ba%d0%bd%d0%be%d0%bf%d0%ba%d0%b0/</link>
		<comments>http://o2dev.wordpress.com/2007/11/14/%d0%9f%d1%80%d0%b0%d0%b2%d0%b0%d1%8f-%d0%ba%d0%bd%d0%be%d0%bf%d0%ba%d0%b0/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 09:11:07 +0000</pubDate>
		<dc:creator>o2dev</dc:creator>
				<category><![CDATA[Air]]></category>

		<guid isPermaLink="false">http://o2dev.wordpress.com/2007/11/14/%d0%9f%d1%80%d0%b0%d0%b2%d0%b0%d1%8f-%d0%ba%d0%bd%d0%be%d0%bf%d0%ba%d0%b0/</guid>
		<description><![CDATA[Во флеше полнофункциональной поддержки правой кнопки не было никогда. В Air ее и сейчас нет. Но все-же до полного обеспечения населения тачскринами еще долго, поэтому без зазрений совести эту правую кнопку использовать. Причем в Air ее можно использовать не только как контекстное меню &#8211; но и вообще как угодно. Разумеется не без хаков.Минимальная поддержка правой [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=6&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Во флеше полнофункциональной поддержки правой кнопки не было никогда. В Air ее и сейчас нет. Но все-же до полного обеспечения населения тачскринами еще долго, поэтому без зазрений совести эту правую кнопку использовать. Причем в Air ее можно использовать не только как контекстное меню &#8211; но и вообще как угодно. Разумеется не без хаков.<span id="more-6"></span>Минимальная поддержка правой кнопки во флеше реализована через ContextMenu -для Air соответственно NativeContextMenu. Так как Air не отягощает это меню своими обязательными пунктами (типа about flash player), а при пустом менб вообще ничего не выводит &#8211; появляется возможность юзать правую кнопку как угодно. Для этого нужно подписаться на событие ContextMenu.DISPLAYING. Рассмотрим на конкретной задаче, ибо пример понятней демагогии.</p>
<p>Задачу обозначим следующую &#8211; есть датагрид, он сам по себе статичен, но при нажатии правой кнопкой на ячейку &#8211; она начинает редактироваться. Исполнять сию задачу будем через итемрендерер, каждый itemrenderer сам себя слушает на событие отображения контекстного меню (контекстное меню будет пустым &#8211; потому не отобразится). По &laquo;отображению&raquo;пустого мею&raquo; выставляем датагриду editedItemPosition = {columnIndex:1, rowIndex:lastRolled &#8211; 1};.</p>
<p>Вкрадце &#8211; чо надо сделать:</p>
<ul>
<li>Создать DataGrid, итемрендерер и привязать их друг к другу</li>
<li>Подписать обьект меню на событие ContextMenu.DISPLAYING</li>
<li>Установить датагриду editable=true</li>
<li>Установить датагриду editedItemPosition</li>
<li>Убрать editable у датагрида</li>
</ul>
<p>И подробности,  всего 2 файла:</p>
<p>Main.mxml:</p>
<hr /><font size="2">&lt;?xml version=&raquo;1.0&#8243; encoding=&raquo;utf-8&#8243;?&gt;<br />
</font><font color="#0000ff" size="2">&lt;mx:WindowedApplication<br />
</font><font size="2">   xmlns:mx=</font><font color="#990000" size="2"><a href="http://www.adobe.com/2006/mxml">http://www.adobe.com/2006/mxml</a></font><font size="2"><br />
layout=&raquo;</font><font color="#990000" size="2">absolute</font><font size="2">&laquo;<br />
creationComplete=&raquo;init()&raquo;</font><font color="#0000ff" size="2">&gt;<br />
</font><font color="#006633" size="2">   &lt;mx:Script&gt;<br />
</font><font size="2">   &lt;![CDATA[<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> mx.controls.DataGrid;<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> mx.collections.ArrayCollection;<br />
[</font><strong><font color="#0033ff" size="2">Bindable</font></strong><font size="2">]<br />
</font><strong><font color="#0033ff" size="2">   private</font></strong><font size="2"> </font><strong><font color="#6699cc" size="2">var</font></strong><font size="2"> theData:XMLList=</font><strong><font color="#0033ff" size="2">new</font></strong><font size="2"> XMLList(&lt;&gt;<br />
&lt;item val=</font><strong><font color="#990000" size="2">&laquo;value1&#8243;</font></strong><font size="2"> sub=</font><strong><font color="#990000" size="2">&laquo;value1&#8243;</font></strong><font size="2"> /&gt;<br />
&lt;item val=</font><strong><font color="#990000" size="2">&laquo;value2&#8243;</font></strong><font size="2"> sub=</font><strong><font color="#990000" size="2">&laquo;value2&#8243;</font></strong><font size="2"> /&gt;<br />
&lt;item val=</font><strong><font color="#990000" size="2">&laquo;value3&#8243;</font></strong><font size="2"> sub=</font><strong><font color="#990000" size="2">&laquo;value3&#8243;</font></strong><font size="2"> /&gt;<br />
&lt;item val=</font><strong><font color="#990000" size="2">&laquo;value4&#8243;</font></strong><font size="2"> sub=</font><strong><font color="#990000" size="2">&laquo;value4&#8243;</font></strong><font size="2"> /&gt;<br />
&lt;/&gt;);</font><strong><font color="#0033ff" size="2">   private</font></strong><font size="2"> </font><strong><font color="#339966" size="2">function</font></strong><font size="2"> endEdit(event:Event):</font><strong><font color="#0033ff" size="2">void<br />
</font></strong><font size="2">   {<br />
DataGrid(event.currentTarget).editable=</font><strong><font color="#0033ff" size="2">false</font></strong><font size="2">;<br />
}<br />
]]&gt;<br />
</font><font color="#006633" size="2">   &lt;/mx:Script&gt;<br />
</font><font color="#0000ff" size="2">   &lt;mx:DataGrid</font><font size="2"> width=&raquo;</font><font color="#990000" size="2">100%</font><font size="2">&raquo; height=&raquo;</font><font color="#990000" size="2">100%</font><font size="2">&raquo; dataProvider=&raquo;</font><font color="#990000" size="2">{</font><font size="2">theData</font><font color="#990000" size="2">}</font><font size="2">&raquo; itemRenderer=&raquo;</font><font color="#990000" size="2">IR</font><font size="2">&raquo; itemEditEnd=&raquo;endEdit(event)&raquo;</font><font color="#0000ff" size="2">&gt;<br />
</font><font color="#0000ff" size="2">      &lt;mx:columns&gt;<br />
</font><font color="#0000ff" size="2">         &lt;mx:DataGridColumn</font><font size="2"> dataField=&raquo;</font><font color="#990000" size="2">@val</font><font size="2">&raquo; </font><font color="#0000ff" size="2">/&gt;<br />
</font><font color="#0000ff" size="2">         &lt;mx:DataGridColumn</font><font size="2"> dataField=&raquo;</font><font color="#990000" size="2">@sub</font><font size="2">&raquo; </font><font color="#0000ff" size="2">/&gt;<br />
</font><font color="#0000ff" size="2">      &lt;/mx:columns&gt;<br />
</font><font color="#0000ff" size="2">   &lt;/mx:DataGrid&gt;<br />
&lt;/mx:WindowedApplication&gt;</font></p>
<hr />IR.as:<br />
<hr /><strong><font color="#9900cc" size="2">package<br />
</font></strong><font size="2">{<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> flash.events.Event;<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> flash.ui.ContextMenu;<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> mx.controls.DataGrid;<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> mx.controls.dataGridClasses.DataGridItemRenderer;<br />
</font><strong><font color="#0033ff" size="2">   import</font></strong><font size="2"> mx.controls.dataGridClasses.DataGridListData;</font><strong><font color="#0033ff" size="2">   public</font></strong><font size="2"> </font><strong><font color="#9900cc" size="2">class</font></strong><font size="2"> IR </font><strong><font color="#0033ff" size="2">extends</font></strong><font size="2"> DataGridItemRenderer<br />
{</font></p>
<p><strong><font color="#0033ff" size="2">      public</font></strong><font size="2"> </font><strong><font color="#339966" size="2">function</font></strong><font size="2"> IR()<br />
{<br />
</font><strong><font color="#6699cc" size="2">         var</font></strong><font size="2"> context:ContextMenu=</font><strong><font color="#0033ff" size="2">new</font></strong><font size="2"> ContextMenu();<br />
context.addEventListener(Event.DISPLAYING,rightClick)<br />
contextMenu=context;<br />
}</font></p>
<p><strong><font color="#0033ff" size="2">      private</font></strong><font size="2"> </font><strong><font color="#339966" size="2">function</font></strong><font size="2"> rightClick(event:Event):</font><strong><font color="#0033ff" size="2">void<br />
</font></strong><font size="2">      {<br />
</font><strong><font color="#6699cc" size="2">         var</font></strong><font size="2"> theListData:DataGridListData=DataGridListData(listData);<br />
</font><strong><font color="#6699cc" size="2">         var</font></strong><font size="2"> dataGrid:DataGrid=DataGrid(theListData.owner);<br />
dataGrid.editable=</font><strong><font color="#0033ff" size="2">true</font></strong><font size="2">;<br />
dataGrid.editedItemPosition={columnIndex:theListData.columnIndex, rowIndex: theListData.rowIndex};<br />
}<br />
}<br />
</font><font size="2">}</font></p>
<hr />В итоге получим датагрид, который по правой кнопке будет напрямую редактировать theData:XMLList.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/o2dev.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/o2dev.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/o2dev.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/o2dev.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/o2dev.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=6&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://o2dev.wordpress.com/2007/11/14/%d0%9f%d1%80%d0%b0%d0%b2%d0%b0%d1%8f-%d0%ba%d0%bd%d0%be%d0%bf%d0%ba%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c176202b7da912842ab3740492dea366?s=96&#38;d=identicon" medium="image">
			<media:title type="html">o2dev</media:title>
		</media:content>
	</item>
		<item>
		<title>Native drag-drop &#8211; первый шаг на пути к десктопу</title>
		<link>http://o2dev.wordpress.com/2007/11/13/native-dragndrop-%d0%bf%d0%b5%d1%80%d0%b2%d1%8b%d0%b9-%d1%88%d0%b0%d0%b3-%d0%bd%d0%b0-%d0%bf%d1%83%d1%82%d0%b8-%d0%ba-%d0%b4%d0%b5%d1%81%d0%ba%d1%82%d0%be%d0%bf%d1%83/</link>
		<comments>http://o2dev.wordpress.com/2007/11/13/native-dragndrop-%d0%bf%d0%b5%d1%80%d0%b2%d1%8b%d0%b9-%d1%88%d0%b0%d0%b3-%d0%bd%d0%b0-%d0%bf%d1%83%d1%82%d0%b8-%d0%ba-%d0%b4%d0%b5%d1%81%d0%ba%d1%82%d0%be%d0%bf%d1%83/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 20:13:23 +0000</pubDate>
		<dc:creator>o2dev</dc:creator>
				<category><![CDATA[Air]]></category>

		<guid isPermaLink="false">http://o2dev.wordpress.com/2007/11/13/native-dragndrop-%d0%bf%d0%b5%d1%80%d0%b2%d1%8b%d0%b9-%d1%88%d0%b0%d0%b3-%d0%bd%d0%b0-%d0%bf%d1%83%d1%82%d0%b8-%d0%ba-%d0%b4%d0%b5%d1%81%d0%ba%d1%82%d0%be%d0%bf%d1%83/</guid>
		<description><![CDATA[Взаимодействие с системным drag&#8217;n'drop&#8217;ом &#8211; очень важный функционал для любого десктопного приложения, задача которого работать с файлами. Пользователь настолько привык к нему, что когда обнаруживает что его любимый способ скармливания файла приложению не работает &#8211; начинает считать это приложение ущербным, бажным, недоделаным &#8211; а потому не пригодным для использования. Системный Drag&#8217;n'Drop - это тот-же буфер обмена, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=3&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Взаимодействие с системным drag&#8217;n'drop&#8217;ом &#8211; очень важный функционал для любого десктопного приложения, задача которого работать с файлами. Пользователь настолько привык к нему, что когда обнаруживает что его любимый способ скармливания файла приложению не работает &#8211; начинает считать это приложение ущербным, бажным, недоделаным &#8211; а потому не пригодным для использования.</p>
<p>Системный Drag&#8217;n'Drop - это тот-же буфер обмена, с тем же способом хранения данных, и надо полагать с такой же реализацией. В нем могут храниться любые данные, и его может использовать любое приложение системы. Соответственно можно передавать в приложение таким образом любую информацию, хоть<br />
картинку прямо из фаерфокса. При перетаскивании чего либо в air-приложение, это что-то попадает в обьект типа Clipboard, этот обьект находится внутри перехватываемого события &#8211; event.clipboard&#8230;<span id="more-3"></span>Air вещает события drag-drop для каждого отображаемого обьекта приложения, каждый обьект может разрешить или запретить это действо по отношению к себе или к другим обьектам - таким образом это событие нужно поймать, разрешить и дальше работать с данными.</p>
<p>Разрешить &#8211; значит поставить правильный системный курсор и не более того. Это конечно мало важно, как впрочем и сам drag&#8217;n'drop &#8211; но не дай бог его там не будет, это будет самый вопиющий случай введения пользователя в заблуждение и вообще неуважение. Разрешать drag-drop нужно на этапе перехвата события NativeDragEvent.NATIVE_DRAG_ENTER.</p>
<p><font size="2"></p>
<blockquote><p><strong>DragManager.acceptDragDrop(<font size="2" color="#0033ff">this</font><font size="2">);</font></strong></p></blockquote>
<p>Работа с клипбордом начинается в момент перехвата события NativeDragEvent.NATIVE_DRAG_ENTER. Технически, данные в клипборде могут храниться в каком-угодно виде, но видимо разработчики смогли как-то договориться и файлы (основное, для чего используется drag-drop) &#8211; хранятся все-же в одном формате, потому список попадаемых файлов можно легко разбить в массив, например так:</p>
<p></font></p>
<blockquote><p><strong><font size="2" color="#6699cc">var</font><font size="2"> dropfiles:Array = event.clipboard.dataForFormat(event.clipboard.formats [0]) </font><strong><font size="2" color="#0033ff">as</font></strong><font size="2"> Array;</font></strong><strong><font size="2" color="#6699cc"> </font></strong></p></blockquote>
<p>А теперь обозначим простую задачу &#8211; создадим приложение, которое будет через Drag-drop принимать в себя файлы и выводить их список в компонент List:<br />
<strong><br />
</strong><strong></p>
<blockquote><p><font size="2"><br />
&lt;?xml version=&raquo;1.0&#8243; encoding=&raquo;utf-8&#8243;?&gt;<br />
<font size="2" color="#0000ff">&lt;mx:WindowedApplication</font><br />
</font><font size="2">xmlns:mx=&raquo;</font><font size="2" color="#990000">http://www.adobe.com/2006/mxml</font><font size="2">&laquo;</font><font size="2"><br />
layout=&raquo;<font size="2" color="#990000">absolute</font><font size="2">&laquo;<br />
creationComplete=&raquo;init()&raquo;<font size="2" color="#0000ff">&gt;</font><br />
</font></font><font size="2"></p>
<p align="left"><font size="2" color="#006633">     &lt;mx:Script&gt;<br />
       </font><font size="2">&lt;![CDATA[<br />
           </font><strong><font size="2" color="#0033ff">import</font></strong><font size="2"> mx.collections.ArrayCollection;</font><font size="2"><br />
          [<strong><font size="2" color="#0033ff">Bindable</font></strong><font size="2">]<br />
          </font></font><strong><font size="2" color="#0033ff">private</font></strong><font size="2"> </font><strong><font size="2" color="#6699cc">var</font></strong><font size="2"> fileList:ArrayCollection=</font><strong><font size="2" color="#0033ff">new</font></strong><font size="2"> ArrayCollection();</font><font size="2">          </font></p>
<p><font size="2"><strong><font size="2" color="#0033ff">          private</font></strong><font size="2"> </font><strong><font size="2" color="#339966">function</font></strong><font size="2"> init():</font><strong><font size="2" color="#0033ff">void<br />
          </font></strong></font><font size="2">{<br />
</font><strong><font size="2" color="#0033ff">             this</font></strong><font size="2">.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragEnter);<br />
             </font><strong><font size="2" color="#0033ff">this</font></strong><font size="2">.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDragDrop);</font><font size="2"> <br />
          }</font></p>
<p><font size="2">          <strong><font size="2" color="#0033ff">private</font></strong><font size="2"> </font><strong><font size="2" color="#339966">function</font></strong><font size="2"> onDragEnter(event:NativeDragEvent):</font><strong><font size="2" color="#0033ff">void<br />
</font></strong><font size="2">          {<br />
             DragManager.acceptDragDrop(</font><strong><font size="2" color="#0033ff">this</font></strong><font size="2">);</font><font size="2"><br />
          }</font></font><font size="2"><font size="2"> <strong><font size="2" color="#0033ff">         private</font></strong><font size="2"> </font><strong><font size="2" color="#339966">function</font></strong><font size="2"> onDragDrop(event:NativeDragEvent):</font><strong><font size="2" color="#0033ff">void<br />
</font></strong></font></font><font size="2"><font size="2">         {<br />
</font><strong><font size="2" color="#6699cc">            var</font></strong><font size="2"> dropfiles:Array = event.clipboard.dataForFormat(event.clipboard.formats [0]) </font><strong><font size="2" color="#0033ff">as</font></strong><font size="2"> Array;<br />
            </font><strong><font size="2" color="#0033ff">for</font></strong><font size="2"> </font><strong><font size="2" color="#0033ff">each</font></strong><font size="2"> (</font><strong><font size="2" color="#6699cc">var</font></strong><font size="2"> file:File </font><strong><font size="2" color="#0033ff">in</font></strong><font size="2"> dropfiles)</font><font size="2"><br />
            {<br />
               fileList.addItem({label: file.name.toString()});<br />
            }<br />
         }</font></font><font size="2"><font size="2"><font size="2"><strong><font size="2" color="#0033ff">         private</font></strong><font size="2"> </font><strong><font size="2" color="#339966">function</font></strong><font size="2"> clear():</font><strong><font size="2" color="#0033ff">void<br />
</font></strong><font size="2">         {<br />
            fileList.removeAll();<br />
         }<br />
       ]]&gt;<br />
<font size="2" color="#006633">     &lt;/mx:Script&gt;<br />
</font></font><font size="2"><font size="2" color="#0000ff">&lt;mx:VBox</font><font size="2"> width=&raquo;</font><font size="2" color="#990000">100%</font><font size="2">&raquo; height=&raquo;</font><font size="2" color="#990000">100%</font><font size="2">&laquo;</font><font size="2" color="#0000ff">&gt;<br />
</font></font><font size="2"><font size="2" color="#0000ff">&lt;mx:Button</font><font size="2"> width=&raquo;</font><font size="2" color="#990000">100%</font><font size="2">&raquo; label=&raquo;</font><font size="2" color="#990000">Очистить</font><font size="2">&raquo; click=&raquo;clear()&raquo; </font><font size="2" color="#0000ff">/&gt;<br />
</font></font><font size="2"><font size="2" color="#0000ff">&lt;mx:List</font><font size="2"> width=&raquo;</font><font size="2" color="#990000">100%</font><font size="2">&raquo; height=&raquo;</font><font size="2" color="#990000">100%</font><font size="2">&raquo; labelField=&raquo;</font><font size="2" color="#990000">label</font><font size="2">&raquo; dataProvider=&raquo;</font><font size="2" color="#990000">{</font><font size="2">fileList</font><font size="2" color="#990000">}</font><font size="2">&raquo; </font><font size="2" color="#0000ff">/&gt;<br />
</font></font><font size="2" color="#0000ff">&lt;/mx:VBox&gt;<br />
</font><font size="2" color="#0000ff">&lt;/mx:WindowedApplication&gt;</font></font></font></font></p>
<p></font></p></blockquote>
<p></strong><br />
Обратите внимание на эту строчку: <strong><font size="2">file.name.toString()</font></strong>. Она нужна для корректной конвертации в String &#8211; иногда флекс теряется в типах данных, не всегда &#8211; но в данном случае это так. Поэтому для более четкого определения типа используется такая конструкция.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/o2dev.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/o2dev.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/o2dev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/o2dev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/o2dev.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=3&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://o2dev.wordpress.com/2007/11/13/native-dragndrop-%d0%bf%d0%b5%d1%80%d0%b2%d1%8b%d0%b9-%d1%88%d0%b0%d0%b3-%d0%bd%d0%b0-%d0%bf%d1%83%d1%82%d0%b8-%d0%ba-%d0%b4%d0%b5%d1%81%d0%ba%d1%82%d0%be%d0%bf%d1%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c176202b7da912842ab3740492dea366?s=96&#38;d=identicon" medium="image">
			<media:title type="html">o2dev</media:title>
		</media:content>
	</item>
		<item>
		<title>Путь на десктоп</title>
		<link>http://o2dev.wordpress.com/2007/11/13/hello-world/</link>
		<comments>http://o2dev.wordpress.com/2007/11/13/hello-world/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 19:37:27 +0000</pubDate>
		<dc:creator>o2dev</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Известный факт &#8211; что скорость разработки веб-приложений по сравнению с десктопными грандиозна. Этот факт стал иметь место с момента прихода на рынок второй версии среды разработки flex. Задача этого фреймворка &#8211; создавать кроссплатформенные интерфейсы посредством продуманной ооп-модели и языка ActionScript3. Предполагается, что читатель уже знаком с AS3 и понимает зачем нужен флекс.  Задача данного блога &#8211; собрать [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=1&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Известный факт &#8211; что скорость разработки веб-приложений по сравнению с десктопными грандиозна. Этот факт стал иметь место с момента прихода на рынок второй версии среды разработки flex. Задача этого фреймворка &#8211; создавать кроссплатформенные интерфейсы посредством продуманной ооп-модели и языка ActionScript3. Предполагается, что читатель уже знаком с AS3 и понимает зачем нужен флекс.  Задача данного блога &#8211; собрать все необходимые средства взаимодействия приложения с системой. Связыать приложение с десктопом будет грядущий фреймворк от Adobe &#8211; AIR. Рассмотрим имеющиеся на сегодняшний день различия десктопа и RIA&#8230;<span id="more-1"></span></p>
<p>Идеологическим различием таких приложений в первую очередь является способ использования сети &#8211; RIA без него функционировать не может по определению, а десктоп вообще не использует. Но десктоп может решать более ресурсоемкие задачи. Крайности к хорошему никогда не приводят, а по сему надо искать зорлотую середину, вот этими достоинствами на взгляд автора должно обладать современное десктопное приложение:</p>
<ul>
<li>Доступность данных &#8211; вся информация, которую создает или обрабатывает приложение должно быть доступно из любой точки галактики.</li>
<li>Доступность приложения &#8211; если оно не установлено, его можно запустить в браузере.</li>
<li>Кроссплатформенность &#8211; пользователи пользуются программами, а не аперационными системами.</li>
<li>Предсказуемость &#8211; это касается не только прямого взаимодействия с пользователем, но и с его интерфейсом, программа должна вести себя предсказуемо</li>
<li>Юзабилити &#8211; html пригоден только для текстов.</li>
<li>Автономность &#8211; техника не надежна, интернет тоже,  особенно если это gprs, к тому-же в отдаленных уголках нашей родины до сих пор используется тарификация по трафику и даже диалап. Если приложение осталось без связи с внешним миром, должен оставаться некий минимальный функционал, необходимый для его комфортного использоввания.</li>
<li>Легальность &#8211; приложение может быть открытым или закрытым, платным или бесплатным, но оно должно быть легально.</li>
</ul>
<p>Подобной функциональности не предоставляет ни классический десктоп, ни классические RIA. Таким образом нужно совместить их возможности &#8211; значит приложение должно состоять из четырех частей:</p>
<ul>
<li>Кроссплатформенный пользовательский интерфейс (GUI) - работает как в браузере, так и на десктопе. Повестка блога </li>
<li>Интерфейс до десктопа &#8211; реализует полный функционал</li>
<li>Интерфейс для браузера &#8211; реализует только сетевой функционал</li>
<li>Серверная часть &#8211; к вопросам легальности, доступности данных и приложения.</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/o2dev.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/o2dev.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/o2dev.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/o2dev.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/o2dev.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=o2dev.wordpress.com&amp;blog=2113428&amp;post=1&amp;subd=o2dev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://o2dev.wordpress.com/2007/11/13/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c176202b7da912842ab3740492dea366?s=96&#38;d=identicon" medium="image">
			<media:title type="html">o2dev</media:title>
		</media:content>
	</item>
	</channel>
</rss>
