Представление цвета в Windows

 

Основной элемент монитора – электронная лучевая трубка. Трубка отображает все цвета спектра на основе сложения трех основных цветов: красного, зеленого и синего (Red, Green и Blue). Модель воспроизведения цвета на основе сложения цветов называется аддитивной. Изменяя пропорции основных цветов, мы получаем все многообразие цветов.

Для представления цвета в Windows применяется 32-разрядное целое число

(LongWord). Младший байт числа содержит значение красного, второй байт – зеленого и третий байт – синего цветов. Старший байт должен быть равен

нулю (рис. 10.2). Величина каждого из трех цветов может изменяться в пределах от 0 до 255, и чем больше значение, тем больше интенсивность соответствующего цвета. В терминах GDI тип данных для представления цвета называется COLORREF. В Delphi для описания цвета реализован аналог COLORREF –тип данных TColor:

 

typeTColor = -$7FFFFFFF-1..$7FFFFFFF;

Для удобства работы с «RGB-цветом» в Windows API предусмотрен ряд макросов. Макрос RGB() преобразует значения интенсивности трех цветов в определенный в Windows тип данных COLORREF (соответствующий двойному слову LongWord):

functionRGB(bRed, bGreen, bBlue : BYTE) : LongWord;

 

Для проверки макроса поместите на форму три компонента TTrackBar. Переименуйте их в tbRed, tbBlue и tbGreen соответственно. Свойствам Max всех компонентов назначьте значение 255. Затем опишите обработчик события OnChange() любого из элементов управления, как показано в примере:

 

procedureTForm1.tbRedChange(Sender: TObject);

Begin

Form1.Color:=RGB(tbRed.Position,tbGreen.Position,tbBlue.Position);

Form1.Caption:=Format('Red=%d Green=%d Blue=%d',

[tbRed.Position,tbGreen.Position,tbBlue.Position]);

end;

 

В заключение сделайте этот обработчик события общим для всех трех ползунков TTrackBar и запустите новый проект. С изменением местоположения ползунка будет изменяться цвет рабочей поверхности формы. Заголовок формы отслеживает текущее значение всех составляющих RGB-цвета. Возможна и обратная операция: извлечение значений цветовых составляющих из полного значения RGB-цвета:

functionGetRValue(lwRGB: LongWord):Byte; // красный

functionGetGValue(lwRGB: LongWord):Byte; // зеленый

functionGetBValue(lwRGB: LongWord):Byte; // синий

 

Цветам, наиболее часто применяемым в Delphi, соответствуют именованные

константы. Их несколько десятков. Например, черному цвету соответствует

константа clBlack, белому – clWhite. Кроме базовых цветов эти константы

способны описывать системные цвета – цвета, которыми будут отображаться рамки окон, тени, кнопки, текст. Например, цвет окна – clWindow, цвет поверхности кнопки – clButtonFace.

 

Перо – класс TPen

 

Класс TPen (Перо) применяется для определения характеристик линий, рисуемых на поверхности холста (любого элемента управления Delphi, обладающего свойством Canvas). Доступ к дескриптору пера осуществляется через свойство:

propertyHandle: HPen;

 

Цвет пера и толщина линии в пикселах определяются в свойствах:

propertyColor: TColor;

propertyWidth: Integer;

 

В составе GDI предусмотрено всего три стиля пера: сплошное черное, сплошное белое и пустое перо. Собственное перо можно получить, создав собственное логическое перо при помощи функции Windows API (CreatePen() или CreatePenIndent()). Программисты Borland как всегда пошли нам навстречу и инкапсулировали в классе TPen свойство, определяющее стиль пера:

 

propertyStyle: TPenStyle;

typeTPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear,

psInsideFrame);

 

На рис. 10.3 представлены семь базовых стилей класса TPen, использование

которых (за исключением psSolid и psInsideFrame) имеет смысл только при

толщине пера не более 1 пиксела, в противном случае вы получите сплошную линию. Стиль psClear соответствует пустому перу – рисование отключается.

Стоит особо отметить стиль psInsideFrame, который обычно используется при рисовании простейших геометрических фигур пером шириной более 1 пиксела. Дело в том, что при использовании утолщенного пера (Style <> psInsideFrame) границы фигуры расширяются относительно заданных координат. Если вы нарисуете прямоугольник с координатами левого верхнего угла (10,10) и правого нижнего (100,100) пером psSolid толщиной 10 пикселов, действительный верхний угол окажется в точке (1,1), а нижний – в точке (109,109). Границы фигуры расширятся ровно на ширину пера. Установка текущего пера

в состояние psInsideFrame запретит расширяться границам фигуры – линия будет утолщена вовнутрь.

Поместите на форму комбинированный список TComboBox и заполните его

свойство Items названиями перьев в классе TPenStyle (psSolid, psDash и т. д.):

procedureTForm1.ComboBox1Change(Sender: TObject);

Begin








Дата добавления: 2016-03-15; просмотров: 851;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.