Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Инверсный цвет


Автор: amt 18.3.2008, 21:02
Help, please!
Вопрос такой:
Если у контрола меняется цвет BackColor, то нужно сделать чтобы его ForeColor стал инверсным.
Заранее благодарен.

Автор: Akina 18.3.2008, 21:42
А в чем проблема? изменить цвет? посчитать какой именно? отловить момент изменения? что-то еще?

Автор: amt 18.3.2008, 21:53
Например у label Backcolor задали =1234  а его ForeColor нужно установить инверсным (синий - жельый; красный - зелёный...)
Т.е. как просчитать цвет инверсный тому, который задал пользователь? smile 

Автор: I_Am_Rock 18.3.2008, 22:01
Сейчас попробую код нацарапать...)

Автор: I_Am_Rock 18.3.2008, 22:27
См. в архив...

Автор: Akina 19.3.2008, 00:33
Чисто формально дополнительный цвет считается так:
Код
Control.ForeColor = Not (Control.BackColor) And &HFFFFFF
А вот что такое инверсный цвет... попробую завтра помучить поиск.

Автор: amt 19.3.2008, 09:34
I_Am_Rock 
Спасибо, я предполагал именно такой фариант. Тебе +
Но есть такая проблема.
Когда пользователь поменяет цвет я могу узнать его числовое значение. А как это число перевести в RGB?

Автор: amt 19.3.2008, 10:13
Всем спасибо, сам разобрался. smile 
Допустим  пользователь поменял цвет BackColor у лейбла. Определяем его значение, например 123456. Тогда инверсным будет 16777215-123456 (16777215 - соответствует RGB(255,255,255)). 
Думаю тему можно закрыть. smile 

Автор: Akina 19.3.2008, 11:22
Цитата(amt @  19.3.2008,  11:13 Найти цитируемый пост)
Думаю тему можно закрыть.

Это зависит от того, зачем тебе собсно нужен инверсный цвет... а то пара инверсных &H808080 и &H7F7F7F очень красиво смотрятся один по другому...  smile 

И еще одна мелочь. Если юзер задал цвет, например, Label.BackColor=123456 - как ты думаешь, какое значение будет у Label.BackColor? 123456? как бы ни так...

Автор: amt 20.3.2008, 09:09
Цитата

И еще одна мелочь. Если юзер задал цвет, например, Label.BackColor=123456 - как ты думаешь, какое значение будет у Label.BackColor? 123456? как бы ни так... 


Суть в том что юзер задает цвет не с клавы, а выбирает его в окне ShowColor компонента CommonDialog. А затем я уже программно определяю код цвета CommonDialog.Color. Этот цвет присваивается компоненту Label.BackColor, а  LabelForeColor я определяю так, как указал выше.

Автор: Akina 20.3.2008, 09:32
Цитата(amt @  20.3.2008,  10:09 Найти цитируемый пост)
Суть в том что 

Суть как раз в том, что в xxxColor используется младшие 24 бита, а значения старших 8 задаются VB по какому-то своему достаточно хитрому и совершенно непонятному алгоритму. Посему использование АРИФМЕТИЧЕСКИХ операторов не всегда будет давать те результаты, которые ожидаешь. Следует использовать битовые операции. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)