Delphi 2010 の TSpeedButtons は、実際には PNG 透過性を適切にサポートしていないようでした。これは、Glyph プロパティが TBitmap を内部で使用し、TBitmap はビットマップ用であり、PNG 透過性を適切にサポートしておらず、TSpeedButton.Glyph が透過性をサポートできないためです..更新:しかし、実際の問題は、デルファイのPNGサポートを非機能的にレンダリングしていた外部のもの(Developer Expressコンポーネント)があったことでした。一方、TImageはまだTPictureであり、PNGをサポートできますが、このDeveloper Expressの影響も受けましたバグ。
ここについてはすでに質問があり、透明度が黒いピクセルにならないようにプレブレンディングを使用する方法が回答に示されています。デザインタイムにロードされたアルファブレンド PNG を使用し、PNG リソースを BMP 形式に変換せず、アルファ チャネルを破棄し、ここに示す黒い境界線を引き起こす別のボタン コントロールがあるかどうかを知りたいです。
つまり、このコントロールは TBitmap を使用せず、TBitmap にすべて備わっているカラー キー透過機能を使用しません。
繰り返しますが、古い TBitmap/TSpeedButton ベースの VCL 機能を使用しているときに外側が黒くなる問題を解決する方法を尋ねているわけではありません。これには最新の PNG 透明度機能がないためです。 「ちょうどうまくいく」何か他のもの。
二次的な欠点として、小さな .png ファイルを .DFM ビットマップ リソースに変換すると、基本的にスペースが無駄になり、フォームの .DFM コンテンツが大きくなりすぎます。.dfm 内のネイティブ .png ファイル形式のストレージにより、結果のフォームが小さくなります。
更新: PngComponents は動作するはずですがInvalid Graphic format
、png を Png スピードボタンに読み込もうとするとエラーが発生しました。Png 画像リスト コンポーネントにはそのような問題がないことに注意してください。cxLibrary (開発者エクスプレス パッケージ) が問題を引き起こしているようです。Developer Express のものをすべて削除すると、この問題はなくなります。したがって、答えとして Pngcomponents を選択しましたが、devex がインストールされている場合は、pngcomponents ではなく、代わりにそれらのボタンを使用してください。