我用D7,装了Flash控件,但是加载flash的时候为什么不能透明。设了 wmode属性还是不好使。
另外新版的csdn如何搜索啊,我都不会用了。

解决方案 »

  1.   

      unit   Unit1;   
        
      interface   
        
      uses   
          Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,   
          Dialogs,   OleCtrls,   ShockwaveFlashObjects_TLB,   ExtCtrls;   
        
      type   
          TForm1   =   class(TForm)   
              ShockwaveFlash1:   TShockwaveFlash;   
              Timer1:   TTimer;   
              procedure   FormCreate(Sender:   TObject);   
              procedure   Timer1Timer(Sender:   TObject);   
          private   
              {   Private   declarations   }   
              Buffer   :   TBitmap;   
        
          public   
              {   Public   declarations   }   
          end;   
        
      var   
          Form1:   TForm1;   
        
      implementation   
        
      {$R   *.dfm}   
        
      procedure   TForm1.FormCreate(Sender:   TObject);   
      begin   
          Buffer   :=   TBitmap.Create;   
          Buffer.Width   :=   ShockwaveFlash1.Width;   
          Buffer.Height   :=   ShockwaveFlash1.Height;   
        
          ShockwaveFlash1.Movie   :='D:\temp\flash.swf';   
          ShockwaveFlash1.Play;   
      end;   
        
      procedure   TForm1.Timer1Timer(Sender:   TObject);   
      var   
          ARect   :   TRect;   
          ACanvas   :   TCanvas;   
      begin   
              if   ShockwaveFlash1.Playing   then   
              begin   
                  ACanvas   :=   TCanvas.Create;   
                  ACanvas.Handle   :=   GetDC(Form1.Handle);   
        
                  ARect.Left   :=   ShockwaveFlash1.Left   -   ShockwaveFlash1.Width;   
                  ARect.    :=   ShockwaveFlash1. ;   
                  ARect.Right   :=   ARect.Left   +   ShockwaveFlash1.Width;   
                  ARect.Bottom   :=   ARect.    +   ShockwaveFlash1.Height;   
        
                  Buffer.Transparent   :=   False;   
                  ShockwaveFlash1.PaintTo(Buffer.Canvas,0,0);   
                  Buffer.PixelFormat   :=   pf24bit;   
                  Buffer.Canvas.Brush.Style   :=   bsClear;   
                  Buffer.Transparent   :=   True;   
        
                  ACanvas.CopyRect(Rect(ShockwaveFlash1.Left,ShockwaveFlash1. ,ShockwaveFlash1.Left+ShockwaveFlash1.Width,ShockwaveFlash1. +ShockwaveFlash1.Height),ACanvas,ARect);   
                  ACanvas.Draw(ShockwaveFlash1.Left,ShockwaveFlash1. ,Buffer);   
                  ReleaseDC(Form1.Handle,ACanvas.Handle);   
                  ACanvas.Free;   
              end;   
      end;   
        
      end.  
      

  2.   

    当然也可以用
    Flash+Dreamweaver做好网页
    然后用WebBrowser调用在窗体上显示
    这样也能透明,不过可能程序要大些  
      

  3.   

    感谢 brightyang ,你的方法是可行的。但是我担心占资源,有没有更好的办法了?在网页中实现透明很容易啊,在delphi中为啥这么费劲呢 
      

  4.   

    那个不是delphi的问题,是flash控件的原因
    可以把它改写一下。。
      

  5.   

    to brightyang, 请问你的代码中Timer间隔多长时间。