Знакомство студентов со свойствами и методами класса TCanvas (канва). Прорисовка различных аппаратов высокого напряжения. Знакомство с цветом объектов и способами его задания
Задание 1
ЗапуститеДельфи. Создайте заголовок формы «Работа с цветным карандашом (pen) и кистью (brush)». Сохраните программу в папке практика 8. Проверьте число сохранённых файлов (должно быть не менее 6).
Положите на форму компонент Panel, удалите её заголовок и измените цвет на clSkyBlue.
Положите на панель следующие компоненты: а) одну из трёх типов кнопок запуска Button и измените её заголовок на «Старт»; б) три компонента LabeledEdit из дополнительной палитры компонентов и измените их заголовки на следующие: «Красный, %», «Синий, %» и «Зелёный, %». В каждое поле текст запишите 100. Метку с заголовком TBrushStyle. Компонент ComboBox и создайте его список в соответствии со списком TBrushStyle табл. 8.1. Измените размеры панели так, чтобы компоненты занимали большую часть площади панели, а саму панель с компонентами переместите в нижний левый угол формы.
Поместите в правый верхний угол формы компонент ColorDialog (из набора Dialogs).
Двойным щелчком на компоненте button1 (Старт) создайте процедуру button1Click.
Ознакомьтесь со свойствами (табл. 8.1) и методами (табл. 8.2) класса TCanvas. Обратите внимание на способ определения цвета в системе цветовых координат RGB.
Таблица 8.1. Свойство класса TCanvas
Свойство (property)
Описание
Brush: TBrush
Кисть, определяет цвет и стиль заполнения фигур:
TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);
ClipRect:TRect
Прямоугольник, в котором размещается рисунок
CopyMode:TCopyMode
Тип соотношения растрового рисунка и фона
Font:TFont
Тип шрифта
Pen:TPen
Тип пера (карандаша) – характер линий при прорисовке фигур: TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear)
PenPos:TPoint
Координаты пера относительно верхнего левого края канвы
Pixels[x,y:integer]:TColor
Массив пикселов канвы
Рис. 8.1. Варианты TBrushStyle Рис. 8.2. Расположение точек к таб. 8.2
Таблица 8.2. Некоторые методы класса TCanvas
Метод (Procedure)
Описание
MoveTo(x,y:integer)
Перемещает карандаш (перо) в положение x,y без вычерчивания линии
LineTo(x,y:integer)
Чертит линию от текущей позиции пера в точку (x,y)
Rectangle(x1, y1, x2, y2,: integer)
Чертит прямоугольник (x1, y1) –(x2, y2), где x1, y1 – координаты верхнего левого угла, а x2, y2 – нижнего правого.
Ellipse(x1, y1, x2, y2,: integer)
Чертит эллипс вписанный в прямоугольник (x1, y1) –(x2, y2).
Arc(x1, y1, x2, y2, x3, y3, x4, y4: integer)
Чертит против часовой стрелки дугу эллипса вписанного в прямоугольник (x1, y1) –(x2, y2). Начало - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x3, y3). Конец - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x4, y4).
Chord(x1, y1, x2, y2, x3, y3, x4, y4: integer)
Чертит против часовой стрелки сегмент эллипса вписанного в прямоугольник (x1, y1) –(x2, y2). Начало - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x3, y3). Конец - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x4, y4). Начало и конец соединяются прямой.
Pie(x1, y1, x2, y2, x3, y3, x4, y4: integer)
Чертит против часовой стрелки сектор эллипса вписанного в прямоугольник (x1, y1) –(x2, y2). Начало - пересечение эллипса и прямой (рисуется), проходящей из центра эллипса в точку (x3, y3). Конец - пересечение эллипса и прямой (рисуется), проходящей из центра эллипса в точку (x4, y4).
Poligon(points:array of Tpoint)
Чертит пером многоугольник по точкам, заданным в массиве точек (points)
В среде Дельфи используются заранее предопределённые цвета, некоторые из которых обозначаются следующим образом: clNone (чёрный), clAqua, clBlack (чёрный), clBlue (синий), clCream (сливки), clDkGray (тёмно серый), clFuchsia, clGray (серый), clGreen (зелёный), clLime (светло-зелёный), clLtGray (светло серый), clMaroon (бордовый), clMedGray (средне серый), clMoneyGreen, clNavy (тёмно-синий), clOlive (оливковый зелёный), clPurple (пурпурный), clRed (красный), clSilver (серебряный), clSkyBlue (небесно-голубой), clTeal, clWhite (белый), clYellow (жёлтый).
В разделе описания переменных процедуры button1Click опишите следующие переменные: x0, y0, x1, y1, x2, y2, x3, y3, x4, y4: integer; myColor, myColorBrush: TColor; IR, IG, IB: Real;.
В теле процедуры button1Click создайте заготовку блока упрощенной работы с методами и свойствами канвы:
with Canvas do
begin
end; { Canvas }
В пределах этого блока считается, что будет выполняться работа с канвой и можно не записывать название «Canvas.» перед каждым свойством и методом этого класса.
В тело созданного блока запишите определение выбранного Вами цвета, а также цвета, толщины и типа карандаша:
myColor:= clRed; // Приписание Вашему цвету значения красного цвета;
pen.Style:=psSolid; // Приписание стилю черчения карандашом
// черчения сплошной линией;
Задайте цвет и размер шрифта:
Font.Color:= pen.Color; Font.Size:=14;
Задайте координаты начала рисования линий: x0:=100; y0:=50; переместите перо на указанные координаты и начертите линию длиной 150 точек методами из табл. 8.2 - moveTo(x0, y0); LineTo(x0+150, y0);.
Выведите справа от линии с отступом от конца линии на 30 точек и вверх на размер шрифта строку с номером цвета:
TextOut(x0+180,y0-Font.Size,'этот цвет имеет номер '+IntToStr(pen.Color)+' ('+IntToHex(myColor,6)+')');.
Запустите программу на исполнение и проверьте её работу.
Измените цвет пера и шрифта на зелёный, переместите перо в точку с координатами x0, y0+25, начертите линию и выведите надпись:
myColor:= clGreen; y0:=y0+25;
pen.Color:= myColor; Font.Color:=pen.Color;
MoveTo(x0,y0); LineTo(x0+150,y0);
TextOut(x0+180,y0-Font.Size, 'этот цвет имеет номер '+IntTostr(myColor) +' ('+IntToHex(myColor,6)+')');
Запустите программу на исполнение и проверьте её работу.
Скопируйте несколько раз (не менее 3) вышеприведённые 4 строки и измените значение переменной myColor на какие либо разные цвета. Запустите программу на исполнение и проверьте её работу.
Закомментируйте текст программы начиная со следующей строки после описания цвета и размера шрифта до закрывающей скобки end; { Canvas }.
Задание 2
Сведения о цвете. Цвет (Color) относится к целочисленным переменным типа comp c диапазоном значений –(263+1) ÷ 263-1. Полной интенсивности красного цвета (Red) соответствует число $000000FF, зелёного (Green) - $0000FF00, синего (Blue) - $00FF0000 . Остальные цвета можно получить при смешивании (сложении) этих трёх цветов с учётом их интенсивности, которая может изменяться от 0 до 1 (0 - 100 %) (палитра RGB). Так белый цвет соответствует полной интенсивности (100 % каждого) всех этих цветов - $00FF0000+$0000FF00+$000000FF = $00FFFFFF. Черный цвет соответствует нулевой интенсивности всех цветов - $00000000.
Введите в программу значения интенсивностей красного, зелёного и синего цветов по образцу:
ir:=StrToFloat(LabeledEdit1.Text)/100;
Создайте Ваш цвет кисти, смешивая три основных цвета:
Нарисуйте прямоугольник заданным цветом и толщиной линий, а также цветом и способом заполнения:
Rectangle(50,50,500,300);.
Запустите программу на исполнение. Перед нажатием кнопки «Старт» не забудьте выбрать стиль кисли. Обратите внимание на различие цветов контура и заполнения.
Не выходя из режима исполнения, измените цвет заполнения на чисто красный и способ заполнения (см. табл. 8.1). Посмотрите, что получится.
Последующее заполнение прямоугольника должно накладываться на предыдущее. Чтобы этого не происходило перед рисованием прямоугольника, перед определением цвета кисти и способа заполнения нужно вставить строку, где цвет кисти определяется как белый, способ заполнения - сплошной, и рисуется прямоугольник. Тогда поверх белого цвета можно рисовать заполнение любым цветом, а предыдущий способ и цвет заполнения будут затираться каждый раз перед основным рисованием. Выйдите из режима исполнения и вставьте в указанное место строку типа:
Запустите программу и убедитесь, что наложения цветов и способов заполнения не происходит.
Измените цвет заполнения на чисто зелёный и способ заполнения.
Измените цвет заполнения на чисто синий и способ заполнения.
Меняя интенсивность основных цветов, наблюдайте за изменением цвета заполнения прямоугольника. Перепробуйте не менее 10 различных вариантов цветов заполнения.
Задание 3
Вставьте перед командой рисования прямоугольника строку определения цвета заполнения с использованием диалога выбора цвета ColorDialog:
if ColorDialog1.Execute then Brush.Color:= ColorDialog1.Color;.
Запустите программу и проверьте её работу.
Запишите последовательность команд определения процентного содержания красного цвета в выбранном цвете с использованием логических двоичных команд сдвига вправо shr и слево shl. Эти команды применимы только к целочисленным переменным, имеют вид:
y:=x shr n; y:=x shl n;
и они эквивалентны умножению или целочисленному делению (div) на 2n. Определение процентного содержания красного цвета можно записать так:
Для синего цвета набор команд будет выглядеть так:
x0:= Brush.Color shr 16; iB:= x0/$ff*100;
LabeledEdit3.Text:=FloatToStrF(iB, ffFixed,5,2);.
Выбирая различные варианты цвета из палитры определить интенсивность основных цветов в красном, оранжевом, жёлтом, зелёном, голубом, синем и фиолетовом цвете. Чем различаются оттенки жёлтого цвета? Создать и сохранить три дополнительных цвета, которых нет в основном наборе цветов компонента ColorDialog.
Задание 4
Заменить в программе рисование прямоугольника на рисование эллипса. Создать несколько вложенных друг в друга соосных эллипсов (кругов) различного размера, цвета окантовки и заполнения.