2011-08-23 12 views
15

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文件格式存儲應該使得結果形式更小。

enter image description here

更新: PngComponents看起來像他們應該工作,但我得到了一個Invalid Graphic format錯誤,當我嘗試一個PNG加載到巴SpeedButton的。請注意,Png圖像列表組件沒有這樣的問題。看來,cxLibrary(一個開發者快遞包)正在破壞事物。一旦我刪除了所有的開發人員快速的東西,這個問題就消失了因此,儘管我選擇了Pngcomponents作爲答案,但如果您安裝了devex東西,請改用其按鈕,而不要使用pngcomponents。

enter image description here

+1

如果您不想將圖像放入dfm中,則不要將它們作爲資源加載。在我看來,這是唯一明智的做法。如果您將資產置於dfm文件中,那麼您將失去將資產保留在修訂控制中的能力。 –

+1

爲什麼你不把你的PNG放入.ico文件並在運行時將它們加載到圖像列表中? –

+0

P.S.希望新的工作能爲你做好準備! –

回答

11

你可以看看PngComponents。它有一個TPngSpeedbutton和一些其他控件直接與PngImages一起工作。

+0

謝謝。看起來不錯!我想我以前聽說過他們,但從未檢查過它們。 –

+1

我在使用PngComponents在設計時加載.PNGs時遇到了問題,並將其跟蹤到舊的RXLIB designtime程序包,我將其刪除。現在我得到無效的圖形格式異常:[2108C8A0] {designide150.bpl} PicEdit.TGraphicProperty.Edit(Line 272,「PicEdit.pas」+ 10)+ $ 12 –

+0

已確認。 Developer Express cxLibraryD15打破PngComponents。從我的IDE中刪除了devex東西(我們不再使用它)並且沒有問題。但是由於很多人都使用它,所以我將上面的註釋留在問題中。看起來,如果您使用開發人員快速組件,最簡單的解決方案是他們自己的cxButton。 –

2

你也可以考慮在TMS軟件組件調用TAdvGlowButton,因爲這與支持阿爾法透明PNG圖像。

Link to site...

+0

我已經使用這個按鈕,它非常好!一般來說,TMS的東西也很棒。 –

2

事實證明,自帶的開發者快速VCL組件包cxButton還支持PNG按鈕。

+0

另外,事實證明,開發者在PngComponents上表達的東西是相互排斥的。選一個。 –