Adobe Air & Adobe Flex & ActionScript & Mobile Dev & HTML5 & RIA & User Experience
Flex 4.5 Spark 雖然提供了 DataGrid 可是它沒有像 mx:AdvancedDataGrid 那樣支援多 Column 排序功能 看到 Adobe Cookbooks – How do I perform a multicolumn sort in a Spark DataGrid? 有人提供,可是那幾乎是寫死在組件外部 不能讓 User 自己選擇排序欄位 所以我想辦法繼承 Spark DataGrid,複寫 columnHeaderGroup_clickHandler 函式 當 User 在 Column Header 同時按下 Ctrl + Mouse Left Click 時 提供多重 Column 排序的功能 MultiColSortableDataGrid.as package { import mx.collections.ICollectionView; import [...]
我是 Ticore,已經好久沒有貼 Flash Player Crash Bug 了 今天突然又發現一個會造成 Flash Player 死機的問題 幾乎發生在所有 Flash Player 9, 10, 11 主要版本上 本來想回報到 Adobe Bug System 的 結果它把 Flash Player Project 關閉不讓我回報了 所以只好貼在 Blog 上 後來找到了是要在這裡回報 Flash Player 言歸正傳,這是關於巢狀遮罩的 Bug 由於一個 AS3 Mask 物件不能同時用在多個對象上 所以突發奇想,將主要 Mask 物件嵌套多層 Sprite 不同層的 Sprite 不就能夠用在多個對象上了嗎? 結果當然是失敗了,而且造成 Flash Player Crash 掉 以下是簡單的測試程式: package { [...]
大家好,我是 Ticore,這次來介紹關於 Flex Compiler 編譯參數與嵌入外部資源的技巧 看到有人問 Embed source 是否能使用變數 一般人直覺的反應大概都是不可能,因為 Embed 是編譯期就決定了 但是對於編譯期的變數呢? 測試之後發現是可行的 Flex Compiler – mxmlc 有支援定義變數的功能 最常見的是用來條件式編譯除錯 Stupid Flex MXMLC Compiler Tricks Part 1: Conditional Compiling 除了 Boolean 之外,它也是可以用來定義字串的 並且能夠指定到 Embed source 上 以下是完整的測試範例: package { import flash.display.Sprite; public class EmbedTest extends Sprite { config::EMBED_SRC { [Embed(source=config::EMBED_SRC)] public var Cls:Class; [...]
當在 TextInput, TextArea 等文字組件設定 maxChars 最大字數屬性 使用中文輸入法打了數個字到文字佇列上,超過最大限制字數 然後用 Ctrl + Space 切換輸入法或是按下 Enter 方式輸入文字 結果會發現其它 Binding 到 text 屬性的目標無法取得正確的 text 字串 之後再利用按鈕事件 trace 組件的 text 屬性也是取到錯誤的字串資料 來回 trace 好多程式碼位置之後,發現問題主要是出在 RichEditableText 組件上 不過由於問題原因非常複雜,所以要分成很多段落先解釋一些 TLF 與文字組件運作方式 為什麼要花這麼大力氣找原因? 除了解決問題之外,主要還想要了解一下 TLF 文字引擎的運作方式 令我最驚訝的是,輸入法待選文字佇列功能,居然是 TLF 內建,完全用 AS3 寫的! 相關 Bug Report http://bugs.adobe.com/jira/browse/SDK-28999 http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=4338 RichEditableText maxChars 與輸入法問題測試程式: <?xml version="1.0" encoding="utf-8"?> <s:Application [...]
Flash ActionScript 3.0 語法中是沒有支援靜態函式變數的 不過卻可以用 prototype 物件達到類似的功能 var fun:Function = function ():void{ // init. function static member var proto:Object = arguments.callee.prototype; proto.name ||= "Static Function Variable"; proto.count ||= 0; trace(proto.name, proto.count++); } fun(); // Static Function Variable 0 fun(); // Static Function Variable 1 fun(); // Static Function Variable 2 不過需要注意的是不能用於類別的函式成員,只能用於匿名函式 一旦宣告為類別的函式成員,prototype 物件將會變成 [...]