Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Практическое занятие 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

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

Вопросы для самопроверки

1. Назовите типы свойства стиля кисти TBrushStyle.

2. Чем различаются типы свойства стиля кисти TBrushStyle?

3. Какой тип TBrushStyle следует выбрать, чтобы нарисовать окружность, а не круг?

4. Что определяет свойство пера (карандаша) TPenStyle?

5. Назовите типы свойства пера (карандаша) TPenStyle?

6. Какой тип TPenStyle следует выбрать, чтобы нарисовать окружность в виде сплошной линии?

7. Как переместить карандаш (перо) для рисования в нужную позицию?

8. Как нарисовать прямую линию от текущей позиции карандаша до нужной позиции?

9. Какую функцию можно использовать, чтобы нарисовать прямоугольник?

10. Какую функцию можно использовать, чтобы нарисовать эллипс?

11. Какую функцию можно использовать, чтобы нарисовать дугу эллипса?

12. Какую функцию можно использовать, чтобы нарисовать сегмент эллипса?

13. Какую функцию можно использовать, чтобы нарисовать сектор эллипса?

14. Какую функцию можно использовать, чтобы нарисовать произвольный многоугольник?

15. Как создать заготовку блока упрощенной работы с методами и свойствами канвы?

16. Какова структура оператора with?

17. Для чего используется оператор with?

18. Как сделать так, чтобы фигуры рисовались красным цветом?

19. Как сделать так, чтобы фигуры рисовались с толщиной линий 3?

20. Как сделать так, чтобы фигуры рисовались сплошными линиями?

21. Как сделать так, чтобы текст выводился синим цветом и размером 12?

22. Какая функция используется для вывода надписи в нужное место канвы?

23. Как вывести в нужном месте канвы название цвета?

24. Как вывести в нужном месте канвы целочисленное значение цвета в десятичной форме?

25. Как вывести в нужном месте канвы целочисленное значение цвета в шестнадцатеричной форме?

26. К какому типу переменных относится переменная Color?

27. Что такое палитра RGB?

28. Сколько вариантов цветов можно создать в рамках переменной Color?

29. Как можно задать чисто красный цвет?

30. Как можно задать чисто зелёный цвет?

31. Как можно задать чисто синий цвет?

32. Как можно задать чисто белый цвет?

33. Как можно задать чисто черный цвет?

34. Сколько байт используется для записи цвета?

35. Если младший байт переменной Color обозначить цифрой 1, а следующие по старшинству байты цифрами 2, 3 и т.д., то какая информация записывается в байте номер 1, 2, 3?

36. Что происходит при выполнении логической двоичной команды shr?

37. Что происходит при выполнении логической двоичной команды shl?

38. Как, используя логические команды сдвига shr и shl, извлечь информацию, содержащуюся в младшем байте четырёхбайтовой переменной?

39. Как, используя логические команды сдвига shr и shl, извлечь информацию, содержащуюся в втором байте четырёхбайтовой переменной?

40. Как, используя логические команды сдвига shr и shl, извлечь информацию, содержащуюся в третьем байте четырёхбайтовой переменной?

 






Date: 2016-05-16; view: 128; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.014 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию