如何做透明窗口

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Form1.AlphaBlend:=true;
    Form1.AlphaBlendValue:=120;
    end;
      

  2.   

    ---- Windows2000增加了很多功能,起码修改TCP/IP设置后无需重新启动电脑就可以使用的特性就会使很多以前饱受WIN95/98重新启动并扫描文件之苦的用户觉得Windows2000 确实有了改进。除此之外,Windows2000的API也有很多新的东西。下面一个例子是利用 Windows2000新的API函数制作透明窗口。这里主要介绍用Delphi调用Windows2000新的 API函数实现这一功能的过程。 ----使用SetLayeredWindowAttributes API函数可以设置窗口的风格,该函数介绍如下: 函数功能:设置窗口透明颜色
    格式:BOOL SetLayeredWindowAttributes(
                 HWND hwnd,         //窗口手柄
                 COLORREF crKey,    //指定颜色值
                 BYTE bAlpha,        //混合函数值
                 DWORD dwFlags     //动作
                 );----参数解释: ----hwnd ---- 窗口手柄。当使用CreateWindowEx函数创建窗口时,窗口由WS_EX_LAYERED指定的值创建;或者窗口已经创建后,由SetWindowLong根据 WS_EX_LAYERED指定的值改变。 ----crKey ----指向一个COLORREF值,该值指定一个透明颜色值,当创建窗口时,窗口将使用该值。窗口绘制的所有颜色将为透明。要想产生COLORREF值,请使用RGB宏。 ----bAlpha ----混合函数值。该值用于描述窗口的不透明度。当bAlpha 值为0时,窗口完全透明,当bAlpha值为255时,窗口完全不透明。 ---- dwFlags ----指定动作。这个参数可以取一个或多个值:  ----返回值: ----如果函数成功,返回非零值。如果函数失败,返回零值。进一步取得错误信息,请调用GetLastError.函数。 ----注意:一旦SetLayeredWindowAttributes调用该函数,随后的UpdateLayeredWindow调用将会无效,直到层风格的点被清除并重新设置。 ---- 各个参数详细意义和它们的取值以及每个值的意义请参看http//msdn.microsoft.com/
    library/psdk/winui/windows_1p6b.htm,这里不加赘述。这里要强调的是,该函数只适用于Windows2000,要调试本程序,请选Windows2000操作系统。 ---- 在表单中放置一个ScrollBar控件,使用FormCreate, FormDestroy,ScrollBar1Change三个事件。当移动ScrollBar的按钮时,表单的透明度将产生变化。程序代码如下: {API声明}
    type
      TSetLayeredWindowAttributes
        = function(wnd: HWND; crKey: DWORD;
          bAlpha: BYTE; dwFlag: DWORD): Boolean; stdcall;const
      WS_EX_LAYERED = $80000;
      LWA_ALPHA = 2;var
      hLibUser32: THandle;
      MySetLayeredWindowAttributes:
          TSetLayeredWindowAttributes;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    var
      p: Pointer;
    begin
      hLibUser32 := LoadLibraryA(‘user32.dll');
      MySetLayeredWindowAttributes := nil;
      if hLibUser32 <> 0 then begin
     p:=GetProcAddress(hLibUser32, 
        ‘SetLayeredWindowAttributes');
        if p = nil then begin
          FreeLibrary(hLibUser32);
          hLibUser32 := 0;
        end else begin
          MySetLayeredWindowAttributes := 
         TSetLayeredWindowAttributes(p);
        end;
      end;
      if hLibUser32 <> 0 then begin
        SetWindowLong(Handle, GWL_EXSTYLE,
          GetWindowLong(Handle, GWL_EXSTYLE)
           or WS_EX_LAYERED);
        ScrollBar1.Position := ScrollBar1.Max;
        ScrollBar1Change(Self);
      end else begin
        ShowMessage(‘该操作系统不支持!');
        Application.Terminate;
      end;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      if hLibUser32 <> 0 then begin
         FreeLibrary(hLibUser32);
         hLibUser32 := 0;
      end;
    end;procedure TForm1.ScrollBar1Change(Sender: TObject);
    var
      alpha: Integer;
    begin
      if hLibUser32 <> 0 then begin
        alpha := ScrollBar1.Position;
    alpha := alpha * 255 div 
     (ScrollBar1.Max - ScrollBar1.Min);
        if alpha < 8 then alpha := 8;
        if alpha > 255 then alpha := 255;
    MySetLayeredWindowAttributes
    (Handle, 0, Byte(alpha), LWA_ALPHA);
      end;
    end;----程序在Delphi5.0、Wndows2000操作系统下调试成功。