2011-08-23 13 views
15

TSpeedButtons của Delphi 2010 dường như không hỗ trợ PNG rõ ràng, vì thuộc tính Glyph sử dụng TBitmap bên trong và TBitmap dành cho bitmap và không hỗ trợ PNG minh bạch đúng cách, và TSpeedButton.Glyph không thể hỗ trợ minh bạch sau đó .. cập nhật: Nhưng vấn đề thực tế là tôi đã có một số công cụ bên ngoài (Developer Express thành phần) đã được rendering hỗ trợ PNG delphi của không chức năng, TImage mặt khác, trong khi nó vẫn TPicture, và có thể hỗ trợ PNG, cũng bị ảnh hưởng bởi lỗi phát triển này.Điều khiển nút và thay thế cơ bản cho TBitmap xử lý chính xác độ trong suốt của PNG mà không cần viết mã pha trộn

Câu hỏi đã được hỏi về here và câu trả lời cho biết cách sử dụng trộn trước để độ trong suốt không biến thành pixel đen. Tôi muốn biết nếu có một nút điều khiển khác sẽ sử dụng PNG trộn alpha được tải tại designtime và không chuyển đổi tài nguyên PNG sang định dạng BMP loại bỏ kênh alpha và làm viền đen hiển thị ở đây.

Tóm lại, điều khiển này sẽ không sử dụng TBitmap và sẽ không sử dụng tính năng trong suốt màu chính là tất cả TBitmap có.

Để lặp lại, tôi không hỏi cách giải quyết vấn đề màu đen xung quanh bên ngoài trong khi vẫn sử dụng chức năng VCL dựa trên TBitmap/TSpeedButton cũ, vì nó thiếu chức năng minh bạch PNG hiện đại, tôi đang hỏi về việc thay thế nó bằng thứ gì đó khác "chỉ hoạt động".

Là một hạn chế thứ hai, chuyển đổi tệp .png nhỏ thành tài nguyên bitmap .DFM về cơ bản đang lãng phí dung lượng và làm cho biểu mẫu của tôi có nội dung .DFM quá lớn. Lưu trữ định dạng tệp .png gốc trong tệp .dfm sẽ làm cho các biểu mẫu kết quả nhỏ hơn.

enter image description here

Cập nhật: PngComponents trông giống như họ nên làm việc, nhưng tôi đã nhận ra lỗi Invalid Graphic format khi tôi cố gắng tải một png vào speedbutton Png. Lưu ý rằng thành phần danh sách hình ảnh Png không có vấn đề như vậy. Có vẻ như cxLibrary (một gói phát triển nhanh) đang phá vỡ mọi thứ. Khi tôi đã xóa tất cả nội dung của nhà phát triển, vấn đề này sẽ biến mất. Vì vậy, mặc dù tôi đã chọn Pngcomponents làm câu trả lời, nếu bạn đã cài đặt công cụ devex, hãy sử dụng các nút của chúng thay vào đó chứ không phải pngcomponents.

enter image description here

+1

Nếu bạn không muốn đặt hình ảnh trong dfm thì đừng tải chúng dưới dạng tài nguyên. Đây là cách tiếp cận hợp lý duy nhất trong quan điểm của tôi. Nếu bạn đặt tài sản của bạn trong các tập tin dfm sau đó bạn mất khả năng giữ tài sản trong kiểm soát sửa đổi. –

+1

Tại sao bạn không đặt PNG của mình vào tệp .ico và tải chúng vào danh sách hình ảnh khi chạy? –

+0

P.S. Hy vọng công việc mới đang làm việc cho bạn! –

Trả lời

11

Bạn có thể có một cái nhìn tại PngComponents. Nó có một TPngSpeedbutton và một số điều khiển khác làm việc trực tiếp với PngImages.

+0

Cảm ơn. Có vẻ tốt! Tôi nghĩ rằng tôi đã nghe nói về họ trước nhưng chưa bao giờ kiểm tra chúng ra. –

+1

Tôi gặp sự cố khi tải tệp .PNG để tải tại thời gian designtime với PngComponents và theo dõi nó thành gói Designtime cũ RXLIB mà tôi đã xóa. Bây giờ tôi nhận được ngoại lệ định dạng đồ họa không hợp lệ: [2108C8A0] {designide150.bpl} PicEdit.TGraphicProperty.Edit (Dòng 272, "PicEdit.pas" + 10) + $ 12 –

+0

xác nhận. Nhà phát triển Express cxLibraryD15 phá vỡ PngComponents. Loại bỏ các công cụ devex từ ide của tôi (chúng tôi không sử dụng nó nữa) và không có vấn đề gì. nhưng vì nhiều người sử dụng nó, tôi để lại lời nhắn ở trên trong câu hỏi. Có vẻ như nếu bạn sử dụng các thành phần phát triển nhanh, giải pháp dễ nhất là cxButton của riêng họ. –

2

Bạn cũng có thể xem xét thành phần phần mềm TMS được gọi là TAdvGlowButton vì điều này hỗ trợ hình ảnh PNG có độ trong suốt alpha.

Link to site...

+0

Tôi đã sử dụng nút này và nó khá đẹp! Các công cụ TMS khá tuyệt vời nói chung. –

2

Nó chỉ ra rằng cxButton mà đến trong Developer Express VCL gói phần cũng hỗ trợ nút PNG.

+0

Ngoài ra, nó chỉ ra rằng các công cụ phát triển nhanh tại PngComponents là loại trừ lẫn nhau. Chọn một. –

Các vấn đề liên quan