Delphi 2010的TSpeedButton似乎並未真正支持PNG透明度,因爲Glyph屬性在內部使用TBitmap,而TBitmap用於位圖,並且不能正確支持PNG透明度,並且TSpeedButton.Glyph不能支持透明度.. 更新:但實際的問題是我有一些外部的東西(Developer Express組件)導致delphi的PNG支持不起作用,另一方面,TImage雖然仍然是TPicture,並且可以支持PNG,但也受到此開發人員表達錯誤的影響。TBitmap的按鈕控制和底層替換,可正確處理PNG透明度,無需編寫預混合代碼
已經問了一個關於here的問題,答案顯示瞭如何使用預混合,以便透明度不會變成黑色像素。我想知道是否有另一個按鈕控件將使用在設計時加載的alpha混合PNG,並且它不會將PNG資源轉換爲BMP格式,從而丟棄Alpha通道並導致此處顯示黑色邊框。
簡而言之,此控件不會使用TBitmap,也不會使用TBitmap所有的顏色鍵透明度功能。
重複一遍,我並不是問如何解決外部黑外問題,同時仍然使用過時的基於TBitmap/TSpeedButton的VCL功能,因爲它缺少現代的PNG透明度功能,所以我在問關於將其替換爲「正常工作」的其他內容。
作爲第二個缺點,將小的.png文件轉換爲.DFM位圖資源本質上是浪費空間並使我的表單.DFM內容過大。 .dfm中的本地.png文件格式存儲應該使得結果形式更小。
更新: PngComponents看起來像他們應該工作,但我得到了一個Invalid Graphic format
錯誤,當我嘗試一個PNG加載到巴SpeedButton的。請注意,Png圖像列表組件沒有這樣的問題。看來,cxLibrary(一個開發者快遞包)正在破壞事物。一旦我刪除了所有的開發人員快速的東西,這個問題就消失了因此,儘管我選擇了Pngcomponents作爲答案,但如果您安裝了devex東西,請改用其按鈕,而不要使用pngcomponents。
如果您不想將圖像放入dfm中,則不要將它們作爲資源加載。在我看來,這是唯一明智的做法。如果您將資產置於dfm文件中,那麼您將失去將資產保留在修訂控制中的能力。 –
爲什麼你不把你的PNG放入.ico文件並在運行時將它們加載到圖像列表中? –
P.S.希望新的工作能爲你做好準備! –