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;