为TListView项自绘图标
(1)将OwnerDraw属性设为 true
(2)编写OnDrawItem事件代码 (推荐使用ListView1CustomDrawItem事件来实现自绘)
/*
自绘
*/
void __fastcall TForm1::ListView1DrawItem(TCustomListView *Sender,
TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
TListView *lv = (TListView *)Sender;
TRect rct(Rect.Left, Rect.Top, Rect.Width(), Rect.Bottom);
//突出显示选中项
if(/*State.Contains(odFocused) || */State.Contains(odSelected))
{
lv->Canvas->Pen->Color = clBlue;
lv->Canvas->Rectangle(rct);
lv->Canvas->Font->Color = clWhite;
}
else
{
lv->Canvas->Brush->Color = lv->Color;
lv->Canvas->FillRect(Rect);
lv->Canvas->Font->Color = clBlack;
}
lv->Canvas->TextOut(Rect.Left,Rect.Top + 2,Item->Caption);
// Draw SubItem Text
int nColOffset(0);
for(int i=0; i<Item->SubItems->Count; i++)
{
nColOffset += lv->Column[i]->Width;
lv->Canvas->TextOut(nColOffset + Rect.Left,
Rect.Top + 2,
Item->SubItems->Strings[i]);
}
}
自绘
*/
void __fastcall TForm1::ListView1DrawItem(TCustomListView *Sender,
TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
TListView *lv = (TListView *)Sender;
TRect rct(Rect.Left, Rect.Top, Rect.Width(), Rect.Bottom);
//突出显示选中项
if(/*State.Contains(odFocused) || */State.Contains(odSelected))
{
lv->Canvas->Pen->Color = clBlue;
lv->Canvas->Rectangle(rct);
lv->Canvas->Font->Color = clWhite;
}
else
{
lv->Canvas->Brush->Color = lv->Color;
lv->Canvas->FillRect(Rect);
lv->Canvas->Font->Color = clBlack;
}
lv->Canvas->TextOut(Rect.Left,Rect.Top + 2,Item->Caption);
// Draw SubItem Text
int nColOffset(0);
for(int i=0; i<Item->SubItems->Count; i++)
{
nColOffset += lv->Column[i]->Width;
lv->Canvas->TextOut(nColOffset + Rect.Left,
Rect.Top + 2,
Item->SubItems->Strings[i]);
}
}
如果出现ListView Item高不够的情况可以使用绑定一个ImageList组件来撑高ListViewItem的行高
说明:
使用ListView1CustomDrawItem来实现自绘项,可以不影响每一项的高度,性能也更好一些。








参考:
http://www.ccrun.com/article.asp?i=656&d=qdc7kg
http://topic.csdn.net/t/20020811/10/931824.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了