DELPHI shockwaveflash 设置透明问题 求救,哪位大侠帮忙,我的falsh本身是透明的,我使用的是DELPHI7 我使用的shockwaveflash是这个控件,我的同事已经实现了,问他竟然说过段时间告诉我,悲催啊,如何设置flash透明啊, 跪求啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 老妖的网站有个c++ builder 的透明FLASH示例。大致原理也是先准备好透明的flash文件,然后在个html上加载这个flash文件,加载前先把背景截图,加载上去的flash的透明部分就是截图的背景,看起来就像透明一样。 就是介过http://www.ccrun.com/view.asp?id=22cb转delphi很轻松,转换下就行了 大侠们,能不能给出具体实例啊,我是DLEPHI form窗体,不是网页格式的. 脑子也不转一下,都跟你说了原理了把老妖的例子给你转成delphi的http://download.csdn.net/detail/sololie/5364051 看了大哥给的教程 ,我要实现的不是这种,shockwaveflash的控件放在窗体Form1上,而显shockwaveflash显示的背是白色的,我要让shockwaveflash加载的flash是透明的,本身我加截的flash就是透明的,但shockwaveflash这个控件导致不能透明,请大哥先明白我的意思,可以吗?谢了 那这个更简单了,设置下bgcolor就得了 // 假设窗体的背景颜色是默认的 clbtnface,对应的HTML颜色为 ECE9D8 shckwvflsh1.BGColor := 'ECE9D8'; shckwvflsh1.Movie := 'c:\1.swf'; shckwvflsh1.Play; // 这样shckwvflash控件的背景色就跟主窗体的背景色一直,就是透明了 shckwvflsh1.BGColor := 'ECE9D8'; // 这个颜色值用工具取色查看下,选HTML的值 哥啊.我下面有底图的啊,透明falsh就是透明看到底图 图片啊啊. 唉,真是都给了你思路了,都不能转转啊,真是累人啊背景是纯色,就就设置就背景一样的颜色,如果背景是图片,就把背景绘制成图片不就行了unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type TForm1 = class(TForm) img1: TImage; shckwvflsh1: TShockwaveFlash; tmr1: TTimer; procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tmr1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}var bmpFormBg: TBitmap; bmpBuf: TBitmap;procedure TForm1.FormPaint(Sender: TObject);begin // 画主窗体背景图 bmpFormBg := TBitmap.Create; bmpFormBg.LoadFromFile('c:\123.bmp'); Canvas.StretchDraw(ClientRect, bmpFormBg);end;procedure TForm1.FormResize(Sender: TObject);begin Repaint;end;procedure TForm1.FormCreate(Sender: TObject);begin DoubleBuffered := True; // 设置跟 shckwvflash 控件宽高和xy 一致 bmpBuf := TBitmap.Create; bmpBuf.PixelFormat := pf24bit; bmpBuf.Transparent := False; bmpBuf.Width := shckwvflsh1.Width; bmpBuf.Height := shckwvflsh1.Height; img1.Width := shckwvflsh1.Width; img1.Height := shckwvflsh1.Height; img1.Top := shckwvflsh1.Top; img1.Left := shckwvflsh1.Left; img1.Transparent := True; shckwvflsh1.Visible := False; shckwvflsh1.Movie := 'c:\1.swf';end;procedure TForm1.tmr1Timer(Sender: TObject);begin // flash动画隔秒绘制到透明的img1控件中 shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0); bmpBuf.Canvas.Brush.Style := bsClear; bmpBuf.Transparent := True; img1.Picture.Bitmap.Assign(bmpBuf);end;procedure TForm1.FormDestroy(Sender: TObject);begin bmpBuf.Free; bmpFormBg.Free;end;end. timer的间隔可以设小一点,比如100不要跟俺混,结贴就得了 sololie 的方法非常好有点小问题,边缘有毛刺而且无法渐变. 毛刺可以在制作flash时解决,渐变是有点问题,LS大佬给帮优化下 你的同事做的有毛刺吗?他不是说过几天告诉你他怎么做么,到时候问他。flash的毛刺是制作时扣得不好,可以在制作时弄精良点嘛。 http://bbs.csdn.net/topics/390457080新的贴,解决毛刺问题.sololie 大哥,去看看吧 忘了,上面要改下,不然泄露严重var // bmpFormBg: TBitmap; 去掉 bmpBuf: TBitmap; procedure TForm1.FormPaint(Sender: TObject);var bmpFormBg: TBitmap; // 放这里begin // 画主窗体背景图 bmpFormBg := TBitmap.Create; bmpFormBg.LoadFromFile('c:\123.bmp'); Canvas.StretchDraw(ClientRect, bmpFormBg); bmpFormBg.Free; // 释放end;procedure TForm1.FormDestroy(Sender: TObject);begin bmpBuf.Free;// bmpFormBg.Free; 去掉end;另外你怎么解决的? procedure TForm1.FormPaint(Sender: TObject); var bmpFormBg: TBitmap; // 放这里 begin // 画主窗体背景图 bmpFormBg := TBitmap.Create; bmpFormBg.LoadFromFile('c:\123.bmp'); Canvas.StretchDraw(ClientRect, bmpFormBg); bmpFormBg.Free; // 释放 end; 运行到红色部份会出错,不知道什么原因 'stream read error' 我改用了别的方法. 设置BackgroundColor属性就可以了前后对比unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type TForm1 = class(TForm) img1: TImage; shckwvflsh1: TShockwaveFlash; tmr1: TTimer; procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tmr1Timer(Sender: TObject); private public end;var Form1: TForm1;implementation{$R *.dfm}var bmpBuf: TBitmap;procedure TForm1.FormPaint(Sender: TObject);var bmpFormBg: TBitmap;begin // 画主窗体背景图 bmpFormBg := TBitmap.Create; bmpFormBg.LoadFromFile('123.bmp'); Canvas.StretchDraw(ClientRect, bmpFormBg); bmpFormBg.Free;end;procedure TForm1.FormResize(Sender: TObject);begin Repaint;end;procedure TForm1.FormCreate(Sender: TObject);begin // 设置跟 shckwvflash 控件宽高和xy 一致 bmpBuf := TBitmap.Create; bmpBuf.PixelFormat := pf24bit; bmpBuf.Transparent := False; bmpBuf.Width := shckwvflsh1.Width; bmpBuf.Height := shckwvflsh1.Height; img1.Width := shckwvflsh1.Width; img1.Height := shckwvflsh1.Height; img1.Top := shckwvflsh1.Top; img1.Left := shckwvflsh1.Left; img1.Transparent := True; shckwvflsh1.Visible := False; shckwvflsh1.Movie := ExtractFilePath(Application.ExeName) + '1.swf'; shckwvflsh1.BackgroundColor := 127; // 即可最大程度去掉毛边,0~255自己调整,但别为0 tmr1.Interval := 100; tmr1.Enabled := True; DoubleBuffered := True;end;procedure TForm1.tmr1Timer(Sender: TObject);begin // 间隔100毫秒画到img1控件中 shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0); img1.Picture.Bitmap.Assign(bmpBuf);end;procedure TForm1.FormDestroy(Sender: TObject);begin bmpBuf.Free;end;end. 可以给它再加个处理// OnFSCommand 事件中判断是否播放完毕 procedure TForm1.shckwvflsh1FSCommand(ASender: TObject; const command, args: WideString);begin // 播放完毕后停止计时器且隐藏img1 if command = 'window' then begin tmr1.Enabled := False; img1.Hide; end;end; 保存数据时出现两个错误,请高手指点。 如何实现半透明的并且是柔和的那种阴影效果? ★★★★★★欢迎下载CSDN浏览器!! 谁能给我一个TreeView响应单击某一节点小例子!谢谢! 界面问题!? 这类型能改吗? 如何利用 TApplicationEvents 来捕捉线程中的 Exception ? 简单问题:搜了以前的贴,mdi还是创建不出来,编译通过,按钮出错!!! 发分快进来啊!!!! 如何生成唯一的序列号 spcomm 返回码的问题 shockwaveflash 透明毛刺问题救解决
大致原理也是先准备好透明的flash文件,然后在个html上加载这个flash文件,加载前先把背景截图,加载上去的flash的透明部分就是截图的背景,看起来就像透明一样。
http://www.ccrun.com/view.asp?id=22
cb转delphi很轻松,转换下就行了
把老妖的例子给你转成delphi的
http://download.csdn.net/detail/sololie/5364051
shckwvflsh1.BGColor := 'ECE9D8';
shckwvflsh1.Movie := 'c:\1.swf';
shckwvflsh1.Play;
shckwvflsh1.BGColor := 'ECE9D8'; // 这个颜色值用工具取色查看下,选HTML的值
背景是纯色,就就设置就背景一样的颜色,如果背景是图片,就把背景绘制成图片不就行了
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type
TForm1 = class(TForm)
img1: TImage;
shckwvflsh1: TShockwaveFlash;
tmr1: TTimer;
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
var
bmpFormBg: TBitmap;
bmpBuf: TBitmap;procedure TForm1.FormPaint(Sender: TObject);
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('c:\123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
end;procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
// 设置跟 shckwvflash 控件宽高和xy 一致
bmpBuf := TBitmap.Create;
bmpBuf.PixelFormat := pf24bit;
bmpBuf.Transparent := False;
bmpBuf.Width := shckwvflsh1.Width;
bmpBuf.Height := shckwvflsh1.Height;
img1.Width := shckwvflsh1.Width;
img1.Height := shckwvflsh1.Height;
img1.Top := shckwvflsh1.Top;
img1.Left := shckwvflsh1.Left;
img1.Transparent := True;
shckwvflsh1.Visible := False;
shckwvflsh1.Movie := 'c:\1.swf';
end;procedure TForm1.tmr1Timer(Sender: TObject);
begin
// flash动画隔秒绘制到透明的img1控件中
shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0);
bmpBuf.Canvas.Brush.Style := bsClear;
bmpBuf.Transparent := True;
img1.Picture.Bitmap.Assign(bmpBuf);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
bmpFormBg.Free;
end;end.
有点小问题,边缘有毛刺而且无法渐变.
flash的毛刺是制作时扣得不好,可以在制作时弄精良点嘛。
忘了,上面要改下,不然泄露严重
var
// bmpFormBg: TBitmap; 去掉
bmpBuf: TBitmap;
procedure TForm1.FormPaint(Sender: TObject);
var
bmpFormBg: TBitmap; // 放这里
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('c:\123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
bmpFormBg.Free; // 释放
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
// bmpFormBg.Free; 去掉
end;另外你怎么解决的?
var bmpFormBg: TBitmap;
// 放这里
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('c:\123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg); bmpFormBg.Free; // 释放 end; 运行到红色部份会出错,不知道什么原因 'stream read error'
我改用了别的方法.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;type
TForm1 = class(TForm)
img1: TImage;
shckwvflsh1: TShockwaveFlash;
tmr1: TTimer;
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
public
end;var
Form1: TForm1;implementation{$R *.dfm}var
bmpBuf: TBitmap;procedure TForm1.FormPaint(Sender: TObject);
var
bmpFormBg: TBitmap;
begin
// 画主窗体背景图
bmpFormBg := TBitmap.Create;
bmpFormBg.LoadFromFile('123.bmp');
Canvas.StretchDraw(ClientRect, bmpFormBg);
bmpFormBg.Free;
end;procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置跟 shckwvflash 控件宽高和xy 一致
bmpBuf := TBitmap.Create;
bmpBuf.PixelFormat := pf24bit;
bmpBuf.Transparent := False;
bmpBuf.Width := shckwvflsh1.Width;
bmpBuf.Height := shckwvflsh1.Height; img1.Width := shckwvflsh1.Width;
img1.Height := shckwvflsh1.Height;
img1.Top := shckwvflsh1.Top;
img1.Left := shckwvflsh1.Left;
img1.Transparent := True; shckwvflsh1.Visible := False;
shckwvflsh1.Movie := ExtractFilePath(Application.ExeName) + '1.swf';
shckwvflsh1.BackgroundColor := 127; // 即可最大程度去掉毛边,0~255自己调整,但别为0 tmr1.Interval := 100;
tmr1.Enabled := True;
DoubleBuffered := True;
end;procedure TForm1.tmr1Timer(Sender: TObject);
begin
// 间隔100毫秒画到img1控件中
shckwvflsh1.PaintTo(bmpBuf.Canvas, 0, 0);
img1.Picture.Bitmap.Assign(bmpBuf);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
bmpBuf.Free;
end;end.
procedure TForm1.shckwvflsh1FSCommand(ASender: TObject; const command,
args: WideString);
begin
// 播放完毕后停止计时器且隐藏img1
if command = 'window' then
begin
tmr1.Enabled := False;
img1.Hide;
end;
end;