<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    【永恒的瞬間】
    ?Give me hapy ?
    一個簡單的ActionScript?3?Iterator實現

    darron schall 發布了一個As3 Iterator的實現,你可以點擊這里下載,該組件的用法非常簡單,下載的壓縮包包括一個Iterator接口和一個范例的Array Iterator實現,以下是使用范例:

    import com.darronschall.util.*;
    var arr:Array = [1, 2, 3];
    var it:Iterator = new ArrayIterator( arr );
    while ( it.hasNext() )
    {
    	trace( it.next() );  // 1, 2, 3
    }
    
    var it2:Iterator = new ArrayIterator( null );
    trace( it2.hasNext() ); // false
    
    ActionScript?3?:?通過類名稱獲取類引用

    在ActionScript 3中如果我們只知道類名稱但又想獲得一個類的引用的話,那么我們可以使用flash.utils.getDefinitionByNam創建一個類的實例。

    例如:

    package
    {
      import flash.display.Sprite;
      import flash.utils.getDefinitionByName;
    
      public class DynamicCall extends Sprite
      {
        public function DynamicCall()
        {
               var ClassReference:Class = getDefinitionByName("String") as Class;
               var s:String = (new ClassReference("foo=") as String);
               trace(s);
        }
      }
    }
    

    以上代碼根據類名稱“String”創建一個String類的實例,getDefinitionByName需要完整類路徑,所以如果我們想創建MovieClip的實例的話,我們需要提供完整的類路徑:

               var ClassReference:Class = getDefinitionByName("flash.display.MovieClip") as Class;

    這樣的方法雖然有些旁門左道,但卻非常有用!

    Flex2:在Excel與Flex之間粘貼數據

    試用過Google Spreadsheets的朋友,可能發現其一個有意思的特性,我們可以直接將Excel中的多行數據直接復制插入到Google Spreadsheets中(OpenOffice也可以直接復制過去),沒嘗試過的朋友可以馬上按如下步驟測試下:

    在Excel(或OpenOffice Calc)中選擇多行數據,敲Ctrl+C鍵,復制選擇的多行數據:

    然后到Google Spreadsheets,敲Ctrl+V鍵,前面復制的單元格就被復制過來了:

    這是如何做到的呢?其實很簡單,在Excel(OpenOffice Calc)中,當多個單元格被復制時,這些單元格的數據是以tab鍵分隔一行行數據(tab-separated values (TSV))存放在剪貼板中的,當這些數據被粘貼到Google Spreadsheets中時,這些TSV格式的數據被解析并被相應插入到Google Spreadssheets中了。

    既然知道其中的奧妙,那么剩下的就是在Flex中實現同樣的效果了。以下是我們的實現思路,可以在Excel和Flex相互直接復制粘貼數據。

    我們的思路的精妙所在是隱藏文本(TextField)組件的使用:

    1. 在DataGrid中,當按下Ctrl鍵時,我們創建一個隱藏的文本(TextField)組件,并將焦點定位給它,這樣,我們就可以接受任何通過Ctrl+V粘貼過來的數據。相應的我們也將DataGrid選擇行數據以TSV格式拷貝到TextField組件中,并且將所有的文本選擇,這樣我們使用Ctrl+C操作就可以復制當前行所有數據了。
    2. 監聽隱藏文件組件的textInput事件。如果有任何數據被粘貼的話,那么在這里數據將被解析,并插入到DataGrid中。
    3. 當Ctrl鍵釋放后,移除隱藏的文本組件。

    以下是完整實現示例代碼:

    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
       <mx:Script>
           <![CDATA[
       import flash.events.KeyboardEvent;
    
       private function dataGridKeyDownHandler(event:KeyboardEvent):void
       {
         if (event.ctrlKey && !dataGrid.getChildByName("clipboardProxy"))
         {
           // Add an invisible TextField object to the DataGrid
           var textField:TextField = new TextField();
           textField.name = "clipboardProxy";
           dataGrid.addChild(textField);
           textField.visible = false;
    
           textField.type = TextFieldType.INPUT;
           textField.multiline = true;
    
           // Populate the TextField with selected data in TSV format
    
           textField.text = getTextFromItems(dataGrid.selectedItems);
           textField.setSelection(0, textField.text.length - 1);
    
           // Listen for textInput event
    
           textField.addEventListener(TextEvent.TEXT_INPUT,
               clipboardProxyPasteHandler);
    
           // Set player-level focus to the TextField
    
           systemManager.stage.focus = textField;
         }
       }
    
    
       private function dataGridKeyUpHandler(event:KeyboardEvent):void
       {
         if (!event.ctrlKey)
         {
           var textField:TextField = TextField(dataGrid
               .getChildByName("clipboardProxy"));
           if (textField)
             dataGrid.removeChild(textField);
         }
       }
    
       private function clipboardProxyPasteHandler(event:TextEvent):void
       {
         // Extract values from TSV format and populate the DataGrid
    
         var items:Array = getItemsFromText(event.text);
         for each (var item:Object in items)
           dataGrid.dataProvider.addItem(item);
       }
    
       private function getItemsFromText(text:String):Array
       {
         var rows:Array = text.split("\n");
         if (!rows[rows.length - 1])
           rows.pop();
    
         var columns:Array = dataGrid.columns;
         var itemsFromText:Array = [];
    
         for each (var rw:String in rows)
         {
           var fields:Array = rw.split("\t");
    
           var n:int = Math.min(columns.length, fields.length);
           var item:Object = {};
           for (var i:int = 0; i < n; i++)
             item[columns[i].dataField] = fields[i];
           itemsFromText.push(item);
         }
    
         return itemsFromText;  
       }
    
       private function getTextFromItems(items:Array):String
       {
         var columns:Array = dataGrid.columns;
         var textFromItems:String = "";
    
         for each (var it:Object in items)
         {
           for each (var c:DataGridColumn in columns)
             textFromItems += it[c.dataField] + "\t";
           textFromItems += "\n";
         }
    
         return textFromItems;
       }
       ]]>
       </mx:Script>
       
       <mx:DataGrid id="dataGrid" editable="true"
           keyDown="dataGridKeyDownHandler(event)"
           keyUp="dataGridKeyUpHandler(event)">
           <mx:columns>
               <mx:DataGridColumn headerText="Scheduled Date"
                   dataField="scheduledDate" />
               <mx:DataGridColumn headerText="Home Team"
                   dataField="homeTeam" />
               <mx:DataGridColumn headerText="Away Team"
                   dataField="awayTeam" />
               <mx:DataGridColumn headerText="Field"
                   dataField="field" />
           </mx:columns>
           <mx:dataProvider>
               <mx:Object scheduledDate="4/1/2006" homeTeam="Chester Bucks"
                   awayTeam="Long Valley Hitters" field="Dawn Field" />
           </mx:dataProvider>
       </mx:DataGrid>
    </mx:Application>
    

    運行實例(FlashPlayer9.0)

    以下是最終實現的效果圖:

    原文:Copy 'n paste between Excel and Flex

    Flex 2 中文資源 swc 文件

    Flex 2 是嚴重向 Java 看齊,本地化也是與Java類似。
    這里不想去探討 ResourceBundle 類和 Locale 類的問題,而僅僅是針對 ${FRAMEWORKS}/locale 下的 en_US 的漢化,以及 compc 命令的一些使用方法。

    在${FRAMEWORKS}(一般是 C:\Program Files\Adobe\Flex Builder 2\Flex SDK 2\frameworks)下有一個 locale 文件夾,其中默認只有一個 en_US 文件夾,里面存放的是英語的資源文件,有若干個 .properties 文件和幾個 .swc 文件,.properties 文件相當于源代碼,.swc 相當于庫,通過 compc 命令可以進行編譯。framework_rb.swc 中的內容包括日期、驗證提示消息、貨幣符號,一些出錯報告,等等內容,大家可以看下。需要說明的一點 .properties 文件中不能使用引號。

    我所做的就是將 en_US 文件夾復制下,改名為 zh_CN,然后修改每個 .properties 文件的內容,然后編譯成 .swc 文件。重點是修改 validators.properties 文件,因為這里的很多提示是給最終用戶看的,比如郵件地址寫錯了,會有一個提示,必須是中文的。需要注意的是,修改后,要將文件編碼格式改為 UTF-8,否則會有亂碼。其他文件更多的是給 coder 自己看的,我就沒去詳細的翻譯:P

    修改之后就是編譯了,開始->運行->cmd
    命令行下輸入:
    cd C:\Program Files\Adobe\Flex Builder 2

    FlexFrameworkCmdPrompt.bat "C:\Program Files\Adobe\Flex Builder 2\Flex SDK 2" "C:\Program Files\Adobe\Flex Builder 2\jre"

    compc -locale zh_CN -source-path "Flex SDK 2/frameworks/locale/{locale}" -include-resource-bundles collections controls core effects formatters logging SharedResources skins states validators -output "Flex SDK 2/frameworks/locale/zh_CN/framework_rb.swc"

    這樣就會在 ${FRAMEWORKS}/locale/zh_CN 下生成 framework_rb.swc,也就是我們所需要的本地化資源文件,以后只要在建立 project 之后,打開工程屬性窗口,定位到 Flex Complier,右邊的 additional complier arguments 的內容改為 -locale zh_CN,即可使用中文本地化資源了。


    下載地址:http://www.xinhuaedu.cn/site/slobber/flex_2_zh_cn_locale.html
    posted on 2007-02-10 13:09 ???MengChuChen 閱讀(1634) 評論(0)  編輯  收藏 所屬分類: flex2.0
    主站蜘蛛池模板: 久久久久久久99精品免费 | 亚洲国产成人五月综合网| 亚洲白色白色在线播放| 91精品国产免费网站| 亚洲综合在线观看视频| 久久黄色免费网站| 亚洲精品无码久久毛片波多野吉衣| 无码av免费网站| 亚洲永久中文字幕在线| 四虎在线最新永久免费| 亚洲成A人片在线播放器| 一二三四影视在线看片免费| 亚洲精品女同中文字幕| 亚洲成AV人网址| 国产区在线免费观看| 亚洲AV无码一区二区三区系列| 嫩草成人永久免费观看| 亚洲精品无码久久久久久久| 国产福利在线观看免费第一福利| 亚洲色大18成人网站WWW在线播放| 日本免费v片一二三区| 成人免费网站视频www| 亚洲精品无码专区在线在线播放| 久9这里精品免费视频| 国产精品亚洲午夜一区二区三区| 精品国产精品久久一区免费式| 一级午夜a毛片免费视频| 亚洲AV无码一区二区三区DV| 99精品在线免费观看| 最新国产成人亚洲精品影院| 亚洲人成色77777在线观看大| 日本人成在线视频免费播放| 在线亚洲午夜片AV大片| 亚洲国产成人VA在线观看| 久久免费视频网站| 亚洲精品无码久久久久APP | 午夜成人无码福利免费视频| 亚洲色偷偷偷网站色偷一区| 国产免费无遮挡精品视频| 免费h视频在线观看| 精品久久久久亚洲|