При использовании стилей растровые изображения списков изображений на панелях инструментов неожиданно маскируются

Описание:

Я использую PNG-загруженные списки изображений, чтобы позволить прозрачность в моем меню и кнопках скорости. Также используя темы времени выполнения, чтобы позволить пользователю определить опыт GUI.

Если стиль не выбран, то есть стиль "Windows", для моей панели инструментов создаются хорошие маски, и все работает как положено. Однако, когда я активирую стиль (независимо от того, какой именно), выполняется очень странный рендеринг масок, когда некоторые кнопки кажутся пустыми (первая и предыдущая кнопки), когда они отключены, а некоторые (кнопки отправки и отмены) действительно отображаются минимальная маска исходного изображения.

Исследование: я создал приложение для тестирования в стиле VCL и пытаюсь выяснить, как именно проходит процесс рисования, в VCL. Мое исследование SO пришло с этой более или менее связанной темой, но id dint действительно помогает обойти мою проблему.

Тем временем я могу вообразить, что кто-то еще вмешался в это и может указать мне в правильном направлении.

Вопрос:

Я ищу способ, чтобы эти маски отображались правильно или автоматически генерировались (например, по этой ссылке), что позволяет работать так, как ожидается, даже при использовании стилей VCL. Это может быть сделано путем автоматического создания масок в моих списках изображений или, предпочтительно, путем изменения поведения, которое генерирует маски для стилей пользовательского рисунка.

Стандартный стиль отлично показывает панель инструментов: Стандартный стиль показывает панель инструментов отлично

Используя собственный стиль, нет изображений на кнопках: используя пользовательский стиль, нет изображений на кнопках

Еще один нестандартный стиль, и вы даже пропустите кнопки Еще один нестандартный стиль, и вы даже пропустите кнопки

Кстати: "Не используйте стили" не будет ответом, который я ищу.

1 ответ

Решение

Ну, как оказалось, есть недокументированное свойство Vcl.Controls.TImageList.GrayscaleFactor

Если там есть что-то, кроме 0, изображения будут отображаться серым способом правильно при использовании стилей.

Фактор градаций серого, по-видимому, влияет на "темноту" полученных отключенных кнопок. Значение по умолчанию равно 0, что приводит к поведению в вопросе выше. Grayscalefactor, кажется, не имеет никакого эффекта, если не активна ни одна тема во время выполнения.

Лично мне бы понравилось, если бы GrayscaleFactor также влиял на прозрачность, чтобы кнопки выглядели более "призрачными", а не "серыми". Серый может не работать во всех темах... представьте себе "серую" тему:)

Ниже эффект TImageList.Grayscalefactor на windows 10 синяя тема.

GrayScaleFactor = 1 GrayScaleFactor = 1

GrayScaleFactor = 128 GrayScaleFactor = 128

GrayScaleFactor = 255 (максимально допустимое значение) GrayScaleFactor = 255 (максимально допустимое значение

Другие вопросы по тегам