Главная | Случайная
Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Практическое занятие 8




Канва и работа с ней

Цель занятия

Знакомство студентов со свойствами и методами класса 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.Color:= myColor; // Приписание цвету карандаша Вашего цвета;

pen.Width:=4; // Приписание ширине значения 4;

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;

Создайте Ваш цвет кисти, смешивая три основных цвета:

myColorBrush:=Round(ir*$ff+ig*$ff00+ib*$ff0000);.

Задайте цвет кисти и способ заполнения фигур:

Brush.Color:= myColorBrush; Brush.Style:= TBrushStyle(ComboBox1.itemindex);

Нарисуйте прямоугольник заданным цветом и толщиной линий, а также цветом и способом заполнения:

Rectangle(50,50,500,300);.

Запустите программу на исполнение. Перед нажатием кнопки «Старт» не забудьте выбрать стиль кисли. Обратите внимание на различие цветов контура и заполнения.

Не выходя из режима исполнения, измените цвет заполнения на чисто красный и способ заполнения (см. табл. 8.1). Посмотрите, что получится.

Последующее заполнение прямоугольника должно накладываться на предыдущее. Чтобы этого не происходило перед рисованием прямоугольника, перед определением цвета кисти и способа заполнения нужно вставить строку, где цвет кисти определяется как белый, способ заполнения - сплошной, и рисуется прямоугольник. Тогда поверх белого цвета можно рисовать заполнение любым цветом, а предыдущий способ и цвет заполнения будут затираться каждый раз перед основным рисованием. Выйдите из режима исполнения и вставьте в указанное место строку типа:

Brush.Color:=clwhite; Brush.Style:=bsSolid; Rectangle(50,50,500,300);.

Запустите программу и убедитесь, что наложения цветов и способов заполнения не происходит.

Измените цвет заполнения на чисто зелёный и способ заполнения.

Измените цвет заполнения на чисто синий и способ заполнения.

Меняя интенсивность основных цветов, наблюдайте за изменением цвета заполнения прямоугольника. Перепробуйте не менее 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 shl 24; y0:= x0 shr 24; ir:=y0/$ff*100;

LabeledEdit1.Text:=FloatToStrF(ir,ffFixed,5,2);.

Для зелёного цвета набор команд будет выглядеть так:

x0:= Brush.Color shl 16; y0:= x0 shr 24; iG:=y0/$ff*100;

LabeledEdit2.Text:=FloatToStrF(iG, ffFixed,5,2);.

Для синего цвета набор команд будет выглядеть так:

x0:= Brush.Color shr 16; iB:= x0/$ff*100;

LabeledEdit3.Text:=FloatToStrF(iB, ffFixed,5,2);.

Выбирая различные варианты цвета из палитры определить интенсивность основных цветов в красном, оранжевом, жёлтом, зелёном, голубом, синем и фиолетовом цвете. Чем различаются оттенки жёлтого цвета? Создать и сохранить три дополнительных цвета, которых нет в основном наборе цветов компонента ColorDialog.

Задание 4

Заменить в программе рисование прямоугольника на рисование эллипса. Создать несколько вложенных друг в друга соосных эллипсов (кругов) различного размера, цвета окантовки и заполнения.

 




Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2019 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных