Как сделать стандартные цвета в 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,Pe
rcent,100); //процент% уменьшения яркости g!
:=g-muld
iv(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;
«DELPHI в примерах для начинающих» - Пособие по написанию компонентов на Дельфи
когда я очень хотел написать свой первый компонент, я прочитал две книги, и у меня ничего интересного собственно не вышло. Потом я прочитал еще одну книгу (в ней хотя бы пример рабочий был), вроде разобрался. Но там был разобран такой простой компонент, что все более сложное мне приходилось делать самому, иногда методом тыка, иногда сидел разбирался и так далее. Результат - разобрался, чего и вам желаю и надеюсь помочь этим пособием...
Технологии передачи данных. 7-е изд.
В книге рассматриваются современные технологии передачи данных и перспективы их развития. Освещаются основные аспекты передачи информации, от структуры сетей до безопасности их использования. Представлены технологии, позволяющие существенно улучшить качество работы отдельных пользователей, а также корпораций и государственных учреждений. Издание содержит подробные сведения, необходимые для понимания функционирования различных систем передачи данных — от кабельных сетей до беспроводных спутниковых систем. Книга предназначена как профессионалам в области систем коммуникации, так и студентам технических специальностей.
Автор: Хелд Г.
Опрос населения :)
Новый журнал для программистов "RSDN Magazine". Ваше мнение, нужен ли он вообще?
Хокку дня
Соевым соусом морду намажу Сяду в кусты у дороги Чем я не нинзя?
Афоризмы
Хвост у человека отпал, а необходимость им вилять осталась.
Фраза дня
Естественный отбор денег
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В гроде Литтл Рок в Арканзасе (США) запрещается выгуливать коров на главной улице после часа дня в воскресенье .
В Нью Хемпшире (США) считается преступлением вписыватся в отель под чужим именем.
И на закуску коротенький анекдот
- Здесь выдают зарплату? Моя фамилия - Итого! - Нет, здесь собирают налоги... Как, вы говорите, ваша фамилия?