Flash与外部程序之间的通信

  flash as3中有一个类ExternalInterface,该类是在flash.external包中,外部程序与as3通信使用ExternalInterface。“ExternalInterface 类是外部 API,在 ActionScript 和 Flash Player 的容器之间实现直接通讯的应用程序编程接口,例如,含有 JavaScript 的 HTML 页。 推荐对所有 JavaScript 与 ActionScript 之间的通信使用 ExternalInterface”。这句是从AS3API摘取,说明了ExternalInterface类的作用。

  addCallback(functionName:String,closure:Function):void ,addCallback是ExternalInterface类的静态方法,将 AS中的方法注册为可让外部容器调用,另一个静态方法call(functionName:String,... arguments):*则是调用由外部容器公开的函数的。

  下用以下代码判断flash是否位于提供外部接口的容器中

if (ExternalInterface.available){}

  注册可让外部容器调用的方法

if (ExternalInterface.available) { //point 1
try {

ExternalInterface.addCallback("CreateBitmap", CreateBitmap);//字符串CreateBitmap是外部程序调用的方法名,第二个参数是方法引用
ExternalInterface.addCallback("ResizeBitmap",ResizeBitmap);
ExternalInterface.addCallback("RemoveBitmap",RemoveBitmpa);

} catch (error:SecurityError) {
if(stage!=null){
MessageBox2.show(stage,200,200,"A SecurityError occurred",error.message,true);
}else{
MessageBox2.show(this,200,200,"A SecurityError occurred",error.message,false);
}


} catch (error:Error) {

if(stage!=null){
MessageBox2.show(stage,200,200,"An Error occurred",error.message,true);
}else{
MessageBox2.show(this,200,200,"An Error occurred",error.message,false);
}

}

} else {

//output.appendText("External interface不可用。");

}


public function CreateBitmap():void{
            this.visible=false;
            if(bitmapData==null){
                bitmapData=new BitmapData(this._DisplayWidth,this._DisplayHeight,true,0x00000000);
                bitmapData.draw(this);
                bitmap=new Bitmap(bitmapData);
                this.parent.addChild(bitmap);
                bitmap.x=this.x;
                bitmap.y=this.y;
            }
        }
        
        
        public function ResizeBitmap(bwidth:Number,bheight:Number):void{
            if(bitmap!=null&&bwidth>0&&bheight>0){
                bitmap.width=bwidth;
                bitmap.height=bheight;
                bitmap.x=stage.stageWidth>bitmap.width?(stage.stageWidth-bitmap.width)/2:0;
                bitmap.y=stage.stageHeight>bitmap.height?(stage.stageHeight-bitmap.height)/2:0
            }
        }
        
        public function RemoveBitmpa():void{
            
            if(bitmap!=null&&this.parent.contains(bitmap)){
                this.parent.removeChild(bitmap);
            }
            if(bitmapData!=null)bitmapData=null;
            if(bitmap!=null)bitmap=null;
            if(this.visible==false)this.visible=true;
        }

注册好外部容器可调用的方法后,外部就可以调用这些方法了,下面是在delphi中调用

procedure TPaperSizeFrm.ResizeFlash;
var
s:WideString;
begin
s:=Format('<invoke name="ResizeBitmap"><arguments><number>%s</number><number>%s</number></arguments></invoke>',[edtWidth.Text,edtHeight.Text]);
flashPreView.CallFunction(s)
end;




posted @ 2011-12-23 12:18  skybdemq  阅读(628)  评论(0编辑  收藏  举报