Подтвердить что ты не робот

Прозрачное изображение PNG (с TImageList) в TMainMenu

Я хочу загрузить PNG с прозрачным фоном в TImageList и использовать его в TMainMenu (через TAction).
Однако в Delphi фон просто черный. Поддержка PNG реализована только наполовину в Delphi?

Этот парень говорит, что это сработало для него, но с кнопкой вместо главного меню.

Моя настройка:

  • Мое изображение - 8 бит на цвет плюс 8 бит для канала прозрачности (я пробовал также 1 бит для прозрачности, но до сих пор не работает). Изображение выглядит отлично в любой другой программе.
  • Delphi XE.
  • В редакторе TImageList "прозрачный цвет" и "цвет заливки" установлены на "по умолчанию" и отключены.

ОСТОРОЖНО НЕОПРЕДЕЛЕННОГО ПОВЕДЕНИЯ:

DELPHI ПОТЕРЯЕТ ВСЕ ИЗОБРАЖЕНИЯ (В ПОЛНОЙ ФОРМЕ НЕ ТОЛЬКО В TIMAGELIST), когда пользователь изменяет значение свойства ColorDepth.

Ошибка может быть воспроизведена по требованию. Потерянные изображения могут быть восстановлены из предыдущего файла DFM из папки "histoy".

4b9b3361

Ответ 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.