M
menxin
Unregistered / Unconfirmed
GUEST, unregistred user!
查看问题时看到有很多朋友提出有关listview的customdraw问题,把以前做的一个拿出来供大家参考
var
Form1: TForm1;
bmp:TBitmap;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile('c:/1.bmp');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bmp.free;
end;
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
begin
Sender.Canvas.Draw(0,0,bmp); //画上个背景
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
function GetRGBColor(Value: TColor): DWORD;
begin
Result := ColorToRGB(Value);
case Result of
clNone: Result := CLR_NONE;
clDefault: Result := CLR_DEFAULT;
end;
end;
begin
DefaultDraw:=False;
if Item.Selected then
begin
Sender.Canvas.Brush.Color:=clHighlight;
Sender.Canvas.Font.Color:=clHighlightText;
ImageList_DrawEx(ImageList1.Handle, item.ImageIndex, Sender.Canvas.Handle, Item.Left,Item.Top, 0, 0, GetRGBColor(ImageList1.BkColor), GetRGBColor(ImageList1.BlendColor), 4);
end
else
ImageList1.Draw(Sender.Canvas,Item.Left,Item.Top,Item.ImageIndex,True);
Sender.Canvas.TextRect(Item.DisplayRect(drLabel),Item.Left+(ImageList1.Width+(Length(Item.Caption)div 2)*TListView(Sender).Font.Height)div 2, Item.Top+ImageList1.Height+4,Item.Caption);
if Item.Selected or Item.Focused then
Sender.Canvas.DrawFocusRect(Item.DisplayRect(drLabel));
end;
var
Form1: TForm1;
bmp:TBitmap;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile('c:/1.bmp');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bmp.free;
end;
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
begin
Sender.Canvas.Draw(0,0,bmp); //画上个背景
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
function GetRGBColor(Value: TColor): DWORD;
begin
Result := ColorToRGB(Value);
case Result of
clNone: Result := CLR_NONE;
clDefault: Result := CLR_DEFAULT;
end;
end;
begin
DefaultDraw:=False;
if Item.Selected then
begin
Sender.Canvas.Brush.Color:=clHighlight;
Sender.Canvas.Font.Color:=clHighlightText;
ImageList_DrawEx(ImageList1.Handle, item.ImageIndex, Sender.Canvas.Handle, Item.Left,Item.Top, 0, 0, GetRGBColor(ImageList1.BkColor), GetRGBColor(ImageList1.BlendColor), 4);
end
else
ImageList1.Draw(Sender.Canvas,Item.Left,Item.Top,Item.ImageIndex,True);
Sender.Canvas.TextRect(Item.DisplayRect(drLabel),Item.Left+(ImageList1.Width+(Length(Item.Caption)div 2)*TListView(Sender).Font.Height)div 2, Item.Top+ImageList1.Height+4,Item.Caption);
if Item.Selected or Item.Focused then
Sender.Canvas.DrawFocusRect(Item.DisplayRect(drLabel));
end;