| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 нужно установить инверсным (синий - жельый; красный - зелёный...) Т.е. как просчитать цвет инверсный тому, который задал пользователь? |
| Автор: I_Am_Rock 18.3.2008, 22:01 |
| Сейчас попробую код нацарапать...) |
| Автор: I_Am_Rock 18.3.2008, 22:27 |
| См. в архив... |
| Автор: Akina 19.3.2008, 00:33 | ||
Чисто формально дополнительный цвет считается так:
|
| Автор: amt 19.3.2008, 09:34 |
| I_Am_Rock Спасибо, я предполагал именно такой фариант. Тебе + Но есть такая проблема. Когда пользователь поменяет цвет я могу узнать его числовое значение. А как это число перевести в RGB? |
| Автор: amt 19.3.2008, 10:13 |
| Всем спасибо, сам разобрался. Допустим пользователь поменял цвет BackColor у лейбла. Определяем его значение, например 123456. Тогда инверсным будет 16777215-123456 (16777215 - соответствует RGB(255,255,255)). Думаю тему можно закрыть. |
| Автор: Akina 19.3.2008, 11:22 |
Это зависит от того, зачем тебе собсно нужен инверсный цвет... а то пара инверсных &H808080 и &H7F7F7F очень красиво смотрятся один по другому... И еще одна мелочь. Если юзер задал цвет, например, Label.BackColor=123456 - как ты думаешь, какое значение будет у Label.BackColor? 123456? как бы ни так... |
| Автор: amt 20.3.2008, 09:09 | ||
Суть в том что юзер задает цвет не с клавы, а выбирает его в окне ShowColor компонента CommonDialog. А затем я уже программно определяю код цвета CommonDialog.Color. Этот цвет присваивается компоненту Label.BackColor, а LabelForeColor я определяю так, как указал выше. |
| Автор: Akina 20.3.2008, 09:32 |
Суть как раз в том, что в xxxColor используется младшие 24 бита, а значения старших 8 задаются VB по какому-то своему достаточно хитрому и совершенно непонятному алгоритму. Посему использование АРИФМЕТИЧЕСКИХ операторов не всегда будет давать те результаты, которые ожидаешь. Следует использовать битовые операции. |