- Преподавателю
- Информатика
- Контрольные работы по информатике Язык программирования Delphi (11 класс)
Контрольные работы по информатике Язык программирования Delphi (11 класс)
Раздел | Информатика |
Класс | 11 класс |
Тип | Конспекты |
Автор | Величкина Н.Г. |
Дата | 16.02.2016 |
Формат | rar |
Изображения | Есть |
СОДЕРЖАНИЕ
Введение
3
1. Общие сведения объекта Canvas.
4
2. Свойства карандаша.
5
3. Свойства кисти.
7
4. Пример использования объекта Canvas.
8
Список используемых источников.
13
Введение
Работа с графикой в Delphi это не только линии и рисунки, но также и печать текстовых документов. Поэтому в Delphi работе с графикой нужно уделять много времени. Работа с графикой в Delphi предполагает обращение к канве - свойству Canvas компонентов. Canvas Delphi это холст, который позволяет программисту иметь доступ к каждой своей точке (пикселу), и словно художнику отображать то, что требуется. Конечно, рисовать попиксельно для работы с графикой в Delphi не приходится, система Delphi предоставляет для этого мощные средства работы с графикой, облегчающие задачу программиста.
В работе с графикой в Delphi в распоряжении программиста находятся канва (холст, полотно - свойство Canvas Delphi компонентов), карандаш (свойство Pen), кисть (свойство Brush) того компонента или объекта, на котором предполагается рисовать. У карандаша Pen и кисти Brush можно менять цвет (свойство Color) и стиль (свойство Style). Доступ к шрифтам предоставляет свойство канвы Font. Эти инструменты позволяют отображать как текст, так и достаточно сложные графики математического и инженерного содержания, а также рисунки. Кроме этого, работа с графикой позволяет использовать в Delphi такие ресурсы Windows как графические и видеофайлы.
Цель контрольной работы: изучение свойств объекта Canvas, а также разработка ряда примеров работы с этим объектом.
1. Общие сведения объекта Canvas.
На вкладке Additional расположен специализированный компонент TImage, специально предназначенный для рисования, но также свойство Canvas имеют, например, такие компоненты как ListBox, ComboBox, StringGrid, а также и сама Форма, которая размещает наши компоненты! Кроме того, для печати документов Delphi обращается к свойству Canvas такого объекта как принтер.
Основное свойство такого объекта как Canvas Delphi - Pixels[i, j] типа TColor, то есть это двумерный массив точек (пикселов), задаваемых своим цветом. Рисование на канве происходит в момент присвоения какой-либо точке канвы заданного цвета. Каждому пикселу может быть присвоен любой доступный для Windows цвет. Например, выполнение оператора
Image1.Canvas.Pixels[100, 100]:=clRed;
приведёт к рисованию красной точки с координатами [100, 100]. Узнать цвет пиксела можно обратным присвоением:
Color:=Image1.Canvas.Pixels[100, 100];
Тип TColor определён как длинное целое (LongInt). Его четыре байта содержат информацию о долях синего (B), зелёного (G), и красного (R) цветов. В 16-ричной системе это выглядит так: $00BBGGRR. Доля каждого цвета может меняться от 0 до 255. Поэтому чтобы отобразить максимально красную точку, ей нужно присвоить цвет $000000FF.
Для стандартных цветов в Delphi определён набор текстовых констант. Увидеть его можно, открыв в Инспекторе Объектов свойство Color, например, той же Формы.
Следующая таблица содержит некоторые свойства и методы канвы:
Процедура TextOut(X, Y: Integer; const Text: WideString);
Производит вывод строки Text начиная с (X, Y) - левого верхнего пиксела текста.
Свойство TextWidth(var Text: String): Integer;
Содержит длину строки Text в пикселах.
Свойство TextHeight(var Text: String): Integer;
Содержит высоту строки Text в пикселах.
Процедура MoveTo(X, Y: Integer);
Производит перемещение позиции к пикселу с адресом (X, Y).
Процедура LineTo(X, Y: Integer);
Производит рисование прямой линии из точки текущей позиции к пикселу с адресом (X, Y). Адрес (X, Y) становится точкой текущей позиции.
Процедура FillRect(const Rect: TRect);
Заполняет прямоугольник Rect на холсте, используя текущую кисть. Может использоваться, в том числе, для стирания части изображения на холсте.
2. Свойства карандаша.
Разберёмся с цветом. Для рисования используется два понятия цвета - цвет карандаша и цвет кисти. За стиль карандаша (в том числе и цвет) отвечает свойство Pen объекта TCanvas. За стиль кисти отвечает свойство Brush. И Brush и Pen - это тоже объекты, у которых есть свои свойства.
Для начала разберёмся с объектом TPen. Этот объект отвечает за свойства карандаша. У него есть следующие свойства:
Color - цвет карандаша.
Handle - здесь находиться описание карандаша, которое можно использовать при обращении к WinAPI функциям. У большинства объектов есть свойство Handle, которое нужно только для API функций и в повседневных программах мы его использовать не будем.
Mode - режим отображение показывает, как будет рисоваться линия.
Style - стиль карандаша. Существуют следующие стили (графическое отображение стилей линий ты можешь увидеть на рисунке 4):
-
psSolid - сплошная линия;
-
psDash - линия в виде пунктира (состоит из коротких линий);
-
psDot - линия из точек;
-
psDashDot - линия с чередующимися чёрточками и точками;
-
psDashDotDot - линия с чередующимися чёрточками и двумя точками;
-
psClear - невидимая линия;
-
psInsideFrame - линия внутри формы. Внешне похожа на сплошную (рис. 1).
Width - ширина карандаша.
Рисунок 1. Стили линий
На следующем примере, можно увидить на практике свойства карандаша в действии. В обработчике события OnPaint (событие формы, которое используется для рисования) написан следующий текст:
Результат работы программы виден на рисунке 2.
Рисунок 2. Результат работы программы.
В данном примере, по событию OnPaint (когда надо перерисовать форму) поочерёдно рисуются линии разного стиля. Для этого сначала выбираем нужный стиль (например, Canvas.Pen.Style:=psSolid - выбирает стиль сплошной линии).
Потом перемещаем карандаш в точку начала линии - Canvas.MoveTo(Х, Y). Метод MoveTo перемещает карандаш в позицию указанную в качестве параметров X, Y. При перемещении не происходит никакого рисования на холсте (Canvas). X и Y - это не сантиметры и не миллиметры, а количество пикселей (количество экранных точек).
Отсчёт координаты Х идёт слева на право. Это значит, что левая сторона окна равна нулевой позиции Х, а правая сторона окна - максимальное значение. Отсчёт координаты Y идёт сверху вниз. Это значит, что верхнее обрамление окна является нулевой точкой Y. При этом заголовок окна (с названием формы и системными кнопками) не входит в пространство окна.
Теперь рисуется линия с помощью метода LineTo(X, Y). В качестве параметров передаются конечные координаты линии. Отрезок будет нарисован, начиная от текущей позиции карандаша, куда был осуществлен переход с помощью метода MoveTo и до координат, указанных при вызове метода LineTo.
После прорисовки первой линии, мы выбираем следующий стиль и перемещаемся в позицию на 20 пикселей ниже уже нарисованной линии и рисую следующую линию.
3. Свойства кисти.
За параметры кисти отвечает свойство Brush объекта TCanvas. Кисть используется для закраски замкнутых пространств. Она тоже имеет объектный тип как и карандаш, а значит обладает своими свойствами и методами.
У объекта кисти TBrush есть несколько свойств влияющих на параметры кисти:
Bitmap - картинка, которая будет использоваться в качестве фона закраски. Картинка должны быть формата 8х8 пикселей. Если будет больше, то задействованы будут только пиксели верхнего левого квадрата 8х8.
Color - так же как и у карандаша, у кисти тоже может быть свой цвет.
Handle - такой же указатель, как и у карандаша, но на кисть.
Style - стиль фона. Здесь могут быть следующие значения: bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross. На рисунке 3 можно увидеть графическое отображение каждого из стилей.
Рисунок 3. Стили фона
4. Пример использования объекта Canvas.
Пример 1. Паутинка (рис. 4).
Рисунок 4. Паутинка.
Листинг.
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Pen.Width:=2;
Canvas.Pen.Color:=clRed;
Canvas.MoveTo(10,10);
Canvas.LineTo(210,210);
Canvas.MoveTo(60,10);
Canvas.LineTo(160,210);
Canvas.MoveTo(110,10);
Canvas.LineTo(110,210);
Canvas.MoveTo(160,10);
Canvas.LineTo(60,210);
Canvas.MoveTo(210,10);
Canvas.LineTo(10,210);
Canvas.MoveTo(210,60);
Canvas.LineTo(10,160);
Canvas.MoveTo(210,110);
Canvas.LineTo(10,110);
Canvas.MoveTo(210,160);
Canvas.LineTo(10,60);
Canvas.Pen.Color:=clBlue;
Canvas.MoveTo(30,30);
Canvas.LineTo(110,20);
Canvas.MoveTo(110,20);
Canvas.LineTo(190,30);
Canvas.MoveTo(190,30);
Canvas.LineTo(200,110);
Canvas.MoveTo(200,110);
Canvas.LineTo(190,190);
Canvas.MoveTo(190,190);
Canvas.LineTo(110,200);
Canvas.MoveTo(110,200);
Canvas.LineTo(30,190);
Canvas.MoveTo(30,190);
Canvas.LineTo(20,110);
Canvas.MoveTo(20,110);
Canvas.LineTo(30,30);
Canvas.MoveTo(50,50);
Canvas.LineTo(110,40);
Canvas.MoveTo(110,40);
Canvas.LineTo(170,50);
Canvas.MoveTo(170,50);
Canvas.LineTo(180,110);
Canvas.MoveTo(180,110);
Canvas.LineTo(170,170);
Canvas.MoveTo(170,170);
Canvas.LineTo(110,180);
Canvas.MoveTo(110,180);
Canvas.LineTo(50,170);
Canvas.MoveTo(50,170);
Canvas.LineTo(40,110);
Canvas.MoveTo(40,110);
Canvas.LineTo(50,50);
Canvas.MoveTo(70,70);
Canvas.LineTo(110,60);
Canvas.MoveTo(110,60);
Canvas.LineTo(150,70);
Canvas.MoveTo(150,70);
Canvas.LineTo(160,110);
Canvas.MoveTo(160,110);
Canvas.LineTo(150,150);
Canvas.MoveTo(150,150);
Canvas.LineTo(110,160);
Canvas.MoveTo(110,160);
Canvas.LineTo(70,150);
Canvas.MoveTo(70,150);
Canvas.LineTo(60,110);
Canvas.MoveTo(60,110);
Canvas.LineTo(70,70);
Canvas.MoveTo(90,90);
Canvas.LineTo(110,80);
Canvas.MoveTo(110,80);
Canvas.LineTo(130,90);
Canvas.MoveTo(130,90);
Canvas.LineTo(140,110);
Canvas.MoveTo(140,110);
Canvas.LineTo(130,130);
Canvas.MoveTo(130,130);
Canvas.LineTo(110,140);
Canvas.MoveTo(110,140);
Canvas.LineTo(90,130);
Canvas.MoveTo(90,130);
Canvas.LineTo(80,110);
Canvas.MoveTo(80,110);
Canvas.LineTo(90,90);
Canvas.Brush.Color:=clYellow;
Canvas.Ellipse(100,100,120,120);
end;
end.
Пример 2. Домик в ночи (рис. 5).
Рисунок 5. Домик в ночи.
Листинг.
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
var p:array[1..4] of TPoint;
begin
//стены
Canvas.Pen.Width:=2;
Canvas.Brush.Color:=clOlive;
Canvas.Rectangle(100,200,340,400);
Canvas.Brush.Color:=clNavy;
Canvas.Rectangle(200,140,240,200);
Canvas.Brush.Color:=clBlue;
Canvas.Rectangle(120,240,220,340);
Canvas.Brush.Color:=clWhite;
Canvas.Rectangle(130,250,160,280);
Canvas.Rectangle(180,250,210,280);
Canvas.Rectangle(130,290,210,330);
Canvas.Brush.Color:=clLime;
Canvas.Rectangle(240,280,320,400);
Canvas.Brush.Color:=clBlack;
Canvas.Rectangle(300,340,310,360);
//крыша
Canvas.Brush.Color:=clMaroon;
p[1].X:=100; p[1].Y:=200;
p[2].X:=220; p[2].Y:=60;
p[3].X:=340; p[3].Y:=200;
p[4].X:=100; p[4].Y:=200;
Canvas.Polygon(p);
Canvas.Brush.Color:=clNavy;
Canvas.Rectangle(200,140,240,200);
//Забор
Canvas.Brush.Color:=clGreen;
Canvas.Rectangle(60,300,100,400);
Canvas.Rectangle(20,300,60,400);
Canvas.Rectangle(340,300,380,400);
Canvas.Rectangle(380,300,420,400);
Canvas.Rectangle(420,300,460,400);
Canvas.Rectangle(460,300,500,400);
p[1].X:=20; p[1].Y:=300;
p[2].X:=40; p[2].Y:=260;
p[3].X:=60; p[3].Y:=300;
p[4].X:=20; p[4].Y:=300;
Canvas.Polygon(p);
p[1].X:=60; p[1].Y:=300;
p[2].X:=80; p[2].Y:=260;
p[3].X:=100; p[3].Y:=300;
p[4].X:=60; p[4].Y:=300;
Canvas.Polygon(p);
p[1].X:=340; p[1].Y:=300;
p[2].X:=360; p[2].Y:=260;
p[3].X:=380; p[3].Y:=300;
p[4].X:=340; p[4].Y:=300;
Canvas.Polygon(p);
p[1].X:=380; p[1].Y:=300;
p[2].X:=400; p[2].Y:=260;
p[3].X:=420; p[3].Y:=300;
p[4].X:=380; p[4].Y:=300;
Canvas.Polygon(p);
p[1].X:=420; p[1].Y:=300;
p[2].X:=440; p[2].Y:=260;
p[3].X:=460; p[3].Y:=300;
p[4].X:=420; p[4].Y:=300;
Canvas.Polygon(p);
p[1].X:=460; p[1].Y:=300;
p[2].X:=480; p[2].Y:=260;
p[3].X:=500; p[3].Y:=300;
p[4].X:=460; p[4].Y:=300;
Canvas.Polygon(p);
//луна
Canvas.Brush.Color:=clYellow;
Canvas.Ellipse(400,20,480,100);
end;
Список используемых источников.
1. Архангельский А.Я. «Приемы программирования в Delphi».: Издательство «Бином-Пресс» 2006г. -944 стр. -ISBN 5-9518-0145-1
2. С.И. Бобровский «Delphi 7 Учебный курс».: Издательство «Питер» 2004. - 736 с. - ISBN 5-8046-0086-9
3.Г.В. Галисеев «Компоненты в Delphi 7».: Издательство «Вильямс» 2004г. - 624стр. -ISBN 5-8459-0555-9
4. А. Шкрыль «Delphi.Народные советы».: Издательство BHV-СПБ 2007г. - 400стр. - ISBN 5-9775-0047-5
5. Культин Н.Б. «Основы программирования в Delphi 7».: Издательство BHV -
СПБ. 2008г. - 480 с. -ISBN 978-5-9775-0235-1
6. Культин Н.Б. Программирование на Object Pascal в Delphi 5.Самоучитель.:Издательство BHV-СПБ. - 464стр. -ISBN 5-8206-0079-7
7. Лабзина Т.А. Алгоритмические языки и программирование Юнита 5. Издательство НОУ СГУ, 1999.
8. Е.Марков «Программирование в Delphi 7».Издательство BHV-СПБ. 2003г. -784стр. -ISBN 5-94157-116-X
9. В.Кадлец «Delphi.Книга рецептов.Практические примеры, трюки и секреты».: Издательство «Наука и техника». 2006г. - 384стр. - ISBN 80-251-0017-0
10. Фаронов В.В. «Delphi 2005. Разработка приложений для баз данных и Интернета».: Издательство «Питер». 2006г. - 608стр. - ISBN 5-469-01191-7