發佈日期:

在flex4裡用spark建置可拖動panel

在flex4裡面的spark組件的panel是沒有內建拖動的功能的
因此若我們希望這物件要可以被拖動
我們必須要去自己實做當使用者拖動topGroup的區塊時的拖動動作

範例程式碼如下:
package components
{
import flash.events.MouseEvent;

import mx.managers.DragManager;

import spark.components.Group;
import spark.components.Panel;

/**
* A simple extension of the Spark Panel component
* that enables dragging.
*/
public class DraggablePanel extends Panel
{
//————————————–
// Constructor
//————————————–

public function DraggablePanel()
{
super();
}

//————————————–
// Skin Parts
//————————————–

/**
* The skin part that represents the title bar of the underlying Panel.
* NOTE: The default PanelSkin already has this, it’s just not defined as a skinPart in the Panel class.
* We want it so that we can capture dragging.
*/
[SkinPart(required=”true”)]
public var topGroup:Group;

//————————————–
// Overridden Methods
//————————————–

protected override function partAdded( partName:String, instance:Object ) : void
{
super.partAdded( partName, instance );

if (instance == topGroup)
{
Group( instance ).addEventListener( MouseEvent.MOUSE_DOWN, topGroup_mouseDownHandler );
Group( instance ).addEventListener( MouseEvent.MOUSE_UP, topGroup_mouseUpHandler );
}
}

protected override function partRemoved( partName:String, instance:Object ) : void
{
super.partRemoved( partName, instance );

if (instance == topGroup)
{
Group( instance ).removeEventListener( MouseEvent.MOUSE_DOWN, topGroup_mouseDownHandler );
Group( instance ).removeEventListener( MouseEvent.MOUSE_UP, topGroup_mouseUpHandler );
}
}

//————————————–
// Event Handlers
//————————————–

protected function topGroup_mouseDownHandler( event:MouseEvent ):void
{
if ( !DragManager.isDragging )
startDrag();
}

protected function topGroup_mouseUpHandler( event:MouseEvent ):void
{
stopDrag();
}
}

發佈日期:

flash內使用點陣圖

flash.display.BitmapData;
在flash內使用點陣圖,需要import這個類別,
載入點陣圖的語法為
_mc = this.createEmptyMovieClip(“bm_mc”, 100);
_bitmap = BitmapData.loadBitmap(“photo”);
_mc.attachBitmap(_bitmap,10,”always”,false);
photo為你的點陣圖在元件庫內的連結識別子名稱
attachBitmap的語法為attachBitmap(Bitmap物件, 深度, 點像素頡取, 柔化)
下面的函數是由我所撰寫的背景著色函數,
可將一個元件的背景填滿該點陣圖,類似網頁的background
若您希望點陣圖著色的範圍與該元件長寬相同,
可在傳值時直接傳入”元件名._height”、”元件名._width”
附註一題,此函數適用於as2.0。

//背景著色函數(元件、寬、高、圖片識別子名)
function fillColor(tmpObj:MovieClip, bmpW:Number,
bmpH:Number, loadBitName:String)
{
with (tmpObj)
{
var bg_bitmap = BitmapData.loadBitmap(loadBitName);
beginBitmapFill(bg_bitmap,null,true,false);
moveTo(0,0);
lineTo(0,bmpH);
lineTo(bmpW,bmpH);
lineTo(bmpW,0);
lineTo(0,0);
endFill();
}
}

這個函數的輸入值為”元件名”、”要著色的寬度”、”要著色的寬度”、”要當背景的識別子名稱”
若此函數有任何問題或BUG歡迎反應給我

發佈日期:

如何在flex4裡自製resize事件

首先resize事件是針對該元件大小被縮放時才會產生
所以要在根元件去監聽resize的事件

很必需注意的一點,是flex4的spark元件預設會自動無視超出範圍大小的東西
因此會發現當我們把視窗縮小時,
因為超出的大小被無視了
無法偵聽到resize事件
這時候我們要在根容器上加上 clipAndEnableScrolling=”true”屬性
這個屬性主要是告訴我們要不要自動無視超出的範圍
group的預設值是false 也就是無視他
因此我們要先將 clipAndEnableScrolling設定為true
才可以偵聽到縮小視窗的事件

發佈日期:

繪出圓弧

最近在試著把12個按鈕排成圓弧狀
下面是我找的一些有關於三角函數的資料
http://edscb.blogspot.com/2008/03/blog-post.html
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=53846
在as裡使用sin和cos函數都是輸入弧度
因此要先將角度用角度與弧度的轉換:
radians = degrees * Math.PI / 180
degrees = radians *180 / Math.PI
去轉換後再傳進去,才可獲得正確的值

以下類別是我寫的排列函數
傳進的參數為
範例:
ArrangeTool.getInstance().drawArc(100,500,100,400,canvasContent);
//弧形開端、弧形結束端、水平y座標、半徑、存放要排列的物件的陣列

類別內容:

package com.demo
{
import flash.geom.Point;

public final class ArrangeTool
{
private static var instance:ArrangeTool;
public static function getInstance():ArrangeTool{
if (instance == null){
instance = new ArrangeTool();
}
return instance;
}
/**
* 將物件排成弧型
*/
public function drawArc(startX:int,endX:int,Y:int,radius:int,items:Array):void{
//先算出圓心座標
var center:Point = new Point((startX+endX)/2,Y+Math.sqrt(radius*radius-Math.pow(startX-endX,2)/4));
//將該區域的圓切成相同大小等份,先算整個弧線的角度,以角度切
var totalAngel:int = Math.asin((endX – center.x)/radius)*360/Math.PI;
var onePiece:int = totalAngel/(items.length-1);
//要取出該弧形的點的座標及角度
var angle:int;
for(var i:int=0;i< span="">
angle = 90-(totalAngel/2)+onePiece*i;
var tmp:Point = getPoint(radius,angle);
items[i].x = center.x-tmp.x-(items[i].width/2);
items[i].y = center.y-tmp.y-(items[i].height/2);
//以程式改變註冊點
var A:Point=items[i].localToGlobal(new Point(items[i].width/2,items[i].height/2));
items[i].rotation = (angle-90);
var B:Point=items[i].localToGlobal(new Point(items[i].width/2,items[i].height/2));
items[i].x-=B.x-A.x;
items[i].y-=B.y-A.y;
}
}
private function getPoint(radius:int,angel:int):Point{
var y:int = Math.sin(angel*Math.PI/180)*radius;
var x:int = Math.cos(angel*Math.PI/180)*radius;
return new Point(x,y);

}
}
}

發佈日期:

在eclipse裡用ant編檔案

1. 要如何把ant-contrib裝進去
window=>preferences=>ant=>runtime=>global entries
選擇ant-contrib的jar檔

2. 遇到java.lang.OutOfMemoryError: Java heap spac的異常錯誤
window->preferences->java->installed jres->(選擇執行的jdk)edit…
把default vm arguments 的參數設為-Xms64m -Xmx512m

不過我使用的方法是 點檔案右鍵=>properties=>run/DEBUG SETTING 然後按edit
選jre那頁
把vm arguments設為: -Xms64m -Xmx512m

發佈日期:

Label消除最後的…

使用mx的label時常常最後莫名其妙的出現…然後要把滑鼠移過去才可以以tip方式顯示出完整內容
這時要使用truncateToFit=”false”去關閉他自動縮排的功能

<mx:Label truncateToFit=”false” id=”lblSawFlopTotal” text=”{status.average_loss}”/>

發佈日期:

Flex的一些編譯參數

【編譯參數】
-default-background-color int
-default-frame-rate int
-default-size width height
設置SWF的背景色,幀頻與寬高,這個也可以通過元標籤設置,諸如
[SWF(width=”720″,height=”560″,backgroundColor=”#000000″)]

-default-script-limits
-max-recursion-depth
-max-execution-time
定義應用腳本程序的執行限制,最大代碼條目,最大遞歸層次,最大的執行時間

-debug=true|false
是否生成調試用SWF,調試用SWF會比一般的SWF要大。在Flex Builder中,默認為true,而在以Release方式時發佈時,默認為false,所以用Release發佈的文件會被debug時小很多。

-optimize=true|false
優化as,減少文件大小,增加性能,默認為true。

-strict=true|false
是否採用嚴謹模式

-use-network=true|false
可讀取網絡或者可讀取本地文件

-includes class […]
強制導入類,不管是否曾使用過這個類

-include-libraries library […]
強制導入SWC文件中的所有類,不管是否曾使用過這個類

-frames.frame. label class_name […]
將類綁定label標記的幀上

【後台相關】

-context-root string
-context-path string
設置{context.root}的值,這個數值被應用在flex-services.xml,flex-config.xml內,是flash Remoting的必要參數,以確認服務端目錄。也可通過設置Flex Server內的context root。

-services filename
指定services-config.xml的位置,用於Flash Remoting。也可以通過新建項目的選項卡設置。

【調試時信息】

-benchmark=true|false
是否輸出編譯時期的詳細信息,默認為true

-warnings=true|false
是否顯示警告信息

-show-unused-type-selector-warnings=true|false
是否顯示未使用CSS的警告信息

-show-binding-warnings=true|false
是否顯示綁定失效信息

【其他】

-keep-generated-actionscript=true|false
保留編譯MXML文件過程中的AS文件

發佈日期:

flex組件控制其內容創建時間

FLEX內的contains容器都會有一個屬性 creationPolicy可以控制其內容創建的時間
一般預設值都是auto
也就是當這個物件第一次被顯示時創建
這樣會有較好的使用者體驗

不過當我們有時使用viewStack
可能當我們在第一頁時
就必須指定第二或第三頁的label內容資料
那我們就必須把 creationPolicy設為all

creationPolicy總共有四種可能值
1. <strong>all :</strong> 產生物件時便產生所有的內部元件(即使它還沒有被顯示)
2. <strong>auto:</strong> 被顯示在畫面上時才創建物件
3. <strong>none:</strong> 永不自動創建
當creationPolicy屬性的值為none時,應該明確地指定容器的長和寬。正常情況下,Flex會自動對容器進行比例縮放以使它能夠容納子實例,但因為creationPolicy屬性的值設為none,開始時沒有實例化容器內的子實例,要進行比例縮放是不可能的。如果你沒有明確地調整容器的大小,直到容器內的子實例被實例化後才會自動調整大小以容納子實例。要手動實例化組件,請使用createComponentsFromDescriptors()方法。
4. queued: 根據creationIndex的順序來產生內容物件

比較需要注意的是 若今天我們照下面這樣寫
希望能夠當顯示getItemListShowPlace時馬上就設定testItem這個label的文字是什麼
一樣會產生testItem是null無法指定其值的錯誤 因為當物件是單一視圖時,all和auto是一樣的


   
   
   
   
      
   

正確的使用方式應如下


   
   
   
   
      
   

發佈日期:

使用php抓取網路上的圖片

首先要先至網站上下載snoopy類別
可用以模擬表單送交或是抓取網路頁面
http://snoopy.sourceforge.net/
然後使用下面的範例程式就可以順利下載圖檔了

include("snoopy.class.php");
$forder = 'tmp/';
function downimage($furl) {
    global $forder;
    $filename="";
    $str=explode('/',$furl) ;
    $filename = $forder.$str[count($str)-1] ;

    $snoopyx = new Snoopy ;
    $snoopyx-&gt;fetch($furl) ;

    if($snoopyx-&gt;results !="")
    {
        $handle = fopen($filename, 'w') ;
        fwrite($handle, $snoopyx-&gt;results) ; //把抓取得內容寫到 臨時文件中
        fclose($handle) ;
    }
    return $filename ;
}
echo downimage('http://tw-wowbox.meetgee.com/images/icons/inv_belt_mail_raidshaman_i_01.jpg');