TListView设为vsIcon模式,自己画背景,单个选择的时候背景框能全部显示,按Ctrl键,用鼠标选择多个,背景也能全部显示。
如果用鼠标直接选择多个则图片显示不全,怎么回事?

解决方案 »

  1.   

    自己实现自画吧,在drawitem中对选中的记录进行处理
      

  2.   


    var
      lpRect: TRect;
      X, Y: Integer;
      Icon: TIcon;
      p: PItemData;
      sName: string;
    begin
      if (Item = nil) or (Item.Data = nil) then
        Exit;
      p := Item.Data;  lpRect := Item.DisplayRect(drBounds);  if cdsSelected in State then
        FPicture.Draw2(ACanvas, lpRect, 'Selected', 0);  Icon := GetFileIconEx(p^.Path, 1, itLargeIcon);
      if Icon <> nil then
      try
        // 画图标
        X := (RectWidth(lpRect) - Icon.Width) div 2 + lpRect.Left - 3;
        Y := lpRect.Top + 2;
        ACanvas.Brush.Style := bsClear;
        ACanvas.Draw(X, Y, Icon);
      finally
        FreeAndNil(Icon);
      end;  // 画文字
      SetBkMode(ACanvas.Handle, TRANSPARENT);
      ACanvas.Brush.Style := bsClear;
      lpRect := Item.DisplayRect(drLabel);
      lpRect.Bottom := lpRect.Top + ACanvas.TextHeight(Item.Caption) * 2;  sName := ExtractFileName(p^.Path);
      sName := GetShort(ACanvas, lpRect, sName);
      DrawString(ACanvas, sName, lpRect, DT_CENTER or DT_WORDBREAK);
      

  3.   


    在OnAdvancedCustomDrawItem里画的。
      

  4.   

    找到问题了,caption太长,large_image图片的大小不够。
    结贴