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 の [アルファ チャンネルで XP スタイル イメージを使用する] オプションのチェックを外して修正しました。そのオプションをチェックした場合は、チェックを外してください。

于 2012-06-25T17:50:41.027 に答える
0

DynBmp.TransParentColor は、イメージリストに再度追加する前はおそらく clRed です。たぶん、TransparentMode はもう tmFixed ではありませんか? デバッグを試して、発見に従ってコードを修正してください。

于 2010-11-30T10:26:55.647 に答える