由于listview的 oncustomdrawitem 存在内存泄露问题,所以我采用自画listview的方式来添加背景颜色,但结果是:数据闪烁厉害,而且当把滚动条拉到底后,所有数据全部不见了,请大家看看我得代码并提出解决方法,谢谢.procedure TForm1.Button1Click(Sender: TObject);
var
itemx:Tlistitem;
i:integer;
begin
lv.items.clear;
for i:=1 to 100 do
begin
if i MOD 10=0 then
lv.Canvas.Font.Color :=rgb(255,0,0); itemx:=lv.items.add;
itemx.Selected :=true;
itemx.caption:=inttostr(i);
lv.Canvas.TextOut(lv.Selected.Position.x,
lv.Selected.Position.y,
lv.Selected.Caption); itemx.subitems.add('aaaaaaaa_'+inttostr(i));
end;
end;procedure TForm1.lvDrawItem(Sender: TCustomListView; Item: TListItem;
Rect: TRect; State: TOwnerDrawState);
var
i:integer;
begin
ITEM.Selected :=TRUE;
sender.Canvas.brush.Color :=rgb(0,0,255); sender.Canvas.FillRect(Rect);
if i MOD 10=0 then
sender.Canvas.Font.Color :=rgb(255,0,0); lv.Canvas.FillRect (rect);
lv.Canvas.TextOut(lv.Selected.Position.x,
lv.Selected.Position.y,
lv.Selected.Caption); lv.Canvas.TextOut(lv.Selected.Position.x+LV.Columns[0].WIDTH,
lv.Selected.Position.y,
lv.Selected.SubItems.Strings[0]);
end;
var
itemx:Tlistitem;
i:integer;
begin
lv.items.clear;
for i:=1 to 100 do
begin
if i MOD 10=0 then
lv.Canvas.Font.Color :=rgb(255,0,0); itemx:=lv.items.add;
itemx.Selected :=true;
itemx.caption:=inttostr(i);
lv.Canvas.TextOut(lv.Selected.Position.x,
lv.Selected.Position.y,
lv.Selected.Caption); itemx.subitems.add('aaaaaaaa_'+inttostr(i));
end;
end;procedure TForm1.lvDrawItem(Sender: TCustomListView; Item: TListItem;
Rect: TRect; State: TOwnerDrawState);
var
i:integer;
begin
ITEM.Selected :=TRUE;
sender.Canvas.brush.Color :=rgb(0,0,255); sender.Canvas.FillRect(Rect);
if i MOD 10=0 then
sender.Canvas.Font.Color :=rgb(255,0,0); lv.Canvas.FillRect (rect);
lv.Canvas.TextOut(lv.Selected.Position.x,
lv.Selected.Position.y,
lv.Selected.Caption); lv.Canvas.TextOut(lv.Selected.Position.x+LV.Columns[0].WIDTH,
lv.Selected.Position.y,
lv.Selected.SubItems.Strings[0]);
end;
解决方案 »
- 救救命呀,大侠帮帮忙!100分求把 .txt 文件导入到数据表的最优方法.数据表导出到txt文件 的最优方法,请高手进.顶者有分.
- 数据库增加记录
- 谁有FastReport 2.5的注册码?急!!!!在线等待!!!
- 如何合成照片
- ■■■Flash伴侣--小软件发布,顺便散分!!使用Flash的朋友有福了!!■■■
- 日期型字段问题求教!!
- BDE数据库应用程序如何实现断点重连???
- 为啥在ADO中用InsertRecord不能插入记录?总是有"List Index out of bounds"的异常,咋回事?
- 我要将DBGRID中的数据全转到SGRINGGRID中,这一段代码老报错,请看!为什么?
- 怎么实现在一个query中新增的是不相同的行呀(当行比较多时,要考算法)
- 哪位高手知道如何注册windows下的服务程序啊
- 控件编写:怎样给控件加父类中已有的标准事件
Procedure DrawLV(Listview: TListview; Item: TListItem; Color1, Color2: TColor; Def: Boolean = true);
Var
Frect: TRect;
Begin
Frect := Listview.BoundingRect;
// Frect:=item.ListView.BoundsRect;
If Def Then
Begin
If (item.Index Mod 2) = 0 Then
Listview.Canvas.Brush.Color := Color1 //$00FFB3B3
Else
Listview.Canvas.Brush.Color := Color2; //$00FFB3B3
End
Else
Listview.Canvas.Brush.Color := Color1; //$00FFB3B3
Listview.Canvas.FillRect(Frect);
End;OnAdvancedCustomDrawItem中的代码:
DrawLV(listview1, item, $00EEF7FF, $00FFF4F4);
其实如果我用oncustomdrawitem的话,是不会闪烁的.只是它太消耗内存了,多刷新几次系统就出现内存不足的现象.
请大家都帮忙,能否通过补丁或第3方控件解决.(我用的是DELPHI 5)