Управление кнопкой и базовая замена TBitmap, которая должным образом обрабатывает прозрачность PNG без написания кода предварительной замены

Delphi 2010 TSpeedButtons, похоже, действительно не поддерживает прозрачность PNG, потому что свойство Glyph использует TBitmap внутри, а TBitmap - для растровых изображений и не поддерживает прозрачность PNG должным образом, а TSpeedButton.Glyph не может поддерживать прозрачность, тогда.. update: Но фактическая проблема заключалась в том, что у меня были некоторые внешние компоненты (компоненты Developer Express), которые предоставляли поддержку Delphi PNG нефункционально, TImage, с другой стороны, в то время как он все еще TPicture и может поддерживать PNG, был также затронутый этой ошибкой Express Express.

Вопрос уже был задан здесь, и ответ показывает, как использовать предварительное смешивание, чтобы прозрачность не превращалась в черные пиксели. Я хочу знать, есть ли еще один кнопочный элемент управления, который будет использовать альфа-смешанные PNG, загруженные во время разработки, и который не преобразует ресурсы PNG в формат BMP, отбрасывая альфа-канал, и вызывая черную рамку, показанную здесь.

Короче говоря, этот элемент управления не будет использовать TBitmap и не будет использовать функцию прозрачности ключевого ключа, которая имеет все TBitmap.

Повторяю, я не спрашиваю, как решить проблему "черный вокруг", все еще использую устаревшую функциональность VCL TBitmap/TSpeedButton, потому что ей не хватает современной функции прозрачности PNG, я спрашиваю о заменив его чем-то другим, что "просто работает".

Как второстепенный недостаток, преобразование небольшого .png файла в ресурс bitmap.DFM существенно расходует пространство и делает мою форму .DFM-содержимым слишком большой. Встроенное хранилище форматов .png в формате .dfm должно сделать результирующие формы меньше.

enter image description here

Обновление: PngComponents выглядят так, как будто они должны работать, но при попытке загрузить png в скоростную кнопку Png я получил ошибку Invalid Graphic format. Обратите внимание, что компонент списка изображений Png не имеет таких проблем. Кажется, что cxLibrary (экспресс-пакет разработчика) ломает ситуацию. Как только я удалил весь материал для разработчиков, эта проблема уходит. Поэтому, хотя я выбрал Pngcomponents в качестве ответа, если у вас установлен devex, используйте вместо них свои кнопки, а не pngcomponents.

enter image description here

Ответы

Ответ 1

Вы можете взглянуть на PngComponents. У него есть TPngSpeedbutton и некоторые другие элементы управления, работающие непосредственно с PngImages.

Ответ 2

Вы также можете посмотреть компонент программного обеспечения TMS, называемый TAdvGlowButton, поскольку это поддерживает изображения PNG с альфа-прозрачностью.

Ссылка на сайт...

Ответ 3

Оказывается, что cxButton, входящий в пакет компонентов Developer Express VCL, также поддерживает кнопки PNG.