Прозрачное изображение PNG (с TImageList) в TMainMenu - PullRequest
13 голосов
/ 13 августа 2011

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

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

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

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

ВНИМАНИЕ НЕОЖИДАННОГО ПОВЕДЕНИЯ:

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

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

Ответы [ 3 ]

12 голосов
/ 13 августа 2011

Нет причин делать резервную копию всего файла DFM.

Прежде чем что-то делать с ImageList, вы должны экспортировать свои изображения: нажмите кнопку «Экспорт» в редакторе списка изображений, и все изображения будут сохранены водин .BMP файл.

После изменения свойств: ColorDepth = cd32Bit, DrawingStyle = dsTransparent

Необходимо нажать кнопку «Добавить» и выбрать файл, который вы ранее экспортировали.Затем изображения будут отображаться с прозрачностью в меню и на панелях инструментов (как минимум на D2010) ... Нет необходимости использовать сторонние компоненты.

6 голосов
/ 13 августа 2011

Я использовал TPngComponents начиная с Delphi 7. Это обеспечивает очень хорошую поддержку png для большинства встроенных / сторонних компонентов delphi.Embarcadero приобрел еще один хорошо известный компонент поддержки PNG с открытым исходным кодом, известный как TPngImage, и встроен в собственную графическую поддержку Delphi в более поздних версиях Delphi.Поэтому, когда я перешел на Delphi 2010, я думаю, что Delphi теперь имеет нативную поддержку и тестирует нативную поддержку, но обнаружил, что альфа-поддержка недостаточно хороша.

Поэтому я снова использовал эти TPngComponents, и это было лучшеподдержка большинства компонентов, включая главное меню .Я думаю, что этот пакет должен быть пригоден для DXE с ограниченной модификацией.

edit: Спасибо Уве Раабе за то, что он указал на купленный продукт Codegear (теперь Embarcadero), который был другим компонентом TPngImage, а не TPngComponent.

5 голосов
/ 13 августа 2011

Вот решение: http://www.aha -soft.com / faq / delphi-imagelist-png.htm
БУДЬТЕ ОСТОРОЖНЫ: это удалит (без какого-либо дополнительного уведомления все изображения из вашего TImageList) так что решение только для тех, у которых загружено только несколько изображений.Создайте резервную копию ваших изображений и вашего файла 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

...