以下代码与Delphi 2007一样正常工作。它从图像列表中获取一个位图,在其上绘制一个红色X,并将新位图添加到同一图像列表的末尾:
DynBmp:=Graphics.TBitMap.Create;
DynBmp.Transparent:=TRUE;
DynBmp.TransparentMode:=tmFixed;
ImgList.GetBitmap(9, DynBmp);
DynBmp.TransparentColor:=DynBmp.canvas.pixels[0, DynBmp.Height - 1];
DynBmp.Canvas.MoveTo(1, 1);
DynBmp.Canvas.Pen.Style:=psAlternate; //psSolid;
DynBmp.Canvas.Pen.Color:=clRed;
DynBmp.Canvas.Pen.Width:=2;
DynBmp.Canvas.LineTo(DynBmp.Width - 1, DynBmp.Height - 1);
DynBmp.Canvas.MoveTo(DynBmp.Width - 1, 1);
DynBmp.Canvas.LineTo(1, DynBmp.Height - 1);
FErrBmpIdx:=ImgList.AddMasked(DynBmp, DynBmp.TransParentColor);
aResetIcon.ImageIndex:=FErrBmpIdx;
FreeAndNil(DynBmp);
在Delphi 2010上,使用相同的代码,红色X变成透明的X.我需要添加/更改哪些内容才能使Delphi 2010按预期工作?感谢
答案 0 :(得分:2)
我遇到了与Delphi XE2相同的问题,并通过取消选中ImageList编辑器中的“使用带有alpha通道的XP风格图像”选项来修复它。如果您已选中该选项,则取消选中它。
答案 1 :(得分:0)
DynBmp.TransParentColor可能会再次添加到图像列表之前。也许TransparentMode不再是tmFixed?尝试根据您的发现调试并修复代码。