Компонент ColorDialog вызывает диалоговое окно выбора цвета. В нем пользователь может выбрать цвет из базовой палитры или, нажав кнопку Определить цвет, раскрыть дополнительную панель, позволяющую синтезировать цвет, отличный от базовых. Синтез цвета производится перемещением курсора по горизонтали для выбора оттенка и по вертикали для выбора контрастности. Яркость регулируется перемещением по вертикальной шкале справа от матрицы цветов.
Синтезированный цвет можно добавить кнопкой Добавить в набор в палитру дополнительных цветов на левой панели и использовать его в дальнейшем.
Основное свойство компонента ColorDialog - Color. Это свойство соответствует тому цвету, который выбрал в диалоге пользователь. Если при вызове диалога желательно установить некоторое начальное приближение цвета, это можно сделать, установив Color предварительно во время проектирования или программно.
Свойство CustomColors типа TStrings позволяет задать заказные цвета дополнительной палитры или прочитать заказной цвет, сформированный пользователем в диалоге. Каждый цвет определяется строкой вида:
<Имя цвета>=<шестнадцатеричное представление цвета>;
Имена цветов задаются от ColorA (первый цвет) до ColorP (шестнадцатый, последний). Например, строка:
ColorA-808022
задает первый заказной цвет.
Свойство Options содержит множество следующих опций:
Тип | Значение |
cdFullOpen | Отображать сразу при открытии диалогового окна панели определения заказных цветов. |
cdPreventFullOpen | Запретить появление в диалоговом окне кнопки Определить цвет, так что пользователь не сможет определять новые цвета. |
cdShowHelp | Добавить в диалоговое окно кнопку Справке. |
cdSolidColor | Указать Windows использовать сплошной цвет, ближайший к выбранному (это обедняет палитру). |
cdAnyColor | Разрешать пользователю выбирать любые не сплошные цвета (такие цвета могут быть не ровными). |
По умолчанию все опции выключены.
Приведем пример применения компонента ColorDialog. Если нужно, чтобы пользователь мог задать цвет какого-то объекта, например, цвет фона компонента Memo1, то это можно реализовать оператором:
if(ColorDialog1->Execute())
{
Memo1->Color = ColorDialog1->Color;
}
Рассмотренный компонент ColorDialog вызывает стандартный диалог Windows. Однако нередко его возможности избыточны, и пользователю удобнее выбирать цвет с помощью выпадающего списка, как, например, делается это в окне Инспектора Объектов. Такую возможность предоставляет введенный в C++Builder 6 компонент ColorBox (страница Additional).
Свойство Style является множеством, элементы которого определяют, какие именно категории цвета представлены в списке. Элементы множества означают следующее:
Тип | Значение |
cbStandardColors | 16 стандартных цветов типа clRed, clBlack и т.п. |
cbExtendedColors | Набор дополнительных цветов clMoneyGreen, clSkyBlue, clCream, clMedGray. |
cbSystemColors | Системные цвета, установленные в Windows. |
cbIncludeNone | Список включает в себя строку «clNote». Какой именно цвет будет отображаться в квадратике этой строки, определяется свойством NoneColorColor компонента Color- Box, а истинный цвет определяется компонентом, воспринимающим этот цвет. Эта опция влияет только при включенной опции cbSystemColors. |
cbIncludeDefault | Список включает в себя строку «clDefault» - цвет по умолчанию. Какой именно цвет будет отображаться в квадратике этой строки, определяется свойством DefaultColorColor компонента ColorBox, а истинный цвет определяется компонентом, воспринимающим этот цвет. Эта опция влияет только при включенной опции cbSystemColors. |
aCustomColor | Первой строкой в списке появляется «Custom...». При выборе пользователем этой строки открывается диалог, в котором пользователь может определить заказной (нестандартный) цвет. |
PrettyNames | Строки в списке обозначают цвета, а не их имена: например, «Black», а не «clBlack». |
Как видно из приведенной таблицы, в список, помимо различных цветов, могут включаться строки «clDefault» - цвет компонента по умолчанию, и «clNone» - цвет, зависящий от версии Windows. Это белый цвет для Windows 98 и черный для Windows 2000 XP NT. Если присвоить цвет clDefault какому-то компоненту, то компонент будет рисоваться цветом, который заложен в него по умолчанию. Аналогично, присваивание clNone тоже приведет к тому, что истинный цвет будет определяться самим компонентом.
Свойство DefaultColorColor определяет, квадратиком какого цвета будет помечена в списке строка «clDefault». Свойство NoneColorColor определяет, квадратиком какого цвета будет помечена в списке строка «clNone». При этом, как сказано выше, в действительности присваиваемые цвета будут определяться теми компонентами, в которые они передаются.
Узнать цвет, выбранный пользователем в списке, позволяет свойство Selected. Для этого можно воспользоваться событием компонента OnSelect, наступающим в момент выбора пользователем цвета. Например, оператор:
Memo1->Color = ColorBox1->Selected;
помещенный в обработчик этого события, задаст фону окна Memo1 цвет, выбранный пользователем.
Свойство только времени выполнения Colors является индексированным массивом цветов в списке (индексы начинаются с 0). Свойство ColorNames - аналогичный массив строк с именами цветов.
Большинство остальных свойств, методов, событий компонента ColorBox подобны компоненту ComboBox. В частности, список всех строк содержится в свойстве Items типа TStrings. Индекс строки цвета, которая будет показана пользователю в момент начала выполнения приложения, определяется свойством только времени выполнения ItemIndex. Если желательно в первый момент показать пользователю определенный цвет, это можно сделать в обработчике события формы OnCreate, определив в нем ItemIndex с помощью метода IndexOf. Например, следующий оператор в первый момент показывает пользователю строку «clDefault»:
ColorBox1->ItemIndex = ColorBox1->Items->IndexOf("clDefault");