如题

解决方案 »

  1.   

    在ListView的OnCustomDraw写代码,如:
    Sender.Canvas.Brush.Bitmap := ABitmap;
    Sender.Canvas.FillRect(ARect);
      

  2.   

    Sender.Canvas.Brush.Bitmap := ABitmap;-->这句话就是指定背景图片的
    ABitmap可以使用下面语句创建来载入背景图片
    ABitmap := TBitmap.Create;
    ABitmap.LoadFromFile(背景图片);
      

  3.   

    这样是可以了,不过好像很耗资源,鼠标放在ListView上就感觉到鼠标移动得慢了很多
      

  4.   

    ABitmap := TBitmap.Create;
    ABitmap.LoadFromFile(背景图片);
    这两句话不要放到OnCustomDraw中,放到其他的地方
      

  5.   

    我放在其他地方,感觉差不多,鼠标的移动还是有问题。
    还有一个问题是ListView的Item项内容会盖住背景图片,可不可以只在有图片和文字的地方盖住图片,其他的地方是透明的。
    麻烦你指教一下我,谢谢。
      

  6.   

    hahafan(注意!此人前途迷茫)
    你有没有用QQ,可不可以在QQ上和你聊聊
      

  7.   

    速度应该还是可以的,不知道你的OnCustomDraw是些什么代码?图片很大?
    若文字和图标也要背景透明的话,那可能需要在OnCustomDrawItem自己画图标和文字了。
    不好意思,公司不能聊天。
      

  8.   

    在OnCustomDrawItem自己画图标和文字的代码你有没有,可不可以再发给我
      

  9.   

    简单的写了一下,可根据需要修改
    var
      TextRect,
      PicRect: TRect;
    begin
      DefaultDraw := False;
      PicRect := Item.DisplayRect(drIcon);
      TextRect := Item.DisplayRect(drLabel);
      if cdsSelected in State then
      begin
        Sender.Canvas.Brush.Color := clBtnFace;
        Sender.Canvas.FillRect(Item.DisplayRect(drSelectBounds));
      end
      else
        Sender.Canvas.Brush.Style := bsClear;
      ImageList1.Draw(Sender.Canvas, (PicRect.Left + ImageList1.Width div 2), (PicRect.Top  + ImageList1.Height div 2), Item.ImageIndex, True);
      Sender.Canvas.TextOut(TextRect.Left, TextRect.Top, Item.Caption);
    end;
      

  10.   

    ImageList1.Draw(Sender.Canvas, (PicRect.Left + ImageList1.Width div 2), (PicRect.Top  + ImageList1.Height div 2), Item.ImageIndex, True);
    这句编译的时候出错,应该怎样改啊,我改成
    ImageList1.Canvas.Draw((PicRect.Left + ImageList1.Width div 2), (PicRect.Top  + ImageList1.Height div 2), Item.ImageIndex, True);
    提示Item.ImageIndex不是TGraphic类型还有2个问题想请教
    1.在win98下这样写背景会不会有死机或速度很慢的情况出现的。
    2.我的ListView是做在主界面的,当在主界面打开一个formstyle为fsMDIForm时,ListView的部分会显示黑色,怎样解决,打开formstyle为fsNormal,showmodal就不会有这样现象。请你帮帮我啊,谢谢
      

  11.   

    在Sender.Canvas后报Incompatible types:'integer' and 'TCanvas'
    在ImageList1.Height div 2) 后报Incompatible types:'TCanvas' and 'integer'我把你写的ImageList1.Draw改为ImageList1.Canvas.Draw,不改提示没有Draw
    ListView变黑色,是在哪里在刷新一下主界面,是在listview的oncustomdraw事件还是其他地方
      

  12.   

    不知道你的代码是什么样的?上面的代码我试过是可以使用的。
    刷新不要在oncustomdraw中,就在变黑的时候刷就行了,比如子窗口显示后。
      

  13.   

    不好意思,你的代码没有错,刚才是我看错,改错代码了。刷新是在子窗口显示后才刷不行,因为子窗口显示后已经把listview盖住了,已经看不到listview了,不用刷新了,现在看到listview变黑是子窗口打开过程还没有最大化的时候listview看到变黑,所以想再请教在什么时候刷新,而且你指的刷新是简单的listview.refresh,还是其他需写代码的刷新,应该是最后一个问题了,请再麻烦你了。
      

  14.   

    现在和需要的效果已经还接近了,不过发现有2个显示的效果处理得不好
    1.Item项的字比较多时不会换行,会和旁边项的字重叠。
    2.鼠标移到Item的某项,这一项会有一个灰色的底色显示,它是整个Item项显示灰色。以上2个问题是listview自画背景图片才会这样显示的,如果不自画背景图片,Item项的字体是可以自动换行的,而鼠标移到Item项,也只有图片和字的附近有灰色阴影,不会整个Item项都有灰色阴影的。在drawitem事件应该怎样写代码处理到和listview不画背景图片时的效果一样
    请再教我
      

  15.   

    试试这个
    var
      DrawRect,
      TextRect,
      PicRect: TRect;
    begin
      DefaultDraw := False;
      PicRect := Item.DisplayRect(drIcon);
      TextRect := Item.DisplayRect(drLabel);
      DrawRect.Left := PicRect.Left + (PicRect.Right - PicRect.Left - ImageList1.Width) div 2;
      DrawRect.Top := PicRect.Top  + (PicRect.Bottom - PicRect.Top - ImageList1.Height) div 2;
      DrawRect.Right := DrawRect.Left + ImageList1.Width;
      DrawRect.Bottom := DrawRect.Top + ImageList1.Height;
      if cdsSelected in State then
      begin
        Sender.Canvas.Brush.Color := clBtnFace;
        if Item.ImageIndex >= 0 then
          Sender.Canvas.FillRect(DrawRect);
        if Item.Caption <> '' then
          Sender.Canvas.FillRect(TextRect);
        DrawText(Sender.Canvas.Handle, PChar(Item.Caption), -1, TextRect, DT_WORDBREAK or DT_LEFT);
      end
      else begin
        Sender.Canvas.Brush.Style := bsClear;
        DrawText(Sender.Canvas.Handle, PChar(Item.Caption), -1, TextRect, DT_LEFT or DT_END_ELLIPSIS);
      end;
      ImageList1.Draw(Sender.Canvas, DrawRect.Left, DrawRect.Top, Item.ImageIndex, True);
    end;
      

  16.   

    谢谢你啊,现在基本的差不多了
    小问题有1个,当Item是选中状态时,item图片周围是灰色底色,而图片是没色,可不可以反过来,图片周围是没色,而图片看上去有一层灰色的底色。
    还有一个大问题是刷新问题,就是上面说的打开mdichild窗口listview就会显示黑色的问题,怎样解决。
      

  17.   

    我结贴子了,我还在这个网址发了一张,你留个言,我把分也给你,谢谢
    http://community.csdn.net/Expert/topic/4616/4616684.xml?temp=.9668848