Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 25.09.04 09:18

Лучшее из нашего FAQ   |x|
Как сделать стандартные цвета в 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;

Автор: Den Bedard

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • KOL-компогенты в VCL-проектах
    Подскажите, пожалуйста, как использовать KOL-компогенты в VCL-проектах. Зарание спасибо...
  • Работа с Word
    Привет Мастерам. Скачал работающии пример работы с Word-ом. Начал перекачивать в своей программе куски, довел до ...
  • DOOM3
    Подскажите как сделать текстуры как в DOOM3, что бы с bumpmaping и specular на GLScene.
  • Синхронизация массивов
    Помогите начинающему программисту! Я программированием занимаюсь около двух месяцев, и зашел в тупик на простой задачке....
  • Включить службу доступа к файлам и принтерам сетей Microsoft
    Как включить службу доступа к файлам и принтерам сетей Microsoft(из моей программы) 1) Если она отключена - включить 2) ...
  • Как спрятать процесс?
    Как спрятать свою программу, чтоб она не отображалась в списке процессов диспечера задачь Windows?
  • Снимок экрана
    Здравствуйте Мастера. Пишу программу, которая передает снимки моего экрана на др. машину по сети и там их отображает (...
У нас большой выбор статей   |x|
«DELPHI в примерах для начинающих» - Пособие по написанию компонентов на Дельфи
когда я очень хотел написать свой первый компонент, я прочитал две книги, и у меня ничего интересного собственно не вышло. Потом я прочитал еще одну книгу (в ней хотя бы пример рабочий был), вроде разобрался. Но там был разобран такой простой компонент, что все более сложное мне приходилось делать самому, иногда методом тыка, иногда сидел разбирался и так далее. Результат - разобрался, чего и вам желаю и надеюсь помочь этим пособием...
Новинки книжного рынка   |x|
Технологии передачи данных. 7-е изд.
В книге рассматриваются современные технологии передачи данных и перспективы их развития. Освещаются основные аспекты передачи информации, от структуры сетей до безопасности их использования. Представлены технологии, позволяющие существенно улучшить качество работы отдельных пользователей, а также корпораций и государственных учреждений. Издание содержит подробные сведения, необходимые для понимания функционирования различных систем передачи данных — от кабельных сетей до беспроводных спутниковых систем. Книга предназначена как профессионалам в области систем коммуникации, так и студентам технических специальностей.
Автор: Хелд Г.
Опрос населения :)
Новый журнал для программистов "RSDN Magazine". Ваше мнение, нужен ли он вообще?
»»» Да
»»» Нет
Для души

Хокку дня
Соевым соусом морду намажу
Сяду в кусты у дороги
Чем я не нинзя?

Афоризмы
Хвост у человека отпал, а необходимость им вилять осталась.

Фраза дня
Естественный отбор денег

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В гроде Литтл Рок в Арканзасе (США) запрещается выгуливать коров на главной улице после часа дня в воскресенье .
В Нью Хемпшире (США) считается преступлением вписыватся в отель под чужим именем.

И на закуску коротенький анекдот
- Здесь выдают зарплату? Моя фамилия - Итого!
- Нет, здесь собирают налоги... Как, вы говорите, ваша фамилия?

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=1382446


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.mdelphi
Отписаться

В избранное