1

我需要一个可以显示缩略图的控件,为此我认为TListViewViewStyle设置vsIcon足以满足我的目的,不幸的是我意识到它TImageList仅支持最大 256x256 大小的图像。我知道对此有 3rd 方解决方案,但我曾希望使用标准TListView

我需要显示的图像大约为 348x480,因此我无法将它们添加到图像列表并将其分配给列表视图。

所以然后我想也许我可以将我的图像存储在 a 中TList,然后所有者绘制列表视图,这非常简单,只需使用该CustomDrawItem方法并使用该方法Item.DisplayRect即可确切知道要绘制到的位置,如下所示(快速示例):

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  ItemRect: TRect;
  IconRect: TRect;
  CaptionRect: TRect;
begin
  DefaultDraw := False;

  ItemRect := Item.DisplayRect(drBounds);
  IconRect := Item.DisplayRect(drIcon);
  CaptionRect := Item.DisplayRect(drLabel);

  with ListView1 do
  begin
    if cdsHot in State then
    begin
      Canvas.Brush.Style := bsSolid;
      Canvas.Brush.Color := clSkyBlue;
      Canvas.FillRect(ItemRect);
    end;

    if cdsSelected in State then
    begin
      Canvas.Brush.Style := bsSolid;
      Canvas.Brush.Color := clBlue;
      Canvas.FillRect(ItemRect);
    end;

    { my picture list is a custom control that holds bitmaps in a TList }
    if MyPictureList1.Items.Count > 0 then
      MyPictureList1.Draw(Canvas, IconRect.Left + 348 div 4, IconRect.Top + 2, Item.ImageIndex);

   // commented out old code drawing from imagelist
   { if LargeImages <> nil then
    begin
      LargeImages.Draw(Canvas, IconRect.Left + LargeImages.Width div 4, 2, Item.ImageIndex);
    end;  }

    // draw text etc
  end;
end;

问题是如何改变每个列表视图项的大小?通常设置图像列表会改变项目的大小,但由于大小限制,我不能使用图像列表。

我尝试过ListView_SetIconSpacing(ListView1.Handle, 348, 480);似乎没有做任何事情,我也尝试过夸大我分配的本地矩形,但那里没有运气。

是否可以手动将列表视图的图标/项目大小设置为大于 256 像素,如果可以,我该如何实现?

4

0 回答 0