我们知道可以使用Listview这个控件进行图片
显示.但在显示出来的图片上用鼠标点击它,图片就会
被覆盖上一层蒙蒙的蓝色,而导致整个图片变得模糊.
给人十分不爽的感觉.但我努力去找这个答案都是无功
而劳.所以来这里求解!
  不要告诉我用 item.select := False;
或者别的把item的焦点杀死,这是不可取的.
因为我还要对它进行处理. 我只是想把覆盖
在图片上的颜色去掉就可以! 谢谢拉.

解决方案 »

  1.   

    连windows都是这么实现的,如果没有蓝色的话你怎么知道选中哪一个了呢 、?
      

  2.   

    你实在要实现或许可以通过覆盖CreateParams方法来改变ListView的行为而实现!(没有试验)。
      

  3.   

    星星球: 谢谢!
    我就想把它的去掉,然后等用户选中之后,我再自己画上去.
    表示用户已经选中了. CreateParams 到底是那个参数??
      

  4.   

    MyNode.ImageIndex := 1; //设置初始图象
        MyNode.SelectedIndex := 2;//当点中后改变图象
      

  5.   

    你自己重画
    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if State = cdsSelected then
      begin
        {选中时}
      end
      else
      begin
      end;
    end;
      

  6.   

    写错了,应该是:
     if  cdsSelected in State then
      

  7.   

    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      bmp: TBitmap;
    begin
      if cdsSelected in  State then
      begin
        bmp := TBitmap.Create;
        try
         ImageList1.GetBitmap(0, bmp);
         Sender.Canvas.StretchDraw(Rect(20,10, bmp.Width, bmp.Height), bmp);
        finally
          bmp.Free;
        end;
      end;
    end;
    TO: xzhifei(星级饭桶(抵制日货)·飞) 
    你说的重画是不是这个意思, 但还是达不到我的效果呢?
    而且Sender.Canvas.StretchDraw(Rect(20,10, bmp.Width, bmp.Height), bmp);
    在这句里面的Left和Top又怎么能得到原来的值,在重画的时候,才能完全覆盖!
      

  8.   

    又不早说:
    procedure TForm1.ProgressBarLV1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      aRect:TRect;
    begin
      aRect:=Item.DisplayRect(drBounds );
      if cdsSelected in  State then
      begin
        bmp := TBitmap.Create;
        try
         ImageList1.GetBitmap(0, bmp);
         Sender.Canvas.StretchDraw(Rect(aRect.Left ,aRect.Top , bmp.Width, bmp.Height), bmp);
        finally
          bmp.Free;
        end;
      end;end;
      

  9.   

    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      aRect: TRect;
      bmp: TBitmap;
    begin
      aRect := Item.DisplayRect(drBounds);
      if cdsSelected in State then
      begin
      //cdsFocused 还可以分别处理是激活状态时的图象
        DefaultDraw := False; //加上这一句就可以了
        bmp := TBitmap.Create;
        try
          ImageList1.GetBitmap(0, bmp);
          Sender.Canvas.StretchDraw(Rect(aRect.Left, aRect.Top, bmp.Width, bmp.Height), bmp);
        finally
          bmp.Free;
        end;
      end;
    end;
      

  10.   

    xzhifei(星级饭桶(抵制日货)·飞) : 非常感谢! 问题已经解决.
    有机会请你喝酒! :)