首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

swf透明有关问题.

2013-07-09 
swf透明问题.1给你一个思路,从swf文件着手首先建立一个swf文件,容器.swf 并写一个接口和外部程序通讯, 通

swf透明问题.
1给你一个思路,从swf文件着手首先建立一个swf文件,容器.swf 并写一个接口和外部程序通讯, 通过接口,外部程序可以加载swf能识别的文件到画面上显示(包括图像,声音,swf影片...好多好多). 虽然可以直接把外部swf引入容器中一起编译,不过我想你肯定要动态变换外部swf,所以用这个方法. Delphi中,首先装入 容器.swf,然后通过接口,装入背景,然后装入你那个swf不就行了,透明,渐变,图像填充,画质....一切问题全部搞定,不是最好不过了? 事件也可以通过接口转到Delphi中..... 如需要,可以纸条发过来 
[解决办法]
再有,把你完整的项目代码包括图片和flash发我邮箱,我看看你搞了什么会那么闪
sololie@126.com
[解决办法]

  private
    fMainLoaded : Boolean;
    function CallLoadFromFile(Const URL : String; x:integer=0; y : integer=0; width:integer=0; height:integer=0) : Boolean;
    function CallClear() : Boolean;
  public
  end;

var
  Form1: TForm1;
  psSoftPath : String;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //ActiveX.CoInitialize(NIL);
  fMainLoaded := false;
  psSoftPath := ExtractFilePath(Application.ExeName);
  SWF.Movie := psSoftPath + 容器.swf';  //装入容器.swf
  Self.KeyPreview := True;//测试你说的按A键........
end;

//Flash自定义回调接口,最好用XML解析 request , 偷懒了...
//初始化完成,可以调用LoadFromFile和Clear接口了
//<invoke name="InitFinished" returntype="xml"><arguments></arguments></invoke>
//该文件装入成功
//<invoke name="LoadFinished" returntype="xml"><arguments><string>file://x:\xxx\dog_rose.jpg</string></arguments></invoke>
//该文件装入失败,原因:无法读取该文件或者不是可显示对象
//<invoke name="LoadFaild" returntype="xml"><arguments><string>file://x:\xx\xx.swf</string></arguments></invoke>

procedure TForm1.SWFFlashCall(ASender: TObject; const request: WideString);
var
  S : String;
begin
  S := request;
  if not fMainLoaded then begin
    if Pos('"InitFinished"' , S)>0 then begin  //容器初始化完成,之后就可以调用LoadFromFile和Clear接口了
      fMainLoaded := True;
      CallLoadFromFile('dog_rose.jpg',0,0);    //装入背景图,全路径或者相对于容器.swf的路径,最好用全路径
      CallLoadFromFile(psSoftPath + '枫叶.swf',0,0);//连续投放,也可以把投放放到按钮中,只要fMainLoaded =True就可以投放了
    end;
  end;
end;

//调用容器Flash中的装入接口,参数width,height<=0的话,将采用装入对象默认的宽和高,否则就是缩放该对象
//装入接口是耗时接口,装入结果会延迟通过OnFlashCall通知,通知包括:LoadFinished和LoadFaild
//由于是延迟接口,因此可以连续投放到装入队列中
function TForm1.CallLoadFromFile(Const URL : String; x:integer=0; y : integer=0; width:integer=0; height:integer=0) : Boolean;
var
  W : WideString;
begin
  W := '<invoke name="LoadFromFile" returntype="xml">' +
          '<arguments>' +


          '<string>' + URL + '</string>' +
          '<number>' + IntToStr(x) + '</number>' +
          '<number>' + IntToStr(y) + '</number>' +
          '<number>' + IntToStr(width) + '</number>' +
          '<number>' + IntToStr(height) + '</number>' +
          '</arguments>'+
       '</invoke>';
  try
    SWF.CallFunction(W);
    Result := True;
  except
    Result := False;
  end;
end;

//调用清除接口,清除所有已经装载、正在装载的以及即将装载的,清除后,可重新调用CallLoadFromFile来装入新的内容
function TForm1.CallClear: Boolean;
var
  W : WideString;
begin
  W := '<invoke name="Clear" returntype="xml">' +
       '</invoke>';
  try
    SWF.CallFunction(W);
    Result := True;
  except
    Result := False;
  end;
end;

//重新装入
procedure TForm1.ReLoadBtnClick(Sender: TObject);
begin
  CallClear();
  CallLoadFromFile(psSoftPath + 'dog_rose.jpg');
  CallLoadFromFile(psSoftPath + '枫叶.swf',0,0,1000,0);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('A')) and (Self.ActiveControl<>NIL) and (Self.ActiveControl is TShockwaveFlash) then
    Caption := 'A Down'
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('A')) and (Self.ActiveControl<>NIL) and (Self.ActiveControl is TShockwaveFlash) then
    Caption := 'A Up'
end;



大致D代码就是这样,
附件上传没成功,已经发到你的QQ邮箱中了

热点排行