Как сделать стандартные цвета в Delphi светлее или темнее
Показаны принципы получения из обычного цвета более тёмный или более светлый. Итак, немного теории: Каждый из трёх основных цветов (Красный,Зелёный,Синий) могут иметь значение от 0 до 255, соответственно скомбинировав их мы можем получить 16,777,216 возможных цветов. Визуально это можно предствить как три оси куба, в котором направления x, y и z отвечают за цвета красный, зелёный и синий. В сочетании эти направления дают точку в кубе, представляющую один цвет из 16 миллионов. Точка куба, в которой значение равняется 0 (0,0,0) соответствует чёрному цвету, значение (255,255,255) - белому цвету, (255,0,0) - чисто красному, и т.д.
Если визуально провести линию между каким-либо цветом (r,g,b) и белым цветом (255,255,255), то получится, что на этой линии будут лежать все значения данного цвета (r,g,b). Если мы будем двигаться по линии в сторону белого цвета, то яркость будет увеличиваться
до тех пор пока не получим чисто белый цвет.
То же самое можно сделать и для уменьшения яркости цвета. Достаточно провести линию из цвета (r,g,b) в чёрный (0,0,0). То есть при движении по линии к чёрному цвету мы будем уменьшать яркость до тех пор, пока не получим чёрный цвет.
Функция "Darker" возвращает новое значение цвета, которое будет на сколько-то процентов темнее. Естевственно, что при 100% мы получим чёрный цвет. Функция "Lighter" возвращает цвет, который светлее на сколько-то процентов исходного. 100% - белый цвет.
Функции Darker и Lighter требуют 2 параметра и используются примерно так: Panel1.Color := Darker(clBlue,20); Получется панель цветов, которая на 20% темнее обычного синего цвета.
Теперь давайте посмотрим, как выглядят внутри наши функции:
function Darker(Color:TColor; Percent:Byte):TColor; var
r,g,b:Byte; begin Color:=ColorToRGB(Color); r:=GetRValue(Color); g:=GetGValue(Color); b:=GetBValue(Color); r:=r-muldiv(r,Percent,100); //процент% уменьшения яркости g:=g-muldiv(g,Percent,100); b:=b-muldiv(b,Percent,100); result:=RGB(r,g,b); end;
function Lighter(Color:TColor; Percent:Byte):TColor; var r,g,b:Byte; begin Color:=ColorToRGB(Color); r:=GetRValue(Color); g:=GetGValue(Color); b:=GetBValue(Color); r:=r+muldiv(255-r,Percent,100); //процент% увеличения яркости g:=g+muldiv(255-g,Percent,100); b:=b+muldiv(255-b,Percent,100); result:=RGB(r,g,b); end;
Так же я добавил некоторые функции, в которых уже добавлены тандартные значения процентов. Это для тех, кому некогда задумываться над процентами
:)
Panel1.Color := Light(clBlue); Panel1.Color := SlightlyDark(clRed); Panel1.Color := VeryLight(clMagenta); etc.
function SlightlyDark(Color:TColor):TColor; begin Result := Darker(Color,25); end;
function Dark(Color:TColor):TColor; begin Result := Darker(Color,50); end;
function VeryDark(Color:TColor):TColor; begin Result := Darker(Color,75); end;
function SlightlyLight(Color:TColor):TColor; begin Result := Lighter(Color,25); end;
function Light(Color:TColor):TColor; begin Result := Lighter(Color,50); end;
function VeryLight(Color:TColor):TColor; begin Result := Lighter(Color,75); end;
ЛОВИМ БАГИ или ПОЧЕМУ ПРОГРАММЫ ДОПУСКАЮТ "НЕДОПУСТИМЫЕ ОПЕРАЦИИ"
Ошибки - неизбежное зло программирования. Видимо пока трудно даже представить средство с помощью которого можно избавится от них. Человеку, которые выдумает это чудодейственное лекарство, благодарные потомки-программисты, несомненно, воздвигнут памятник. Пока же остается лишь заниматься обычным делом: ловлей багов.
Экстремальное программирование
Эта книга об экстремальном программировании. Экстремальное программирование, часто обозначаемое аббревиатурой «XP» — это упрощенная методика организации производства для небольших и средних по размеру команд разработчиков, занимающихся разработкой программного продукта в условиях неясных или быстро меняющихся требований. Данная книга предназначена для того, чтобы помочь вам определить, оправдано применение XP в вашей ситуации или нет.
Автор: Kent Beck
Хокку дня
Все тот же бренный мир, Пьянея, плачу В сумерках осенних.
Афоризмы
Знание - сила, всезнание - слабость....
Фраза дня
Лучше плохо, чем никогда.
Дурацкие законы (информация предоставлена сайтом kurilka.com)
Во Флориде (США) если вы оставите слона на улице на месте, предназначенном для парковки, вам придется платить за него как за запаркованный автомобиль.
В городе Кейп Корал (США) особым постановлением запрещено сушить белье на веревках.
И на закуску коротенький анекдот
Вслед за водкой и проституток обложили таким высоким налогом, что бедняжки вынуждены продавать себя ниже себестоимости!