C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Системные цвета, Константы системных цветов
Pirs
Отправлено: 04.01.2004, 21:50


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Системные цвета определены константами, напр clBtnFace,clHightlight и др. А как добраться до их истинных цветов, так как числа которые соответствуют этим константам вовсе не цвета, а наверное индексы в какой-то таблице ?
Nimble
Отправлено: 05.01.2004, 11:09


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Посмотри в ..CBuilder6\include\vcl\Graphics.hpp
Pirs
Отправлено: 06.01.2004, 01:09


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Вот этот кусок:
static const TColor clScrollBar = 0x80000000;
static const TColor clBackground = 0x80000001;
static const TColor clActiveCaption = 0x80000002;
static const TColor clInactiveCaption = 0x80000003;
static const TColor clMenu = 0x80000004;
static const TColor clWindow = 0x80000005;
static const TColor clWindowFrame = 0x80000006;
static const TColor clMenuText = 0x80000007;

А смысл? Все равно это-индексы.
ГДЕ ТАБЛИЦА конкретных цветов по этим индексам ?

Отредактировано Pirs — 06/01/2004, 02:12
LaMiK
Отправлено: 08.01.2004, 00:06


Не зарегистрирован







А ты не ищи индексы... все которые есть, они в CBuilder6\include\vcl\Graphics.hpp biggrin.gif

Попробуй сделать свой цвет из циферок.....

например :
0x0000000 — черный
0x00000FF — красный
0x000FF00 — зеленый
0x0FF0000 — синий

Ну и соотв. их можно комбинировать cool.gif

____________
Respect, LaMiK
fellow
Отправлено: 08.01.2004, 06:05


Дежурный стрелочник

Группа: Участник
Сообщений: 33



Для интерфейсных элементов Windows поддерживает индексную нумерацию из набора предопределённых цветов. Эти цвета составляют цветовую схему оформления Windows. Если открыть свойства экрана, то на соответствующей вкладке можно выбирать другую схему. При этом цвет интерфейса меняется согласованным образом. Приложение может узнать конкретный RGB цвет, соответствующий заданному индексу, с помощью функции GetSysColor. Ей передаётся в качестве параметра индекс того элемента интерфейса, цвет которого нужно узнать например COLOR_WINDOW — цвет окна, и на выходе получают DWORD значение RGB. Для установки цвета интерфейсного элемента используется функция SetSysColors. Подробности по этим функциям смотрите в справке по Win32 или в MSDN.
Pirs
Отправлено: 08.01.2004, 23:40


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Спасибо, это наверное то что надо...
Pirs
Отправлено: 18.01.2004, 00:45


Дежурный стрелочник

Группа: Участник
Сообщений: 39



Функция GetSysColor(int) ничего не дает

Такой код дает всегда 0 нуль:
TColor btnface=GetSysColor(clBtnFace);
TColor graytexy = GetSysColor(clGrayText);
и т.д. по всем константам

Также -1 дает всегда код
HBRUSH btn = GetSysColorBrush (clBtnFace);
и т.д. по всем константам

В общем значения (не индексы) системных цветов самая недоступная часть Windows !!! Ура.
fellow
Отправлено: 18.01.2004, 07:22


Дежурный стрелочник

Группа: Участник
Сообщений: 33



Доступная, просто параметр, который Вы пытаетесь передать, clBtnFace, имеет значение только в ограниченных пределах Borland'овской VCL. Для Windows и её API это полная и абсолютная бессмыслица. Обратитесь к справке по Win32 API, по функции GetSysColor, там перечислены константы системных цветов, которые можно передавать в качестве аргумента. Так, для цвета поверхности кнопки это будет константа COLOR_BTNFACE. Также там сказано, что нулевое возвращаемое значение будет в случае передачи неверного аргумента, и, поскольку нулевое значение является допустимым цветом, следует перед вызовом функции убедиться в правильности аргумента вместо того, чтобы проверять возвращаемое значение.

Вернуться в Вопросы программирования в C++Builder