HintColor
похож на некоторые другие * свойства цвета в VCL в том, что если вы запускаете тематическое приложение в тематической ОС, они могут игнорироваться при рисовании элемента управления. Советы немного отличаются, потому что для них это Vista или выше, а не XP или выше. Вы можете увидеть это, если посмотрите на THintWindow.Paint
в Controls.pas
- он специально раскрашивает градиентный фон Vista, если это Vista и если темы включены.
Обычно это хорошая вещь , потому что вы хотите, чтобы ваше приложение соответствовало внешнему виду операционной системы и предпочтениям пользователя.
Если вы действительно хотите переопределить это, вам необходимо:
- Подкласс
THintWindow
- Заставьте ваше приложение использовать этот новый класс подсказок при отображении подсказок
- В этом классе переопределите методы рисования так, как вы хотите
Создайте новый класс подсказок, нисходящий с THintWindow
куда-то (подробнее о том, что реализовать ниже.) Чтобы приложение использовало ваш новый класс для подсказок, назначьте обработчик событий для TApplication.OnShowHint
( самым простым способом). сделать это с помощью компонента TApplicationEvents
в главной форме ) и изменить поле параметра HintInfo
на свой новый класс .
В вашем новом классе подсказок вам нужно переопределить Paint
и NCPaint
. NCPaint
закрасит границу, и вы захотите закрасить не-тематическую границу (вероятно, используя DrawEdge
.) Измените Paint
, чтобы заполнить фон выбранным цветом, а затем Нарисуйте текст, используя DrawText
в прямоугольнике подсказки с соответствующими флагами обтекания и выравнивания текста. Если вы внимательно посмотрите на код VCL, вы увидите несколько смещений прямоугольника, жестко запрограммированных, и вы, вероятно, захотите имитировать их, чтобы получить те же прямоугольники в вашем коде, что и VCL.
Используя эту технику, вы можете создавать всевозможные интересные варианты подсказок. Один из них, который я недавно сделал, изменил картину, так что он нарисовал жирный заголовок, а затем имел другую информацию, например.
Наконец: почему вы устанавливаете цвет? Это предупредить пользователя о чем-то или предоставить какой-то другой отзыв? Если это так, рассмотрите возможность использования большего, чем цвет - вы можете изменить все, что вы хотите о подсказке, используя эту технику. Попробуйте нарисовать значок предупреждения или использовать вместо этого форматированный текст. Я бы порекомендовал вам попытаться сохранить общий вид темы и настроить код на тематическую картину, не переопределяя ее полностью, потому что, если нет очень веских причин, вам следует стараться придерживаться ОС / внешнего вида, выбранных пользователем.