如何做透明窗口 如何做透明窗口 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.FormCreate(Sender: TObject);beginForm1.AlphaBlend:=true;Form1.AlphaBlendValue:=120;end; ---- 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操作系统下调试成功。 有中國天文方面的軟件嗎? 有关DLL创建窗体的问题。。。。。。 如何在这个数据集返回值中 找到值 这两个vc的函数该如何调用呀?多谢,在线等。。。。 怎么让窗体小图片的背景重复显示布满窗体? 用sql创建表的操作,用ADO的哪个组件比较好? 查汉字拼音 报表(Qreport)求救,100分 一个用SQL语句多表查询的问题:怎么搜索出学生成绩? 用 NMPOP3 时如何按特定条件收信?比如按主题,按大小,按地址等…… up一下 怎样将TQuickRep升级到3.5版本?
begin
Form1.AlphaBlend:=true;
Form1.AlphaBlendValue:=120;
end;
格式: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操作系统下调试成功。