Разница между 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? Попробуйте отладить и исправить ваш код в соответствии с вашими выводами.