Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизКак по цвету фона задать цвет текста? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c