DELPHI shockwaveflash 设置透明问题

cuiba1105 2013-05-12 03:47:04
求救,哪位大侠帮忙,我的falsh本身是透明的,我使用的是DELPHI7 我使用的shockwaveflash是这个控件,我的同事已经实现了,问他竟然说过段时间告诉我,悲催啊,如何设置flash透明啊, 跪求啊!
...全文
361 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sololie 2013-05-14
可以给它再加个处理

// OnFSCommand 事件中判断是否播放完毕 
procedure TForm1.shckwvflsh1FSCommand(ASender: TObject; const command,
  args: WideString);
begin
  // 播放完毕后停止计时器且隐藏img1
  if command = 'window' then
  begin
    tmr1.Enabled := False;
    img1.Hide;
  end;
end;
回复
sololie 2013-05-14
引用 25 楼 cuiba1105 的回复:
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;

interface

uses
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.

回复
cuiba1105 2013-05-13
看了大哥给的教程 ,我要实现的不是这种,shockwaveflash的控件放在窗体Form1上,而显shockwaveflash显示的背是白色的,我要让shockwaveflash加载的flash是透明的,本身我加截的flash就是透明的,但shockwaveflash这个控件导致不能透明,请大哥先明白我的意思,可以吗?谢了
回复
cuiba1105 2013-05-13
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'  我改用了别的方法.
回复
sololie 2013-05-13
引用 23 楼 cuiba1105 的回复:
我解决了.不过也不是全解决,基本可以接受的程度
忘了,上面要改下,不然泄露严重

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;

另外你怎么解决的?
回复
cuiba1105 2013-05-13
回答还是很认真的,有说明,有例,还有图,但是没解决我的问题.继续等
回复
cuiba1105 2013-05-13
哥啊.我下面有底图的啊,透明falsh就是透明看到底图 图片啊啊.
回复
cuiba1105 2013-05-13
我解决了.不过也不是全解决,基本可以接受的程度
回复
cuiba1105 2013-05-13
http://bbs.csdn.net/topics/390457080 新的贴,解决毛刺问题.sololie 大哥,去看看吧
回复
cuiba1105 2013-05-13
同一个FLASH,他的看不出来,他就是不说,好神B的一个,自以为NB的要死,我就是花钱向别人请教,我也不找他! 哥,我送你1000分,佛争一柱香,人争一口气.如果可以,加我QQ..37232524
回复
sololie 2013-05-13
你的同事做的有毛刺吗?他不是说过几天告诉你他怎么做么,到时候问他。 flash的毛刺是制作时扣得不好,可以在制作时弄精良点嘛。
回复
cuiba1105 2013-05-13
什么都不多,分多.要多少,跟我说,这号也是位前辈大哥留下的号,他上岸了,告别了DELPHI走的时候,这个号给我用了.分多.
回复
cuiba1105 2013-05-13
再讨论下,毛刺的问题,我再做一个贴 送你100分,这个100分必须是码农大哥的.
回复
sololie 2013-05-13
毛刺可以在制作flash时解决,渐变是有点问题,LS大佬给帮优化下
回复
蓝色光芒 2013-05-13
sololie 的方法非常好 有点小问题,边缘有毛刺而且无法渐变.
回复
sololie 2013-05-13
timer的间隔可以设小一点,比如100 不要跟俺混,结贴就得了
回复
cuiba1105 2013-05-13
小弟我有点菜.凉解哈.
回复
cuiba1105 2013-05-13
哥,你太帅了.我真的很想认识你这么英明神武,玉树临风,风流倜傥,怎么说,以后我就跟你混了.
回复
sololie 2013-05-13
唉,真是都给了你思路了,都不能转转啊,真是累人啊。。。
背景是纯色,就就设置就背景一样的颜色,如果背景是图片,就把背景绘制成图片不就行了


unit Unit1;

interface

uses
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.



回复
sololie 2013-05-13
// 这样shckwvflash控件的背景色就跟主窗体的背景色一直,就是透明了
shckwvflsh1.BGColor := 'ECE9D8'; // 这个颜色值用工具取色查看下,选HTML的值

回复
加载更多回复
相关推荐
发帖
Delphi
创建于2007-08-02

4925

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2013-05-12 03:47
社区公告
暂无公告