这是谁的BUG吗?(100分)

  • 主题发起人 主题发起人 eyes4
  • 开始时间 开始时间
E

eyes4

Unregistered / Unconfirmed
GUEST, unregistred user!
运行环境在Windows98下(在windows2000下正常),
使用ListView控件,加入行的代码如下:
var
ListItem:TListItem;
begin
if ListView.Items.Count>20 then ListView.Items.Delete(0);
ListItem:=ListView.Items.Add;
ListItem.Caption:='xxxx1';
ListItem.Subitems.add('XXXX2');
...
end;
如果仅用以和代码时,一切正常,但当在ListView的OnCustomDrawItem事件
中加入以下代码时:
procedure TFrmMain.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
ListView.Canvas.Brush.Color:=clred;
end;
在不断地加入item的过程中,内存不断减小,即使当行数大于20而行数总数不再增加时
依然如些,请教这是什么原因?是delphi的bug还是win98的,或者我的代码是错的,请
指教。
 
内存没有释放。
 
>>内存没有释放。
此句ListView.Canvas.Brush.Color:=clred;有申请内存吗,请说明白点,不然不给分
 
我觉得问题并不是出在ListView.Canvas.Brush.Color:=clred这句话上,
问题应该出在ListView.Items.Delete(0) 上, 由于ListView是一个数据指针,因此有可能
在删除一行时内存没有完全释放。
我一般的做法是,直接显示需要显示的数据内容(即要先对查询结果进行一下判断,再显
示),如果有变化, 则直接释放整个Listview的内存, 然后重新填数据。
仅供参考。
 
listview1.Items[0].Free;
 
在windows98下
当没有ListView.Canvas.Brush.Color:=clred;句时一切正常,即使我用的还是
ListView.Items.Delete(0);
当有该句时,无论用Listview.items.clear还是listview1.Items[0].Free;
都不正常
所以我想问题还是出现在该句上。
 
我试过了! 内存没漏啊! 我加了超200个ITem都没漏啊
 
1.在win98下;
2.如果PC内存大的话,可能一时发现不了,请多加几条试试
 
如果你的ListView是否设置为自画.
一种可能就是不断的递归调用那个事件.其实你如果要自画的话你可以在OnDrawItem事件中做
 
还是没解决,分数就分了吧,见者有份
 
后退
顶部