Диалоги выбора цвета – компоненты ColorDialog, ColorBox
1.Начните новое приложение, перенесите на форму компоненты ColorDialog1, MainMenu1и Memo1. В свойство Caption формы впишите ДИАЛОГ COLORDIALOG.
Компонент ColorDialog1 вызывает диалоговое окно выбора цвета, в котором пользователь может выбрать цвет из базовой палитры или, нажав кнопку Определить цвет, раскрыть дополнительную панель, позволяющую синтезировать цвет, отличный от базовых. Синтез цвета производится перемещением курсора по горизонтали для выбора оттенка и по вертикали для выбора контрастности. Яркость регулируется перемещением по вертикальной шкале справа от матрицы цветов. Синтезированный цвет можно добавить кнопкой Добавить в набор в палитру дополнительных цветов на левой панели и использовать его в дальнейшем.
Основное свойство компонента ColorDialog1 – Color. Это свойство соответствует тому цвету, который выбрал в диалоге пользователь. Если при вызове диалога желательно установить некоторое начальное приближение цвета, это можно сделать, установив Color предварительно во время проектирования или программно.
2.Сконструируйте меню с командой Цвет, в обработчик которой впишите оператор задания цвета фона компонента Memo1:
if(ColorDialog1->Execute())
Memo1->Color = ColorDialog1->Color;
Установите произвольное значение свойства Color, запустите приложение на выполнение. После ввода команды Цвет появится диалоговое окно выбора цвета, в котором нажмите OK. Цвет фона Memo1совпадет с установленным в свойстве Color цветом.
3.Свойство CustomColors типа TStrings позволяет задать заказные цвета дополнительной палитры или прочитать заказной цвет, сформированный пользователем в диалоге. Каждый цвет определяется строкой вида
<Имя цвета>=<шестнадцатеричное представление цвета>;
Имена цветов задаются отColorA (первый цвет) до ColorP (шестнадцатый, последний). Значение цвета задается в виде 4-байтового шестнадцатерич-ного числа, три младших разряда которого представляют собой интенсивности красного, зеленого и синего цветов в формате RGB. Например, значение 0x00FF0000 соответствует чистому синему цвету, 0x0000FF00 – чистому зеленому, 0x000000FF – чистому красному. 0x00000000 – черный цвет, 0x00FFFFFF – белый. Если старший байт равен нулю (00), то берется ближайший к заданному цвет из системной палитры. Если старший байт равен единице (01), то берется ближайший к заданному цвет из текущей палитры. Если старший байт равен двум (02), то берется ближайший к заданному цвет из логической палитры контекста данного устройства.
Нажав кнопку с многоточием в свойстве CustomColors, вызовите редактор строки списка, в окно которого поместите строки
ColorA=0000FF
ColorD=00FF00
ColorP=FF0000
ColorF=808022
и нажмите кнопку OK. Запустите приложение на выполнение. По команде Цвет появится окно выбора цвета с четырьмя дополнительными цветами. Выбранный цвет задаст цвет фона Memo1. Убедитесь в этом.
4.Выполняйте приложение, задавая в окне Цвет основные и дополнительные цвета.
Свойство Options компонента ColorDialog1 содержит множество следующих опций:
cdFullOpen | Отображать сразу при открытии диалогового окна панели определения заказных цветов |
cdPreventFullOpen | Запретить появление в диалоговом окне кнопки Определить цвет, так что пользователь не сможет определять новые цвета |
cdShowHelp | Добавить в диалоговое окно кнопку Справка |
cdSolidColor | Указать Windows использовать сплошной цвет, ближайший к выбранному (это обедняет палитру) |
cdAnyColor | Разрешить пользователю выбирать любые не сплош-ные цвета (такие цвета могут быть не ровными) |
По умолчанию все опции выключены.
Рассмотренный компонент ColorDialogвызывает стандартный диалог Windows, возможности которого зачастую избыточны. Пользователю удобнее выбирать цвет с помощью выпадающего списка. Такую возможность предоставляет компонент ColorBox (страница Дополнительно).
5.Перенесите на форму компонент ColorBoxи ознакомьтесь с его свойствами.
Свойство Style является множеством, элементы которого определяют, какие именно категории цвета представлены в списке. Элементы множества означают следующее:
cbStandardColors | 16 стандартных цветов типа clRed, clBlack и т.п. |
cbExtendedColors | Набор дополнительных цветов clMoneyGreen, clSkyBlue, clCream, clMedGray |
cbSystemColors | Системные цвета, установленные в Windows |
cbIncludeNone | Список включает в себя строку «clNone». Какой именно цвет будет отображаться в квадратике этой строки, опре-деляется свойством NoneColorColorкомпонента Color-Box, а истинный цвет определяется компонентом, вос-принимающим этот цвет. Эта опция влияет только при включенной опции cbSystemColors |
cbIncludeDefault | Список включает в себя строку «clDefault» – цвет по умолчанию. Какой именно цвет будет отображаться в квадратике этой строки, определяется свойством DefaultColorColor компонента ColorBox, а истинный цвет определяется компонентом, воспринимающим этот цвет. Эта опция влияет только при включенной опции cbSystemColors |
cbCustomColor | Первой строкой в списке появляется «Custom…». При выборе пользователем этой строки открывается диалоговое окно выбора цвета, в котором пользователь может определить заказной (нестандартный) цвет |
cbPrettyNames | Строки в списке обозначают цвета, а не их имена: например, «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 является индексированным массивом цветов в списке (индексы начинаются с нуля). Свойство ColorNames – аналогичный массив строк с именами цветов.
Большинство остальных свойств, методов, событий компонента ColorBox подобны компоненту ComboBox. В частности, список всех строк содержится в свойстве Items типа TStrings. Индекс строки цвета, которая будет показана пользователю в момент начала выполнения приложения, определяется свойством только времени выполнения ItemIndex. Чтобы в первый момент показать пользователю определенный цвет, в обработчике события формы OnCreate определяют ItemIndexс помощью метода IndexOf. Например, следующий оператор в первый момент показывает пользователю строку «clDefault»:
ColorBox1->ItemIndex = ColorBox1->Items->IndexOf(“clDefault”);
6.Приведенные выше операторы поместите в обработчики соответствующих событий. Запустите приложение на выполнение. Убедившись в работоспособности приложения, изучите свойство Styleпутем выполнения приложения при включении каждого элемента свойства.