Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

Как по цвету фона задать цвет текста?   Найти похожие ветки 

 
Aleksandr ©   (2003-06-17 15:10) [0]

В программе пользователь может самостоятельно задавать цвет фона для некоторых объектов. Но проблема в том, что если цвет фона он задаст темный, то надо как-то откорректировать цвет фонта текста на этом фоне.
Насколько я понимаю, из цвета надо выделить R,G, и B и сравнить их на предмет больше, например, 127, и, если какой-то больше, то задавать цвет текста светлый. Только как это сделать? Посмотрел на ColorToRGB - ничего не понял, чего она возвращает.


 
Юрий Федоров ©   (2003-06-17 15:16) [1]

ИМХО, если ты даешь пользователю менять цвет фона - давай менять и цвет текста, выберет черный на синем - сам виноват.
ColorToRGB возвращает TColorRef, из которого можно получать составляющие вызовом GetRValue, GetGValue, GetBValue


 
Aleksandr ©   (2003-06-17 15:48) [2]

Сударь, если Вы профессионально занимаетесь программированием, то должны понимать, что такое техническое задание. Оно, как правило, не обсуждается, а выполняется.
Ладно, вычленил я синий, красный и зеленый, а как теперь определить зависимость - какие их значения означают темный цвет, а какие - светлый?


 
jel ©   (2003-06-17 16:00) [3]

Ну а если попробовать эти значения инвертировать? Возможно не всегда красиво получится, но по идее должно быть читабельно.


 
Юрий Федоров ©   (2003-06-17 16:07) [4]

jel © (17.06.03 16:00)
Если инвертировать, то засада поджидает на сером цвете.
Aleksandr © (17.06.03 15:48)
(0,0,0) - черный
(255,255,255) - белый


 
Aleksandr ©   (2003-06-17 16:07) [5]

Инвертировать в смысле? 255-значение?


 
Sandman25 ©   (2003-06-17 16:16) [6]

>Инвертировать в смысле?

not, битовая операция.


 
Aleksandr ©   (2003-06-17 16:16) [7]

Юрий Федоров © :
То есть, чем меньше сумма значений, тем темнее, а чем меньше одно значение, тем светлее?


 
Anatoly Podgoretsky ©   (2003-06-17 16:33) [8]

Перевести в градации серого, а дальше дело техники.


 
clickmaker ©   (2003-06-17 16:35) [9]

Могу предложить рецепт, который я использовал для рисования текста на цветных квадратиках, но там у меня, правда, для текста только черный или белый

if ((byte(Color)>128) or (byte(Color shr 8)>128) or
(byte(Color shr 16)>128))
then Font.Color:=clBlack
else Font.Color:=clWhite;


 
Aleksandr ©   (2003-06-17 16:47) [10]

clickmaker © :
Да мне только два и надо - белый и черный. Я пока смонтировал код вот так:

if ((B>150) AND (R+G<260)) OR (R+G+B<380) then
TPanel(Sender).Font.Color:=clWhite
else
TPanel(Sender).Font.Color:=clBlack;

но не уверен, что методом тыка вычисленные значения так эффектны не только на моем мониторе...


 
dtrn   (2003-06-18 23:25) [11]

Object1.Color:=clColor;
Object1.Font.Color := $00FFFFFF xor Object1.Color;


 
Asteroid ©   (2003-06-19 02:53) [12]

Вычислить серый из цвета объекта (30% красного, 59% зеленого и 11% синего), если он больше или равен $800000 - рисовать текст черным, если меньше - белым


 
Кот Бегемот ©   (2003-06-19 09:14) [13]

А если не секрет ? - для какого рода объектов не хватает виндовых цветов ???



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-97552
rosl
2003-06-07 10:35
2003.06.30
сортировать записи, вставить дату


1-97585
Kostja
2003-06-16 00:04
2003.06.30
Количество дней в месяце


3-97501
Igor Mish
2003-06-05 10:14
2003.06.30
Шрифты в ShowMessage


7-97892
Pitay
2003-04-20 21:08
2003.06.30
LPT -> USB в DOS


14-97815
nick-from
2003-06-10 21:25
2003.06.30
Оптимизация работы Windows