1

サムネイルを表示できるコントロールが必要です。これは、このセットで目的に十分であると考えTListViewたのですが、残念ながら、サイズが 256x256 までの画像しかサポートしていないことに気付きました。これにはサードパーティのソリューションがあることは知っていますが、標準で作業したいと考えていました。ViewStylevsIconTImageListTListView

表示する必要がある画像は約 348x480 であるため、画像リストに追加してリストビューに割り当てることはできません。

それで、私は自分の画像を a に保存してTListから listview を ownerdraw できるのではないかと考えました。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);何もしていないように見えましたが、割り当てたローカル四角形を膨らませようとしましたが、運がありませんでした。

リストビューのアイコン/アイテムのサイズを手動で 256px より大きく設定することは可能ですか?

4

0 に答える 0