作者:爱笑的美美6_833 | 来源:互联网 | 2023-08-28 17:18
问题如上:
让listview透明显示
就是类似有Transparent属性一样.
求教怎么实现
60 个解决方案
没有,自己处理,加背景图片,取自listview的父控件的颜色
新版的VCLskin中有个SKINCaptin控件,可以设置整个form的透明度,listview也跟随一起变透明
取自listview的父控件的颜色,怎么取?
能否详细下
三行代码以内,实现LISTVIEW透明,满足楼主要求。只是希望楼主再加点分以表示对问题的重视。
mwy654321:
我再加80分,但是我要实现的可不是要让listview有背景颜色,而是要让listview任何其他控件上透明,
假如有个image,或其他,让listview叠在这些控件上均能透明.
希望你能及时给我答复解决..
如果解决不了listview透明,stringgrid也行
sanguomi :我现在就去看下你的代码能否实现
mwy654321:我都已经加分了,还不来解答,5555
关注三行代码。
另外,根本不存在"alphabend"这样的属性,楼主不必被误导。
不好意思,这几天有点忙,明天晚上把三行代码发到你信箱,现在在网吧上网有点不方便。
我再加80分,但是我要实现的可不是要让listview有背景颜色,而是要让listview任何其他控件上透明,
假如有个image,或其他,让listview叠在这些控件上均能透明.
答:去掉背景色,是透明的,叠在这些控件上均透明!
用winapi嘛。
函数功能:设置窗口透明颜色
格式:BOOL SetLayeredWindowAttributes(
HWND hwnd, //窗口手柄
COLORREF crKey, //指定颜色值
BYTE bAlpha, //混合函数值
DWORD dwFlags //动作
);
{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操作系统下调试成功。
经过测试发现问题:
SetWindowLong(ListView1.Handle, GWL_EXSTYLE,
GetWindowLong(Listview1.Handle, GWL_EXSTYLE)
or WS_EX_LAYERED);
这里的SetWindowLong执行失败,
三行似乎不可能。除了下面必须的三行设置属性的代码:
SetWindowLong(Form.Handle, GWL_STYLE, GetWindowLong(Form.Handle, GWL_STYLE) and not WS_CLIPCHILDREN);
SetWindowLong(Listview.Handle, GWL_STYLE, GetWindowLong(Listview.Handle, GWL_STYLE) and not WS_CLIPSIBLING);
SetWindowLong(Listview.Handle, GWL_EX_STYLE, GetWindowLong(Listview.Handle, GWL_STYLE) or WS_EX_TRANSPARENT);
还需要截取listview的WM_ERASEBKGND消息
自己写个从那里继承写个控件,先对控件做个透明处理,然后在自绘函数里把数据自绘上去
alphabend是CDC的成员函数!怎么叫没有?》?