AS3與AS2做溝通-1(AS3呼叫AS2)

AS3已出來很久,但有時還是會碰到AS3呼叫AS2的狀況。
這個範例是使用LocalConnection去做溝通。
這個方法最大的限制是,傳送資料限定大小:40kb
範例檔下載
AS3檔案:
場景上做一個按鈕,實體名稱為mc,按下後,就會呼叫AS2中AS3call2_fun這支function

var conn:LocalConnection=new LocalConnection();

var loader:Loader=new Loader();//載AS2 SWF
loader.load(new URLRequest("AS2.swf"));
this.addChild(loader);
mc.addEventListener(MouseEvent.CLICK,function(e:Event){
var connObj:Object=new Object();
connObj.datas="connect Data!!!";
conn.send("connAS2", "AS3call2_fun", connObj);
//connAS2=>溝通的通訊名稱
//AS3call2_fun=>通訊的function名稱
//connObj=>要傳入的資料,有資料量限制,需在40 KB以下
});


AS2檔案

var conn:LocalConnection = new LocalConnection();
conn.AS3call2_fun=function(connObj:Object){//AS3call2_fun=>通訊的function名稱
trace("as2被呼叫:"+connObj.datas);//connObj=>接收的資料,有資料量限制,需在40 KB以下
}
conn.connect("connAS2");//connAS2=>溝通的通訊名稱

AS3 使用DataGrid組件 - 欄位文字變色(下)

範例檔下載

再加一個"是否大於0"的欄位,這個欄位的內容與顏色都會依照亂數值而改變。









1.先建立一支設定Style的as,檔名為CellRenderStyle2.as



package {
import fl.controls.listClasses.CellRenderer;

public class CellRenderStyle2 extends CellRenderer {
public function CellRenderStyle2() {
}
override protected function drawLayout():void {
//this.data["col2"]會取得與這個欄位同一Roll的值
//this.listData.label會取得目前這個欄位的值
//this.listData.column會取得目前是第幾個Column

if(parseInt(this.data["col2"])<0 && this.listData.column==1){
textField.textColor=0xFF0000;
}
if(parseInt(this.data["col2"])<0 && this.listData.column==2){
textField.textColor=0x00FF00;
}
super.drawLayout();
}
}
}



2.fla的主程式:

import fl.controls.DataGrid;
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;

//建立DataGrid(可把它想成大Table)
var dg:DataGrid = new DataGrid();
dg.width=500;
dg.height=300;
dg.x=20;
dg.y=30;
this.addChild(dg);
//建立Column
//第一個Column
var colA:DataGridColumn = new DataGridColumn("col1");
colA.headerText="序號";
dg.addColumn(colA);
//第二個Column
var colB:DataGridColumn = new DataGridColumn("col2");
colB.headerText="亂數";
//此格會變色,因此要設定cellRenderer
colB.cellRenderer = CellRenderStyle2;
dg.addColumn(colB);
//第三個Column
var colC:DataGridColumn = new DataGridColumn("col3");
colC.headerText="大於0?";
//此格會變色,因此要設定cellRenderer
colC.cellRenderer = CellRenderStyle2;
//此格的文字內容依Col2而變化,設定要出現的文字function
//labelFun會判斷col2的值大於0嗎,大於0顯示Y;小於0顯示n
colC.labelFunction=labelFun;
dg.addColumn(colC);

//建立DataProvider(Table的資料)
var dp:DataProvider = new DataProvider();
for (var i = 0; i < 20; i++) {
//col3的值依col2的值變化,可先不填
dp.addItem({col1:(i+1), col2:getRandomNumber()});
}
dg.dataProvider=dp;

function labelFun(item:Object):String {
trace(item["col2"]);
if(parseInt(item["col2"])>0){
return 'Y';
}else{
return 'N';
}
}

function getRandomNumber(){
return Math.floor(Math.random()*50)-25;
}

AS3 使用DataGrid組件 - 欄位文字變色(上)


範例檔下載
在AS2中,為DataGrid的欄位文字變色是很方便的事,但在AS3就無法用相同的方法了。
被它搞了很久,原本用的方法因為效能太差而被打回票,最近有同事找到了新方法塞值,就來試看看囉。

先看執行結果:欄位值小於0的,字會顯示紅色。






1.先建立一支設定Style的as,檔名為CellRenderStyle1.as



package {
import fl.controls.listClasses.CellRenderer;

public class CellRenderStyle1 extends CellRenderer {
public function CellRenderStyle1() {
}
override protected function drawLayout():void {
if(parseInt(this.listData.label)<0){
//this.listData.label會取得目前這個欄位的值
textField.textColor=0xFF0000;
}
super.drawLayout();
}
}
}




2.fla的主程式:

import fl.controls.DataGrid;
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;

//建立DataGrid(可把它想成大Table)
var dg:DataGrid = new DataGrid();
dg.width=500;
dg.height=300;
dg.x=20;
dg.y=30;
this.addChild(dg);
//建立Column
//第一個Column
var colA:DataGridColumn = new DataGridColumn("col1");
colA.headerText="序號";
dg.addColumn(colA);
//第二個Column
var colB:DataGridColumn = new DataGridColumn("col2");
colB.headerText="亂數";
colB.cellRenderer = CellRenderStyle1;
//此格會變色,因此要設定cellRenderer
dg.addColumn(colB);


//建立DataProvider(Table的資料)
var dp:DataProvider = new DataProvider();
for (var i = 0; i < 20; i++) {
dp.addItem({col1:(i+1), col2:getRandomNumber()});
}
dg.dataProvider=dp;


function getRandomNumber(){
return Math.floor(Math.random()*50)-25;
}