Разница между Delphi 2007 и 2010 при рисовании растровых изображений

Следующий код работает должным образом с 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? Спасибо

2 ответа

Я столкнулся с той же проблемой с Delphi XE2 и исправил ее, сняв флажок "Использовать изображение в стиле XP с альфа-каналом" в редакторе ImageList. Если вы отметили эту опцию, просто снимите флажок.

DynBmp.TransParentColor, вероятно, очищается до того, как вы снова добавите его в список изображений. Может быть, TransparentMode больше не является tmFixed? Попробуйте отладить и исправить ваш код в соответствии с вашими выводами.

Другие вопросы по тегам