Прозрачное изображение PNG (с TImageList) в TMainMenu
Я хочу загрузить PNG с прозрачным фоном в TImageList и использовать его в TMainMenu (через TAction).
Однако в Delphi фон просто черный. Поддержка PNG реализована только наполовину в Delphi?
Этот парень говорит, что это сработало для него, но с кнопкой вместо главного меню.
Моя настройка:
- Мое изображение - 8 бит на цвет плюс 8 бит для канала прозрачности (я пробовал также 1 бит для прозрачности, но до сих пор не работает). Изображение выглядит отлично в любой другой программе.
- Delphi XE.
- В редакторе TImageList "прозрачный цвет" и "цвет заливки" установлены на "по умолчанию" и отключены.
ОСТОРОЖНО НЕОПРЕДЕЛЕННОГО ПОВЕДЕНИЯ:
DELPHI ПОТЕРЯЕТ ВСЕ ИЗОБРАЖЕНИЯ (В ПОЛНОЙ ФОРМЕ НЕ ТОЛЬКО В TIMAGELIST), когда пользователь изменяет значение свойства ColorDepth.
Ошибка может быть воспроизведена по требованию. Потерянные изображения могут быть восстановлены из предыдущего файла DFM из папки "histoy".
Ответы
Ответ 1
Вот решение: http://www.aha-soft.com/faq/delphi-imagelist-png.htm
БУДЬТЕ ОСТОРОЖНЫ: это приведет к удалению (без какого-либо добавления всех изображений из вашего TImageList), поэтому решение будет доступно только для тех, у которых загружено всего несколько изображений. BACKUP YOUR изображения и ваш файл DFM также.
В моем случае у меня есть более 100, поэтому для меня не очень продуктивно экспортировать все изображения по одному и загружать их в том же порядке.
Итак, вывод заключается в том, что Delphi XE еще не готов работать с прозрачными файлами PNG (в TImageList). Я лучше вернусь к своей старой сторонней библиотеке PNG или просто использую простые изображения BMP.
Обновление:
И вот как это сделать в Delphi 7:
http://www.ic0de.org/showthread.php?10477-TUT-Working-with-delphi-s-imagelist-and-transparency
Ответ 2
Нет причин для резервного копирования всего файла DFM.
Прежде чем что-то делать с ImageList
, вы должны экспортировать свои изображения: нажмите кнопку "Экспорт" в редакторе списка изображений и сохраните все изображения в одном файле .BMP
.
После изменения свойств: ColorDepth = cd32Bit, DrawingStyle = dsTransparent
Вы должны нажать кнопку "Добавить" и выбрать файл, который вы ранее экспортировали. Затем изображения будут нарисованы с прозрачностью в меню и панелях инструментов (по крайней мере на D2010)... Не нужно использовать сторонние компоненты.
Ответ 3
Я использовал TPngComponents с Delphi 7. Это обеспечивает очень хорошую поддержку png для большинства компонентов delphi для сборки/третьих сторон. Embarcadero приобрел еще один хорошо известный компонент Open PNG Support Support, известный как TPngImage, и встроенный графический интерфейс Delphi в более поздних версиях Delphi. Поэтому, когда я перешел на Delphi 2010, я думаю, что у Delphi появилась собственная поддержка и протестировать встроенную поддержку, но обнаружил, что альфа-поддержка недостаточно хороша.
Итак, я снова использовал TPngComponents, и у него была лучшая поддержка большинства компонентов, включая главное меню. Я думаю, что пакет должен использоваться для DXE с ограниченной модификацией.
edit: Спасибо за Uwe Raabe за то, что он указал, что Codegear (теперь Embarcadero) был другим компонентом TPngImage, а не TPngComponent.