自绘背景首先填满listiew的区域,显示正确,但是数据多时,因为要滚动,背景图像就只显示原来的一部分和新画的一部分。
procedure Tfrmexe.appbCustomDraw(Sender: TCustomListView;
  const ARect: TRect; var DefaultDraw: Boolean);
begin
    sender.Canvas.Brush.Bitmap:=bmpbk;
    Sender.Canvas.FillRect(ARect);
end;
开始是这样滚动一下后是这样
http://b152.photo.store.qq.com/psb?/V105CZTm2RQyRj/vaSg.ecx5NF7XRX0GSvTJBkYwhYDvqkP8ztBKMGNjG8!/b/YYz1nVqhkgAAYp2bpVqZggAA

解决方案 »

  1.   

    listiew.Invalidate;试试这个,在滚动后加上这句
      

  2.   

    如果在procedure Tfrmexe.appbCustomDraw(Sender: TCustomListView;
      const ARect: TRect; var DefaultDraw: Boolean);里面写Invalidate会不停刷新,不知道得在哪个事件里写invalidate
      

  3.   

    OnChange等会触发的事件试下。listiew.Invalidate;这个应该是可以解决你的问题的。
      

  4.   

    不行啊,你qq给我说下,咱qq聊,这里也不好发图片
      

  5.   

    其实这个情况你可以先试试放个BUTTON,里面CLICK事件加上listiew.Invalidate;看看能否恢复,我QQ是251450368
      

  6.   

    invalidate本身是可以的,但是invalidate放在CustomDraw会重复触发这个世界,所以就造成屏幕闪烁了,所以我想怎么能使用scroll事件