由于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;

解决方案 »

  1.   

    FlashGet数据太多的时候(下载任务)也会闪烁的啊
      

  2.   

    本人也遇到过这样的问题,解决办法是,在OnAdvancedCustomDrawItem中处理,代码如下:
    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);
      

  3.   

    我也试过楼主贴出的代码,没有出现所说的问题,我的系统是:win2k
      

  4.   

    我的是XP,IBM的R32,难道与机器有关??
    其实如果我用oncustomdrawitem的话,是不会闪烁的.只是它太消耗内存了,多刷新几次系统就出现内存不足的现象.
    请大家都帮忙,能否通过补丁或第3方控件解决.(我用的是DELPHI 5)
      

  5.   

    没办法,我只能用DBGRID了.散分