2010年8月20日 星期五

Deprecated metadata tag



用法:
[Deprecated("string_describing_deprecation")]
[Deprecated(message="string_describing_deprecation")]
[Deprecated(replacement="string_specifying_replacement")]
[Deprecated(replacement="string_specifying_replacement", since="version_of_replacement")]

原文(引用自adobe flex4 help):
A class or class element marked as deprecated is one which is considered obsolete, and whose use is discouraged in the current release. While the class or class element still works, its use can generate compiler warnings

一個類別或是類別中的項目被標記成Deprecated表示此項目是過時的、廢棄的、不建議使用的,不鼓勵使用在當前的釋出版本。雖然被宣告廢棄的Class或Class中的項目仍然工作,但能讓編譯器產生警告提醒。

The mxmlc command-line compiler supports the show-deprecation-warnings compiler option, which, when true, configures the compiler to issue deprecation warnings when your application uses deprecated elements. The default value is true.

Insert the [Deprecated] metadata tag before a property, method, or class definition to mark that element as deprecated. The [Deprecated] metadata tag has the following options for its syntax when used with a class, property or method:
 
功用:

  • 標記已經廢棄的Class以免誤用,若使用編譯器會出現警告提醒。
範例:
//宣告method已經廢棄,並提示改用建議的method
package com
{
 import spark.components.Group;
 public class MyDeprecatedGroup extends Group
 {
  public function MyDeprecatedGroup()
  {
   super();
  }  
  private var _topGap:Number; 
  //宣告topGap廢棄,並建議使用topPixels
  [Deprecated(replacement="MyDeprecatedGroup.topPixels")] 
  public function set topGap(value:Number):void
  {
   _topGap = value;
  }
  public function get topGap():Number
  {
   return _topGap;
  }
 }
}  
//Application
<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="application1_applicationCompleteHandler(event)" xmlns:com="com.*"
>
<fx:Script\>
<![CDATA[ 
]]>
</fx:Script>
<com:MyDeprecatedGroup>
 <com:topGap>1.0</com:topGap>  
</com:MyDeprecatedGroup>
</s:Application>   
訊息警告如下圖:
 
 
 
 
 
 

  • Event,Effect,Style,metadata tags也支援 deprecation功能

文件
The [Event], [Effect] and [Style] metadata tags also support deprecation. These tags support the following options for syntax:
 
在Event,Effect,Style的metadata tags中,也都支持deprecation的宣告,用法如下
 
用法
[Event(... , deprecatedMessage="string_describing_deprecation")]
[Event(... , deprecatedReplacement="change2")]
[Event(... , deprecatedReplacement="string_specifying_replacement", deprecatedSince="version_of_replacement")]

DefaultProperty metadata tag


用法:
[DefaultProperty("propertyName")]

原文:
The [DefaultProperty] metadata tag defines the name of the default property of the component when you use the component in an MXML file.

功用說明:
[DefaultProperty]標籤用來定義組件中的預設屬性,對應於MXML標籤檔上使用。

範例:
//這個範例將預設屬性改成selected,原本在toggleButtong上的預設屬性是label。
//myButton.as
package com
{

 import spark.components.ToggleButton;

 [DefaultProperty("selected")]
 public class myButton extends ToggleButton
 {
  public function myButton()
  {
   super();
  }
//mxml設定進來的值在此可以抓到並處理
  override public function set selected(value:Boolean):void
  {
   if(value != super.selected)
   super.selected = value;
  } 

 }

}
//mxml檔中使用ToggleButton與myButton來驗證結果
<s:Group layout="{new VerticalLayout()}">
<s:ToggleButton>true</s:ToggleButton> //預設屬性是label因此會出現true
<com:myButton>true</com:myButton>     //預設屬性是selected因此出現按下
</s:Group>












例外使用的狀況:
The one place where Flex prohibits the use of a default property is when you use the ActionScript class as the root tag of an MXML component. In this situation, you must use child tags to define the property, as the following example shows

主要是說,若是mxml做為根標籤,就無法直接在標籤中輸入文字使用預設值,而是須將改預設值名稱當成mxml標籤來呼叫使用。

當然這就是在說將Class做成mxml組件檔時的情境,範例如下:
//myButtonC.mxml
<?xml version="1.0" encoding="utf-8"?>
<com:myButton xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:com="com.*">
<!--當成root標籤使用時,預設屬性設定改用標籤呼叫設定。-->
 <com:selected>true</com:selected>
</com:myButton> 

而這個組件放於Application上時,依然可以直接設定預設值如下:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
xmlns:com="com.*"
> 
<fx:Script>
<![CDATA[ 
import spark.layouts.VerticalLayout;
]]>
</fx:Script>
<s:Group layout="{new VerticalLayout()}">
<com:myButtonC>true</com:myButtonC>
</s:Group>
</s:Application>


參考
http://help.adobe.com/zh_CN/flex/using/WS2db454920e96a9e51e63e3d11c0bf680e1-7ffe.html

//查詢Creating a default property
http://help.adobe.com/zh_CN/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-79f7.html#WS2db454920e96a9e51e63e3d11c0bf69084-79fa

英文原文引用自adobe flex4 help文件

2010年8月19日 星期四

ArrayElementType Metadata tag


原文:
Using Flex4說明手冊中關於ArrayElementType的說明:
When you define an Array variable in ActionScript, you specify Array as the data type of the variable. However, you cannot specify the data type of the elements of the Array.

當你於ActionScript中定義一個Array變數,你指定Array為資料型態,然而你無法指定Array內項目的資料型態。
(在AS3中Vector可以指定陣列中項目的資料型態,Array本身沒有此項功能)

功用:
To allow the Flex MXML compiler to perform type checking on Array elements, you can use the [ArrayElementType] metadata tag to specify the allowed data type of the Array elements, as the following example shows:

你可以藉由ArrayElementType這個metadata tag讓MXML compiler來檢查Array的項目元素是否為ArrayElementType指定資料格式的項目。

使用範例:
//Class
package com
{ 
 import spark.components.Group;
 public class myGroup extends Group
 {
  public function myGroup()
  {
   super(); 
  } 
  //標籤宣告
  [ArrayElementType("Number")]
  public var myArray:Array; 
 }
}

//mxml檔案中
<com:myGroup id="mg">
<com:myArray>
<fx:int>1.0</fx:int>   //此處會有編譯錯誤警告,因為使用<int>
</com:myArray>
</com:myGroup>   
note:
在mxml中若是對myArray使用非Number的項目就會出像錯誤警告,但是此項功能僅對於MXML標籤有作用,若你使用ActionScript來對myArray來操作,並加入非Number資料型態的項目並不會出像編譯警告。
  •  ArrayElementType("Number")]的宣告對ActionScript直接操作是無效的
//在application Complete事件發生後去操作myArray,並給予非Number的項目,是可以通過編譯的
protected function application1_applicationCompleteHandler(event:FlexEvent):void 
{
 mg.myArray.push( "test" );
}

Flex顯示元件as與mxml之間轉換關係與其繼承實現方式

Flex比較有趣的地方就是顯示組件的.mxml與.as之間觀念轉換,假設我們要繼承一個Button,新的類別名稱為mybutton,置放於package com中,那麼.as檔架構的Class程式碼會如下

package com
{
 import spark.components.Button;
 public class myButton extends Button
 {
  public function myButton()
  {
   super();
  }
  //Override inherited method and properties.
  //Define new method and properties.
  //Custom logic in ActionScript.
 }
}
 

The Flex class hierarchy

Using Flex 章節About custom components

The Flex class hierarchy

 
All visual components are derived from the UIComponent ActionScript class. Flex nonvisual components are also implemented as a class hierarchy in ActionScript. The most commonly used nonvisual classes are the Validator, Formatter, and Effect base classes.


這段文章指出了Flex所有的視覺組件都是以UIComponent為父類,也是Flex開發中所有直接放於畫面上的顯示元件都必須繼承了UIComponent,那麼Flash所使用的顯示元件要如何放於畫面上,就是透由UIComponent來做,將Flash的顯示元件加入UIComponent即可。


如:

Flex set JVM help size

§Flex設定JVM 堆積區大小

在Using Flex4說明文件中提到
The compilers use the Java JRE. As a result, you can also configure settings such as memory allocation and source path with the JVM arguments.


Flex的編譯器需使用JVM來運作,因此,你也可以以設定記憶體配置與源路徑參數用於JVM上。

該設定檔名為jvm.config,該檔位於SDK中的bin底下,如win7會像是
C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\sdks\4.1\bin\jvm.config

2010年8月18日 星期三

保護FMS上的影片內容,Protect video content (Flash Media Server)

基本的兩個方法:
  1. Verify SWF files
  2. RTMPE

Verify SWF files 設定(以windows為例)
  1. 於FMS底下找到[FMS資料夾]\conf\_defaultRoot_\Application.xml
  2. 找到標籤<SWFVerification enabled="false">將其改成<SWFVerification enabled="true"> ,這是啟動SWF驗證功能。
  3. 找到標籤<SWFFolder></SWFFolder>將其改成<SWFFolder>C:\Program Files\Adobe\SWFs</SWFFolder>,裡面的路徑放你自己容易管理的所在位置即可,官方文件上建議使用SWFs作為驗證資料夾名稱,這個資料夾是用來置放驗證的SWF,也就是當你建立一隻SWF檔之後,該SWF檔須複製一份於此資料夾,否則FMS部會允許該SWF檔連線,也就是不再驗證資料夾內的SWF檔都無法使用FMS資源。
使用RTMPE
  1. RTMPE在FMS中是預設啟用的。
  2. 找到標籤<DisallowedProtocols> </DisallowedProtocols>將其設成<DisallowedProtocols>rtmp,rtmps,rtmpt</DisallowedProtocols>,這行是說禁止使用rtmp、rtmps、rtmpt,也就是說只能使用rtmpe協定連線。

深入淺出JAVA,第一章,閱讀筆記

JAVA運作方式


  1. 編寫原始碼文件,原始碼文件以.java為附檔名。
  2. 編譯器編譯原始碼文件。
  3. 產出Bytecode檔案,經編譯產出的bytecode檔,以.class為附檔名。
  4. Virtual Machine讀取執行Bytecode檔。

Class與main
  • 每個Java程式中只能有一個main() Mathod,且每個程式至少都會有一個main與class。
  • 所有Java程式都是由main()開始執行。
public class Example
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");
 }
}


迴圈結構 while 、do-while 、for
  • 迴圈關鍵在於測試條件(conditional test),測試結果必定是boolean值,ture或false。
  • java的測試條件只接受boolean,若給予非boolean的值會編譯錯誤!與AS3很不同。
  
   int x = 2;
   while(x){}
  • 上述程式片段中,於JAVA中此x是整數,編譯時會發生錯誤,而在AS3中則會以非0值皆為true來運行,因為AS3具有隱含轉換。
條件式分支 if 、if else
int x = 3;
if(x == 3){
 System.out.println("x =3");
}

int value = 3;
if(value ==2){
 //條件測試結果為true時執行
 System.out.println("數值是2");
}else{
 //條件測試結果為false時執行
 System.out.println("數值不是2");
}

Flex3 Embed Font

Flex3中需Embed 字形才能讓文字做旋轉等效果,Flex4中似乎是不需要Embed就可以做出文字旋轉放大的效果,日後查明,先行紀錄Flex3 Embed Font用法。

Flex3中Embed Font

@font-face
{
 src:url("/fonts/MSJH.ttf");
 fontFamily:DIN;
 advancedAntiAliasing: true;
}
.embeddedFontStyle
{
 fontFamily:DIN;
 fontSize:18px;
 color:#CCCCFF;
}