実行時に 32 ビット ビットマップを作成してペイントし、それを ImageList に追加しようとしています。ビットマップには透明度 (アルファ チャネル) があります。ビットマップを作成してそのキャンバスに問題なく描画できます。また、他のキャンバスの上に透明で正常に描画されます。
問題は、ImageList に追加すると、ビットマップの Canvas プロパティで作成された描画が失われるように見えることです。
ビットマップを開始する方法は次のとおりです。
Bitmap := TBitmap.Create;
Bitmap.PixelFormat := pf32bit;
Bitmap.Transparent := True;
Bitmap.AlphaFormat := afDefined;
SetBkMode(Bitmap.Canvas.Handle, TRANSPARENT);
Bitmap.SetSize(100, 42);
// now I can draw, let's say, an icon from an imagelist
ImageList.Draw(Bitmap.Canvas, 5, 5, 0, dsTransparent, itImage);
// and some other stuff
Bitmap.Canvas.RoundRect(0, 0, 99, 41, 5, 5);
Bitmap.Canvas.TextOut(50, 5, 'Test string');
このビットマップを任意のコントロール キャンバスに描画すると、イメージリストからのイメージ、角丸四角形、およびテキストが透明な背景で通常どおりに描画されます (何もペイントされていない場所はすべて透明になります。既に存在していた背景が保持されます)。 . これはForm1.Canvas.Draw(0, 0, Bitmap);
、Form1 の上にビットマップを描画し、そこに他の画像があった場合は背景として保持されることを意味します。
しかし、このビットマップをイメージリストに追加すると、奇妙な問題が発生します。ImageList の ColorDepth が cd32bit に設定されているので、次のように呼び出します。
BitmapImageList.Width := Bitmap.Width;
BitmapImageList.Hieght := Bitmap.Height;
BitmapImageList.Add(Bitmap, nil);
今、私がイメージリストからそのイメージを描画しようとすると:
BitmapImageList.Draw(Form1.Canvas, 0, 0, 0);
表示される唯一のものは、ImageList から Bitmap で描画された画像、丸みを帯びた四角形、および Canvas で描画されたテキストが消えることです。
私は何が欠けていますか?