求救,哪位大侠帮忙,我的falsh本身是透明的,我使用的是DELPHI7 我使用的shockwaveflash是这个控件,我的同事已经实现了,问他竟然说过段时间告诉我,悲催啊,如何设置flash透明啊, 跪求啊!

解决方案 »

  1.   

    老妖的网站有个c++ builder 的透明FLASH示例。
    大致原理也是先准备好透明的flash文件,然后在个html上加载这个flash文件,加载前先把背景截图,加载上去的flash的透明部分就是截图的背景,看起来就像透明一样。
      

  2.   

    就是介过
    http://www.ccrun.com/view.asp?id=22
    cb转delphi很轻松,转换下就行了
      

  3.   

    大侠们,能不能给出具体实例啊,我是DLEPHI form窗体,不是网页格式的.
      

  4.   

    脑子也不转一下,都跟你说了原理了
    把老妖的例子给你转成delphi的
    http://download.csdn.net/detail/sololie/5364051
      

  5.   

    看了大哥给的教程 ,我要实现的不是这种,shockwaveflash的控件放在窗体Form1上,而显shockwaveflash显示的背是白色的,我要让shockwaveflash加载的flash是透明的,本身我加截的flash就是透明的,但shockwaveflash这个控件导致不能透明,请大哥先明白我的意思,可以吗?谢了
      

  6.   

    那这个更简单了,设置下bgcolor就得了   // 假设窗体的背景颜色是默认的 clbtnface,对应的HTML颜色为 ECE9D8
      shckwvflsh1.BGColor := 'ECE9D8';
      shckwvflsh1.Movie := 'c:\1.swf';
      shckwvflsh1.Play;
      

  7.   

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

  8.   

    哥啊.我下面有底图的啊,透明falsh就是透明看到底图 图片啊啊.
      

  9.   

    唉,真是都给了你思路了,都不能转转啊,真是累人啊
    背景是纯色,就就设置就背景一样的颜色,如果背景是图片,就把背景绘制成图片不就行了
    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.
      

  10.   

    timer的间隔可以设小一点,比如100不要跟俺混,结贴就得了
      

  11.   

    sololie 的方法非常好
    有点小问题,边缘有毛刺而且无法渐变.
      

  12.   

    毛刺可以在制作flash时解决,渐变是有点问题,LS大佬给帮优化下
      

  13.   

    你的同事做的有毛刺吗?他不是说过几天告诉你他怎么做么,到时候问他。
    flash的毛刺是制作时扣得不好,可以在制作时弄精良点嘛。
      

  14.   

    http://bbs.csdn.net/topics/390457080新的贴,解决毛刺问题.sololie 大哥,去看看吧
      

  15.   


    忘了,上面要改下,不然泄露严重
    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;另外你怎么解决的?
      

  16.   

    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'
     我改用了别的方法.
      

  17.   

    设置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.
      

  18.   

    可以给它再加个处理// OnFSCommand 事件中判断是否播放完毕 
    procedure TForm1.shckwvflsh1FSCommand(ASender: TObject; const command,
      args: WideString);
    begin
      // 播放完毕后停止计时器且隐藏img1
      if command = 'window' then
      begin
        tmr1.Enabled := False;
        img1.Hide;
      end;
    end;