2

Cosmin Prund の助けを借りた以前の質問によると、Image をストレッチして ImageList に追加する方法を見つけました。

procedure LoadDatasetImagesToImageList;
var 
  StretchedBMP: TBitmap;
  MS: TMemoryStream;
begin
  ImageList.Clear;
  ItemsDts.First;
  StretchedBMP := TBitmap.Create;
try

  // Prepare the stretched bmp's size
  StretchedBMP.Width := ImageList.Width;
  StretchedBMP.Height := ImageList.Height;

  // Prepare the memory stream
  MS := TMemoryStream.Create;
  try
    ImageBitmap:= TBitmap.Create;
    try
      while not ItemsDts.Eof do
      begin
        if not ItemsDtsPicture.IsNull then
        begin
          MS.Size := 0;
          ItemsDtsPicture.SaveToStream(MS);
          MS.Position := 0;
          ImageBitmap.LoadFromStream(MS);
          // Stretch the image
          StretchedBMP.Canvas.StretchDraw(Rect(0, 0, StretchedBmp.Width-1, StretchedBmp.Height-1), ImageBitmap);
          ImageList.Add(StretchedBmp, nil);
        end;
        ItemsDts.Next;
      end;
    finally 
      ImageBitmap.Free;
    end;
  finally 
    MS.Free;
  end;
finally
  StretchedBMP.Free;
end;

ここでの問題は、挿入された画像が ImageList で透明でないことです。TListview でアイテムを表示する場合、画像は透過されません。ただし、画像を通常どおりに (ストレッチせずに StretchedBMP 変数を使用して) 追加すると、画像は透明になります。

PS: 前の質問へのリンクは次のとおりです: Add Stretched image to ImageList in Delphi

4

1 に答える 1

10

マスク画像を呼び出しImageList.Addて渡します。nil引き伸ばされた画像に対応するマスクを計算するか、ImageList.AddMasked代わりに呼び出して、「透明」色として指定した色に基づいて画像リストにマスクを計算させることができます。設計時にイメージ リスト コンポーネント エディタを使用すると、このようになります。

于 2011-07-14T04:19:53.827 に答える