精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>图形界面和窗体>>Win2000下Delphi透明窗体实现

主题:Win2000下Delphi透明窗体实现
发信人: cobe(失恋!痛苦!)
整理人: soaringbird(2001-11-01 10:10:27), 站内信件
我根据以前几位朋友的提示,写了一个实验代码,成功了,特别共享出来

其它想要这种效果的朋友可以走走捷径,呵呵。

在这里下载
-----------------------------------------------------
代码如下:(1个按钮,1个Scrollbar)
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

Const
    WS_EX_LAYERED = $80000;
    AC_SRC_OVER = $0;
    AC_SRC_ALPHA = $1;
    AC_SRC_NO_PREMULT_ALPHA = $1;
    AC_SRC_NO_ALPHA = $2;
    AC_DST_NO_PREMULT_ALPHA = $10;
    AC_DST_NO_ALPHA = $20;
    LWA_COLORKEY = $1;
    LWA_ALPHA = $2;
    ULW_COLORKEY = $1;
    ULW_ALPHA = $2;
    ULW_OPAQUE = $4;
//新增加的常量定义

type
  TForm1 = class(TForm)
    Button1: TButton;
    ScrollBar1: TScrollBar;
    procedure ScrollBar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    hWindows:longint;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明

implementation

{$R *.DFM}

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  SetWindowLong(Handle,GWL_EXSTYLE,WS_EX_LAYERED);
  SetLayeredWindowAttributes(Self.Handle,0,ScrollBar1.Position,LWA_ALPHA);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  hWindows:=GetWindowLong(Handle,GWL_STYLE);  //保存原来的属性
  SetWindowLong(Handle,GWL_EXSTYLE,WS_EX_LAYERED);//设置新的扩展属性
  {
    第1个参数:窗体句柄
    第2个参数:一个RGB值,用来告诉窗体中那种颜色需要透明
    第3个参数:透明度(0-255)
    第4个参数:指定是通过第2个参数还是第3个参数来设置透明度
  }
  SetLayeredWindowAttributes(Self.Handle,0, 100, LWA_ALPHA);//设置透明度
end;

end.



----
███████
 VB版 
版务专用章
cobe 
███████                            

[关闭][返回]