Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по теории.docx
Скачиваний:
4
Добавлен:
28.09.2019
Размер:
530.05 Кб
Скачать

Var //переменные:

Cn: TCanvas; //для формирования канвы

R:TRect; //рабочая область экрана

MyRgn: HRGN; //чтобы выделить область экрана

P:TPoint; //чтобы найти координаты мыши

k:Integer; //чтобы узнать о нажатии пробела

x0:Integer=400; y0:Integer=200; //Начало области экрана,

x1:Integer=400+400; y1:Integer=200+400; //конец области

begin

Cn := TCanvas.Create; //Формирование полотна (канвы)

try

Cn.Handle := GetDC(0); //Задание устройства (экран)

try

R:=Rect(x0,y0,x1,y1); //Область экрана

MyRgn := CreateRectRgn(x0,y0,x1,y1);//Дубль области экрана

SelectClipRgn(Cn.Handle,MyRgn); //Разрешение рисовать в области

//-------------------------

Repeat //1. ЦИКЛ ПЕРЕРИСОВКИ КАРТИНКИ

//-------------------------

Windows.SleepEx(100, False); //Пауза 100 мили секунд

//-------------------------

Cn.Brush.Color:=clRed; //Цвет заливки

Cn.Brush.Style:=bsSolid; //Стиль заливки

Cn.FillRect(R); //Заливка области кистью

//-------------------------

Cn.Pen.Color:=clBlue; //Цвет линии

Cn.Pen.Style:=psSolid; //Стиль линии

Cn.Pen.Width:=4; //Толщина линии

Cn.MoveTo(R.Left,R.Top); //Курсор в начало линии

Cn.LineTo(R.Right,R.Bottom); //Прорисовка линии до конца

//-------------------------

Cn.Brush.Color:=clGreen; //Цвет фона текста

//Cn.Brush.Style:=bsClear; //Чтобы убрать фон текста

Cn.Font.Color:=clYellow; //Цвет текста

Cn.Font.Size:=14; //Размер текста

Cn.Font.Style:=[fsBold]; //Жирный шрифт

Cn.TextOut(R.Left+4,R.Top+16,'Привет ');//Вывод текста

//-------------------------

k:=GetKeyState(32); //Получение статуса "пробела"

GetCursorPos(P); //Получение координат мыши

Until (k<0) Or //Конец, если нажат пробел

((Abs(P.x-R.Left-44-4)<44) And//или мышь в зоне текста

(Abs(P.y-R.Top-16-16)<16));

//-------------------------

Application.Title:='Рисование на экране'; //Изменение заголовка

ShowMessagePos('Работа Завершена',x1,y0); //Вывод сообщения

finally

ReleaseDC(0, Cn.Handle); //Освобождение контекста

Cn.Handle := 0; //и канвы

end;

finally //Удаление канвы

Cn.Free;

end;

end.

Билет №23,24:

Графические примитивы

Что такое графический примитив

  • это простейшая геометрическая фигура, вычерчиваемая одним оператором

  • примитив представляет собой либо простую кривую линию, либо замкнутую линию вместе с ограниченной частью плоскости

  • обычно линия вычерчивается пером, а внутренняя часть закрашивается кистью

  • цвет линии определяется свойством пера, а цвет закраски – свойством кисти

  • примитив может выходить за пределы экрана

Как строится примитив

Примитив строится оператором, который является методом канвы и определяет геометрические параметры фигуры. Цвет, стиль и другие характеристики «чертёжных инструментов» задаются свойствами пера и кисти.

На рисунке приводятся допустимые стили инструментов и показаны результаты их применения. В правом столбце представлены имена основных операторов.

Перечень операторов для построения примитивов

LineTo(x,y) – строит отрезок от графического курсора до точки с координатами

Графический курсор – вспомогательная точка экрана, координаты которой хранятся канвой в полях PenPos.X, PenPos.Y. Курсор можно установить в точку оператором MoveTo(x0,y0). Метод LineTo(x,y) переустанавливает курсор в точку .

Arc(x1,y1,x2,y2,x3,y3,x4,y4) – строит дугу эллипса.

Эллипс вписывается в прямоугольник с диагональными вершинами , . Центр располагается в точке . Точки , задают лучи , которые пересекаясь с эллипсом определяют начальную и конечную точки дуги. Дуга вычерчивается от точки к против часовой стрелки. Внутренность не закрашивается.

Ellipse(x1,y1,x2,y2) – строит эллипс.

Эллипс вписывается в прямоугольник с диагональными вершинами , . Внутренность эллипса закрашивается кистью.

Chord(x1,y1,x2,y2,x3,y3,x4,y4) – строит сегмент эллипса.

Сегмент образован дугой (см. Arc), концы которой соединены отрезком. Сегмент закрашивается кистью.

Pie(x1,y1,x2,y2,x3,y3,x4,y4) – строит сектор эллипса.

Сектор строится как дуга, концы которой соединяются с центром эллипса. Сектор закрашивается кистью.

Rectangle(x1,y1,x2,y2) – строит прямоугольник.

Прямоугольник задаётся диагональными вершинами , . Внутренность закрашивается кистью.

RoundRect(x1,y1,x2,y2,x3,y3) – строит прямоугольник с закруглёнными краями.

Прямоугольник задаётся диагональными вершинами , и радиусами закругления по краям. Внутренность закрашивается кистью.

Polygon(массив точек типа TPoint) – строит замкнутую ломаную линию.

Массив можно задать непосредственно, например,

Polygon([Point(x1,y1), Point(x2, y2), …, Point(xN,yN)]);

Точки (x1,y1),(x2, y2), …, (xN,yN) последовательно соединяются отрезками, причём последняя соединяется с первой, образуя замкнутую линию. Внутренность закрашивается кистью.

PolyLine(массив точек типа TPoint) – строит ломаную линию.

Параметры как в предыдущем случае, но крайние точки не соединяются, и внутренность не закрашивается.

FrameRect(x1,y1,x2,y2) – строит прямоугольную рамку.

То же, что Rectangle , только рамка шириной в 1 пиксель красится цветом кисти, а внутренность не закрашивается.