Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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 (x 1, y 1, x 2, y 2,: integer) Чертит прямоугольник (x 1, y 1) –(x 2, y 2), где x 1, y 1 – координаты верхнего левого угла, а x 2, y 2 – нижнего правого.
Ellipse (x 1, y 1, x 2, y 2,: integer) Чертит эллипс вписанный в прямоугольник (x 1, y 1) –(x 2, y 2).
Arc (x 1, y 1, x 2, y 2, x 3, y 3, x 4, y 4: integer) Чертит против часовой стрелки дугу эллипса вписанного в прямоугольник (x 1, y 1) –(x 2, y 2). Начало - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x 3, y 3). Конец - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x 4, y 4).
Chord (x 1, y 1, x 2, y 2, x 3, y 3, x 4, y 4: integer) Чертит против часовой стрелки сегмент эллипса вписанного в прямоугольник (x 1, y 1) –(x 2, y 2). Начало - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x 3, y 3). Конец - пересечение эллипса и прямой, проходящей из центра эллипса в точку (x 4, y 4). Начало и конец соединяются прямой.
Pie (x 1, y 1, x 2, y 2, x 3, y 3, x 4, y 4: integer) Чертит против часовой стрелки сектор эллипса вписанного в прямоугольник (x 1, y 1) –(x 2, y 2). Начало - пересечение эллипса и прямой (рисуется), проходящей из центра эллипса в точку (x 3, y 3). Конец - пересечение эллипса и прямой (рисуется), проходящей из центра эллипса в точку (x 4, y 4).
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 опишите следующие переменные: x 0, y 0, x 1, y 1, x 2, y 2, x 3, y 3, x 4, y 4: 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;

Задайте координаты начала рисования линий: x 0:=100; y 0:=50; переместите перо на указанные координаты и начертите линию длиной 150 точек методами из табл. 8.2 - moveTo (x 0, y 0); LineTo (x 0+150, y 0);.

Выведите справа от линии с отступом от конца линии на 30 точек и вверх на размер шрифта строку с номером цвета:

TextOut (x 0+180, y 0- Font.Size,'этот цвет имеет номер '+ IntToStr (pen.Color)+' ('+ IntToHex (myColor,6)+')');.

Запустите программу на исполнение и проверьте её работу.

Измените цвет пера и шрифта на зелёный, переместите перо в точку с координатами x 0, y 0+25, начертите линию и выведите надпись:

myColor:= clGreen; y 0:= y 0+25;

pen.Color:= myColor; Font.Color:= pen.Color;

MoveTo (x 0, y 0); LineTo (x 0+150, y 0);

TextOut (x 0+180, y 0- 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*$ff 00+ ib*$ff 0000);.

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

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 ColorDialog 1.Execute then Brush.Color:= ColorDialog 1.Color;.

Запустите программу и проверьте её работу.

Запишите последовательность команд определения процентного содержания красного цвета в выбранном цвете с использованием логических двоичных команд сдвига вправо shr и слево shl. Эти команды применимы только к целочисленным переменным, имеют вид:

y:= x shr n; y:= x shl n;

и они эквивалентны умножению или целочисленному делению (div) на 2n. Определение процентного содержания красного цвета можно записать так:

x 0:= Brush.Color shl 24; y 0:= x 0 shr 24; ir: = y 0/$ ff *100;

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

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

x 0:= Brush.Color shl 16; y 0:= x 0 shr 24; iG: = y 0/$ ff *100;

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

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

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

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

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

Задание 4

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

 






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

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