看来没有人搭理,好,再加50分

pipimei 2000-07-09 10:38:00
我希望自绘制ListView控件,就尝试着在其OnCustomDrawitem事件中加入如下代码:
procedure TForm1.Listview1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
defaultdraw:=True;
with Listview1.canvas do begin
if cdsSelected in State then
font.color:=clred
else
font.color:=clblue
end;
end;
然而,另人恐怖的事情发生了,运行程序后,查看资源状况,系统资源迅速、大幅地
下降,甚至Windows会弹出“系统资源到了危险的程度”的警告提示框。
去掉上述代码,问题不再出现。在Treeview控件中使用该事件,也没有问题。
这是何原因?难道是D5的BUG?
另外,查阅D5的帮助,说明了Listview的OnCustomdrawitem、OnCustomDrawsubitem、
OnCustomDraw等几个事件必须在listview的OwnerDraw属性设为True才有效,然而好象并非
如此。
那么,如何自绘制listview?请教诸位指点。
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pipimei 2000-07-10
  • 打赏
  • 举报
回复
对不起,Delphi的高手们好象都休息了。
delphi的Virtual Listview例子我看过,运行也有着这种情况。
hhzh426的做法我再试试。
Wingsun 2000-07-10
  • 打赏
  • 举报
回复
自绘制listview在Delphi下有一个例子,你可以看一看嘛。
hhzh426 2000-07-10
  • 打赏
  • 举报
回复
试一试:
if cdsSelected in State then
begin
Sender.Canvas.Brush.Color:=clred;
Sender.Canvas.Brush.Bitmap:=//相应的位图句柄;
Sender.Canvas.Fillrect(Item.DisplayRect(drBounds));
end
else
begin
Sender.Canvas.Brush.Color:=clblue;
Sender.Canvas.Brush.Bitmap:=//相应的位图句柄;
Sender.Canvas.Fillrect(Item.DisplayRect(drBounds));
end;
如此便可以将选中的listitem的背景设为红色,没有选中的listitem背景设为蓝色。
defaultdraw只是决定是否您自己画标签文字,如果您想自己画标签文字可以这样试一试:
if cdsSelected in State then
begin
//Sender.Canvas.Brush.Color:=clred;
Sender.Canvas.Brush.Bitmap:=//相应的位图句柄;
Sender.Canvas.Fillrect(Item.DisplayRect(drBounds));
Sender.Canvas.Font.Color:=clred;
Sender.Canvas.Brush.Style:=bsClear;//画字的时候没有背景色;
//决定字的位置.....
Sender.Canvas.TextRect(rect,x,y,item.Caption);
Sender.Canvas.Brush.Style:=bsSolid;//恢复画刷的背景色。
end
else
begin
//Sender.Canvas.Brush.Color:=clred;
Sender.Canvas.Brush.Bitmap:=//相应的位图句柄;
Sender.Canvas.Fillrect(Item.DisplayRect(drBounds));
Sender.Canvas.Font.Color:=clblue;
Sender.Canvas.Brush.Style:=bsClear;//画字的时候没有背景色;
//决定字的位置.....
Sender.Canvas.TextRect(rect,x,y,item.Caption);
Sender.Canvas.Brush.Style:=bsSolid;//恢复画刷的背景色。
end;
DefaultDraw:=false;
我自己没有试过,但是我认为您如果想自己画listitem,您最好自己做所有的事情。
wu_xin 2000-07-10
  • 打赏
  • 举报
回复
这好象是DELPHI的问题吗!C++BUIDLER我稍熟一点!

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧