1

以下代码在 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 中按预期工作?谢谢

4

2 回答 2

2

我在使用 Delphi XE2 时遇到了同样的问题,并通过取消选中ImageList Editor 中的“使用带有 alpha 通道的 XP 样式图像”选项来修复它。如果您已选中该选项,请取消选中它。

于 2012-06-25T17:50:41.027 回答
0

DynBmp.TransParentColor 在再次添加到图像列表之前可能是 clRed。也许 TransparentMode 不再是 tmFixed 了?根据您的发现尝试调试并修复您的代码。

于 2010-11-30T10:26:55.647 回答