关于listview中透明的问题(50分)

  • 主题发起人 主题发起人 lxmzm
  • 开始时间 开始时间
L

lxmzm

Unregistered / Unconfirmed
GUEST, unregistred user!
我记得以前有篇文章介绍在使用listview时,在icon方式,可以实现文字和图标透明(因为有底图)
不知道那位还有保存
 
供参考:

6. 如何在ListView控件中绘底图
ListView控件是Windows程序开发中的常用控件, 利用它可以把需要用户进行选择操作的多个项目在窗口中以列表的方式显示, 每一个项目可以有它的小图标和大图标, 从而可以改善程序的用户界面, 方便用户操作.
为了使程序的界面更美观, 我们还可以在ListView控件中绘制底图, 正如我们可以为窗口绘制底图一样. 在Delphi中, 为ListView控件绘制底图是非常容易的, 它为我们提供有OnCustomDraw事件, 专门用于处理用户自定义的绘制, 在该事件中编写程序, 可以在绘制ListView的各个项目之前, 先执行该事件程序在ListView的画布(Canvas)上绘制我们自己的图形.
下面是在ListView控件中绘底图的一个小程序, 其运行结果如下图所示(略)
源程序如下:
unit ListViewMain;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ImgList;
type
TForm1 = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
procedure ListView1CustomDraw(Sender:TCustomListView;
const ARect: TRect;
var DefaultDraw:Boolean);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject;var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Bitmap1: TBitmap;
implementation
{$R *.DFM}
procedure TForm1.ListView1CustomDraw(Sender:TCustomListView;
const ARect: TRect;
var DefaultDraw: Boolean);
var
x,y,w,h : LongInt;
begin
with Bitmap1 do
begin
W := Width;
H := Height;
end;
Y := 0;
while Y < Height do
begin
X := 0;
while X < Width do
begin
ListView1.Canvas.Draw(X, Y, Bitmap1);
Inc(X, W);
end;
Inc(Y, H);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('backgray.bmp');
end;

procedure TForm1.FormClose(Sender: TObject;var Action: TCloseAction);
begin
Bitmap1.Free;
end;

end.



 
jsxjd:
这个方法我知道,就是这种方法,如果设置为ICON方式,图标就没有透明,我需要图标透明
 
将Canvas.brush.style设成bsClear试试.
 
Canvas.brush.style设成bsClear试试.该方法不行
 
后退
顶部